Add test/CommonMarkTestWeak.php

This commit is contained in:
Daniel Rudolf 2016-09-05 14:38:47 +02:00
parent 3a46a31e09
commit d33e736fa3
No known key found for this signature in database
GPG Key ID: A061F02CD8DE4538
3 changed files with 68 additions and 1 deletions

View File

@ -13,7 +13,9 @@ class CommonMarkTest extends PHPUnit_Framework_TestCase
protected function setUp()
{
$this->parsedown = new Parsedown();
require_once(__DIR__ . '/TestParsedown.php');
$this->parsedown = new TestParsedown();
$this->parsedown->setUrlsLinked(false);
}

View 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;
}
}

View File

@ -2,4 +2,8 @@
class TestParsedown extends Parsedown
{
public function getTextLevelElements()
{
return $this->textLevelElements;
}
}