Files
Nim/nimdoc/tester.nim
Andrey Makarov 14656154ef Add doctype: RST|Markdown|RstMarkdown pragma (#20252)
* Add `doctype: RST|Markdown|RstMarkdown` pragma

Implements https://github.com/nim-lang/RFCs/issues/68 ,
see also discussion in https://github.com/nim-lang/Nim/issues/17987

The permitted values:
* `markdown`, which is default. It still contains nearly all of
  the RST supported but it is assumed that in time we will give up
  most or all RST features in this mode
* `rst`, without any extensions
* `RstMarkdown` — compatibility with Nim 1.x. It's basically RST
  with those Markdown features enabled that don't conflict with RST.

* Apply suggestions from code review

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>

* Additional fix in spirit of review

* Fix test after #20188

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
2022-08-23 14:49:53 -04:00

93 lines
3.3 KiB
Nim

# Small program that runs the test cases for 'nim doc'.
# To run this, cd to the git repo root, and run "nim r nimdoc/tester.nim".
# to change expected results (after carefully verifying everything), use -d:nimTestsNimdocFixup
import strutils, os
from std/private/gitutils import diffFiles
const fixup = defined(nimTestsNimdocFixup)
var
failures = 0
const
baseDir = "nimdoc"
type
NimSwitches = object
doc: seq[string]
buildIndex: seq[string]
proc exec(cmd: string) =
if execShellCmd(cmd) != 0:
quit("FAILURE: " & cmd)
proc testNimDoc(prjDir, docsDir: string; switches: NimSwitches; fixup = false) =
let
nimDocSwitches = switches.doc.join(" ")
nimBuildIndexSwitches = switches.buildIndex.join(" ")
putEnv("SOURCE_DATE_EPOCH", "100000")
const nimExe = getCurrentCompilerExe() # so that `bin/nim_temp r nimdoc/tester.nim` works
if nimDocSwitches != "":
exec("$1 doc $2" % [nimExe, nimDocSwitches])
if nimBuildIndexSwitches != "":
exec("$1 buildIndex $2" % [nimExe, nimBuildIndexSwitches])
for expected in walkDirRec(prjDir / "expected/", checkDir=true):
let produced = expected.replace('\\', '/').replace("/expected/", "/$1/" % [docsDir])
if not fileExists(produced):
echo "FAILURE: files not found: ", produced
inc failures
elif readFile(expected) != readFile(produced):
echo "FAILURE: files differ: ", produced
echo diffFiles(expected, produced).output
inc failures
if fixup:
copyFile(produced, expected)
else:
echo "SUCCESS: files identical: ", produced
if failures == 0 and ((prjDir / docsDir) != prjDir):
removeDir(prjDir / docsDir)
# Test "nim doc --project --out:.. --index:on .."
let
test1PrjName = "testproject"
test1Dir = baseDir / test1PrjName
test1DocsDir = "htmldocs"
test1Switches = NimSwitches(doc: @["--project",
"--out:$1/$2" % [test1Dir, test1DocsDir],
"--index:on",
"$1/$2.nim" % [test1Dir, test1PrjName]],
buildIndex: @["--out:$1/$2/theindex.html" % [test1Dir, test1DocsDir],
"$1/$2" % [test1Dir, test1DocsDir]])
testNimDoc(test1Dir, test1DocsDir, test1Switches, fixup)
# Test "nim doc --out:.. --index:on .."
let
test2PrjDir = "test_out_index_dot_html"
test2PrjName = "foo"
test2Dir = baseDir / test2PrjDir
test2DocsDir = "htmldocs"
test2Switches = NimSwitches(doc: @["--out:$1/$2/index.html" % [test2Dir, test2DocsDir],
"--index:on",
"$1/$2.nim" % [test2Dir, test2PrjName]],
buildIndex: @["--out:$1/$2/theindex.html" % [test2Dir, test2DocsDir],
"$1/$2" % [test2Dir, test2DocsDir]])
testNimDoc(test2Dir, test2DocsDir, test2Switches, fixup)
# Test `nim doc` on file with `{.doctype.}` pragma
let
test3PrjDir = "test_doctype"
test3PrjName = "test_doctype"
test3Dir = baseDir / test3PrjDir
test3DocsDir = "htmldocs"
test3Switches = NimSwitches(doc: @["$1/$2.nim" % [test3Dir, test3PrjName]])
testNimDoc(test3Dir, test3DocsDir, test3Switches, fixup)
if failures > 0:
quit "$# failures occurred; see note in nimdoc/tester.nim regarding -d:nimTestsNimdocFixup" % $failures