home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 June / ENTER.ISO / files / xampp-win32-1.4.5-installer.exe / xampp / xml_htmlsax_test.php < prev    next >
Encoding:
PHP Script  |  2004-03-24  |  9.3 KB  |  219 lines

  1. <?php
  2. /**
  3. * @package XML
  4. * @version $Id: xml_htmlsax_test.php,v 1.8 2003/12/04 23:35:20 harryf Exp $
  5. */
  6. class ListenerInterface {
  7.     function ListenerInterface() { }
  8.     function startHandler($parser, $name, $attrs) { }
  9.     function endHandler($parser, $name) { }
  10.     function dataHandler($parser, $data) { }
  11.     function piHandler($parser, $target, $data) { }
  12.     function escapeHandler($parser, $data) { }
  13.     function jaspHandler($parser, $data) { }
  14. }
  15. Mock::generate('ListenerInterface', 'MockListener');
  16.  
  17. class ParserTestCase extends UnitTestCase {
  18.     var $parser;
  19.     var $listener;
  20.     
  21.     function ParserTestCase($name = false) {
  22.         $this->UnitTestCase($name);
  23.     }
  24.     function setUp() {
  25.         $this->listener = &new MockListener($this);
  26.         $this->parser = &new XML_HTMLSax();
  27.         $this->parser->set_object($this->listener);
  28.         $this->parser->set_element_handler('startHandler','endHandler');
  29.         $this->parser->set_data_handler('dataHandler');
  30.         $this->parser->set_escape_handler('escapeHandler');
  31.         $this->parser->set_pi_handler('piHandler');
  32.         $this->parser->set_jasp_handler('jaspHandler');
  33.     }
  34.     function tearDown() {
  35.         $this->listener->tally();
  36.     }
  37. }
  38. SimpleTestOptions::ignore('ParserTestCase');
  39.  
  40. class TestOfContent extends ParserTestCase {
  41.     function TestOfContent() {
  42.         $this->ParserTestCase();
  43.     }
  44.     function testSimple() {
  45.         $this->listener->expectOnce('dataHandler', array('*', 'stuff'));
  46.         $this->parser->parse('stuff');
  47.     }
  48.     function testPreservingWhiteSpace() {
  49.         $this->listener->expectOnce('dataHandler', array('*', " stuff\t\r\n "));
  50.         $this->parser->parse(" stuff\t\r\n ");
  51.     }
  52.     function testTrimmingWhiteSpace() {
  53.         $this->listener->expectOnce('dataHandler', array('*', "stuff"));
  54.         $this->parser->set_option('XML_OPTION_TRIM_DATA_NODES');
  55.         $this->parser->parse(" stuff\t\r\n ");
  56.     }
  57. }
  58.  
  59. class TestOfElements extends ParserTestCase {
  60.     function TestOfElements() {
  61.         $this->ParserTestCase();
  62.     }
  63.     function testEmptyElement() {
  64.         $this->listener->expectOnce('startHandler', array('*', 'tag', array(),FALSE));
  65.         $this->listener->expectOnce('endHandler', array('*', 'tag',FALSE));
  66.         $this->listener->expectNever('dataHandler');
  67.         $this->parser->parse('<tag></tag>');
  68.     }
  69.     function testElementWithContent() {
  70.         $this->listener->expectOnce('startHandler', array('*', 'tag', array(),FALSE));
  71.         $this->listener->expectOnce('dataHandler', array('*', 'stuff'));
  72.         $this->listener->expectOnce('endHandler', array('*', 'tag',FALSE));
  73.         $this->parser->parse('<tag>stuff</tag>');
  74.     }
  75.     function testMismatchedElements() {
  76.         $this->listener->expectArgumentsAt(0, 'startHandler', array('*', 'b', array(),FALSE));
  77.         $this->listener->expectArgumentsAt(1, 'startHandler', array('*', 'i', array(),FALSE));
  78.         $this->listener->expectArgumentsAt(0, 'endHandler', array('*', 'b',FALSE));
  79.         $this->listener->expectArgumentsAt(1, 'endHandler', array('*', 'i',FALSE));
  80.         $this->listener->expectCallCount('startHandler', 2);
  81.         $this->listener->expectCallCount('endHandler', 2);
  82.         $this->parser->parse('<b><i>stuff</b></i>');
  83.     }
  84.     function testCaseFolding() {
  85.         $this->listener->expectOnce('startHandler', array('*', 'TAG', array(),FALSE));
  86.         $this->listener->expectOnce('dataHandler', array('*', 'stuff'));
  87.         $this->listener->expectOnce('endHandler', array('*', 'TAG',FALSE));
  88.         $this->parser->set_option('XML_OPTION_CASE_FOLDING');
  89.         $this->parser->parse('<tag>stuff</tag>');
  90.     }
  91.     function testEmptyTag() {
  92.         $this->listener->expectOnce('startHandler', array('*', 'tag', array(),TRUE));
  93.         $this->listener->expectNever('dataHandler');
  94.         $this->listener->expectOnce('endHandler', array('*', 'tag',TRUE));
  95.         $this->parser->parse('<tag />');
  96.     }
  97.     function testAttributes() {
  98.         $this->listener->expectOnce(
  99.                 'startHandler',
  100.                 array('*', 'tag', array("a" => "A", "b" => "B", "c" => "C"),FALSE));
  101.         $this->parser->parse('<tag a="A" b=\'B\' c = "C">');
  102.     }
  103.     function testEmptyAttributes() {
  104.         $this->listener->expectOnce(
  105.                 'startHandler',
  106.                 array('*', 'tag', array("a" => true, "b" => true, "c" => true),FALSE));
  107.         $this->parser->parse('<tag a b c>');
  108.     }
  109.     function testNastyAttributes() {
  110.         $this->listener->expectOnce(
  111.                 'startHandler',
  112.                 array('*', 'tag', array("a" => "&%$'?<>", "b" => "\r\n\t\"", "c" => ""),FALSE));
  113.         $this->parser->parse("<tag a=\"&%$'?<>\" b='\r\n\t\"' c = ''>");
  114.     }
  115.     function testAttributesPadding() {
  116.         $this->listener->expectOnce(
  117.                 'startHandler',
  118.                 array('*', 'tag', array("a" => "A", "b" => "B", "c" => "C"),FALSE));
  119.         $this->parser->parse("<tag\ta=\"A\"\rb='B'\nc = \"C\"\n>");
  120.     }
  121. }
  122.  
  123. class TestOfProcessingInstructions extends ParserTestCase {
  124.     function TestOfProcessingInstructions() {
  125.         $this->ParserTestCase();
  126.     }
  127.     function testAllPi() {            // Not correct on whitespace.
  128.         $this->listener->expectOnce('piHandler', array('*', 'php', ' print "Hello"; '));
  129.         $this->listener->expectNever('dataHandler');
  130.         $this->listener->expectNever('startHandler');
  131.         $this->listener->expectNever('endHandler');
  132.         $this->parser->parse('<?php print "Hello"; ?>');
  133.     }
  134.     function testNestedPi() {            // Not correct on whitespace.
  135.         $this->listener->expectOnce('piHandler', array('*', 'php', ' print "Hello"; '));
  136.         $this->listener->expectArgumentsAt(0, 'dataHandler', array('*', 'a'));
  137.         $this->listener->expectArgumentsAt(1, 'dataHandler', array('*', 'b'));
  138.         $this->listener->expectCallCount('dataHandler', 2);
  139.         $this->listener->expectNever('startHandler');
  140.         $this->listener->expectNever('endHandler');
  141.         $this->parser->parse('a<?php print "Hello"; ?>b');
  142.     }
  143.     function testEscapeHandler() {
  144.         $this->listener->expectOnce(
  145.                 'escapeHandler',
  146.                 array('*', 'doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"'));
  147.         $this->parser->parse('<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">');
  148.     }
  149.     function testNestedEscapeHandler() {
  150.         $this->listener->expectOnce(
  151.                 'escapeHandler',
  152.                 array('*', 'doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"'));
  153.         $this->listener->expectArgumentsAt(0, 'dataHandler', array('*', 'a'));
  154.         $this->listener->expectArgumentsAt(1, 'dataHandler', array('*', 'b'));
  155.         $this->listener->expectCallCount('dataHandler', 2);
  156.         $this->parser->parse('a<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">b');
  157.     }
  158. }
  159.  
  160. class TestOfComments extends ParserTestCase {
  161.     function TestOfComments() {
  162.         $this->ParserTestCase();
  163.     }
  164.     function testSimple() {
  165.         $this->listener->expectOnce('escapeHandler', array('*', ' A comment '));
  166.         $this->parser->parse('<!-- A comment -->');
  167.     }
  168.     function testNasty() {
  169.         $this->listener->expectOnce(
  170.                 'escapeHandler',
  171.                 array('*', ' <tag></tag><?php ?><' . '% %> '));
  172.         $this->parser->parse('<tag><!-- <tag></tag><?php ?><' . '% %> --></tag>');
  173.     }
  174.     function testFullEscapes() {
  175.         $this->listener->expectOnce('escapeHandler', array('*', '-- A comment --'));
  176.         $this->parser->set_option('XML_OPTION_FULL_ESCAPES');
  177.         $this->parser->parse('<!-- A comment -->');
  178.     }
  179. }
  180.  
  181. class TestOfJasp extends ParserTestCase {
  182.     function TestOfJasp() {
  183.         $this->ParserTestCase();
  184.     }
  185.     function testSimple() {
  186.         $this->listener->expectOnce(
  187.                 'jaspHandler',
  188.                 array('*', ' document.write("Hello World");'));
  189.         $this->listener->expectNever('piHandler');
  190.         $this->listener->expectNever('escapeHandler');
  191.         $this->listener->expectNever('dataHandler');
  192.         $this->listener->expectNever('startHandler');
  193.         $this->listener->expectNever('endHandler');
  194.         $this->parser->parse('<' . '% document.write("Hello World");%>');
  195.     }
  196.     function testNasty() {
  197.         $this->listener->expectOnce(
  198.                 'jaspHandler',
  199.                 array('*', ' <tag a="A"><?php ?></tag><!-- comment --> '));
  200.         $this->listener->expectNever('piHandler');
  201.         $this->listener->expectNever('escapeHandler');
  202.         $this->listener->expectNever('dataHandler');
  203.         $this->listener->expectNever('startHandler');
  204.         $this->listener->expectNever('endHandler');
  205.         $this->parser->parse('<' . '% <tag a="A"><?php ?></tag><!-- comment --> %>');
  206.     }
  207.     function testInTag() {
  208.         $this->listener->expectOnce(
  209.                 'jaspHandler',
  210.                 array('*', ' document.write("Hello World");'));
  211.         $this->listener->expectNever('piHandler');
  212.         $this->listener->expectNever('escapeHandler');
  213.         $this->listener->expectNever('dataHandler');
  214.         $this->listener->expectOnce('startHandler');
  215.         $this->listener->expectOnce('endHandler');
  216.         $this->parser->parse('<tag><' . '% document.write("Hello World");%></tag>');
  217.     }
  218. }
  219. ?>