diff options
author | Nathan Gass | 2012-03-22 18:18:42 +0000 |
---|---|---|
committer | Nathan Gass | 2012-03-22 18:18:42 +0000 |
commit | d59a4921188753dbe4c0161081755a28112c3ef6 (patch) | |
tree | 81496414d988f37f1db9d92c9750d888ffa13746 /devel-utf8/tests/it.t | |
parent | ca11771e8fad5fef96615df4c44e04b8fb60ac31 (diff) | |
download | itools-d59a4921188753dbe4c0161081755a28112c3ef6.tar.gz itools-d59a4921188753dbe4c0161081755a28112c3ef6.tar.bz2 itools-d59a4921188753dbe4c0161081755a28112c3ef6.zip |
Branch itools/devel-utf8 created
Diffstat (limited to 'devel-utf8/tests/it.t')
-rwxr-xr-x | devel-utf8/tests/it.t | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/devel-utf8/tests/it.t b/devel-utf8/tests/it.t new file mode 100755 index 0000000..1a308ec --- /dev/null +++ b/devel-utf8/tests/it.t @@ -0,0 +1,285 @@ +#!/www/server/bin/php -qC +<?php + +# Tests for it.class + +function match($regex, $string, $expect, $name) +{ + $GLOBALS['TEST_MORE_LEVEL'] = 1; + $pass = is (it::match($regex, $string), $expect, $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( + '[[:alpha:]]+', ' |#blahä ', + 'blahä', + 'include umlaute in [[:alpha:]]' + ); +match( + '\W+', ' |#Üblahä ', + ' |#', + 'don\'t include umlaute in \W' + ); +match( + '\ba', 'äa', + '', + '\b must know umlauts' + ); + +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', array('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(utf8_encode('aöBÜ'), utf8_encode("AÖbü"), array('utf8' => true)), + utf8_encode('AÖbü'), + "match utf-8 umlaute in case insensitive" +); + +$oldcharset = ini_get('default_charset'); +ini_set('default_charset', 'utf-8'); +match( + utf8_encode('aöBÜ'), utf8_encode('AÖbü'), + utf8_encode('AÖbü'), + "match utf-8 umlaute in case insensitive using default_charset" +); +is( + it::match('aöBÜ', 'AÖbü', array('utf8' => false)), + 'AÖbü', + "non-utf-8 override with default_charset=utf-8" +); +match( + '\w+', utf8_encode('Müller'), + utf8_encode('Müller'), + '\w matches umlaut in utf-8 mode' +); +match( + 'M.ller', utf8_encode('Müller'), + utf8_encode('Müller'), + '. matches umlaut in utf-8 mode' +); +ini_set('default_charset', $oldcharset); + +is( + it::match( 'abc', "aBc", array('casesensitive' => 1 )), + false, + "set case sensitivity by parameter" + ); + +is( + it::match( '\w+', 'word1 wörd2 word_3', array('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', array('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', array('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', array('all' => 1, 'pattern_order' => 1 )), + array( array( 'word1', 'wörd2', 'word_3' ), array( '12', '3', '4' ) ), + "test all=>1,pattern_order=>1" + ); + +is(it::replace(array('a' => "1", 'b' => "2"), "ab"), "12"); +is(it::replace(array('!' => "x"), "!"), "x"); +is(it::replace(array('\w' => "x"), "oö"), "xx"); +is(it::replace(array('[[:alpha:]]' => "x"), "ö"), "x"); +is(it::replace(array('\w' => "x", '#' => "!"), "#ö"), "!x"); +is(it::replace(array('#' => "!", '\w' => "x"), "#ö"), "!x"); +is(it::replace(array('ö' => "x"), "Ö"), "x"); +is(it::replace(array('a' => "1"), "aaa", array('limit' => 1)), "1aa"); + +# it::filter_keys tests + +$data = array('a' => 1, 'b' => 2, 'c' => 3); +is(it::filter_keys($data, 'a'), array('a' => 1), "select one key"); +is(it::filter_keys($data, array('a', 'b')), array('a' => 1, 'b' => 2), "select two keys with array"); +is(it::filter_keys($data, 'a,b'), array('a' => 1, 'b' => 2), "select two keys with string"); +is( + array_keys(it::filter_keys($data, 'b,a')), + array('a', 'b'), + "keep order of data array per default"); +is( + array_keys(it::filter_keys($data, 'b,a', array('reorder' => true))), + array('b', 'a'), + "reorder with given key order"); + +# it::date tests + +is(it::date('date', '2011-10-25'), '25.10.2011', 'parse date string with strtotime'); +is(it::date('date', '2011-10-25 + 3 days'), '28.10.2011', 'some date arithmetic'); +is(it::date('datetime', time()), it::date('datetime'), 'recognize int as timestamp'); +is(it::date('datetime', time()*1.0), it::date('datetime'), 'recognize float as timestamp'); +is(it::date('datetime', time() . ''), it::date('datetime'), 'recognize digit string as timestamp'); +is(it::date('datetime', '@' . time()), it::date('datetime'), 'recognize strtotime timestamp format'); +is(it::date('datetime', 10), it::date('datetime', "10"), 'numeric and string give same result'); +is(it::date('datetime', 10.0), it::date('datetime', "10"), '... as long as num is properly truncated'); +is(it::date('datetime', 10.5), it::date('datetime', "10"), '... with one digit after point'); +is(it::date('datetime', 10.56), it::date('datetime', "10"), '... with two digits after point'); +is(it::date('datetime', 1000000), it::date('datetime', "1000000"), '... large nummer'); +is(it::date('datetime', 1000000.543), it::date('datetime', "1000000"), '... large nummer and point'); +is(it::date('time', "10.5"), "10:05", 'interpret string with points with strtotime'); +is(it::date('time', "10.05"), "10:05", 'interpret string with points with strtotime'); + +?> |