1 ; Copyright 2022 Frank Duncan (frank@consxy.com) under AGPL3. See distributed LICENSE.txt.
2 (in-package #:sheep-test)
6 ; This really is just here to check against regressions
7 (defun run-all-tests ()
9 ((results (mapcar #'funcall (reverse *tests*))))
10 (every #'identity results)))
12 (defun slurp-file (filename &key (element-type 'character) (sequence-type 'string))
13 (with-open-file (str filename :element-type element-type)
14 (let ((seq (make-sequence sequence-type (file-length str)))) (read-sequence seq str) seq)))
16 (defmacro deftest (name f)
23 (error (e) (format t "Got unexpected error in tests: ~A" e)))))
25 (format t "~c[1;32m- ~A passed~c[0m~%" #\Esc ,name #\Esc)
26 (format t "~c[1;31m- ~A failed~c[0m~%" #\Esc ,name #\Esc))
30 (defmacro defsuccesstest (pkg source target)
37 (string= (slurp-file ,target) (sheep:export-package ,pkg)))
38 (sheep:validation-failure (vf)
39 (format t "Validation failure gotten: ~A~%"
40 (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :sheep)) vf)))))))
42 (defmacro deffailuretest (pkg source expected)
49 ((result (sheep:validate-package ,pkg)))
51 (equal ,expected result)
52 (format t " Got error:~%~S~% but expected~%~S~%" result ,expected)))))))
54 (defmacro deffailure-func-test (name doc expected)
56 ,(format nil "Func - ~A" name)
61 (symbol-function (find-symbol "INTERNAL-DOC->AST" :sheep-func))
65 (sheep:validation-failure (vf)
67 ((result (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :sheep)) vf)))
69 (string= ,expected result)
70 (format t " Got error:~%~S~% but expected~%~S~%" result ,expected))))))))
72 (defmacro deffailure-var-test (name doc expected)
74 ,(format nil "Var - ~A" name)
79 (symbol-function (find-symbol "INTERNAL-DOC->AST" :sheep-var))
83 (sheep:validation-failure (vf)
85 ((result (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :sheep)) vf)))
87 (string= ,expected result)
88 (format t " Got error:~%~S~% but expected~%~S~%" result ,expected))))))))
90 (defsuccesstest :success1 "resources/success1.lisp" "resources/success1.md")
91 (deffailuretest :emptydocs "resources/emptydocs.lisp"
92 `((:failure :emptydocs "Package EMPTYDOCS has no documentation")
93 (:failure ,(intern "NO-DOC-CONDITION" :emptydocs) "Symbol NO-DOC-CONDITION has no documentation")
94 (:failure ,(intern "NO-DOC-FUNC" :emptydocs) "Symbol NO-DOC-FUNC has no documentation")))