import { sanitize } from 'pretty-text/sanitizer'; import { default as PrettyText, buildOptions } from 'pretty-text/pretty-text'; import { hashString } from 'discourse/lib/hash'; // Run the MDTest spec module("MDTest"); // This is cheating, but the trivial differences between sanitization // do not affect formatting. function normalize(str) { return str.replace(/\n\s*/g, ''). replace(/ \/\>/g, '>'). replace(/ ?/g, "\t"). replace(/"/g, '"'); } // We use a custom sanitizer for MD test that hoists out comments. In Discourse // they are stripped, but to be compliant with the spec they should not be. function sanitizer(result, whiteLister) { let hoisted; const m = result.match(//g); if (m && m.length) { hoisted = []; for (let i=0; i result = result.replace(tuple[1], tuple[0])); } return result; } function md(input, expected, text) { const opts = buildOptions({ siteSettings: {} }); opts.traditionalMarkdownLinebreaks = true; opts.sanitizer = sanitizer; const cooker = new PrettyText(opts); const result = cooker.cook(input); const resultNorm = normalize(result); const expectedNorm = normalize(expected); const same = (result === expected) || (resultNorm === expectedNorm); if (same) { ok(same, text); } else { equal(resultNorm, expectedNorm, text); } }; test("first", function(){ equal(1, 1, "cool") }); <% def mdtest_suite result = "" Dir.glob("#{Rails.root}/test/javascripts/mdtest/fixtures/*.text").each do |f| filename_no_ext = f.sub(/\.text$/, '') filename = Pathname.new(filename_no_ext) text = File.read(f) html = File.read("#{filename_no_ext}.xhtml"); result << "test(\"#{filename}\", function() { md(#{text.to_json}, #{html.to_json}, 'passes MDTest'); });\n" end result end %> <%= mdtest_suite %>