|
@@ -1,44 +1,92 @@
|
|
|
var showdown = new require('../src/showdown'),
|
|
|
- convertor = new showdown.converter(),
|
|
|
fs = require('fs'),
|
|
|
path = require('path'),
|
|
|
should = require('should');
|
|
|
|
|
|
-// Load test cases from disk
|
|
|
-var cases = fs.readdirSync('test/cases').filter(function(file){
|
|
|
- return ~file.indexOf('.md');
|
|
|
-}).map(function(file){
|
|
|
- return file.replace('.md', '');
|
|
|
+
|
|
|
+var runTestsInDir = function(dir, converter) {
|
|
|
+
|
|
|
+ // Load test cases from disk
|
|
|
+ var cases = fs.readdirSync(dir).filter(function(file){
|
|
|
+ return ~file.indexOf('.md');
|
|
|
+ }).map(function(file){
|
|
|
+ return file.replace('.md', '');
|
|
|
+ });
|
|
|
+
|
|
|
+ // Run each test case (markdown -> html)
|
|
|
+ cases.forEach(function(test){
|
|
|
+ var name = test.replace(/[-.]/g, ' ');
|
|
|
+ it (name, function(){
|
|
|
+ var mdpath = path.join(dir, test + '.md'),
|
|
|
+ htmlpath = path.join(dir, test + '.html'),
|
|
|
+ md = fs.readFileSync(mdpath, 'utf8'),
|
|
|
+ expected = fs.readFileSync(htmlpath, 'utf8').trim(),
|
|
|
+ actual = converter.makeHtml(md).trim();
|
|
|
+
|
|
|
+ // Normalize line returns
|
|
|
+ expected = expected.replace(/\r/g, '');
|
|
|
+
|
|
|
+ // Ignore all leading/trailing whitespace
|
|
|
+ expected = expected.split('\n').map(function(x){
|
|
|
+ return x.trim();
|
|
|
+ }).join('\n');
|
|
|
+ actual = actual.split('\n').map(function(x){
|
|
|
+ return x.trim();
|
|
|
+ }).join('\n');
|
|
|
+
|
|
|
+ // Convert whitespace to a visible character so that it shows up on error reports
|
|
|
+ expected = expected.replace(/ /g, '·');
|
|
|
+ expected = expected.replace(/\n/g, '•\n');
|
|
|
+ actual = actual.replace(/ /g, '·');
|
|
|
+ actual = actual.replace(/\n/g, '•\n');
|
|
|
+
|
|
|
+ // Compare
|
|
|
+ actual.should.equal(expected);
|
|
|
+ });
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+// :: Markdown to HTML testing ::
|
|
|
+//
|
|
|
+
|
|
|
+describe('Markdown', function() {
|
|
|
+ var converter = new showdown.converter();
|
|
|
+ runTestsInDir('test/cases', converter);
|
|
|
});
|
|
|
|
|
|
-// Run each test case
|
|
|
-cases.forEach(function(test){
|
|
|
- var name = test.replace(/[-.]/g, ' ');
|
|
|
- it (name, function(){
|
|
|
- var mdpath = path.join('test/cases', test + '.md'),
|
|
|
- htmlpath = path.join('test/cases', test + '.html'),
|
|
|
- md = fs.readFileSync(mdpath, 'utf8'),
|
|
|
- expected = fs.readFileSync(htmlpath, 'utf8').trim(),
|
|
|
- actual = convertor.makeHtml(md).trim();
|
|
|
-
|
|
|
- // Normalize line returns
|
|
|
- expected = expected.replace(/\r/g, '');
|
|
|
-
|
|
|
- // Ignore all leading/trailing whitespace
|
|
|
- expected = expected.split('\n').map(function(x){
|
|
|
- return x.trim();
|
|
|
- }).join('\n');
|
|
|
- actual = actual.split('\n').map(function(x){
|
|
|
- return x.trim();
|
|
|
- }).join('\n');
|
|
|
-
|
|
|
- // Convert whitespace to a visible character so that it shows up on error reports
|
|
|
- expected = expected.replace(/ /g, '·');
|
|
|
- expected = expected.replace(/\n/g, '•\n');
|
|
|
- actual = actual.replace(/ /g, '·');
|
|
|
- actual = actual.replace(/\n/g, '•\n');
|
|
|
-
|
|
|
- // Compare
|
|
|
- actual.should.equal(expected);
|
|
|
+
|
|
|
+//
|
|
|
+// :: Extensions Testing ::
|
|
|
+//
|
|
|
+
|
|
|
+if (path.existsSync('test/extensions')) {
|
|
|
+
|
|
|
+ describe('extensions', function() {
|
|
|
+ // Search all sub-folders looking for directory-specific tests
|
|
|
+ var extensions = fs.readdirSync('test/extensions').filter(function(file){
|
|
|
+ return fs.lstatSync('test/extensions/' + file).isDirectory();
|
|
|
+ });
|
|
|
+
|
|
|
+ // Run tests in each extension sub-folder
|
|
|
+ extensions.forEach(function(ext){
|
|
|
+ // Make sure extension exists
|
|
|
+ var src = 'src/extensions/' + ext + '.js';
|
|
|
+ if (!path.existsSync(src)) {
|
|
|
+ throw "Attempting tests for '" + ext + "' but sourc file (" + src + ") was not found.";
|
|
|
+ }
|
|
|
+
|
|
|
+ // Build converter with extension included
|
|
|
+ var extension = require('../src/extensions/' + ext);
|
|
|
+ if (!extension) {
|
|
|
+ throw "Could not load extension '" + ext + "'. Did you forget module.exports?";
|
|
|
+ }
|
|
|
+
|
|
|
+ var converter = new showdown.converter({ extensions: [ extension ] });
|
|
|
+ var dir = 'test/extensions/' + ext;
|
|
|
+ runTestsInDir(dir, converter);
|
|
|
+ });
|
|
|
});
|
|
|
-});
|
|
|
+
|
|
|
+}
|