diff options
author | Dries Buytaert <dries@buytaert.net> | 2008-12-31 11:01:49 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2008-12-31 11:01:49 +0000 |
commit | 82727ed8aae6dcd49b47e1893282ee36697cc9a2 (patch) | |
tree | dd00b656ddf1888ce0ebcdc9c00925c72c85d521 /modules | |
parent | ba9f2041f62401efbf726c264533c103db555170 (diff) | |
download | brdo-82727ed8aae6dcd49b47e1893282ee36697cc9a2.tar.gz brdo-82727ed8aae6dcd49b47e1893282ee36697cc9a2.tar.bz2 |
- Patch #352359 by Damien Tournoud: provided unit tests for the unicode library and fixed some bugs.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/simpletest/tests/unicode.test | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/modules/simpletest/tests/unicode.test b/modules/simpletest/tests/unicode.test new file mode 100644 index 000000000..8970fca25 --- /dev/null +++ b/modules/simpletest/tests/unicode.test @@ -0,0 +1,214 @@ +<?php +// $Id $ + +/** + * @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; + + function getInfo() { + return array( + 'name' => t('Unicode handling'), + 'description' => t('Tests Drupal Unicode handling.'), + 'group' => t('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>', + '&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>', + '&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))); + } + } +} |