PercentEncoder = new HTMLPurifier_PercentEncoder (); $this->func = ''; } public function assertDecode($string, $expect = true) { if ($expect === true) $expect = $string; $this->assertIdentical ( $this->PercentEncoder->{$this->func} ( $string ), $expect ); } public function test_normalize() { $this->func = 'normalize'; $this->assertDecode ( 'Aw.../-$^8' ); // no change $this->assertDecode ( '%41%77%7E%2D%2E%5F', 'Aw~-._' ); // decode unreserved chars $this->assertDecode ( '%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D' ); // preserve reserved chars $this->assertDecode ( '%2b', '%2B' ); // normalize to uppercase $this->assertDecode ( '%2B2B%3A3A' ); // extra text $this->assertDecode ( '%2b2B%4141', '%2B2BA41' ); // extra text, with normalization $this->assertDecode ( '%', '%25' ); // normalize stray percent sign $this->assertDecode ( '%5%25', '%255%25' ); // permaturely terminated encoding $this->assertDecode ( '%GJ', '%25GJ' ); // invalid hexadecimal chars // contested behavior, if this changes, we'll also have to have // outbound encoding $this->assertDecode ( '%FC' ); // not reserved or unreserved, preserve } public function assertEncode($string, $expect = true, $preserve = false) { if ($expect === true) $expect = $string; $encoder = new HTMLPurifier_PercentEncoder ( $preserve ); $result = $encoder->encode ( $string ); $this->assertIdentical ( $result, $expect ); } public function test_encode_noChange() { $this->assertEncode ( 'abc012-_~.' ); } public function test_encode_encode() { $this->assertEncode ( '>', '%3E' ); } public function test_encode_preserve() { $this->assertEncode ( '<>', '<%3E', '<' ); } public function test_encode_low() { $this->assertEncode ( "\1", '%01' ); } } // vim: et sw=4 sts=4