Add function documentation checker/converter
[sheep] / src / test / main.lisp
index 0858ada87e2a5a4cc27d1679b101d0e29f38af8a..3cfb79e163d535176a4b2d3e197f766fd83304ab 100644 (file)
@@ -1,3 +1,51 @@
 (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 ()
+    (load ,source)
+    (ignore-errors (string= (slurp-file ,target) (docgen:export-package ,pkg))))))
+
+(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")