<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>BinString test</title>
<style>
.pass {
color: green;
}
.fail {
color: red;
}
td, th {
border: 1px black solid;
}
th {
font-weight: bold;
}
tr.new {
border-top: 3px black solid;
}
table {
border-collapse: collapse;
}
.expectFail {
background-color: pink;
}
</style>
</head>
<body>
<h1>BinString test</h1>
<?php
use com\grandt\BinString;
error_reporting(E_ALL | E_STRICT);
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', 1);
include 'BinString.php';
$binstr = new BinString();
$mbStr = "\x74\x65\x73\x74\xC3\x86\xC3\xB8\xC3\xA5";
$mbStr_lower = "\x74\x65\x73\x74\xC3\xA6\xC3\xB8\xC3\xA5";
$mbStr_upper = "\x54\x45\x53\x54\xC3\x86\xC3\x98\xC3\x85";
$isoStr = "\x74\x65\x73\x74\xC6\xF8\xE5";
$isoStr_lower = "\x74\x65\x73\x74\xE6\xF8\xE5";
$isoStr_upper = "\x54\x45\x53\x54\xC6\xD8\xC5";
$mbNeedle = "\xC3\xB8";
$isoNeedle = "\xF8";
function test($result, $expected) {
if ($result == $expected) {
if (is_bool($result)) {
$result = $result ? "<em>true</em>" : "<em>false</em>";
}
return "<span class=\"pass\">PASS<br /></span>received: $result";
} else {
if (is_bool($result)) {
$result = $result ? "<em>true</em>" : "<em>false</em>";
}
return "<span class=\"fail\">FAIL<br />received: $result<br />expected: $expected</span>";
}
}
function test_enc($result, $expected) {
if ($result == $expected) {
if (is_bool($result)) {
$result = $result ? "<em>true</em>" : "<em>false</em>";
}
return "<span class=\"pass\">PASS<br /></span>received: " . mb_convert_encoding($result, 'utf8', 'latin1');
} else {
if (is_bool($result)) {
$result = $result ? "<em>true</em>" : "<em>false</em>";
}
return "<span class=\"fail\">FAIL<br />received: " . mb_convert_encoding($result, 'utf8', 'latin1') . "<br />expected: " . mb_convert_encoding($expected, 'utf8', 'latin1') . "</span>";
}
}
?>
<p>The idea is that the standard column should be identical to the BinString column on systems without mbstring.func_overload enabled.</p>
<p class="expectFail">Cells with a pink background are expected to fail, as they are either parsing mb strings to non mb aware functions, where they can't convert or deal with those utf8 characters, or they are just containing characters the function can't handle, due to having the wrong locale.</p>
<p>The test strings contain the three Danish letters æ, ø and å, not all PHP string functions can parse those, for instance the case conversion functions.</p>
<p>ereg functions are not tested, as they have been deprecated from PHP 5.3.0, and people should use the PCRE extension's preg_* functions instead.
<h3>Instantiated class</h3>
<table>
<tr><th>function</th><th>mb_input</th><th>standard</th><th>mb_*</th><th>BinString._*</th></tr>
<tr class="new">
<td>mail()</td>
<td>no</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
</tr>
<tr class="new">
<td rowspan="2">strlen()</td><td>yes</td>
<td><?= test(strlen($mbStr), 10) ?></td>
<td><?= test(mb_strlen($mbStr, 'utf8'), 7) ?></td>
<td><?= test($binstr->_strlen($mbStr), 10) ?></td></tr>
<tr>
<td>no</td>
<td><?= test(strlen($isoStr), 7) ?></td>
<td><?= test(mb_strlen($isoStr, 'latin1'), 7) ?></td>
<td><?= test($binstr->_strlen($isoStr), 7) ?></td></tr>
<tr class="new">
<td rowspan="2">strpos()</td><td>yes</td>
<td><?= test(strpos($mbStr, $mbNeedle), 6) ?></td>
<td><?= test(mb_strpos($mbStr, $mbNeedle, 0, 'utf8'), 5) ?></td>
<td><?= test($binstr->_strpos($mbStr, $mbNeedle), 6) ?></td>
</tr>
<tr>
<td>no</td>
<td><?= test(strpos($isoStr, $isoNeedle), 5) ?></td>
<td><?= test(mb_strpos($isoStr, $isoNeedle, 0, 'latin1'), 5) ?></td>
<td><?= test($binstr->_strpos($isoStr, $isoNeedle), 5) ?></td>
</tr>
<tr class="new">
<td rowspan="2">strrpos()</td><td>yes</td>
<td><?= test(strrpos($mbStr, $mbNeedle), 6) ?></td>
<td><?= test(mb_strrpos($mbStr, $mbNeedle, 0, 'utf8'), 5) ?></td>
<td><?= test($binstr->_strrpos($mbStr, $mbNeedle), 6) ?></td>
</tr>
<tr>
<td>no</td>
<td><?= test(strrpos($isoStr, $isoNeedle), 5) ?></td>
<td><?= test(mb_strrpos($isoStr, $isoNeedle, 0, 'latin1'), 5) ?></td>
<td><?= test($binstr->_strrpos($isoStr, $isoNeedle), 5) ?></td>
</tr>
<?php
if ($binstr->getPHPVersionId() >= 50200) {
?>
<tr class="new">
<td rowspan="2">stripos()</td><td>yes</td>
<td><?= test(stripos($mbStr, $mbNeedle), 6) ?></td>
<td><?= test(mb_stripos($mbStr, $mbNeedle, 0, 'utf8'), 5) ?></td>
<td><?= test($binstr->_stripos($mbStr, $mbNeedle), 6) ?></td>
</tr>
<tr>
<td>no</td>
<td><?= test(stripos($isoStr, $isoNeedle), 5) ?></td>
<td><?= test(mb_stripos($isoStr, $isoNeedle, 0, 'latin1'), 5) ?></td>
<td><?= test($binstr->_stripos($isoStr, $isoNeedle), 5) ?></td>
</tr>
<tr class="new">
<td rowspan="2">strripos()</td><td>yes</td>
<td><?= test(strripos($mbStr, $mbNeedle), 6) ?></td>
<td><?= test(mb_strripos($mbStr, $mbNeedle, 0, 'utf8'), 5) ?></td>
<td><?= test($binstr->_strripos($mbStr, $mbNeedle), 6) ?></td>
</tr>
<tr>
<td>no</td>
<td class="expectFail"><?= test(strripos($isoStr, $isoNeedle), 5) ?></td>
<td><?= test(mb_strripos($isoStr, $isoNeedle, 0, 'latin1'), 5) ?></td>
<td class="expectFail"><?= test($binstr->_strripos($isoStr, $isoNeedle), 5) ?></td>
</tr>
<tr class="new">
<td rowspan="2">strstr()</td><td>yes</td>
<td><?= test(strstr($mbStr, "\xC3\xB8\xC3\xA5"), "\xC3\xB8\xC3\xA5") ?></td>
<td><?= test(mb_strstr($mbStr, "\xC3\xB8\xC3\xA5", null, 'utf8'), "\xC3\xB8\xC3\xA5") ?></td>
<td><?= test($binstr->_strstr($mbStr, "\xC3\xB8\xC3\xA5"), "\xC3\xB8\xC3\xA5") ?></td>
</tr>
<tr>
<td>no</td>
<td><?= test_enc(strstr($isoStr, "\xF8\xE5"), "\xF8\xE5") ?></td>
<td><?= test_enc(mb_strstr($isoStr, "\xF8\xE5", null, 'latin1'), "\xF8\xE5") ?></td>
<td><?= test_enc($binstr->_strstr($isoStr, "\xF8\xE5"), "\xF8\xE5") ?></td>
</tr>
<tr class="new">
<td rowspan="2">stristr()</td><td>yes</td>
<td><?= test(stristr($mbStr, "\xC3\xB8\xC3\xA5"), "\xC3\xB8\xC3\xA5") ?></td>
<td><?= test(mb_stristr($mbStr, "\xC3\xB8\xC3\xA5", null, 'utf8'), "\xC3\xB8\xC3\xA5") ?></td>
<td><?= test($binstr->_stristr($mbStr, "\xC3\xB8\xC3\xA5"), "\xC3\xB8\xC3\xA5") ?></td>
</tr>
<tr>
<td>no</td>
<td><?= test_enc(stristr($isoStr, "\xF8\xE5"), "\xF8\xE5") ?></td>
<td><?= test_enc(mb_stristr($isoStr, "\xF8\xE5", null, 'latin1'), "\xF8\xE5") ?></td>
<td><?= test_enc($binstr->_stristr($isoStr, "\xF8\xE5"), "\xF8\xE5") ?></td>
</tr>
<tr class="new">
<td rowspan="2">strrchr()</td><td>yes</td>
<td class="expectFail"><?= test(strrchr($mbStr, "\xC3\xB8"), "\xC3\xB8\xC3\xA5") ?></td>
<td><?= test(mb_strrchr($mbStr, "\xC3\xB8", null, 'utf8'), "\xC3\xB8\xC3\xA5") ?></td>
<td class="expectFail"><?= test($binstr->_strrchr($mbStr, "\xC3\xB8"), "\xC3\xB8\xC3\xA5") ?></td>
</tr>
<tr>
<td>no</td>
<td><?= test_enc(strrchr($isoStr, "\xF8"), "\xF8\xE5") ?></td>
<td><?= test_enc(mb_strrchr($isoStr, "\xF8", null, 'latin1'), "\xF8\xE5") ?></td>
<td><?= test_enc($binstr->_strrchr($isoStr, "\xF8"), "\xF8\xE5") ?></td>
</tr>
<?php
}
?>
<tr class="new">
<td rowspan="2">substr()</td><td>yes</td>
<td><?= test(substr($mbStr, 6), "\xC3\xB8\xC3\xA5") ?></td>
<td><?= test(mb_substr($mbStr, 5, mb_strlen($mbStr, 'utf8'), 'utf8'), "\xC3\xB8\xC3\xA5") ?></td>
<td><?= test($binstr->_substr($mbStr, 6), "\xC3\xB8\xC3\xA5") ?></td>
</tr>
<tr>
<td>no</td>
<td><?= test_enc(substr($isoStr, 5), "\xF8\xE5") ?></td>
<td><?= test_enc(mb_substr($isoStr, 5, mb_strlen($isoStr, 'latin1'), 'latin1'), "\xF8\xE5") ?></td>
<td><?= test_enc($binstr->_substr($isoStr, 5), "\xF8\xE5") ?></td>
</tr>
<tr class="new">
<td rowspan="2">strtolower()</td><td>yes</td>
<td class="expectFail"><?= test(strtolower($mbStr), $mbStr_lower) ?></td>
<td><?= test(mb_strtolower($mbStr, 'utf8'), $mbStr_lower) ?></td>
<td class="expectFail"><?= test($binstr->_strtolower($mbStr), $mbStr_lower) ?></td>
</tr>
<tr>
<td>no</td>
<td class="expectFail"><?= test_enc(strtolower($isoStr), $isoStr_lower) ?></td>
<td><?= test_enc(mb_strtolower($isoStr, 'latin1'), $isoStr_lower) ?></td>
<td class="expectFail"><?= test_enc($binstr->_strtolower($isoStr), $isoStr_lower) ?></td>
</tr>
<tr class="new">
<td rowspan="2">strtoupper()</td><td>yes</td>
<td class="expectFail"><?= test(strtoupper($mbStr), $mbStr_upper) ?></td>
<td><?= test(mb_strtoupper($mbStr, 'utf8'), $mbStr_upper) ?></td>
<td class="expectFail"><?= test($binstr->_strtoupper($mbStr), $mbStr_upper) ?></td>
</tr>
<tr>
<td>no</td>
<td class="expectFail"><?= test_enc(strtoupper($isoStr), $isoStr_upper) ?></td>
<td><?= test_enc(mb_strtoupper($isoStr, 'latin1'), $isoStr_upper) ?></td>
<td class="expectFail"><?= test_enc($binstr->_strtoupper($isoStr), $isoStr_upper) ?></td>
</tr>
<tr class="new">
<td rowspan="2">substr_count()</td><td>yes</td>
<td><?= test(substr_count($mbStr, $mbNeedle), 1) ?></td>
<td><?= test(mb_substr_count($mbStr, $mbNeedle, 'utf8'), 1) ?></td>
<td><?= test($binstr->_substr_count($mbStr, $mbNeedle), 1) ?></td>
</tr>
<tr>
<td>no</td>
<td><?= test_enc(substr_count($isoStr, $isoNeedle), 1) ?></td>
<td><?= test_enc(mb_substr_count($isoStr, $isoNeedle, 'latin1'), 1) ?></td>
<td><?= test_enc($binstr->_substr_count($isoStr, $isoNeedle), 1) ?></td>
</tr>
<tr class="new">
<td>ereg()</td>
<td>no</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
</tr>
<tr class="new">
<td>eregi()</td>
<td>no</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
</tr>
<tr class="new">
<td>ereg_replace()</td>
<td>no</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
</tr>
<tr class="new">
<td>eregi_replace()</td>
<td>no</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
</tr>
<tr class="new">
<td>split()</td>
<td>no</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
<td>UNTESTED</td>
</tr>
<tr class="new">
<td>startsWith()</td>
<td>no</td>
<td><?= test($binstr->startsWith("TestFileName.html", "test"), false) ?></td>
<td><?= test($binstr->startsWith("TestFileName.html", ".html"), false) ?></td>
<td><?= test($binstr->startsWith("TestFileName.html", "Test"), true) ?></td>
</tr>
<tr class="new">
<td>endsWith()</td>
<td>no</td>
<td><?= test($binstr->endsWith("TestFileName.html", ".xhtml"), false) ?></td>
<td><?= test($binstr->endsWith("TestFileName.html", ".Test"), false) ?></td>
<td><?= test($binstr->endsWith("TestFileName.html", ".html"), true) ?></td>
</tr>
</table>
</body>
</html>
|