UnitTestCase(); $this->gen = new HTMLPurifier_Generator(); $this->_entity_lookup = HTMLPurifier_EntityLookup::instance(); } function test_generateFromToken() { $inputs = array(); $expect = array(); $config = array(); $inputs[0] = new HTMLPurifier_Token_Text('Foobar.<>'); $expect[0] = 'Foobar.<>'; $inputs[1] = new HTMLPurifier_Token_Start('a', array('href' => 'dyn?a=foo&b=bar') ); $expect[1] = ''; $inputs[2] = new HTMLPurifier_Token_End('b'); $expect[2] = ''; $inputs[3] = new HTMLPurifier_Token_Empty('br', array('style' => 'font-family:"Courier New";') ); $expect[3] = '
'; $inputs[4] = new HTMLPurifier_Token_Start('asdf'); $expect[4] = ''; $inputs[5] = new HTMLPurifier_Token_Empty('br'); $expect[5] = '
'; // test fault tolerance $inputs[6] = null; $expect[6] = ''; // don't convert non-special characters $theta_char = $this->_entity_lookup->table['theta']; $inputs[7] = new HTMLPurifier_Token_Text($theta_char); $expect[7] = $theta_char; foreach ($inputs as $i => $input) { $result = $this->gen->generateFromToken($input); $this->assertEqual($result, $expect[$i]); paintIf($result, $result != $expect[$i]); } } function test_generateAttributes() { $inputs = array(); $expect = array(); $config = array(); $inputs[0] = array(); $expect[0] = ''; $inputs[1] = array('href' => 'dyn?a=foo&b=bar'); $expect[1] = 'href="dyn?a=foo&b=bar"'; $inputs[2] = array('style' => 'font-family:"Courier New";'); $expect[2] = 'style="font-family:"Courier New";"'; $inputs[3] = array('src' => 'picture.jpg', 'alt' => 'Short & interesting'); $expect[3] = 'src="picture.jpg" alt="Short & interesting"'; // don't escape nonspecial characters $theta_char = $this->_entity_lookup->table['theta']; $inputs[4] = array('title' => 'Theta is ' . $theta_char); $expect[4] = 'title="Theta is ' . $theta_char . '"'; $default_config = HTMLPurifier_Config::createDefault(); foreach ($inputs as $i => $input) { if (!isset($config[$i])) $config[$i] = $default_config; $result = $this->gen->generateAttributes($input, $config[$i]); $this->assertEqual($result, $expect[$i]); paintIf($result, $result != $expect[$i]); } } function test_generateFromTokens() { $inputs = array(); $expect = array(); $config = array(); $inputs[0] = array( new HTMLPurifier_Token_Start('b'), new HTMLPurifier_Token_Text('Foobar!'), new HTMLPurifier_Token_End('b') ); $expect[0] = 'Foobar!'; $inputs[1] = array(); $expect[1] = ''; $default_config = HTMLPurifier_Config::createDefault(); foreach ($inputs as $i => $input) { if (!isset($config[$i])) $config[$i] = $default_config; $result = $this->gen->generateFromTokens($input, $config[$i]); $this->assertEqual($expect[$i], $result); paintIf($result, $result != $expect[$i]); } } var $config; function assertGeneration($tokens, $expect) { $result = $this->gen->generateFromTokens($tokens, $this->config); $this->assertEqual($expect, $result); } function test_generateFromTokens_XHTMLoff() { $this->config = HTMLPurifier_Config::createDefault(); $this->config->set('Core', 'XHTML', false); // omit trailing slash $this->assertGeneration( array( new HTMLPurifier_Token_Empty('br') ), '
' ); // there should be a test for attribute minimization, but it is // impossible for something like that to happen due to our current // definitions! fix it later // namespaced attributes must be dropped $this->assertGeneration( array( new HTMLPurifier_Token_Start('p', array('xml:lang'=>'fr')) ), '

' ); } } ?>