#!/www/server/bin/php -qC
"html"));
is(
a(array('href' => "&foo", 'true' => true, 'false' => false, 'null' => null, 'empty' => ""), "bar"),
'bar ',
"tag with attributes"
);
is(
div(),
"
\n",
"empty div tag"
);
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, \x09, \n", "\x02, \x0e, \x0f, \x0c, \xc2\x80, \xc2\x9f, \x09, \n")),
"\x02, \x0e, \x0f, \x0c, \xc2\x80, \xc2\x9f, \x09, \n
\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"
);
# 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");
}
# XML generation
unset($GLOBALS['it_html']);
new it_html(array('htmltype' => "xhtml", 'tags' => "xmltest"));
is(
xmltest(),
" \n",
"empty xmltest tag"
);
is(
xmltest("foo"),
"foo \n",
"empty xmltest tag"
);
is(
xmltest(array('href' => "&foo", 'true' => true, 'false' => false, 'null' => null, 'empty' => "")),
' ' . "\n",
"xmltest tag with attributes"
);
# Inheriting and extending it_html
class myhtml extends it_html
{
function myhtml($p = array())
{
parent::it_html($p + array('nonewlinetags' => 'a,b,em,img,input,span,div'));
}
function myimg($args)
{
array_unshift($args, array('alt' => "ALT", 'bar' => "BAR"));
return parent::img(array_filter(it_parse_args($args)));
}
}
unset($GLOBALS['it_html']);
new myhtml(array('htmltype' => "html"));
is(
myimg(array('src' => "foo.gif", 'alt' => "foo")),
' ',
"it_html inheritance"
);
is(
div(array('attr' => 'value'), 'content'),
'content
',
"different nonewlinetags respected"
);
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'
);
is(
U("/foo.html", array('bar' => array('gna' => 42, 'qux' => array('quux' => "", 'gnöp' => "fasel")))),
'/foo.html?bar[gna]=42&bar[qux][quux]=%3CZ%C3%BCrich%3E&bar[qux][gn%C3%B6p]=fasel',
'U() with nested arrays'
);
is(
U("/foo.html?bar=qux", array('bar' => "baz")),
'/foo.html?bar=baz',
'U() args override get params in base url'
);
is(
U("/foo.html?bar.qux=a.b", array('c.d' => "e.f", 'g h' => "i j")),
'/foo.html?bar.qux=a.b&c.d=e.f&g+h=i+j',
'U() dots and spaces in arg names are preserved'
);
is(
U("/foo.html?bar=qux#frag=frog", array('baz' => "gna")),
'/foo.html?bar=qux&baz=gna#frag=frog',
'U() fragment after params'
);
is(
U("Jet d'eau"),
'Jet%20d%27eau',
'U() with single quotes in URL'
);
is(
U('/test.html?foo=bar?qux=gna', array('?q' => '?r')),
'/test.html?foo=bar%3Fqux%3Dgna&%3Fq=%3Fr',
'U() quoting of ? in args but not base'
);
is(
U('%% %1%x %1x%x1%xx%11%ff%FF'),
'%25%25%20%251%25x%20%251x%25x1%25xx%11%ff%FF',
'U() quoting of % if not followed by 2 hex digits'
);
is(
U('a\\b'),
'a/b',
'U() converting of \ to /'
);
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");
?>