diff options
Diffstat (limited to 'js/test.js')
-rwxr-xr-x | js/test.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/js/test.js b/js/test.js new file mode 100755 index 0000000..c1ea5b6 --- /dev/null +++ b/js/test.js @@ -0,0 +1,79 @@ +#!/usr/bin/env node + +var fs = require('fs'); +var util = require('util'); +var stmd = require('./stmd'); +var ansi = require('ansi') +var cursor = ansi(process.stdout); + +var writer = new stmd.HtmlRenderer(); +var reader = new stmd.DocParser(); + +var passed = 0; +var failed = 0; + +var showSpaces = function(s) { + var t = s; + return t.replace(/\t/g,'→') + .replace(/ /g,'␣'); +} + +fs.readFile('spec.txt', 'utf8', function(err, data) { + if (err) { + return console.log(err); + } + var examples = []; + var current_section = ""; + var example_number = 0; + tests = data.replace(/^<!-- END TESTS -->(.|[\n])*/m,''); + tests.replace(/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$|^#{1,6} *(.*)$/gm, + function(_,x,y,z,w){ + if (z) { + current_section = z; + } else { + example_number++; + examples.push({markdown: x, + html: y, + section: current_section, + number: example_number}); + } + }); + + current_section = ""; + + console.time("Elapsed time"); + + for (i = 0; i < examples.length; i++) { + var example = examples[i]; + if (example.section != current_section) { + if (current_section !== '') { + cursor.write('\n'); + } + current_section = example.section; + cursor.reset().write(current_section).reset().write(' '); + } + var actual = writer.renderBlock(reader.parse(example.markdown.replace(/→/g, '\t'))); + if (actual == example.html) { + passed++; + cursor.green().write('✓').reset(); + } else { + failed++; + cursor.write('\n'); + + cursor.red().write('✘ Example ' + example.number + '\n'); + cursor.cyan(); + cursor.write('=== markdown ===============\n'); + cursor.write(showSpaces(example.markdown)); + cursor.write('=== expected ===============\n'); + cursor.write(showSpaces(example.html)); + cursor.write('=== got ====================\n'); + cursor.write(showSpaces(actual)); + cursor.reset(); + } + } + cursor.write('\n' + passed.toString() + ' tests passed, ' + + failed.toString() + ' failed.\n'); + + console.timeEnd("Elapsed time"); +}); + |