1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* |
4
|
|
|
* @filesource HTML5ModuleTestCritical.php |
5
|
|
|
* @created 11.02.2016 |
6
|
|
|
* @package chillerlan\BBCodeTest\normal |
7
|
|
|
* @author Smiley <[email protected]> |
8
|
|
|
* @copyright 2015 Smiley |
9
|
|
|
* @license MIT |
10
|
|
|
*/ |
11
|
|
|
|
12
|
|
|
namespace chillerlan\BBCodeTest\normal\Modules; |
13
|
|
|
|
14
|
|
|
use chillerlan\bbcode\BBTemp; |
15
|
|
|
use chillerlan\bbcode\Modules\Html5\Simpletext; |
16
|
|
|
use chillerlan\bbcode\Modules\Html5\Singletags; |
17
|
|
|
use chillerlan\bbcode\Parser; |
18
|
|
|
use chillerlan\bbcode\ParserOptions; |
19
|
|
|
use Dotenv\Dotenv; |
20
|
|
|
|
21
|
|
|
/** |
22
|
|
|
* Class HTML5ModuleTestCritical |
23
|
|
|
*/ |
24
|
|
|
class HTML5ModuleTest extends \PHPUnit_Framework_TestCase{ |
25
|
|
|
|
26
|
|
|
/** |
27
|
|
|
* @todo TRAVIS REMINDER! |
28
|
|
|
*/ |
29
|
|
|
const DOTENV = '.env_example'; |
30
|
|
|
|
31
|
|
|
/** |
32
|
|
|
* @var \chillerlan\bbcode\Parser |
33
|
|
|
*/ |
34
|
|
|
protected $parser; |
35
|
|
|
|
36
|
|
|
protected function setUp(){ |
37
|
|
|
(new Dotenv(__DIR__.'/../../', self::DOTENV))->load(); // nasty |
38
|
|
|
|
39
|
|
|
$options = new ParserOptions; |
40
|
|
|
$options->google_api_key = getenv('GOOGLE_API'); |
41
|
|
|
$options->vimeo_access_token = getenv('VIMEO_TOKEN'); |
42
|
|
|
$options->ca_info = __DIR__.'/../../test-cacert.pem'; |
43
|
|
|
$options->allow_all = true; |
44
|
|
|
$this->parser = new Parser($options); |
45
|
|
|
} |
46
|
|
|
|
47
|
|
|
public function testEmptyTags(){ |
48
|
|
|
$singletags = $this->parser->getSingle(); |
49
|
|
|
$exceptions = ['td','th']; |
50
|
|
|
|
51
|
|
|
foreach(array_keys($this->parser->getTagmap()) as $tag){ |
52
|
|
|
if(!in_array($tag, $singletags) && !in_array($tag, $exceptions)){ |
53
|
|
|
$parsed = $this->parser->parse('['.$tag.'][/'.$tag.']'); |
54
|
|
|
$this->assertEquals('', $parsed); |
55
|
|
|
} |
56
|
|
|
} |
57
|
|
|
} |
58
|
|
|
|
59
|
|
|
public function containerDataProvider(){ |
60
|
|
|
return [ |
61
|
|
|
['[div]a div[/div]', '<div class="bb-container left">a div</div>'], |
62
|
|
|
['[div align=right]an aligned div[/div]', '<div class="bb-container right">an aligned div</div>'], |
63
|
|
|
['[p]a paragraph[/p]', '<p class="bb-container left">a paragraph</p>'], |
64
|
|
|
['[p align=right]an aligned paragraph[/p]', '<p class="bb-container right">an aligned paragraph</p>'], |
65
|
|
|
['[left]left[/left]', '<p class="bb-container left">left</p>'], |
66
|
|
|
['[left align=right]WAT[/left]', '<p class="bb-container left">WAT</p>'], |
67
|
|
|
['[right]right[/right]', '<p class="bb-container right">right</p>'], |
68
|
|
|
['[center]center[/center]', '<p class="bb-container center">center</p>'], |
69
|
|
|
]; |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
/** |
73
|
|
|
* @dataProvider containerDataProvider |
74
|
|
|
*/ |
75
|
|
|
public function testContainerModule($bbcode, $expected){ |
76
|
|
|
$parsed = $this->parser->parse($bbcode); |
77
|
|
|
$this->assertEquals($expected, $parsed); |
78
|
|
|
} |
79
|
|
|
|
80
|
|
|
public function expanderDataProvider(){ |
81
|
|
|
return [ |
82
|
|
|
['[expander]expander[/expander]', '<div data-id="abcdef12" title="Expander" class="expander-header expander">Expander</div><div id="abcdef12" class="expander-body" style="display:block">expander</div>'], |
83
|
|
|
['[expander hide=1]expander[/expander]', '<div data-id="abcdef12" title="Expander" class="expander-header expander">Expander</div><div id="abcdef12" class="expander-body" style="display:none">expander</div>'], |
84
|
|
|
['[quote]quote[/quote]', '<div data-id="abcdef12" title="Quote" class="quote-header expander">Quote</div><div id="abcdef12" class="quote-body" style="display:block">quote</div>'], |
85
|
|
|
['[quote name=\'some person\' url=http://www.example.com hide=1]quote[/quote]', '<div data-id="abcdef12" title="Quote: some person, source: http://www.example.com" class="quote-header expander">Quote: some person <small>[<a href="http://www.example.com">source</a>]<small></div><div id="abcdef12" class="quote-body" style="display:none">quote</div>'], |
86
|
|
|
['[spoiler]spoiler[/spoiler]', '<div data-id="abcdef12" title="Spoiler" class="spoiler-header expander">Spoiler</div><div id="abcdef12" class="spoiler-body" style="display:none">spoiler</div>'], |
87
|
|
|
['[spoiler hide=0]spoiler[/spoiler]', '<div data-id="abcdef12" title="Spoiler" class="spoiler-header expander">Spoiler</div><div id="abcdef12" class="spoiler-body" style="display:none">spoiler</div>'], |
88
|
|
|
['[trigger]trigger warning[/trigger]', '<div data-id="abcdef12" title="Trigger warning! The following content may be harmful to sensitive audience!" class="trigger-header expander">Trigger warning! The following content may be harmful to sensitive audience!</div><div id="abcdef12" class="trigger-body" style="display:none">trigger warning</div>'], |
89
|
|
|
['[trigger hide=0]trigger warning[/trigger]', '<div data-id="abcdef12" title="Trigger warning! The following content may be harmful to sensitive audience!" class="trigger-header expander">Trigger warning! The following content may be harmful to sensitive audience!</div><div id="abcdef12" class="trigger-body" style="display:none">trigger warning</div>'], |
90
|
|
|
]; |
91
|
|
|
} |
92
|
|
|
|
93
|
|
|
/** |
94
|
|
|
* @dataProvider expanderDataProvider |
95
|
|
|
*/ |
96
|
|
|
public function testExpanderModule($bbcode, $expected){ |
97
|
|
|
$parsed = $this->parser->parse($bbcode); |
98
|
|
|
$parsed = preg_replace('/\"([a-f\d]{8})\"/i', '"abcdef12"', $parsed); |
99
|
|
|
$this->assertEquals($expected, $parsed); |
100
|
|
|
} |
101
|
|
|
|
102
|
|
|
public function linkDataProvider(){ |
103
|
|
|
return [ |
104
|
|
|
['[url]https://github.com/chillerlan/bbcode[/url]', '<a href="https://github.com/chillerlan/bbcode" target="_blank" class="blank">https://github.com/chillerlan/bbcode</a>'], |
105
|
|
|
['[url=https://github.com/chillerlan/bbcode]chillerlan/bbcode[/url]', '<a href="https://github.com/chillerlan/bbcode" target="_blank" class="blank">chillerlan/bbcode</a>'], |
106
|
|
|
['[url=https://github.com/chillerlan/bbcode title=\'some stuff\' class=some-css-class]chillerlan/bbcode[/url]', '<a href="https://github.com/chillerlan/bbcode" target="_blank" title="some stuff" class="some-css-class blank">chillerlan/bbcode</a>'], |
107
|
|
|
]; |
108
|
|
|
} |
109
|
|
|
|
110
|
|
|
/** |
111
|
|
|
* @dataProvider linkDataProvider |
112
|
|
|
*/ |
113
|
|
|
public function testLinkModule($bbcode, $expected){ |
114
|
|
|
$parsed = $this->parser->parse($bbcode); |
115
|
|
|
$this->assertEquals($expected, $parsed); |
116
|
|
|
} |
117
|
|
|
|
118
|
|
|
public function testListModule(){ |
119
|
|
|
$list_inner_bbcode = '[*]blah[*]blubb[*]foo[*]bar'; |
120
|
|
|
$list_inner_html = '<li>blah</li><li>blubb</li><li>foo</li><li>bar</li>'; |
121
|
|
|
|
122
|
|
|
foreach(['0' => 'decimal-leading-zero', '1' => 'decimal', 'a' => 'lower-alpha', |
123
|
|
|
'A' => 'upper-alpha', 'i' => 'lower-roman', 'I' => 'upper-roman'] as $type => $css){ |
124
|
|
|
// type only |
125
|
|
|
$parsed = $this->parser->parse('[list type='.$type.']'.$list_inner_bbcode.'[/list]'); |
126
|
|
|
$this->assertEquals('<ol class="bb-list '.$css.'">'.$list_inner_html.'</ol>', $parsed); |
127
|
|
|
// reversed |
128
|
|
|
$parsed = $this->parser->parse('[list type='.$type.' reversed=1]'.$list_inner_bbcode.'[/list]'); |
129
|
|
|
$this->assertEquals('<ol reversed="true" class="bb-list '.$css.'">'.$list_inner_html.'</ol>', $parsed); |
130
|
|
|
// start |
131
|
|
|
$parsed = $this->parser->parse('[list=42 type='.$type.']'.$list_inner_bbcode.'[/list]'); |
132
|
|
|
$this->assertEquals('<ol start="42" class="bb-list '.$css.'">'.$list_inner_html.'</ol>', $parsed); |
133
|
|
|
// all |
134
|
|
|
$parsed = $this->parser->parse('[list=42 type='.$type.' reversed=1 class=foobar title=WAT]'.$list_inner_bbcode.'[/list]'); |
135
|
|
|
$this->assertEquals('<ol start="42" reversed="true" title="WAT" class="foobar bb-list '.$css.'">'.$list_inner_html.'</ol>', $parsed); |
136
|
|
|
} |
137
|
|
|
|
138
|
|
|
foreach(['c' => 'circle', 'd' => 'disc', 's' => 'square'] as $type => $css){ |
139
|
|
|
$expected = '<ul class="bb-list '.$css.'">'.$list_inner_html.'</ul>'; |
140
|
|
|
// type only |
141
|
|
|
$parsed = $this->parser->parse('[list type='.$type.']'.$list_inner_bbcode.'[/list]'); |
142
|
|
|
$this->assertEquals($expected, $parsed); |
143
|
|
|
|
144
|
|
|
// should not happen... |
145
|
|
|
$parsed = $this->parser->parse('[list=42 reversed=1 type='.$type.']'.$list_inner_bbcode.'[/list]'); |
146
|
|
|
$this->assertEquals($expected, $parsed); |
147
|
|
|
} |
148
|
|
|
} |
149
|
|
|
|
150
|
|
|
public function testSimpletextModule(){ |
151
|
|
|
foreach(array_keys($this->parser->getTagmap(), Simpletext::class) as $tag){ |
152
|
|
|
$parsed = $this->parser->parse('['.$tag.' class=foobar]WAT[/'.$tag.']'); |
153
|
|
|
$this->assertEquals('<'.$tag.' class="foobar">WAT</'.$tag.'>', $parsed); |
154
|
|
|
} |
155
|
|
|
} |
156
|
|
|
|
157
|
|
|
public function testSingletagModule(){ |
158
|
|
|
foreach(array_keys($this->parser->getTagmap(), Singletags::class) as $tag){ |
159
|
|
|
$parsed = $this->parser->parse('['.$tag.']'); |
160
|
|
|
$expected = $tag === 'clear' ? '<br class="bb-clear both" />' : '<'.$tag.' />'; |
161
|
|
|
$this->assertEquals($expected, $parsed); |
162
|
|
|
} |
163
|
|
|
} |
164
|
|
|
|
165
|
|
|
public function styledTextDataProvider(){ |
166
|
|
|
return [ |
167
|
|
|
['[color=#424242]color[/color]', '<span class="bb-text color" style="color:#424242">color</span>'], |
168
|
|
|
['[font=Helvetica]font[/font]', '<span class="bb-text font" style="font-family:Helvetica">font</span>'], |
169
|
|
|
['[size=42px]size[/size]', '<span class="bb-text size" style="font-size:42px">size</span>'], |
170
|
|
|
['[tt]typewriter[/tt]', '<span class="bb-text typewriter">typewriter</span>'], |
171
|
|
|
['[i]italic[/i]', '<span class="bb-text italic">italic</span>'], |
172
|
|
|
['[b]bold[/b]', '<span class="bb-text bold">bold</span>'], |
173
|
|
|
['[s]strikethrough[/s]', '<span class="bb-text linethrough">strikethrough</span>'], |
174
|
|
|
['[u]underline[/u]', '<span class="bb-text underline">underline</span>'], |
175
|
|
|
]; |
176
|
|
|
} |
177
|
|
|
|
178
|
|
|
/** |
179
|
|
|
* @dataProvider styledTextDataProvider |
180
|
|
|
*/ |
181
|
|
|
public function testStyledTextModule($bbcode, $expected){ |
182
|
|
|
$parsed = $this->parser->parse($bbcode); |
183
|
|
|
$this->assertEquals($expected, $parsed); |
184
|
|
|
} |
185
|
|
|
|
186
|
|
|
public function videoURLDataProvider(){ |
187
|
|
|
return [ |
188
|
|
|
['https://vimeo.com/136964218', '<iframe src="https://player.vimeo.com/video/136964218" allowfullscreen></iframe>'], |
189
|
|
|
['https://www.youtube.com/watch?v=6r1-HTiwGiY', '<iframe src="https://www.youtube.com/embed/6r1-HTiwGiY" allowfullscreen></iframe>'], |
190
|
|
|
['http://youtu.be/6r1-HTiwGiY', '<iframe src="https://www.youtube.com/embed/6r1-HTiwGiY" allowfullscreen></iframe>'], |
191
|
|
|
['http://www.moddb.com/media/embed/72159', '<iframe src="http://www.moddb.com/media/iframe/72159" allowfullscreen></iframe>'], |
192
|
|
|
['http://dai.ly/x3sjscz', '<iframe src="http://www.dailymotion.com/embed/video/x3sjscz" allowfullscreen></iframe>'], |
193
|
|
|
['http://www.dailymotion.com/video/x3sjscz_the-bmw-m2-is-here-but-does-it-live-up-to-its-legendary-badge-let-s-try-it-out_tech', '<iframe src="http://www.dailymotion.com/embed/video/x3sjscz" allowfullscreen></iframe>'], |
194
|
|
|
]; |
195
|
|
|
} |
196
|
|
|
|
197
|
|
|
/** |
198
|
|
|
* @dataProvider videoURLDataProvider |
199
|
|
|
*/ |
200
|
|
|
/* public function testVideoModuleURLMatch($url, $expected){ |
201
|
|
|
// this test will fail on travis due to missing credentials |
202
|
|
|
$parsed = $this->parser->parse('[video]'.$url.'[/video]'); |
203
|
|
|
$this->assertEquals('<div class="bb-video">'.$expected.'</div>', $parsed); |
204
|
|
|
}*/ |
205
|
|
|
|
206
|
|
|
public function videoBBCodeDataProvider(){ |
207
|
|
|
return [ |
208
|
|
|
['[video]http://youtu.be/6r1-HTiwGiY[/video]', '<div class="bb-video"><iframe src="https://www.youtube.com/embed/6r1-HTiwGiY" allowfullscreen></iframe></div>'], |
209
|
|
|
['[youtube]http://youtu.be/6r1-HTiwGiY[/youtube]', '<div class="bb-video"><iframe src="https://www.youtube.com/embed/6r1-HTiwGiY" allowfullscreen></iframe></div>'], |
210
|
|
|
['[youtube]6r1-HTiwGiY[/youtube]', '<div class="bb-video"><iframe src="https://www.youtube.com/embed/6r1-HTiwGiY" allowfullscreen></iframe></div>'], |
211
|
|
|
['[youtube flash=1]6r1-HTiwGiY[/youtube]', '<div class="bb-video"><object type="application/x-shockwave-flash" data="https://www.youtube.com/v/6r1-HTiwGiY"><param name="allowfullscreen" value="true"><param name="wmode" value="opaque" /><param name="movie" value="https://www.youtube.com/v/6r1-HTiwGiY" /></object></div>'], |
212
|
|
|
['[youtube wide=1]6r1-HTiwGiY[/youtube]', '<div class="bb-video wide"><iframe src="https://www.youtube.com/embed/6r1-HTiwGiY" allowfullscreen></iframe></div>'], |
213
|
|
|
['[youtube flash=1 wide=1]6r1-HTiwGiY[/youtube]', '<div class="bb-video wide"><object type="application/x-shockwave-flash" data="https://www.youtube.com/embed/6r1-HTiwGiY"><param name="allowfullscreen" value="true"><param name="wmode" value="opaque" /><param name="movie" value="https://www.youtube.com/embed/6r1-HTiwGiY" /></object></div>'], |
214
|
|
|
['[video]http://some.video.url/whatever[/video]', '<video src="http://some.video.url/whatever" class="bb-video" preload="auto" controls="true"></video>'], |
215
|
|
|
]; |
216
|
|
|
} |
217
|
|
|
|
218
|
|
|
/** |
219
|
|
|
* @dataProvider videoBBCodeDataProvider |
220
|
|
|
*/ |
221
|
|
|
/* public function testVideoModuleBBCode($bbcode, $expected){ |
222
|
|
|
// this test will fail on travis due to missing credentials |
223
|
|
|
$parsed = $this->parser->parse($bbcode); |
224
|
|
|
$this->assertEquals($expected, $parsed); |
225
|
|
|
|
226
|
|
|
}*/ |
227
|
|
|
|
228
|
|
|
public function tableDataProvider(){ |
229
|
|
|
return [ |
230
|
|
|
['[table width=300px class=mybbtyble][tr][td]foobar[/td][/tr][/table]', '<table class="mybbtyble bb-table" style="width:300px"><tr><td>foobar</td></tr></table>'], |
231
|
|
|
# ['[table][/table]', ''], |
232
|
|
|
]; |
233
|
|
|
} |
234
|
|
|
|
235
|
|
|
/** |
236
|
|
|
* @dataProvider tableDataProvider |
237
|
|
|
*/ |
238
|
|
|
public function testTableModule($bbcode, $expected){ |
239
|
|
|
$parsed = $this->parser->parse($bbcode); |
240
|
|
|
$this->assertEquals($expected, $parsed); |
241
|
|
|
} |
242
|
|
|
|
243
|
|
|
|
244
|
|
|
} |
245
|
|
|
|