DirectLex = new HTMLPurifier_Lexer_DirectLex (); } // internals testing public function test_parseAttributeString() { $input [0] = 'href="about:blank" rel="nofollow"'; $expect [0] = array ( 'href' => 'about:blank', 'rel' => 'nofollow' ); $input [1] = "href='about:blank'"; $expect [1] = array ( 'href' => 'about:blank' ); // note that the single quotes aren't /really/ escaped $input [2] = 'onclick="javascript:alert(\'asdf\');"'; $expect [2] = array ( 'onclick' => "javascript:alert('asdf');" ); $input [3] = 'selected'; $expect [3] = array ( 'selected' => 'selected' ); // [INVALID] $input [4] = '="nokey"'; $expect [4] = array (); // [SIMPLE] $input [5] = 'color=blue'; $expect [5] = array ( 'color' => 'blue' ); // [INVALID] $input [6] = 'href="about:blank'; $expect [6] = array ( 'href' => 'about:blank' ); // [INVALID] $input [7] = '"='; $expect [7] = array ( '"' => '' ); // we ought to get array() $input [8] = 'href ="about:blank"rel ="nofollow"'; $expect [8] = array ( 'href' => 'about:blank', 'rel' => 'nofollow' ); $input [9] = 'two bool'; $expect [9] = array ( 'two' => 'two', 'bool' => 'bool' ); $input [10] = 'name="input" selected'; $expect [10] = array ( 'name' => 'input', 'selected' => 'selected' ); $input [11] = '=""'; $expect [11] = array (); $input [12] = '="" =""'; $expect [12] = array (); // tough to say, just don't throw a loop $input [13] = 'href="'; $expect [13] = array ( 'href' => '' ); $input [14] = 'href=" <'; $expect [14] = array ( 'href' => ' <' ); $config = HTMLPurifier_Config::createDefault (); $context = new HTMLPurifier_Context (); $size = count ( $input ); for($i = 0; $i < $size; $i ++) { $result = $this->DirectLex->parseAttributeString ( $input [$i], $config, $context ); $this->assertIdentical ( $expect [$i], $result, 'Test ' . $i . ': %s' ); } } public function testLineNumbers() { // . . . . . . . . . . // 01234567890123 01234567890123 0123456789012345 0123456789012 012345 $html = "Line 1\nLine 2\nStill Line 2Now Line 4\n\n
"; $expect = array ( // line 1 0 => new HTMLPurifier_Token_Start ( 'b' ), 1 => new HTMLPurifier_Token_Text ( 'Line 1' ), 2 => new HTMLPurifier_Token_End ( 'b' ), 3 => new HTMLPurifier_Token_Text ( "\n" ), // line 2 4 => new HTMLPurifier_Token_Start ( 'i' ), 5 => new HTMLPurifier_Token_Text ( 'Line 2' ), 6 => new HTMLPurifier_Token_End ( 'i' ), 7 => new HTMLPurifier_Token_Text ( "\nStill Line 2" ), // line 3 8 => new HTMLPurifier_Token_Empty ( 'br' ), // line 4 9 => new HTMLPurifier_Token_Text ( "Now Line 4\n\n" ), // line SIX 10 => new HTMLPurifier_Token_Empty ( 'br' ) ); $context = new HTMLPurifier_Context (); $config = HTMLPurifier_Config::createDefault (); $output = $this->DirectLex->tokenizeHTML ( $html, $config, $context ); $this->assertIdentical ( $output, $expect ); $context = new HTMLPurifier_Context (); $config = HTMLPurifier_Config::create ( array ( 'Core.MaintainLineNumbers' => true ) ); $expect [0]->position ( 1, 0 ); $expect [1]->position ( 1, 3 ); $expect [2]->position ( 1, 9 ); $expect [3]->position ( 2, - 1 ); $expect [4]->position ( 2, 0 ); $expect [5]->position ( 2, 3 ); $expect [6]->position ( 2, 9 ); $expect [7]->position ( 3, - 1 ); $expect [8]->position ( 3, 12 ); $expect [9]->position ( 4, 2 ); $expect [10]->position ( 6, 0 ); $output = $this->DirectLex->tokenizeHTML ( $html, $config, $context ); $this->assertIdentical ( $output, $expect ); } } // vim: et sw=4 sts=4