scribble-enhanced/collects/tests/scribble/markdown.rkt
Greg Hendershott 51d487bc1b Add a Markdown rendering mode to Scribble.
Uses "Github flavored markdown". Specifically, code blocks are opened
using ```scheme so that Github will lex and format them as Scheme code
rather than generic monospace.

Note: I would have used ```racket, but we are still waiting for the
pygments.rb project to pull again from pygments-main -- to which I
contributed a Racket lexer back in August. After pygments.rb pulls,
can update this to use ```racket instead.

original commit: 6aa6dc0400f4fed688e6f5b5278da2e34d82ad88
2012-12-09 15:17:36 -07:00

54 lines
2.3 KiB
Racket

#lang racket/base
;; Use text renderer to check some Scribble functionality
(require scribble/base-render (prefix-in markdown: scribble/markdown-render)
racket/file racket/class racket/runtime-path tests/eli-tester)
(define-runtime-path source-dir "markdown-docs")
(define work-dir (build-path (find-system-path 'temp-dir)
"scribble-docs-tests"))
(define (build-markdown-doc src-file dest-file)
(let* ([renderer (new (markdown:render-mixin render%) [dest-dir work-dir])]
[docs (list (dynamic-require src-file 'doc))]
[fns (list (build-path work-dir dest-file))]
[fp (send renderer traverse docs fns)]
[info (send renderer collect docs fns fp)]
[r-info (send renderer resolve docs fns info)])
(send renderer render docs fns r-info)
(send renderer get-undefined r-info)))
(provide markdown-tests)
(module+ main (markdown-tests))
(define (markdown-tests)
(when (or (file-exists? work-dir) (directory-exists? work-dir))
(delete-directory/files work-dir))
(dynamic-wind
(λ() (make-directory work-dir))
(λ()
(define files (map path-element->string (directory-list source-dir)))
(test do
(for ([scrbl (in-list files)]
#:when (regexp-match? #rx"\\.scrbl$" scrbl)
[md (in-value (regexp-replace #rx"\\.scrbl$" scrbl ".md"))]
#:when (member md files))
;; (printf "Testing ~s -> ~s\n" scrbl md)
(define src-file (build-path source-dir scrbl))
(define expect-file (build-path source-dir md))
(define generated-file (build-path work-dir "gen.md"))
(define (contents file)
(regexp-replace #rx"\n+$" (file->string file) ""))
(define undefineds (build-markdown-doc src-file "gen.md"))
(for ([u (in-list undefineds)])
(when (eq? 'tech (car u))
(test #:failure-message
(format "undefined tech: ~e" u)
#f)))
(test #:failure-message
(format
"mismatch for: \"~a\", expected text in: \"~a\", got:\n~a"
scrbl md (contents generated-file))
(string=? (contents expect-file) (contents generated-file))))))
(λ() (delete-directory/files work-dir))))