Add tests for new entity decoding codepath.
[htmlpurifier.git] / tests / HTMLPurifier / EntityParserTest.php
blob989676c14597608082710decc4fb86152c027ef2
1 <?php
3 class HTMLPurifier_EntityParserTest extends HTMLPurifier_Harness
6 protected $EntityParser;
8 public function setUp()
10 $this->EntityParser = new HTMLPurifier_EntityParser();
11 $this->_entity_lookup = HTMLPurifier_EntityLookup::instance();
14 public function test_substituteNonSpecialEntities()
16 $char_theta = $this->_entity_lookup->table['theta'];
17 $this->assertIdentical($char_theta,
18 $this->EntityParser->substituteNonSpecialEntities('&theta;') );
19 $this->assertIdentical($char_theta,
20 $this->EntityParser->substituteTextEntities('&theta;') );
21 $this->assertIdentical('"',
22 $this->EntityParser->substituteNonSpecialEntities('"') );
23 $this->assertIdentical('"',
24 $this->EntityParser->substituteTextEntities('"') );
26 // numeric tests, adapted from Feyd
27 $args = array();
28 $args[] = array(1114112,false );
29 $args[] = array(1114111,'F48FBFBF'); // 0x0010FFFF
30 $args[] = array(1048576,'F4808080'); // 0x00100000
31 $args[] = array(1048575,'F3BFBFBF'); // 0x000FFFFF
32 $args[] = array(262144, 'F1808080'); // 0x00040000
33 $args[] = array(262143, 'F0BFBFBF'); // 0x0003FFFF
34 $args[] = array(65536, 'F0908080'); // 0x00010000
35 $args[] = array(65535, 'EFBFBF' ); // 0x0000FFFF
36 $args[] = array(57344, 'EE8080' ); // 0x0000E000
37 $args[] = array(57343, false ); // 0x0000DFFF these are ill-formed
38 $args[] = array(56040, false ); // 0x0000DAE8 these are ill-formed
39 $args[] = array(55296, false ); // 0x0000D800 these are ill-formed
40 $args[] = array(55295, 'ED9FBF' ); // 0x0000D7FF
41 $args[] = array(53248, 'ED8080' ); // 0x0000D000
42 $args[] = array(53247, 'ECBFBF' ); // 0x0000CFFF
43 $args[] = array(4096, 'E18080' ); // 0x00001000
44 $args[] = array(4095, 'E0BFBF' ); // 0x00000FFF
45 $args[] = array(2048, 'E0A080' ); // 0x00000800
46 $args[] = array(2047, 'DFBF' ); // 0x000007FF
47 $args[] = array(128, 'C280' ); // 0x00000080 invalid SGML char
48 $args[] = array(127, '7F' ); // 0x0000007F invalid SGML char
49 $args[] = array(0, '00' ); // 0x00000000 invalid SGML char
51 $args[] = array(20108, 'E4BA8C' ); // 0x00004E8C
52 $args[] = array(77, '4D' ); // 0x0000004D
53 $args[] = array(66306, 'F0908C82'); // 0x00010302
54 $args[] = array(1072, 'D0B0' ); // 0x00000430
56 foreach ($args as $arg) {
57 $string = '&#' . $arg[0] . ';' . // decimal
58 '&#x' . dechex($arg[0]) . ';'; // hex
59 $expect = '';
60 if ($arg[1] !== false) {
61 // this is only for PHP 5, the below is PHP 5 and PHP 4
62 //$chars = str_split($arg[1], 2);
63 $chars = array();
64 // strlen must be called in loop because strings size changes
65 for ($i = 0; strlen($arg[1]) > $i; $i += 2) {
66 $chars[] = $arg[1][$i] . $arg[1][$i+1];
68 foreach ($chars as $char) {
69 $expect .= chr(hexdec($char));
71 $expect .= $expect; // double it
73 $this->assertIdentical(
74 $this->EntityParser->substituteNonSpecialEntities($string),
75 $expect,
76 'Identical expectation [Hex: '. dechex($arg[0]) .']'
78 $this->assertIdentical(
79 $this->EntityParser->substituteTextEntities($string),
80 $expect,
81 'Identical expectation [Hex: '. dechex($arg[0]) .']'
87 public function test_substituteSpecialEntities()
89 $this->assertIdentical(
90 "'",
91 $this->EntityParser->substituteSpecialEntities('&#39;')
93 $this->assertIdentical(
94 "'",
95 $this->EntityParser->substituteTextEntities('&#39;')
101 // vim: et sw=4 sts=4