From 352fd5008b821357bb33b4a90138440586ff367a Mon Sep 17 00:00:00 2001 From: Rasmus Andersson Date: Thu, 15 Oct 2020 13:37:03 -0700 Subject: [PATCH] adds test for issue #2 --- test/issue2.js | 11 +++++++ test/issue5.js | 63 +++--------------------------------- test/test.sh | 4 ++- test/testutil.js | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+), 59 deletions(-) create mode 100644 test/issue2.js create mode 100644 test/testutil.js diff --git a/test/issue2.js b/test/issue2.js new file mode 100644 index 0000000..442b950 --- /dev/null +++ b/test/issue2.js @@ -0,0 +1,11 @@ +// https://github.com/rsms/markdown-wasm/issues/2 +const { checkHTMLResult, exit } = require("./testutil") + +// When MD4C_USE_UTF8 is not defined for md4c, the example input here fail to parse as a valid +// reference link. In that case, instead of the expected output, we get "

[Á]

". +checkHTMLResult("MD4C_USE_UTF8", ` +[á]: /url +[Á] +`, `

Á

\n`) + +exit() diff --git a/test/issue5.js b/test/issue5.js index 470f6f5..23a4ffe 100644 --- a/test/issue5.js +++ b/test/issue5.js @@ -1,6 +1,5 @@ // https://github.com/rsms/markdown-wasm/issues/5 -const libdir = process.argv.includes("-debug") ? "build/debug" : "dist" -const md = require(`../${libdir}/markdown.node.js`) +const { checkHTMLResult, exit } = require("./testutil") // this triggers the bug const input1 = Buffer.from( @@ -38,59 +37,7 @@ const expected3 = Buffer.from( "\n" , "utf8") -let fails = 0 -check("test1", expected1, input1) -check("test2", expected2, input2) -check("test3", expected3, input3) - - -function check(name, expected, inputData) { - const actual = Buffer.from(md.parse(inputData, { asMemoryView: true })) - - if (expected.compare(actual) == 0) { - console.log(`${name} OK`) - return - } - fails++ - const line = "——————————————————————————————————————————————————" - const wave = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - console.error(`${name} FAIL.`) - - console.error(`\n\nExpected output:\n${line}`) - inspectBuf(expected, actual) - console.error(`${line}\n\nActual output:\n${line}`) - inspectBuf(actual, expected) - console.error(line) - - function inspectBuf(buf, otherbuf) { - process.stderr.write(buf) - if (buf[buf.length-1] != 0x0a) { - process.stderr.write("\n") - } - console.error(wave) - const styleReset = "\x1b[22;39m" - const styleNone = s=>s - const styleDiff = process.stderr.isTTY ? s => "\x1b[1;33m"+s+styleReset : styleNone - const styleErr = process.stderr.isTTY ? s => "\x1b[1;31m"+s+styleReset : styleNone - - for (let i = 0; i < buf.length; i++) { - let b = buf[i] - - let style = styleNone - if (b < 0x20 && b != 0x09 && b != 0x0A && b != 0x0D) { - // byte is unexpected control character (except TAB, CR, LF) - style = styleErr - } else if (otherbuf && otherbuf[i] != b) { - style = styleDiff - } - - process.stderr.write(style(b.toString(16).padStart(2, '0')) + " ") - - if (b == 0x0a) { - process.stderr.write("\n") - } - } - } -} - -process.exit(fails > 0 ? 1 : 0) +checkHTMLResult("test1", input1, expected1) +checkHTMLResult("test2", input2, expected2) +checkHTMLResult("test3", input3, expected3) +exit() diff --git a/test/test.sh b/test/test.sh index ac3064f..1587cf6 100755 --- a/test/test.sh +++ b/test/test.sh @@ -2,4 +2,6 @@ set -euo pipefail cd "$(dirname "$0")" -node issue5.js "$@" +for f in issue*.js; do + node "$f" "$@" +done diff --git a/test/testutil.js b/test/testutil.js new file mode 100644 index 0000000..f1efa9e --- /dev/null +++ b/test/testutil.js @@ -0,0 +1,83 @@ +const Path = require("path") + +const libdir = process.argv.includes("-debug") ? "build/debug" : "dist" +const md = require(`../${libdir}/markdown.node.js`) + +const line = "——————————————————————————————————————————————————" +const wave = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + + +exports.numFailures = 0 + + +exports.checkHTMLResult = function check(name, inputData, expectedOutputData) { + if (typeof inputData == "string") { + inputData = Buffer.from(inputData, "utf8") + } + if (typeof expectedOutputData == "string") { + expectedOutputData = Buffer.from(expectedOutputData, "utf8") + } + const actual = Buffer.from(md.parse(inputData, { asMemoryView: true })) + if (expectedOutputData.compare(actual) == 0) { + log(`${name} OK`) + return true + } + exports.numFailures++ + logerr(`${name} FAIL`) + console.error(`\n\nExpected output:\n${line}`) + inspectBuf(expectedOutputData, actual) + console.error(`${line}\n\nActual output:\n${line}`) + inspectBuf(actual, expectedOutputData) + console.error(line) +} + + +exports.exit = function() { + process.exit(exports.numFailures > 0 ? 1 : 0) +} + + +exports.log = log +exports.logerr = logerr + +const logprefix = Path.basename(process.argv[1])+":" + +function log() { + console.log.apply(console, [logprefix].concat([].slice.call(arguments))) +} +function logerr() { + console.error.apply(console, [logprefix].concat([].slice.call(arguments))) +} + + +exports.inspectBuf = inspectBuf + +function inspectBuf(buf, otherbuf) { + process.stderr.write(buf) + if (buf[buf.length-1] != 0x0a) { + process.stderr.write("\n") + } + console.error(wave) + const styleReset = "\x1b[22;39m" + const styleNone = s=>s + const styleDiff = process.stderr.isTTY ? s => "\x1b[1;33m"+s+styleReset : styleNone + const styleErr = process.stderr.isTTY ? s => "\x1b[1;31m"+s+styleReset : styleNone + + for (let i = 0; i < buf.length; i++) { + let b = buf[i] + + let style = styleNone + if (b < 0x20 && b != 0x09 && b != 0x0A && b != 0x0D) { + // byte is unexpected control character (except TAB, CR, LF) + style = styleErr + } else if (otherbuf && otherbuf[i] != b) { + style = styleDiff + } + + process.stderr.write(style(b.toString(16).padStart(2, '0')) + " ") + + if (b == 0x0a) { + process.stderr.write("\n") + } + } +}