Blame view

vendor/cebe/markdown/tests/BaseMarkdownTest.php 3.69 KB
abf1649b   andryeyev   Чистая установка ...
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  <?php
  /**
   * @copyright Copyright (c) 2014 Carsten Brandt
   * @license https://github.com/cebe/markdown/blob/master/LICENSE
   * @link https://github.com/cebe/markdown#readme
   */
  
  namespace cebe\markdown\tests;
  
  use cebe\markdown\Parser;
  
  /**
   * Base class for all Test cases.
   *
   * @author Carsten Brandt <mail@cebe.cc>
   */
  abstract class BaseMarkdownTest extends \PHPUnit_Framework_TestCase
  {
  	protected $outputFileExtension = '.html';
  
  	abstract public function getDataPaths();
  
  	/**
  	 * @return Parser
  	 */
  	abstract public function createMarkdown();
  
  	/**
  	 * @dataProvider dataFiles
  	 */
  	public function testParse($path, $file)
  	{
  		list($markdown, $html) = $this->getTestData($path, $file);
  		// Different OS line endings should not affect test
  		$html = str_replace(["\r\n", "\n\r", "\r"], "\n", $html);
  
  		$m = $this->createMarkdown();
  		$this->assertEquals($html, $m->parse($markdown));
  	}
  
  	public function testUtf8()
  	{
  		$this->assertSame("<p>абвгдеёжзийклмнопрстуфхцчшщъыьэюя</p>\n", $this->createMarkdown()->parse('абвгдеёжзийклмнопрстуфхцчшщъыьэюя'));
  		$this->assertSame("<p>there is a charater, 配</p>\n", $this->createMarkdown()->parse('there is a charater, 配'));
  		$this->assertSame("<p>Arabic Latter \"م (M)\"</p>\n", $this->createMarkdown()->parse('Arabic Latter "م (M)"'));
  		$this->assertSame("<p>電腦</p>\n", $this->createMarkdown()->parse('電腦'));
  
  		$this->assertSame('абвгдеёжзийклмнопрстуфхцчшщъыьэюя', $this->createMarkdown()->parseParagraph('абвгдеёжзийклмнопрстуфхцчшщъыьэюя'));
  		$this->assertSame('there is a charater, 配', $this->createMarkdown()->parseParagraph('there is a charater, 配'));
  		$this->assertSame('Arabic Latter "م (M)"', $this->createMarkdown()->parseParagraph('Arabic Latter "م (M)"'));
  		$this->assertSame('電腦', $this->createMarkdown()->parseParagraph('電腦'));
  	}
  
  	public function testInvalidUtf8()
  	{
  		$m = $this->createMarkdown();
  		$this->assertEquals("<p><code></code></p>\n", $m->parse("`\x80`"));
  		$this->assertEquals('<code></code>', $m->parseParagraph("`\x80`"));
  	}
  
  	public function pregData()
  	{
  		// http://en.wikipedia.org/wiki/Newline#Representations
  		return [
  			["a\r\nb", "a\nb"],
  			["a\n\rb", "a\nb"], // Acorn BBC and RISC OS spooled text output :)
  			["a\nb", "a\nb"],
  			["a\rb", "a\nb"],
  
  			["a\n\nb", "a\n\nb", "a</p>\n<p>b"],
  			["a\r\rb", "a\n\nb", "a</p>\n<p>b"],
  			["a\n\r\n\rb", "a\n\nb", "a</p>\n<p>b"], // Acorn BBC and RISC OS spooled text output :)
  			["a\r\n\r\nb", "a\n\nb", "a</p>\n<p>b"],
  		];
  	}
  
  	/**
  	 * @dataProvider pregData
  	 */
  	public function testPregReplaceR($input, $exptected, $pexpect = null)
  	{
  		$this->assertSame($exptected, $this->createMarkdown()->parseParagraph($input));
  		$this->assertSame($pexpect === null ? "<p>$exptected</p>\n" : "<p>$pexpect</p>\n", $this->createMarkdown()->parse($input));
  	}
  
  	public function getTestData($path, $file)
  	{
  		return [
  			file_get_contents($this->getDataPaths()[$path] . '/' . $file . '.md'),
  			file_get_contents($this->getDataPaths()[$path] . '/' . $file . $this->outputFileExtension),
  		];
  	}
  
  	public function dataFiles()
  	{
  		$files = [];
  		foreach ($this->getDataPaths() as $name => $src) {
  			$handle = opendir($src);
  			if ($handle === false) {
  				throw new \Exception('Unable to open directory: ' . $src);
  			}
  			while (($file = readdir($handle)) !== false) {
  				if ($file === '.' || $file === '..') {
  					continue;
  				}
  
  				if (substr($file, -3, 3) === '.md' && file_exists($src . '/' . substr($file, 0, -3) .  $this->outputFileExtension)) {
  					$files[] = [$name, substr($file, 0, -3)];
  				}
  			}
  			closedir($handle);
  		}
  		return $files;
  	}
  }