aboutsummaryrefslogtreecommitdiffstats
path: root/library/parsedown/test/CommonMarkTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/parsedown/test/CommonMarkTest.php')
-rw-r--r--library/parsedown/test/CommonMarkTest.php74
1 files changed, 74 insertions, 0 deletions
diff --git a/library/parsedown/test/CommonMarkTest.php b/library/parsedown/test/CommonMarkTest.php
new file mode 100644
index 000000000..9b8d11620
--- /dev/null
+++ b/library/parsedown/test/CommonMarkTest.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * Test Parsedown against the CommonMark spec.
+ *
+ * Some code based on the original JavaScript test runner by jgm.
+ *
+ * @link http://commonmark.org/ CommonMark
+ * @link http://git.io/8WtRvQ JavaScript test runner
+ */
+class CommonMarkTest extends PHPUnit_Framework_TestCase
+{
+ const SPEC_URL = 'https://raw.githubusercontent.com/jgm/stmd/master/spec.txt';
+
+ /**
+ * @dataProvider data
+ * @param $section
+ * @param $markdown
+ * @param $expectedHtml
+ */
+ function test_($section, $markdown, $expectedHtml)
+ {
+ $Parsedown = new Parsedown();
+ $Parsedown->setUrlsLinked(false);
+
+ $actualHtml = $Parsedown->text($markdown);
+ $actualHtml = $this->normalizeMarkup($actualHtml);
+
+ $this->assertEquals($expectedHtml, $actualHtml);
+ }
+
+ function data()
+ {
+ $spec = file_get_contents(self::SPEC_URL);
+ $spec = strstr($spec, '<!-- END TESTS -->', true);
+
+ $tests = array();
+ $currentSection = '';
+
+ preg_replace_callback(
+ '/^\.\n([\s\S]*?)^\.\n([\s\S]*?)^\.$|^#{1,6} *(.*)$/m',
+ function($matches) use ( & $tests, & $currentSection, & $testCount) {
+ if (isset($matches[3]) and $matches[3]) {
+ $currentSection = $matches[3];
+ } else {
+ $testCount++;
+ $markdown = $matches[1];
+ $markdown = preg_replace('/→/', "\t", $markdown);
+ $expectedHtml = $matches[2];
+ $expectedHtml = $this->normalizeMarkup($expectedHtml);
+ $tests []= array(
+ $currentSection, # section
+ $markdown, # markdown
+ $expectedHtml, # html
+ );
+ }
+ },
+ $spec
+ );
+
+ return $tests;
+ }
+
+ private function normalizeMarkup($markup)
+ {
+ $markup = preg_replace("/\n+/", "\n", $markup);
+ $markup = preg_replace('/^\s+/m', '', $markup);
+ $markup = preg_replace('/^((?:<[\w]+>)+)\n/m', '$1', $markup);
+ $markup = preg_replace('/\n((?:<\/[\w]+>)+)$/m', '$1', $markup);
+ $markup = trim($markup);
+
+ return $markup;
+ }
+}