(import scheme (chicken base) (chicken load) (chicken pathname) (chicken port) (chicken process-context) test) (define test-dir (or (get-environment-variable "TESTS") "tests")) ;;; Setup (import (jimmy emit) (jimmy read) #;(jimmy wrap)) (test-begin) ;;; Reading (define test-file (make-pathname (list test-dir) "test" "gmi")) (define expected-doc '((meta ("title" "a" "test" "document") ("date" "2024-05-13T03:02:45Z") ("uuid" "b3daebf1-440b-4828-a4d9-9089c7bd7c61")) (hdr1 ("a" "test" "document" "of" "some" "kind")) (para ("here" "is" "a" "test" "document.") ("it" "has" "paragraphs") (link "example.com" "with" "links!") ("and" "other" "things.")) (hdr2 ("a" "code" "example")) (verb ("for (a=1;a<=4;a++) {") ("\tprintf(\"%d\\n\", a);") ("}")) (hdr3 ("other" "examples")) (quot ("a" "blockquote" "is" "a" "quote") ("that" "is" "blocky.")) (list ("list" "1") ("list" "2") ("list" "3")) (link ("example.com" "link" "list" "1") ("example.com" "link" "list" "2") ("example.com" "link" "list" "3")) (para ("ok," "now" "for" "another" "test:") ("will" "*strong*" "in-line" "text" "be" "converted?") ("as" "well" "as" "`code`," "_emph_" "and" "such?") ("what" "if" "*i" "_nest_" "them*") ("what" "if" "*i" "_nest" "them*" "wrong_" "?") ("what" "about" "*breaking" "them") ("over" "two" "lines?*")))) (define actual-doc (with-input-from-file test-file parse)) (test "read" expected-doc actual-doc) (define doc expected-doc) ;;; Emitting (test-group "gemini" (define expected-gmi (string-append "# a test document of some kind\n\n" "here is a test document. it has paragraphs \n" "=> example.com with links!\n" "and other things.\n\n" "## a code example\n\n" "```\nfor (a=1;a<=4;a++) {\n" "\tprintf(\"%d\\n\", a);" "\n}\n```\n\n" "### other examples\n\n" "> a blockquote is a quote that is blocky.\n\n" "* list 1\n" "* list 2\n" "* list 3\n\n" "=> example.com link list 1\n" "=> example.com link list 2\n" "=> example.com link list 3\n\n" "ok, now for another test: " "will *strong* in-line text be converted? " "as well as `code`, _emph_ and such? " "what if *i _nest_ them* what if *i _nest them* wrong_ ? " "what about *breaking them over two lines?*\n\n")) (define actual-gmi (with-output-to-string (lambda () (emit doc)))) (test "emit" expected-gmi actual-gmi)) ;;; HTML (test-group "html" (import (jimmy html)) (define expected-html (string-append "

a test document of some kind

\n" "

\n" " here is a test document.\n" " it has paragraphs\n" " with links!\n" " and other things.\n" "

\n" "

a code example

\n" "
for (a=1;a<=4;a++) {\n"
                   "\tprintf(\"%d\\n\", a);\n"
                   "}\n"
                   "
\n" "

other examples

\n" "
\n" " a blockquote is a quote\n" " that is blocky.\n" "
\n" "\n" "\n" "

\n" " ok, now for another test:\n" " will strong in-line text be converted?\n" " as well as code, emph and such?\n" " what if i nest them\n" " what if i nest them wrong ?\n" " what about *breaking them\n" " over two lines?*\n" "

\n")) (define actual-html (with-output-to-string (lambda () (emit doc)))) (test "emit html" expected-html actual-html)) (test-end) (test-exit)