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 2
Now 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