diff options
Diffstat (limited to 'library/parsedown/test/CommonMarkTest.php')
-rw-r--r-- | library/parsedown/test/CommonMarkTest.php | 74 |
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; + } +} |