unicode.test in SimpleTest 7
Various unicode handling tests.
File
tests/unicode.testView source
<?php
/**
* @file
* Various unicode handling tests.
*/
/**
* Test unicode handling features implemented in unicode.inc.
*/
class UnicodeUnitTest extends DrupalWebTestCase {
/**
* Whether to run the extended version of the tests (including non latin1 characters).
*
* @var boolean
*/
protected $extendedMode = FALSE;
public static function getInfo() {
return array(
'name' => 'Unicode handling',
'description' => 'Tests Drupal Unicode handling.',
'group' => 'System',
);
}
/**
* Test full unicode features implemented using the mbstring extension.
*/
function testMbStringUnicode() {
global $multibyte;
// mbstring was not detected on this installation, there is no way to test
// multibyte features. Treat that as an exception.
if ($multibyte == UNICODE_SINGLEBYTE) {
$this
->error(t('Unable to test Multibyte features: mbstring extension was not detected.'));
}
$multibyte = UNICODE_MULTIBYTE;
$this->extendedMode = TRUE;
$this
->pass(t('Testing in mbstring mode'));
$this
->helperTestStrToLower();
$this
->helperTestStrToUpper();
$this
->helperTestUcFirst();
$this
->helperTestStrLen();
$this
->helperTestSubStr();
}
/**
* Test emulated unicode features.
*/
function testEmulatedUnicode() {
global $multibyte;
$multibyte = UNICODE_SINGLEBYTE;
$this->extendedMode = FALSE;
$this
->pass(t('Testing in emulated (best-effort) mode'));
$this
->helperTestStrToLower();
$this
->helperTestStrToUpper();
$this
->helperTestUcFirst();
$this
->helperTestStrLen();
$this
->helperTestSubStr();
}
function helperTestStrToLower() {
$testcase = array(
'tHe QUIcK bRoWn' => 'the quick brown',
'FrançAIS is ÜBER-åwesome' => 'français is über-åwesome',
);
if ($this->extendedMode) {
$testcase['ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΣὨ'] = 'αβγδεζηθικλμνξοσὠ';
}
foreach ($testcase as $input => $output) {
$this
->assertEqual(drupal_strtolower($input), $output, t('%input is lowercased as %output', array(
'%input' => $input,
'%output' => $output,
)));
}
}
function helperTestStrToUpper() {
$testcase = array(
'tHe QUIcK bRoWn' => 'THE QUICK BROWN',
'FrançAIS is ÜBER-åwesome' => 'FRANÇAIS IS ÜBER-ÅWESOME',
);
if ($this->extendedMode) {
$testcase['αβγδεζηθικλμνξοσὠ'] = 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΣὨ';
}
foreach ($testcase as $input => $output) {
$this
->assertEqual(drupal_strtoupper($input), $output, t('%input is uppercased as %output', array(
'%input' => $input,
'%output' => $output,
)));
}
}
function helperTestUcFirst() {
$testcase = array(
'tHe QUIcK bRoWn' => 'THe QUIcK bRoWn',
'françAIS' => 'FrançAIS',
'über' => 'Über',
'åwesome' => 'Åwesome',
);
if ($this->extendedMode) {
$testcase['σion'] = 'Σion';
}
foreach ($testcase as $input => $output) {
$this
->assertEqual(drupal_ucfirst($input), $output, t('%input is ucfirst-ed as %output', array(
'%input' => $input,
'%output' => $output,
)));
}
}
function helperTestStrLen() {
$testcase = array(
'tHe QUIcK bRoWn' => 15,
'ÜBER-åwesome' => 12,
);
foreach ($testcase as $input => $output) {
$this
->assertEqual(drupal_strlen($input), $output, t('%input length is %output', array(
'%input' => $input,
'%output' => $output,
)));
}
}
function helperTestSubStr() {
$testcase = array(
// 012345678901234567890123
array(
'frànçAIS is über-åwesome',
0,
1,
'f',
),
array(
'frànçAIS is über-åwesome',
0,
8,
'frànçAIS',
),
array(
'frànçAIS is über-åwesome',
0,
100,
'frànçAIS is über-åwesome',
),
array(
'frànçAIS is über-åwesome',
4,
4,
'çAIS',
),
array(
'frànçAIS is über-åwesome',
1,
0,
'',
),
array(
'frànçAIS is über-åwesome',
100,
0,
'',
),
array(
'frànçAIS is über-åwesome',
-4,
2,
'so',
),
array(
'frànçAIS is über-åwesome',
-7,
10,
'åwesome',
),
array(
'frànçAIS is über-åwesome',
5,
-10,
'AIS is üb',
),
);
foreach ($testcase as $test) {
list($input, $start, $length, $output) = $test;
$this
->assertEqual(drupal_substr($input, $start, $length), $output, t('%input substring-ed at offset %offset for %length characters is %output', array(
'%input' => $input,
'%offset' => $start,
'%length' => $length,
'%output' => $output,
)));
}
}
/**
* Test decode_entities().
*/
function testDecodeEntities() {
$testcase = array(
'Drupal' => 'Drupal',
'<script>' => '<script>',
'<script>' => '<script>',
'<script>' => '<script>',
'&lt;script&gt;' => '<script>',
'"' => '"',
'"' => '"',
'&#34;' => '"',
'"' => '"',
'&quot;' => '"',
"'" => "'",
''' => "'",
'&#39;' => ''',
'©' => '©',
'©' => '©',
'©' => '©',
'→' => '→',
'→' => '→',
'➼' => '➼',
'➼' => '➼',
'€' => '€',
);
foreach ($testcase as $input => $output) {
$this
->assertEqual(decode_entities($input), $output, t('Make sure the decoded entity of @input is @output', array(
'@input' => $input,
'@output' => $output,
)));
}
}
function testDecodeEntitiesExclusion() {
$testcase = array(
'Drupal' => 'Drupal',
'<script>' => '<script>',
'<script>' => '<script>',
'<script>' => '<script>',
'&lt;script&gt;' => '&lt;script&gt;',
'"' => '"',
'"' => '"',
'&#34;' => '&#34;',
'"' => '"',
'&quot;' => '&quot;',
"'" => "'",
''' => "'",
'&#39;' => '&#39;',
'©' => '©',
'©' => '©',
'©' => '©',
'→' => '→',
'→' => '→',
'➼' => '➼',
'➼' => '➼',
'€' => '€',
);
$exclude = array(
'<',
'&',
'"',
);
foreach ($testcase as $input => $output) {
$this
->assertIdentical(decode_entities($input, $exclude), $output, t('Make sure the decoded entity of %input, excluding %excludes, is %output', array(
'%input' => $input,
'%excludes' => implode(',', $exclude),
'%output' => $output,
)));
}
}
}
Classes
Name | Description |
---|---|
UnicodeUnitTest | Test unicode handling features implemented in unicode.inc. |