diff options
-rw-r--r-- | .gitattributes | 3 | ||||
-rwxr-xr-x | tests/it.t | 206 | ||||
-rwxr-xr-x | tests/it_html.t | 86 | ||||
-rwxr-xr-x | tests/it_xml.t | 66 | ||||
-rwxr-xr-x | tests/itjs.t | 46 |
5 files changed, 407 insertions, 0 deletions
diff --git a/.gitattributes b/.gitattributes index 9c7115f..e17f544 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,5 @@ * text=auto !eol itjs/error.gif -text +tests/it_html.t -text +tests/it_xml.t -text +tests/itjs.t -text diff --git a/tests/it.t b/tests/it.t new file mode 100755 index 0000000..65ac0b9 --- /dev/null +++ b/tests/it.t @@ -0,0 +1,206 @@ +#!/www/server/bin/php -qC +<?php +# +# $Id$ +# +# some tests for itools/it.class + +require 'searchlib/search_test.class'; + +function match( $regex, $string, $exp, $name ) +{ + $GLOBALS['TEST_MORE_LEVEL'] = 1; + $pass = is( it::match( $regex, $string ), $exp, $name ); + if( !$pass ) { + diag( " regex given: $regex" ); + diag( " regex converted: " . it::convertregex( $regex ) ); + } + $GLOBALS['TEST_MORE_LEVEL'] = 0; +} + +match( + 'b', 'aaaabaaaa', + 'b', + 'simple regex' + ); +match( + 'a/b', ' a/b ', + 'a/b', + 'regex with /' +); +match( + 'aa(bb)aa(cc)aa(dd)qq', 'aabbaaccaaddqq', + array( 'bb', 'cc', 'dd' ), + 'return array of captures' + ); +match( + '\bblah\b', ' blah ', + 'blah', + 'match \b at spaces' + ); +match( + '\bblah\b', 'blah', + 'blah', + 'match \b at end of string' + ); +match( + '\bblah\b', 'ablahc', + false, + 'don\'t match \b at word chars' + ); +match( + '\bblah\b', 'Üblahä', + false, + 'don\'t match \b at umlaute in latin1' + ); +match( + '\Bblah\B', ' blah ', + false, + 'don\'t match \B at spaces' + ); +match( + '\Bblah\B', 'blah', + false, + 'don\'t match \B at end of string' + ); +match( + '\Bblah\B', 'ablahc', + 'blah', + 'match \B at word chars' + ); +match( + '\Bblah\B', 'Üblahä', + 'blah', + 'match \B at umlaute in latin1' + ); +match( + '\w+', ' |#Üblahä ', + 'Üblahä', + 'include umlaute in \w' + ); +match( + '\W+', ' |#Üblahä ', + ' |#', + 'don\'t include umlaute in \W' + ); + +eval( '$escapedwordregex = "' . it::convertregex( '\w' ) . '";' ); +$escapedwordregex = preg_replace( '|[\\\\/]|', '', $escapedwordregex ); + +match( + '\\\\w+', $escapedwordregex, + false, + 'don\'t parse \w in \\\\w at beginning (no match)' + ); +match( + 'aaa\\\\w+', ' aaa\www ', + 'aaa\www', + 'don\'t parse \w in \\\\w at beginning (match)' + ); +match( + 'aaa\\\\w+', 'aaa' . $escapedwordregex, + false, + 'don\'t parse \w in \\\\w after chars (no match)' + ); +match( + 'aaa\\\\w+', ' aaa\www ', + 'aaa\www', + 'don\'t parse \w in \\\\w after chars (match)' + ); +match( + '\\\\\\\\w+', '\\' . $escapedwordregex, + false, + 'don\'t parse \w in \\\\\\\w (no match)' + ); +match( + '\\\\\\\\w+', ' \\\\www ', + '\\\\www', + 'don\'t parse \\\\\\\\w as \w (match)' + ); +match( + '[\w]+', '[[[]]]---', + false, + 'replace \w in [\w] correctly (no match)' + ); +match( + '[\w]+', ' \\\\aword[[[]]] ', + 'aword', + 'replace \w in [\w] correctly (match)', + ); +match( + '[\\\\w]+', ' blabergna ', + false, + 'don\'t parse \w in [\\\\w] (no match)' + ); +match( + '[\\\\w]+', ' \\\\worda[[[]', + '\\\\w', + 'don\'t parse \w in [\\\\w] (match)', + ); +match( + '[a\W]+', 'bbbbbbb a a%$+ accccc', + ' a a%$+ a', + '\W in []' + ); +match( + '\\\\\\w+', ' \Üblahä ', + '\Üblahä', + 'parse \w in \\\\\\w at beginning' + ); +match( + 'aaa\\\\\\w+', ' aaa\Üblahä ', + 'aaa\Üblahä', + 'parse \w in \\\\\\w after chars' + ); +is( + it::replace( + array( + 'regex1' => 'repl1', + 'regex2' => 'repl2', + 'regex3' => 'repl3' ), + 'regex2 regex1 regex3' ), + 'repl2 repl1 repl3', + 'test tr regex function' + ); +is( + it::match( '\w+', 'word1 wörd2 word_3', 'all' => true ), + array( 'word1', 'wörd2', 'word_3' ), + "test match_all function" + ); +match( + 'aBcD', ' aBcD ', + 'aBcD', + "caseinsensitive is default" + ); +match( + 'ö', 'Ö', + 'Ö', + 'match umlaute in latin1 case insensitive' + ); +is( + it::match( 'abc', "aBc", 'casesensitive' => 1 ), + false, + "set case sensitivity by parameter" + ); + +is( + it::match( '\w+', 'word1 wörd2 word_3', 'all' => 1 ), + array( 'word1', 'wörd2', 'word_3' ), + "test all=>1 without captures" + ); +is( + it::match( '\w+\s+(\d+)', 'word1 12 wörd2 3 word_3 4', 'all' => 1 ), + array( '12', '3', '4' ), + "test all=>1 with one capture" + ); +is( + it::match( '(\w+)\s+(\d+)', 'word1 12 wörd2 3 word_3 4', 'all' => 1 ), + array( array( 'word1', '12' ), array( 'wörd2', '3' ), array( 'word_3', '4' ) ), + "test all=>1 with captures" + ); +is( + it::match( '(\w+)\s+(\d+)', 'word1 12 wörd2 3 word_3 4', 'all' => 1, 'pattern_order' => 1 ), + array( array( 'word1', 'wörd2', 'word_3' ), array( '12', '3', '4' ) ), + "test all=>1,pattern_order=>1", + ); +?> diff --git a/tests/it_html.t b/tests/it_html.t new file mode 100755 index 0000000..95d615c --- /dev/null +++ b/tests/it_html.t @@ -0,0 +1,86 @@ +#!/www/server/bin/php -qC +<?php +# +# $Id$ +# +# some tests for itools/html.class + +require 'searchlib/search_test.class'; + +# Traditional html generation +new it_html('htmltype' => "html"); + +is( + a('href' => "&foo", 'true' => true, 'false' => false, 'null' => null, 'empty' => "", "bar"), + '<a href="&foo" true empty="">bar</a>', + "tag with attributes" +); + +is( + div(), + "<div></div>\n", + "empty script tag" +); + +is( + img('src' => "foo.png"), + '<img src="foo.png">', + "empty link tag" +); + +is( + tag('link'), + "<link>\n", + "empty link tag" +); + +is( + tag('link', "foo"), + "<link>foo</link>\n", + "link tag with data" +); + +# XML generation +unset($GLOBALS['it_html']); +new it_html('htmltype' => "xhtml", 'tags' => "xmltest"); + +is( + xmltest(), + "<xmltest />\n", + "empty xmltest tag" +); + +is( + xmltest("foo"), + "<xmltest>foo</xmltest>\n", + "empty xmltest tag" +); + +is( + xmltest('href' => "&foo", 'true' => true, 'false' => false, 'null' => null, 'empty' => ""), + '<xmltest href="&foo" true="true" empty="" />' . "\n", + "xmltest tag with attributes" +); + +# Inheriting and extending it_html +class myhtml extends it_html +{ +function myimg($args) +{ + array_unshift($args, 'alt' => "ALT", 'bar' => "BAR"); + + return parent::img($args); +} +} + +unset($GLOBALS['it_html']); +new myhtml('htmltype' => "html"); + +is( + myimg('src' => "foo.gif", 'alt' => "foo"), + '<img alt="foo" bar="BAR" src="foo.gif">', + "it_html inheritance" +); + + +?> diff --git a/tests/it_xml.t b/tests/it_xml.t new file mode 100755 index 0000000..06df969 --- /dev/null +++ b/tests/it_xml.t @@ -0,0 +1,66 @@ +#!/www/server/bin/php -qC +<?php +# +# $Id$ +# +# Tests for itools/xml.class + +require 'searchlib/search_test.class'; + +function match($xmldata, $expected, $name, $prefix = "") +{ + $classname = $prefix ? ($prefix . "_xml") : "it_xml"; + $varname = $prefix . "foo"; + $xml = new $classname("<root>$xmldata</root>"); + + is( + preg_replace('/[#\s]+/', " ", search_test::dump($xml->$varname)), + $expected, + $name, + ); +} + +match( + '<foo />', + 'class foo { }', + 'empty tag' +); + +#match( +# '<foo /><foo />', +# 'array ( 0 => class foo { }, 1 => class foo { }, )', +# 'multiple empty tags converted to array' +#); + +match( + '<foo title="Zürich">Stüssihofstadt</foo>', + 'class foo { var $attr = array( \'title\' => \'Zürich\' ); var $val = \'Stüssihofstadt\'; }', + 'simple tag with latin1 content and attribute' +); + +# Test inheritance +class my_xml extends it_xml +{ + +function my_xml($xmldata) +{ + parent::it_xml($xmldata); + + # Code which should be executed in root and only there + $this->qux = new it_xml; + $this->qux->val = "qux"; + + if (is_object($this->myfoo)) + $this->myfoo->properbaseclass = is_a($this->myfoo, "my_xml"); +} + +} + +match( + '<myfoo />', + 'class myfoo { var $properbaseclass = true; }', + 'Inheritance and constructor', + 'my' +); + +?> diff --git a/tests/itjs.t b/tests/itjs.t new file mode 100755 index 0000000..8cbf90c --- /dev/null +++ b/tests/itjs.t @@ -0,0 +1,46 @@ +#!/www/server/bin/php -qC +<?php +# +# $Id$ +# +# Tests for itools/itjs.class: itjs::serialize() + +require 'searchlib/search_test.class'; + +is( + itjs::serialize(array()), + '[]', + 'empty array' +); + +is( + itjs::serialize(array(0, "0")), + '[0, 0]', + 'number 0' +); + +is( + itjs::serialize(array(null, "", false)), + '["", "", ""]', + 'null, empty string, false' +); + +is( + itjs::serialize(array(42, "42", 42.5, "042")), + '[42, 42, "42.5", "042"]', + 'numbers' +); + +is( + itjs::serialize(array('foo' => "bar", "qux", 42 => "quux")), + "{foo:\"bar\",\n'0':\"qux\",\n'42':\"quux\"}", + 'key-value pairs' +); + +is( + itjs::serialize(array('foo' => array('bar' => array("qux", 42)))), + '{foo:{bar:["qux", 42]}}', + 'nested arrays' +); + +?> |