From 3dabbbd5325c9fad9582cd44b1da68dece78eaa0 Mon Sep 17 00:00:00 2001 From: Urban Müller Date: Thu, 21 Jun 2018 16:42:32 +0200 Subject: no reason for different naming --- test/it_html.t | 291 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100755 test/it_html.t (limited to 'test/it_html.t') diff --git a/test/it_html.t b/test/it_html.t new file mode 100755 index 0000000..5e19b74 --- /dev/null +++ b/test/it_html.t @@ -0,0 +1,291 @@ +#!/www/server/bin/php -qC + "html5", 'prettyprint' => false, 'error_on_redefine' => false)); + +is( + a(array('href' => "&foo", 'true' => true, 'false' => false, 'null' => null, 'empty' => ""), "bar"), + 'bar', + "tag with attributes" +); + +is( + div(), + "
\n", + "empty div tag" +); + +is( + h1(), + "

\n", + "empty h1 tag" +); + +is( + input(), + "", + "no closing tag for void elements" +); + +is( + img(array('src' => "foo.png", 'alt' => "ALT")), + 'ALT', + "img tag with attributes" +); + +is( + tag('link'), + "\n", + "empty link tag" +); + +is( + tag('link', "foo"), + "foo\n", + "link tag with data" +); + +is( + it::replace(array('\n+\s*' => ""), select(array('name' => "gna", 'multiple' => true), '1:foo,2:bar', '1,2')), + '', + "select tag with multiselect" +); + +is( + it::replace(array('\n+\s*' => ""), select(array('name' => "gna"), array("1" => "foo", "2" => 'bar', '1,2' => "qux"), '1,2')), + '', + "select tag without multiselect" +); + +is( + div(array('arg' => "val: \x03, \x0e, \x0f, \x0c, \xc2\x80, \xc2\x9f, \t, \n, \r", "\x02, \x0e, \x0f, \x0c, \xc2\x80, \xc2\x9f, \t, \n, \r")), + "
\x02, \x0e, \x0f, \x0c, \xc2\x80, \xc2\x9f, \t, \n, \r
\n", + "blank unprintable characters and illegal utf8 in attributes but not in normal text" +); + +is( + div(array("arg\x03\x0e\x0f\xc2\x80\xc2\x9fendarg" => "value", "content")), + "
content
\n", + "don't blank unprintable characters and illegal utf8 in attribute names" +); + +is( + div(array('arg' => "abc äüö éá© œàè îôÇ xyz", "abc äüö éá© œàè îôÇ xyz")), + "
abc äüö éá© œàè îôÇ xyz
\n", + "leave legal utf8 intact" +); + +unset($GLOBALS['debug_utf8check']); +is( + div(array('arg' => "value \xc2", "content")), + "
content
\n", + "handle single \\xc2 at end of attribute value" +); + +is( + div(array("arg\x00end" => "value \x00 end", "content \x00 content end")), + "
content \x00 content end
\n", + "handle 0-bytes" +); + +is( + div(array('arg' => "& \" < > \n '", "& \" < > \n '")), + "
& \" < > \n '
\n", + "use html entities in attributes but not in normal text" +); + +is( + html(), + "\n\n\n", + "html5 doctype" +); + +# Test different html types +foreach (array('html5' => "
", 'html' => "
", 'xhtml' => "
", 'xhtml-mobile' => "
") as $type => $value) +{ + unset($GLOBALS['it_html']); + new it_html(array('htmltype' => $type, 'error_on_redefine' => false)); + is (trim(br(array('flag' => true))), $value, "Check empty tag and attribute for $type"); +} + +# XHTML generation +unset($GLOBALS['it_html']); +new it_html(array('htmltype' => "xhtml", 'tags' => "script", 'error_on_redefine' => false)); + +is( + script(), + "\n", + "script may not be shortened (see xhtml spec)" +); + +is( + h1(), + "

\n", + "empty h1 tag in xhtml context" +); + +is( + html(), + "\n\n\n", + "xhtml doctype" +); + + +# XML generation +unset($GLOBALS['it_html']); +new it_html(array('htmltype' => "xml", 'name' => 'it_html', 'tags' => "xmltest", 'error_on_redefine' => false)); + +is( + xmltest(), + "\n", + "empty xmltest tag" +); + +is( + xmltest("foo"), + "foo\n", + "non-empty xmltest tag" +); + +is( + xmltest(array('href' => "&foo", 'true' => true, 'false' => false, 'null' => null, 'empty' => "")), + '' . "\n", + "xmltest tag with attributes" +); + +is( + h1(), + "

\n", + "empty h1 tag in xml context" +); + +is( + input(), + "", + "empty input tag in xml context" +); + +# Inheriting and extending it_html +class myhtml extends it_html +{ + +function myhtml($p = array()) +{ + parent::__construct($p + ['moretags' => 'overriddentag,defaulttag', 'nonewlinetags' => 'a,b,defaulttag,em,img,input,overriddentag,span,div']); +} + +function myimg($args) +{ + array_unshift($args, array('alt' => "ALT", 'bar' => "BAR")); + return parent::img(array_filter(it_parse_args($args))); +} + +function overriddentag($args) +{ + return parent::overriddentag($args); +} + +} + +unset($GLOBALS['it_html']); +new myhtml(array('htmltype' => "html", 'error_on_redefine' => false)); + +is( + myimg(['src' => "foo.gif", 'alt' => "foo"]), + 'foo', + "it_html inheritance" +); + +is( + div(array('attr' => 'value'), 'content'), + '
content
', + "different nonewlinetags respected" +); + +is( + overriddentag("one ", ['src' => "evil", 'alt' => ""], "two ", ['foo' => "bar"], "three"), + 'one two three', + "moretags override" +); + +is( + defaulttag("one ", ['src' => "evil", 'alt' => ""], "two ", ['foo' => "bar"], "three"), + 'one two three', + "moretags default" +); + +is( + it_html::sanitize(" \r \n " . '

swisspics posted < < ä & yesterday a photo tag missmatch:



+ +

Wolken

+'), + ' swisspics posted < < ä & yesterday a photo tag missmatch:

', + 'it_html::sanitize tag soup' +); + +is( + it_html::sanitize('q←x'), + "q←x", + 'it_html::sanitize preserve numeric entities' +); + +is( + it_html::sanitize('qüx'), + "q\xc3\xbcx", + 'it_html::sanitize with utf-8' +); + +is( + it_html::sanitize('a
b
'), + "a
b
", + 'it_html::sanitize with b and br (tag prefix of other tag bug)' +); + +is( + it_html::sanitize('
'), + '', + 'empty tags removal' +); + +foreach (json_decode(file_get_contents(dirname($argv[0]) . '/U_tests.json'), true) as $test) { + is(U(...$test['args']), $test['exp'], $test['name']); +} + +is(it_html::entity_decode("ä"), "ä"); +is(it_html::entity_decode("J"), "J"); +is(it_html::entity_decode("J"), "J"); +is(it_html::entity_decode("A"), "A"); + +# tests for itools extension +is(table(null), "
\n", "table() null argument"); +list($data, $attr) = it_parse_args(array(null)); +ok($data === "", "it_parse_args compatiblity: treat null like empty string"); + +# +# check transliterations in iso-8859-1 +# + +it_html::configure(array('charset' => "iso-8859-1")); +ini_set('default_charset', "iso-8859-1"); + +is( + it_html::sanitize('qüx'), + "q\xfcx", + 'it_html::sanitize with latin1' +); + +is( + it_html::sanitize('q←x'), + "q←x", + 'it_html::sanitize preserve non-decodable numeric entities' +); +is(it_html::entity_decode("’"), "'", "it_html::entity_decode numeric decimal entity"); +is(it_html::entity_decode("࿿"), " ", "it_html::entity_decode invalid numeric hex entity"); +is(it_html::entity_decode("ϧ"), " ", "it_html::entity_decode invalid numeric decimal entity"); +is(it_html::entity_decode("‹"), " ", "it_html::entity_decode entity von 0x80-0x9f"); -- cgit v1.2.3