/inc/app/siteconnector/lib/Ext/PEAR/XML/HTMLSax/docs/tests/xml_htmlsax_test.php

https://github.com/durand54/sitellite · PHP · 219 lines · 209 code · 6 blank · 4 comment · 0 complexity · 4ea3a6bda9e5cd7ab2e3071bb9709359 MD5 · raw file

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