1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
<?php
/*
* This file is part of the league/commonmark package.
*
* (c) Colin O'Dell <colinodell@gmail.com>
*
* Original code based on the CommonMark JS reference parser (http://bitly.com/commonmark-js)
* - (c) John MacFarlane
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace League\CommonMark\Tests\Functional\Extension\SmartPunct;
use League\CommonMark\CommonMarkConverter;
use League\CommonMark\Environment;
use League\CommonMark\Extension\SmartPunct\SmartPunctExtension;
use PHPUnit\Framework\TestCase;
/**
* Tests the parser against the CommonMark spec
*/
class SmartPunctFunctionalTest extends TestCase
{
/**
* @var CommonMarkConverter
*/
protected $converter;
protected function setUp(): void
{
$environment = Environment::createCommonMarkEnvironment();
$environment->addExtension(new SmartPunctExtension());
$this->converter = new CommonMarkConverter([], $environment);
}
/**
* @param string $markdown Markdown to parse
* @param string $html Expected result
* @param string $section Section of the spec
* @param int $number Example number
*
* @dataProvider dataProvider
*/
public function testExample($markdown, $html, $section, $number)
{
$actualResult = $this->converter->convertToHtml($markdown);
$failureMessage = sprintf('Unexpected result ("%s" section, example #%d)', $section, $number);
$failureMessage .= "\n=== markdown ===============\n" . $markdown;
$failureMessage .= "\n=== expected ===============\n" . $html;
$failureMessage .= "\n=== got ====================\n" . $actualResult;
$this->assertEquals($html, $actualResult, $failureMessage);
}
/**
* @return array
*/
public function dataProvider()
{
$this->markTestSkipped('Dependency not packaged (yet).');
$filename = __DIR__ . '/../../../../vendor/commonmark/commonmark.js/test/smart_punct.txt';
if (($data = file_get_contents($filename)) === false) {
$this->fail(sprintf('Failed to load spec from %s', $filename));
}
$matches = [];
// Normalize newlines for platform independence
$data = preg_replace('/\r\n?/', "\n", $data);
$data = preg_replace('/<!-- END TESTS -->.*$/', '', $data);
preg_match_all('/^`{32} example\n([\s\S]*?)^\.\n([\s\S]*?)^`{32}$|^#{1,6} *(.*)$/m', $data, $matches, PREG_SET_ORDER);
$examples = [];
$currentSection = '';
$exampleNumber = 0;
foreach ($matches as $match) {
if (isset($match[3])) {
$currentSection = $match[3];
} else {
$exampleNumber++;
$markdown = $match[1];
$markdown = str_replace('→', "\t", $markdown);
$examples[] = [
'markdown' => $markdown,
'html' => $match[2],
'section' => $currentSection,
'number' => $exampleNumber,
];
}
}
return $examples;
}
}
|