docs.rkt (3534B)
1 #lang racket/base 2 3 ;; Use text renderer to check some Scribble functionality 4 5 (require scribble/base-render 6 (prefix-in text: scribble/text-render) 7 (prefix-in html: scribble/html-render) 8 (prefix-in latex: scribble/latex-render) 9 (prefix-in markdown: scribble/markdown-render) 10 racket/file 11 racket/class 12 racket/runtime-path 13 tests/eli-tester) 14 15 (define-runtime-path source-dir "docs") 16 (define work-dir (build-path (find-system-path 'temp-dir) 17 "scribble-docs-tests")) 18 19 (define (build-doc render% src-file dest-file) 20 (let* ([renderer (new render% [dest-dir work-dir])] 21 [docs (list (if (module-declared? `(submod ,src-file doc) #t) 22 (dynamic-require `(submod ,src-file doc) 'doc) 23 (dynamic-require src-file 'doc)))] 24 [fns (list (build-path work-dir dest-file))] 25 [fp (send renderer traverse docs fns)] 26 [info (send renderer collect docs fns fp)] 27 [r-info (send renderer resolve docs fns info)]) 28 (send renderer render docs fns r-info) 29 (send renderer get-undefined r-info))) 30 31 (define (build-text-doc src-file dest-file) 32 (build-doc (text:render-mixin render%) src-file dest-file)) 33 34 (define (build-html-doc src-file dest-file) 35 (build-doc (html:render-mixin render%) src-file dest-file)) 36 37 (define (build-htmls-doc src-file dest-file) 38 (build-doc (html:render-multi-mixin (html:render-mixin render%)) src-file dest-file)) 39 40 (define (build-latex-doc src-file dest-file) 41 (build-doc (latex:render-mixin render%) src-file dest-file)) 42 43 (define (build-markdown-doc src-file dest-file) 44 (build-doc (markdown:render-mixin render%) src-file dest-file)) 45 46 (provide docs-tests) 47 (module+ main (docs-tests)) 48 (module+ test (docs-tests)) 49 (define (docs-tests) 50 (when (or (file-exists? work-dir) (directory-exists? work-dir)) 51 (delete-directory/files work-dir)) 52 (dynamic-wind 53 (λ() (make-directory work-dir)) 54 (λ() 55 (define files (map path-element->string (directory-list source-dir))) 56 (test do 57 (for ([scrbl (in-list files)] 58 #:when (regexp-match? #rx"\\.scrbl$" scrbl) 59 [txt (in-value (regexp-replace #rx"\\.scrbl$" scrbl ".txt"))] 60 #:when (member txt files)) 61 ;; (printf "Testing ~s -> ~s\n" scrbl txt) 62 (define src-file (build-path source-dir scrbl)) 63 (define expect-file (build-path source-dir txt)) 64 (define generated-file (build-path work-dir "gen.txt")) 65 (define (contents file) 66 (regexp-replace #rx"\n+$" (file->string file) "")) 67 (define undefineds (build-text-doc src-file "gen.txt")) 68 (for ([u (in-list undefineds)]) 69 (when (eq? 'tech (car u)) 70 (test #:failure-message 71 (format "undefined tech: ~e" u) 72 #f))) 73 (test #:failure-message 74 (format 75 "mismatch for: \"~a\", expected text in: \"~a\", got:\n~a" 76 scrbl txt (contents generated-file)) 77 (string=? (contents expect-file) (contents generated-file))) 78 79 ;; Make sure the document at least renders in other modes: 80 (void (build-html-doc src-file "gen.html")) 81 (void (build-htmls-doc src-file "gen")) 82 (void (build-latex-doc src-file "gen.tex")) 83 (void (build-markdown-doc src-file "gen.md"))))) 84 (λ() (delete-directory/files work-dir))))