;;;; SPDX-License-Identifier AGPL-3.0-or-later ;;;; compound.lisp Compound artifact implementation ;;;; Copyright (C) 2022 Alejandro "HiPhish" Sanchez ;;;; ;;;; This file is part of CL-HSSG. ;;;; ;;;; CL-HSSG is free software: you can redistribute it and/or modify it under ;;;; the terms of the GNU Affero General Public License as published by the ;;;; Free Software Foundation, either version 3 of the License, or (at your ;;;; option) any later version. ;;;; ;;;; CL-HSSG is distributed in the hope that it will be useful, but WITHOUT ANY ;;;; WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ;;;; FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for ;;;; more details. ;;;; ;;;; You should have received a copy of the GNU Affero General Public License ;;;; along with CL-HSSG If not, see .(in-package #:hssg.artifact) (defpackage #:hssg/test/reader (:use #:cl)) (in-package #:hssg/test/reader) (defun dummy-reader (pathname) "A dummy reader which does nothing useful." (declare (ignore pathname)) '()) (fiveam:def-suite hssg/reader :description "Tests for the reader interface" :in hssg/test:hssg) (fiveam:in-suite hssg/reader) (fiveam:test retrieve-reader "A registered reader can be retrieved by its type" (let ((hssg.reader::*file-readers* `(("foo" . ,#'dummy-reader)))) (fiveam:is-true (eq #'dummy-reader (hssg.reader:get-reader "foo"))))) (fiveam:test retrieve-missing-reader "Retrieving a reader that has not been registered signals a condition" (let ((hssg.reader::*file-readers* '())) (fiveam:signals (error) (hssg.reader:get-reader "foo")))) (fiveam:test add-reader "A new reader can be added by file type" (let ((original hssg.reader::*file-readers*)) (unwind-protect (progn (hssg.reader:register-reader "foo" #'dummy-reader) (fiveam:is-true (eq #'dummy-reader (hssg.reader:get-reader "foo")))) (setf hssg.reader::*file-readers* original)))) (fiveam:test remove-reader "An added reader can be removed" (let ((original hssg.reader::*file-readers*)) (unwind-protect (progn (hssg.reader:register-reader "foo" #'dummy-reader) (hssg.reader:unregister-reader "foo") (fiveam:is-true (equal original hssg.reader::*file-readers*))) (setf hssg.reader::*file-readers* original)))) (fiveam:test temporary-reader "Register a reader for the duration of the body expressions only" (hssg.reader:with-readers (("foo" #'dummy-reader)) (fiveam:is-true (eq #'dummy-reader (hssg.reader:get-reader "foo")))) (fiveam:signals (error) (hssg.reader:get-reader "foo")))