%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/tests/phpunit/includes/tidy/ |
| Current File : //www/varak.net/wiki.varak.net/tests/phpunit/includes/tidy/RemexDriverTest.php |
<?php
class RemexDriverTest extends MediaWikiTestCase {
static private $remexTidyTestData = [
// Tests from Html5Depurate
[
'Empty string',
"",
""
],
[
'Simple p-wrap',
"x",
"<p>x</p>"
],
[
'No p-wrap of blank node',
" ",
" "
],
[
'p-wrap terminated by div',
"x<div></div>",
"<p>x</p><div></div>"
],
[
'p-wrap not terminated by span',
"x<span></span>",
"<p>x<span></span></p>"
],
[
'An element is non-blank and so gets p-wrapped',
"<span></span>",
"<p><span></span></p>"
],
[
'The blank flag is set after a block-level element',
"<div></div> ",
"<div></div> "
],
[
'Blank detection between two block-level elements',
"<div></div> <div></div>",
"<div></div> <div></div>"
],
[
'But p-wrapping of non-blank content works after an element',
"<div></div>x",
"<div></div><p>x</p>"
],
[
'p-wrapping between two block-level elements',
"<div></div>x<div></div>",
"<div></div><p>x</p><div></div>"
],
[
'p-wrap inside blockquote',
"<blockquote>x</blockquote>",
"<blockquote><p>x</p></blockquote>"
],
[
'A comment is blank for p-wrapping purposes',
"<!-- x -->",
"<!-- x -->"
],
[
'A comment is blank even when a p-wrap was opened by a text node',
" <!-- x -->",
" <!-- x -->"
],
[
'A comment does not open a p-wrap',
"<!-- x -->x",
"<!-- x --><p>x</p>"
],
[
'A comment does not close a p-wrap',
"x<!-- x -->",
"<p>x<!-- x --></p>"
],
[
'Empty li',
"<ul><li></li></ul>",
"<ul><li class=\"mw-empty-elt\"></li></ul>"
],
[
'li with element',
"<ul><li><span></span></li></ul>",
"<ul><li><span></span></li></ul>"
],
[
'li with text',
"<ul><li>x</li></ul>",
"<ul><li>x</li></ul>"
],
[
'Empty tr',
"<table><tbody><tr></tr></tbody></table>",
"<table><tbody><tr class=\"mw-empty-elt\"></tr></tbody></table>"
],
[
'Empty p',
"<p>\n</p>",
"<p class=\"mw-empty-elt\">\n</p>"
],
[
'No p-wrapping of an inline element which contains a block element (T150317)',
"<small><div>x</div></small>",
"<small><div>x</div></small>"
],
[
'p-wrapping of an inline element which contains an inline element',
"<small><b>x</b></small>",
"<p><small><b>x</b></small></p>"
],
[
'p-wrapping is enabled in a blockquote in an inline element',
"<small><blockquote>x</blockquote></small>",
"<small><blockquote><p>x</p></blockquote></small>"
],
[
'All bare text should be p-wrapped even when surrounded by block tags',
"<small><blockquote>x</blockquote></small>y<div></div>z",
"<small><blockquote><p>x</p></blockquote></small><p>y</p><div></div><p>z</p>"
],
[
'Split tag stack 1',
"<small>x<div>y</div>z</small>",
"<p><small>x</small></p><small><div>y</div></small><p><small>z</small></p>"
],
[
'Split tag stack 2',
"<small><div>y</div>z</small>",
"<small><div>y</div></small><p><small>z</small></p>"
],
[
'Split tag stack 3',
"<small>x<div>y</div></small>",
"<p><small>x</small></p><small><div>y</div></small>"
],
[
'Split tag stack 4 (modified to use splittable tag)',
"a<code>b<i>c<div>d</div></i>e</code>",
"<p>a<code>b<i>c</i></code></p><code><i><div>d</div></i></code><p><code>e</code></p>"
],
[
"Split tag stack regression check 1",
"x<span><div>y</div></span>",
"<p>x</p><span><div>y</div></span>"
],
[
"Split tag stack regression check 2 (modified to use splittable tag)",
"a<code><i><div>d</div></i>e</code>",
"<p>a</p><code><i><div>d</div></i></code><p><code>e</code></p>"
],
// Simple tests from pwrap.js
[
'Simple pwrap test 1',
'a',
'<p>a</p>'
],
[
'<span> is not a splittable tag, but gets p-wrapped in simple wrapping scenarios',
'<span>a</span>',
'<p><span>a</span></p>'
],
[
'Simple pwrap test 3',
'x <div>a</div> <div>b</div> y',
'<p>x </p><div>a</div> <div>b</div><p> y</p>'
],
[
'Simple pwrap test 4',
'x<!--c--> <div>a</div> <div>b</div> <!--c-->y',
'<p>x<!--c--> </p><div>a</div> <div>b</div> <!--c--><p>y</p>'
],
// Complex tests from pwrap.js
[
'Complex pwrap test 1',
'<i>x<div>a</div>y</i>',
'<p><i>x</i></p><i><div>a</div></i><p><i>y</i></p>'
],
[
'Complex pwrap test 2',
'a<small>b</small><i>c<div>d</div>e</i>f',
'<p>a<small>b</small><i>c</i></p><i><div>d</div></i><p><i>e</i>f</p>'
],
[
'Complex pwrap test 3',
'a<small>b<i>c<div>d</div></i>e</small>',
'<p>a<small>b<i>c</i></small></p><small><i><div>d</div></i></small><p><small>e</small></p>'
],
[
'Complex pwrap test 4',
'x<small><div>y</div></small>',
'<p>x</p><small><div>y</div></small>'
],
[
'Complex pwrap test 5',
'a<small><i><div>d</div></i>e</small>',
'<p>a</p><small><i><div>d</div></i></small><p><small>e</small></p>'
],
// phpcs:disable Generic.Files.LineLength
[
'Complex pwrap test 6',
'<i>a<div>b</div>c<b>d<div>e</div>f</b>g</i>',
// PHP 5 does not allow concatenation in initialisation of a class static variable
'<p><i>a</i></p><i><div>b</div></i><p><i>c<b>d</b></i></p><i><b><div>e</div></b></i><p><i><b>f</b>g</i></p>'
],
// phpcs:enable
/* FIXME the second <b> causes a stack split which clones the <i> even
* though no <p> is actually generated
[
'Complex pwrap test 7',
'<i><b><font><div>x</div></font></b><div>y</div><b><font><div>z</div></font></b></i>',
'<i><b><font><div>x</div></font></b><div>y</div><b><font><div>z</div></font></b></i>'
],
*/
// New local tests
[
'Blank text node after block end',
'<small>x<div>y</div> <b>z</b></small>',
'<p><small>x</small></p><small><div>y</div></small><p><small> <b>z</b></small></p>'
],
[
'Text node fostering (FIXME: wrap missing)',
'<table>x</table>',
'x<table></table>'
],
[
'Blockquote fostering',
'<table><blockquote>x</blockquote></table>',
'<blockquote><p>x</p></blockquote><table></table>'
],
[
'Block element fostering',
'<table><div>x',
'<div>x</div><table></table>'
],
[
'Formatting element fostering (FIXME: wrap missing)',
'<table><b>x',
'<b>x</b><table></table>'
],
[
'AAA clone of p-wrapped element (FIXME: empty b)',
'<b>x<p>y</b>z</p>',
'<p><b>x</b></p><b></b><p><b>y</b>z</p>',
],
[
'AAA with fostering (FIXME: wrap missing)',
'<table><b>1<p>2</b>3</p>',
'<b>1</b><p><b>2</b>3</p><table></table>'
],
[
'AAA causes reparent of p-wrapped text node (T178632)',
'<i><blockquote>x</i></blockquote>',
'<i></i><blockquote><p><i>x</i></p></blockquote>',
],
[
'p-wrap ended by reparenting (T200827)',
'<i><blockquote><p></i>',
'<i></i><blockquote><p><i></i></p><p><i></i></p></blockquote>',
],
];
public function provider() {
return self::$remexTidyTestData;
}
/**
* @dataProvider provider
* @covers MediaWiki\Tidy\RemexCompatFormatter
* @covers MediaWiki\Tidy\RemexCompatMunger
* @covers MediaWiki\Tidy\RemexDriver
* @covers MediaWiki\Tidy\RemexMungerData
*/
public function testTidy( $desc, $input, $expected ) {
$r = new MediaWiki\Tidy\RemexDriver( [] );
$result = $r->tidy( $input );
$this->assertEquals( $expected, $result, $desc );
}
public function html5libProvider() {
$files = json_decode( file_get_contents( __DIR__ . '/html5lib-tests.json' ), true );
$tests = [];
foreach ( $files as $file => $fileTests ) {
foreach ( $fileTests as $i => $test ) {
$tests[] = [ "$file:$i", $test['data'] ];
}
}
return $tests;
}
/**
* This is a quick and dirty test to make sure none of the html5lib tests
* generate exceptions. We don't really know what the expected output is.
*
* @dataProvider html5libProvider
* @coversNothing
*/
public function testHtml5Lib( $desc, $input ) {
$r = new MediaWiki\Tidy\RemexDriver( [] );
$result = $r->tidy( $input );
$this->assertTrue( true, $desc );
}
}