dirs = $this->initDirs(); $this->Parsedown = $this->initParsedown(); parent::__construct($name, $data, $dataName); } private $dirs; protected $Parsedown; /** * @return array */ protected function initDirs() { $dirs []= \dirname(__FILE__).'/data/'; return $dirs; } /** * @return Parsedown */ protected function initParsedown() { $Parsedown = new TestParsedown(); return $Parsedown; } /** * @dataProvider data * @param $test * @param $dir */ public function test_($test, $dir) { $markdown = \file_get_contents($dir . $test . '.md'); $expectedMarkup = \file_get_contents($dir . $test . '.html'); $expectedMarkup = \str_replace("\r\n", "\n", $expectedMarkup); $expectedMarkup = \str_replace("\r", "\n", $expectedMarkup); $this->Parsedown->setSafeMode(\substr($test, 0, 3) === 'xss'); $this->Parsedown->setStrictMode(\substr($test, 0, 6) === 'strict'); $actualMarkup = $this->Parsedown->text($markdown); $this->assertEquals($expectedMarkup, $actualMarkup); } public function testRawHtml() { $markdown = "```php\nfoobar\n```"; $expectedMarkup = '
foobar
';
$expectedSafeMarkup = '<p>foobar</p>
';
$unsafeExtension = new SampleExtensions\UnsafeExtension;
$actualMarkup = $unsafeExtension->text($markdown);
$this->assertEquals($expectedMarkup, $actualMarkup);
$unsafeExtension->setSafeMode(true);
$actualSafeMarkup = $unsafeExtension->text($markdown);
$this->assertEquals($expectedSafeMarkup, $actualSafeMarkup);
}
public function testTrustDelegatedRawHtml()
{
$markdown = "```php\nfoobar\n```";
$expectedMarkup = 'foobar
';
$expectedSafeMarkup = $expectedMarkup;
$unsafeExtension = new SampleExtensions\TrustDelegatedExtension;
$actualMarkup = $unsafeExtension->text($markdown);
$this->assertEquals($expectedMarkup, $actualMarkup);
$unsafeExtension->setSafeMode(true);
$actualSafeMarkup = $unsafeExtension->text($markdown);
$this->assertEquals($expectedSafeMarkup, $actualSafeMarkup);
}
public function data()
{
$data = [];
foreach ($this->dirs as $dir) {
$Folder = new \DirectoryIterator($dir);
foreach ($Folder as $File) {
/** @var $File DirectoryIterator */
if (! $File->isFile()) {
continue;
}
$filename = $File->getFilename();
$extension = \pathinfo($filename, \PATHINFO_EXTENSION);
if ($extension !== 'md') {
continue;
}
$basename = $File->getBasename('.md');
if (\file_exists($dir . $basename . '.html')) {
$data []= [$basename, $dir];
}
}
}
return $data;
}
public function test_no_markup()
{
$markdownWithHtml = <<sparse:
<div> <div class="inner"> content </div> </div>
paragraph
<style type="text/css"> p { color: red; } </style>
comment
<!-- html comment -->
EXPECTED_HTML; $parsedownWithNoMarkup = new TestParsedown(); $parsedownWithNoMarkup->setMarkupEscaped(true); $this->assertEquals($expectedHtml, $parsedownWithNoMarkup->text($markdownWithHtml)); } public function testLateStaticBinding() { $parsedown = Parsedown::instance(); $this->assertInstanceOf('Erusev\Parsedown\Parsedown', $parsedown); // After instance is already called on Parsedown // subsequent calls with the same arguments return the same instance $sameParsedown = TestParsedown::instance(); $this->assertInstanceOf('Erusev\Parsedown\Parsedown', $sameParsedown); $this->assertSame($parsedown, $sameParsedown); $testParsedown = TestParsedown::instance('test late static binding'); $this->assertInstanceOf('Erusev\Parsedown\Parsedown', $testParsedown); $sameInstanceAgain = TestParsedown::instance('test late static binding'); $this->assertSame($testParsedown, $sameInstanceAgain); } }