75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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;
 | |
|     }
 | |
| }
 |