Removed modules/contrib/media module to allow update to the core media module
[yaffs-website] / vendor / cebe / markdown / tests / BaseMarkdownTest.php
1 <?php
2 /**
3  * @copyright Copyright (c) 2014 Carsten Brandt
4  * @license https://github.com/cebe/markdown/blob/master/LICENSE
5  * @link https://github.com/cebe/markdown#readme
6  */
7
8 namespace cebe\markdown\tests;
9
10 use cebe\markdown\Parser;
11
12 /**
13  * Base class for all Test cases.
14  *
15  * @author Carsten Brandt <mail@cebe.cc>
16  */
17 abstract class BaseMarkdownTest extends \PHPUnit_Framework_TestCase
18 {
19         protected $outputFileExtension = '.html';
20
21         abstract public function getDataPaths();
22
23         /**
24          * @return Parser
25          */
26         abstract public function createMarkdown();
27
28         /**
29          * @dataProvider dataFiles
30          */
31         public function testParse($path, $file)
32         {
33                 list($markdown, $html) = $this->getTestData($path, $file);
34                 // Different OS line endings should not affect test
35                 $html = str_replace(["\r\n", "\n\r", "\r"], "\n", $html);
36
37                 $m = $this->createMarkdown();
38                 $this->assertEquals($html, $m->parse($markdown));
39         }
40
41         public function testUtf8()
42         {
43                 $this->assertSame("<p>абвгдеёжзийклмнопрстуфхцчшщъыьэюя</p>\n", $this->createMarkdown()->parse('абвгдеёжзийклмнопрстуфхцчшщъыьэюя'));
44                 $this->assertSame("<p>there is a charater, 配</p>\n", $this->createMarkdown()->parse('there is a charater, 配'));
45                 $this->assertSame("<p>Arabic Latter \"م (M)\"</p>\n", $this->createMarkdown()->parse('Arabic Latter "م (M)"'));
46                 $this->assertSame("<p>電腦</p>\n", $this->createMarkdown()->parse('電腦'));
47
48                 $this->assertSame('абвгдеёжзийклмнопрстуфхцчшщъыьэюя', $this->createMarkdown()->parseParagraph('абвгдеёжзийклмнопрстуфхцчшщъыьэюя'));
49                 $this->assertSame('there is a charater, 配', $this->createMarkdown()->parseParagraph('there is a charater, 配'));
50                 $this->assertSame('Arabic Latter "م (M)"', $this->createMarkdown()->parseParagraph('Arabic Latter "م (M)"'));
51                 $this->assertSame('電腦', $this->createMarkdown()->parseParagraph('電腦'));
52         }
53
54         public function testInvalidUtf8()
55         {
56                 $m = $this->createMarkdown();
57                 $this->assertEquals("<p><code>�</code></p>\n", $m->parse("`\x80`"));
58                 $this->assertEquals('<code>�</code>', $m->parseParagraph("`\x80`"));
59         }
60
61         public function pregData()
62         {
63                 // http://en.wikipedia.org/wiki/Newline#Representations
64                 return [
65                         ["a\r\nb", "a\nb"],
66                         ["a\n\rb", "a\nb"], // Acorn BBC and RISC OS spooled text output :)
67                         ["a\nb", "a\nb"],
68                         ["a\rb", "a\nb"],
69
70                         ["a\n\nb", "a\n\nb", "a</p>\n<p>b"],
71                         ["a\r\rb", "a\n\nb", "a</p>\n<p>b"],
72                         ["a\n\r\n\rb", "a\n\nb", "a</p>\n<p>b"], // Acorn BBC and RISC OS spooled text output :)
73                         ["a\r\n\r\nb", "a\n\nb", "a</p>\n<p>b"],
74                 ];
75         }
76
77         /**
78          * @dataProvider pregData
79          */
80         public function testPregReplaceR($input, $exptected, $pexpect = null)
81         {
82                 $this->assertSame($exptected, $this->createMarkdown()->parseParagraph($input));
83                 $this->assertSame($pexpect === null ? "<p>$exptected</p>\n" : "<p>$pexpect</p>\n", $this->createMarkdown()->parse($input));
84         }
85
86         public function getTestData($path, $file)
87         {
88                 return [
89                         file_get_contents($this->getDataPaths()[$path] . '/' . $file . '.md'),
90                         file_get_contents($this->getDataPaths()[$path] . '/' . $file . $this->outputFileExtension),
91                 ];
92         }
93
94         public function dataFiles()
95         {
96                 $files = [];
97                 foreach ($this->getDataPaths() as $name => $src) {
98                         $handle = opendir($src);
99                         if ($handle === false) {
100                                 throw new \Exception('Unable to open directory: ' . $src);
101                         }
102                         while (($file = readdir($handle)) !== false) {
103                                 if ($file === '.' || $file === '..') {
104                                         continue;
105                                 }
106
107                                 if (substr($file, -3, 3) === '.md' && file_exists($src . '/' . substr($file, 0, -3) .  $this->outputFileExtension)) {
108                                         $files[] = [$name, substr($file, 0, -3)];
109                                 }
110                         }
111                         closedir($handle);
112                 }
113                 return $files;
114         }
115 }