X-Git-Url: https://code.consxy.com/gitweb/gitweb.cgi?p=sheep;a=blobdiff_plain;f=src%2Ftest%2Fmain.lisp;h=270609760f7b101bc940a224c2f602f989af8115;hp=0858ada87e2a5a4cc27d1679b101d0e29f38af8a;hb=683928f;hpb=a7319414d0f0ea8a66764a040e7827b1801da5e5 diff --git a/src/test/main.lisp b/src/test/main.lisp index 0858ada..2706097 100644 --- a/src/test/main.lisp +++ b/src/test/main.lisp @@ -1,3 +1,57 @@ (in-package #:docgen-test) -(defun run-all-tests () t) +(defvar *tests* nil) + +; This really is just here to check against regressions +(defun run-all-tests () + (let + ((results (mapcar #'funcall (reverse *tests*)))) + (every #'identity results))) + +(defun slurp-file (filename &key (element-type 'character) (sequence-type 'string)) + (with-open-file (str filename :element-type element-type) + (let ((seq (make-sequence sequence-type (file-length str)))) (read-sequence seq str) seq))) + +(defmacro deftest (name f) + `(push + (lambda () + (let + ((success (funcall ,f))) + (if success + (format t "~c[1;32m- ~A passed~c[0m~%" #\Esc ,name #\Esc) + (format t "~c[1;31m- ~A failed~c[0m~%" #\Esc ,name #\Esc)) + success)) + *tests*)) + +(defmacro defsuccesstest (pkg source target) + `(deftest + ,source + (lambda () + (handler-case + (progn + (load ,source) + (string= (slurp-file ,target) (docgen:export-package ,pkg))) + (docgen:validation-failure (vf) + (format t "Error gotten: ~A~%" + (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :docgen)) vf))) + (error (e) (format t "Error gotten: ~A~%" e)))))) + +(defmacro deffailure-func-test (name doc expected) + `(deftest + ,name + (lambda () + (handler-case + (progn + (funcall + (symbol-function (find-symbol "INTERNAL-DOC->AST" :docgen-func)) + 'unused + ,doc) + nil) + (docgen:validation-failure (vf) + (let + ((result (funcall (symbol-function (find-symbol "VALIDATION-FAILURE-MSG" :docgen)) vf))) + (or + (string= ,expected result) + (format t " Got error:~%~S~% but expected~%~S~%" result ,expected)))))))) + +(defsuccesstest :success1 "resources/success1.lisp" "resources/success1.md")