3 * @author JoakimLofgren
6 include_once __DIR__ . '/PolyfillTestCase.php';
8 use PhpXmlRpc\Helper\Charset;
11 * Test conversion between encodings
13 * For Windows if you want to test the output use Consolas font
14 * and run the following in cmd:
18 * @todo add tests for conversion: utf8 -> ascii (incl. chars 0-31 and 127)
19 * @todo add tests for conversion: latin1 -> utf8
20 * @todo add tests for conversion: latin1 -> ascii (incl. chars 0-31 and 127)
22 class CharsetTest extends PhpXmlRpc_PolyfillTestCase
24 // Consolas font should render these properly
25 protected $runes = "ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ";
26 protected $greek = "Τὴ γλῶσσα μοῦ ἔδωσαν ἑλληνικὴ";
27 protected $russian = "Река неслася; бедный чёлн";
28 protected $chinese = "我能吞下玻璃而不伤身体。";
30 protected $latinString;
32 /// @todo move to usage of a dataProvider and create the latinString there
33 protected function set_up()
35 // construct a latin string with all chars (except control ones)
36 $this->latinString = "\n\r\t";
37 for($i = 32; $i < 127; $i++) {
38 $this->latinString .= chr($i);
40 for($i = 160; $i < 256; $i++) {
41 $this->latinString .= chr($i);
45 protected function utf8ToLatin1($data)
47 return Charset::instance()->encodeEntities(
54 protected function utf8ToAscii($data)
56 return Charset::instance()->encodeEntities(
63 public function testUtf8ToLatin1All()
65 /*$this->assertEquals(
67 mb_detect_encoding($this->latinString, 'ISO-8859-1, UTF-8, WINDOWS-1251, ASCII', true),
68 'Setup latinString is not ISO-8859-1 encoded...'
70 $string = utf8_encode($this->latinString);
71 $encoded = $this->utf8ToLatin1($string);
72 $this->assertEquals(str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $this->latinString), $encoded);
75 public function testUtf8ToLatin1EuroSymbol()
77 $string = 'a.b.c.å.ä.ö.€.';
78 $encoded = $this->utf8ToLatin1($string);
79 $this->assertEquals(utf8_decode('a.b.c.å.ä.ö.€.'), $encoded);
82 public function testUtf8ToLatin1Runes()
84 $string = $this->runes;
85 $encoded = $this->utf8ToLatin1($string);
86 $this->assertEquals('ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ', $encoded);
89 public function testUtf8ToLatin1Greek()
91 $string = $this->greek;
92 $encoded = $this->utf8ToLatin1($string);
93 $this->assertEquals('Τὴ γλῶσσα μοῦ ἔδωσαν ἑλληνικὴ', $encoded);
96 public function testUtf8ToLatin1Russian()
98 $string = $this->russian;
99 $encoded = $this->utf8ToLatin1($string);
100 $this->assertEquals('Река неслася; бедный чёлн', $encoded);
103 public function testUtf8ToLatin1Chinese()
105 $string = $this->chinese;
106 $encoded = $this->utf8ToLatin1($string);
107 $this->assertEquals('我能吞下玻璃而不伤身体。', $encoded);