Location: PHPKode > projects > Volunteer Management OpenSource Software > vmoss_alpha02/3rd/htmlpurifier/tests/HTMLPurifier/Lexer/DirectLexTest.php
<?php

require_once 'HTMLPurifier/Lexer/DirectLex.php';

class HTMLPurifier_Lexer_DirectLexTest extends HTMLPurifier_Harness
{
    
    var $DirectLex;
    
    function setUp() {
        $this->DirectLex = new HTMLPurifier_Lexer_DirectLex();
    }
    
    // internals testing
    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');
            paintIf($result, $expect[$i] != $result);
        }
        
    }
    
    function testLineNumbers() {
        
        $html = "<b>Line 1</b>\n<i>Line 2</i>\nStill Line 2<br\n/>Now Line 4\n\n<br />";
        
        $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]->line = 1;
        $expect[1]->line = 1;
        $expect[2]->line = 1;
        $expect[3]->line = 1;
        $expect[4]->line = 2;
        $expect[5]->line = 2;
        $expect[6]->line = 2;
        $expect[7]->line = 2;
        $expect[8]->line = 3;
        $expect[9]->line = 4;
        $expect[10]->line = 6;
        
        $output = $this->DirectLex->tokenizeHTML($html, $config, $context);
        $this->assertIdentical($output, $expect);
        
    }
    
}

Return current item: Volunteer Management OpenSource Software