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(assert, input, expected, text, settings) { const opts = buildOptions({ siteSettings: settings||{} }); 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) { assert.ok(same, text); } else { assert.equal(resultNorm, expectedNorm, text); } }; <% 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(assert) { md(assert, #{text.to_json}, #{html.to_json}, 'passes MDTest'); });\n" end result end %> <%= mdtest_suite %>