mirror of
https://github.com/erusev/parsedown.git
synced 2023-08-10 21:13:06 +03:00
Add test/CommonMarkTestWeak.php
This commit is contained in:
parent
3a46a31e09
commit
d33e736fa3
@ -13,7 +13,9 @@ class CommonMarkTest extends PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
$this->parsedown = new Parsedown();
|
require_once(__DIR__ . '/TestParsedown.php');
|
||||||
|
|
||||||
|
$this->parsedown = new TestParsedown();
|
||||||
$this->parsedown->setUrlsLinked(false);
|
$this->parsedown->setUrlsLinked(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
61
test/CommonMarkTestWeak.php
Normal file
61
test/CommonMarkTestWeak.php
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
require_once(__DIR__ . '/CommonMarkTest.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test Parsedown against the CommonMark spec, but less aggressive
|
||||||
|
*
|
||||||
|
* The resulting HTML markup is cleaned up before comparison, so examples
|
||||||
|
* which would normally fail due to actually invisible differences (e.g.
|
||||||
|
* superfluous whitespaces), don't fail. However, cleanup relies on block
|
||||||
|
* element detection. The detection doesn't work correctly when a element's
|
||||||
|
* `display` CSS property is manipulated. According to that this test is only
|
||||||
|
* a interim solution on Parsedown's way to full CommonMark compatibility.
|
||||||
|
*
|
||||||
|
* @link http://commonmark.org/ CommonMark
|
||||||
|
*/
|
||||||
|
class CommonMarkTestWeak extends CommonMarkTest
|
||||||
|
{
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$textLevelElements = $this->parsedown->getTextLevelElements();
|
||||||
|
|
||||||
|
array_walk($textLevelElements, function (&$element) {
|
||||||
|
$element = preg_quote($element, '/');
|
||||||
|
});
|
||||||
|
$this->textLevelElementRegex = '\b(?:' . implode('|', $textLevelElements) . ')\b';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider data
|
||||||
|
* @param $section
|
||||||
|
* @param $markdown
|
||||||
|
* @param $expectedHtml
|
||||||
|
*/
|
||||||
|
public function testExample($section, $markdown, $expectedHtml)
|
||||||
|
{
|
||||||
|
$expectedHtml = $this->cleanupHtml($expectedHtml);
|
||||||
|
|
||||||
|
$actualHtml = $this->parsedown->text($markdown);
|
||||||
|
$actualHtml = $this->cleanupHtml($actualHtml);
|
||||||
|
|
||||||
|
$this->assertEquals($expectedHtml, $actualHtml);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function cleanupHtml($markup)
|
||||||
|
{
|
||||||
|
// invisible whitespaces at the beginning and end of block elements
|
||||||
|
// however, whitespaces at the beginning of <pre> elements do matter
|
||||||
|
$markup = preg_replace(
|
||||||
|
array(
|
||||||
|
'/(<(?!(?:' . $this->textLevelElementRegex . '|\bpre\b))\w+\b[^>]*>(?:<' . $this->textLevelElementRegex . '[^>]*>)?)\s+/s',
|
||||||
|
'/\s+((?:<\/' . $this->textLevelElementRegex . '>)?<\/(?!' . $this->textLevelElementRegex . ')\w+\b>)/s'
|
||||||
|
),
|
||||||
|
'$1',
|
||||||
|
$markup
|
||||||
|
);
|
||||||
|
|
||||||
|
return $markup;
|
||||||
|
}
|
||||||
|
}
|
@ -2,4 +2,8 @@
|
|||||||
|
|
||||||
class TestParsedown extends Parsedown
|
class TestParsedown extends Parsedown
|
||||||
{
|
{
|
||||||
|
public function getTextLevelElements()
|
||||||
|
{
|
||||||
|
return $this->textLevelElements;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user