1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <?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;
- }
- }
|