1 ; Copyright 2022 Frank Duncan (frank@consxy.com) under AGPL3. See distributed LICENSE.txt.
2 (in-package #:sheep-test)
4 (defparameter *tests* nil)
7 (defstruct unused-struc)
9 ; This really is just here to check against regressions
10 (defun run-all-tests ()
12 ((results (mapcar #'funcall (reverse *tests*))))
13 (every #'identity results)))
15 (defun slurp-file (filename &key (element-type 'character) (sequence-type 'string))
16 (with-open-file (str filename :element-type element-type)
17 (let ((seq (make-sequence sequence-type (file-length str)))) (read-sequence seq str) seq)))
19 (defmacro deftest (name f)
26 (error (e) (format t "Got unexpected error in tests: ~A" e)))))
28 (format t "~c[1;32m- ~A passed~c[0m~%" #\Esc ,name #\Esc)
29 (format t "~c[1;31m- ~A failed~c[0m~%" #\Esc ,name #\Esc))
33 (defmacro defsuccesstest (pkg source target)
40 (sheep:pretty-print-validate-packages ,pkg)
41 (string= (slurp-file ,target) (sheep:export-package ,pkg)))
42 (sheep:validation-failure (vf)
43 (format t "Validation failure gotten: ~A~%"
44 (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :sheep)) vf)))))))
46 (defmacro deffailuretest (pkg source expected)
53 ((result (sheep:validate-package ,pkg)))
55 ((*error-output* (make-broadcast-stream))
56 (*standard-output* (make-broadcast-stream)))
57 (sheep:pretty-print-validate-packages ,pkg))
59 (equal ,expected result)
60 (format t " Got error:~%~S~% but expected~%~S~%" result ,expected)))))))
62 (defmacro deffailure-func-test (name doc expected)
64 ,(format nil "Func - ~A" name)
68 (setf (documentation 'unused 'function) ,doc)
69 (sheep-func:doc->ast 'unused)
71 (sheep:validation-failure (vf)
73 ((result (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :sheep)) vf)))
75 (string= ,expected result)
76 (format t " Got error:~%~S~% but expected~%~S~%" result ,expected))))))))
78 (defmacro deffailure-var-test (name doc expected)
80 ,(format nil "Var - ~A" name)
84 (setf (documentation '*unused* 'variable) ,doc)
85 (sheep-var:doc->ast '*unused*)
87 (sheep:validation-failure (vf)
89 ((result (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :sheep)) vf)))
91 (string= ,expected result)
92 (format t " Got error:~%~S~% but expected~%~S~%" result ,expected))))))))
94 (defmacro deffailure-pkg-test (name doc expected)
96 ,(format nil "Package - ~A" name)
100 (setf (documentation (find-package :sheep-unused) t) ,doc)
101 (sheep-pkg:doc->ast (find-package :sheep-unused))
103 (sheep:validation-failure (vf)
105 ((result (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :sheep)) vf)))
107 (string= ,expected result)
108 (format t " Got error:~%~S~% but expected~%~S~%" result ,expected))))))))
110 (defmacro deffailure-struc-test (name doc expected)
112 ,(format nil "Struct - ~A" name)
116 (setf (documentation 'unused-struc 'structure) ,doc)
117 (sheep-struc:doc->ast 'unused-struc)
119 (sheep:validation-failure (vf)
121 ((result (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :sheep)) vf)))
123 (string= ,expected result)
124 (format t " Got error:~%~S~% but expected~%~S~%" result ,expected))))))))
126 (defsuccesstest :success1 "resources/success1.lisp" "resources/success1.md")
127 (deffailuretest :emptydocs "resources/emptydocs.lisp"
128 `((:failure :emptydocs "Package EMPTYDOCS has no documentation")
129 (:failure ,(intern "NO-DOC-CONDITION" :emptydocs) "Symbol NO-DOC-CONDITION has no documentation")
130 (:failure ,(intern "NO-DOC-FUNC" :emptydocs) "Symbol NO-DOC-FUNC has no documentation")))