Ver código fonte

Modified test runner to support extension tests as well

Titus 13 anos atrás
pai
commit
9d0a929fac
3 arquivos alterados com 94 adições e 36 exclusões
  1. 5 0
      test/extensions/twitter/basic.html
  2. 5 0
      test/extensions/twitter/basic.md
  3. 84 36
      test/run.js

+ 5 - 0
test/extensions/twitter/basic.html

@@ -0,0 +1,5 @@
+<p>Testing of the twitter extension.</p>
+
+<p>Ping <a href="http://twitter.com/andstuff">@andstuff</a> to find out more about <a href="http://twitter.com/search/%23extensions">#extensions</a> with showdown</p>
+
+<p>And @something shouldn't render as a twitter link</p>

+ 5 - 0
test/extensions/twitter/basic.md

@@ -0,0 +1,5 @@
+Testing of the twitter extension.
+
+Ping @andstuff to find out more about #extensions with showdown
+
+And \@something shouldn't render as a twitter link

+ 84 - 36
test/run.js

@@ -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);
+        });
     });
-});
+
+}