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")),
+ ' ',
+ "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')),
+ 'foo bar ',
+ "select tag with multiselect"
+);
+
+is(
+ it::replace(array('\n+\s*' => ""), select(array('name' => "gna"), array("1" => "foo", "2" => 'bar', '1,2' => "qux"), '1,2')),
+ 'foo bar qux ',
+ "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"]),
+ ' ',
+ "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 :
+
+
+'),
+ ' 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