#!/www/server/bin/php -qC
"html5", 'prettyprint' => 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));
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"));
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", 'tags' => "xmltest"));
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"));
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");