[ Index ]

PHP Cross Reference of Web Application Component Toolkit

title

Body

[close]

/tests/cases/template/compiler/ -> htmlparser.test.php (source)

   1  <?php
   2  /**
   3  * @package WACT_TESTS
   4  * @version $Id: htmlparser.test.php,v 1.14 2004/11/20 19:01:53 jeffmoore Exp $
   5  */
   6  require_once WACT_ROOT . 'template/compiler/htmlparser.inc.php';
   7  
   8  class ListenerInterface {
   9      function ListenerInterface() { }
  10      function startElement($name, $attrs) { }
  11      function endElement($name) { }
  12      function emptyElement($name, $attrs) { }
  13      function characters($data) { }
  14      function cdata($data) { }
  15      function processingInstruction($target, $data) { }
  16      function escape($data) { }
  17      function comment($data) { }
  18      function doctype($data) { }
  19      function jasp($data) { }
  20      function unexpectedEOF($data) { }
  21      function invalidEntitySyntax($data) { }
  22      function invalidAttributeSyntax() { }
  23      function setDocumentLocator(&$locator) { }
  24  }
  25  Mock::generate('ListenerInterface', 'MockListener');
  26  
  27  /**
  28  * @package WACT_TESTS
  29  */
  30  class HtmlParserTestCase extends UnitTestCase {
  31      var $parser;
  32      var $listener;
  33  
  34  	function HtmlParserTestCase($name = 'HtmlParserTestCase') {
  35          $this->UnitTestCase($name);
  36      }
  37  	function setUp() {
  38          $this->listener =& new MockListener($this);
  39          $this->parser =& new HTMLParser($this->listener);
  40      }
  41  	function tearDown() {
  42          $this->listener->tally();
  43      }
  44      
  45  	function testEmpty() {
  46          $this->listener->expectNever('jasp');
  47          $this->listener->expectNever('processingInstruction');
  48          $this->listener->expectNever('escape');
  49          $this->listener->expectNever('characters');
  50          $this->listener->expectNever('startElement');
  51          $this->listener->expectNever('endElement');
  52          $this->parser->parse('');
  53      }
  54  
  55      function testSimpledata() {
  56          $this->listener->expectOnce('characters', array('stuff'));
  57          $this->parser->parse('stuff');
  58      }
  59  
  60      function testPreservingWhiteSpace() {
  61          $this->listener->expectOnce('characters', array(" stuff\t\r\n "));
  62          $this->parser->parse(" stuff\t\r\n ");
  63      }
  64  
  65      function testEmptyElement() {
  66          $this->listener->expectOnce('startElement', array('tag', array()));
  67          $this->listener->expectOnce('endElement', array('tag'));
  68          $this->listener->expectNever('invalidAttributeSyntax');
  69          $this->parser->parse('<tag></tag>');
  70      }
  71  
  72      function testEmptyElementSelfClose() {
  73          $this->listener->expectOnce('emptyElement', array('br', array()));
  74          $this->listener->expectNever('startElement');
  75          $this->listener->expectNever('endElement');
  76          $this->parser->parse('<br/>');
  77      }
  78  
  79      function testElementWithContent() {
  80          $this->listener->expectOnce('startElement', array('tag', array()));
  81          $this->listener->expectOnce('characters', array('stuff'));
  82          $this->listener->expectOnce('endElement', array('tag'));
  83          $this->listener->expectNever('invalidAttributeSyntax');
  84          $this->parser->parse('<tag>stuff</tag>');
  85      }
  86  
  87  	function testEmptyComment() {
  88          $this->listener->expectOnce('comment', array(''));
  89          $this->listener->expectNever('characters');
  90          $this->parser->parse('<!---->');
  91      }
  92  
  93      function testElementNestedSingleQuote() {
  94          $this->listener->expectOnce('startElement', array('tag', array('attribute' => '\'')));
  95          $this->listener->expectNever('characters');
  96          $this->listener->expectNever('endElement');
  97          $this->listener->expectNever('invalidAttributeSyntax');
  98          $this->parser->parse('<tag attribute="\'">');
  99      }
 100  
 101      function testElementNestedDoubleQuote() {
 102          $this->listener->expectOnce('startElement', array('tag', array('attribute' => '"')));
 103          $this->listener->expectNever('characters');
 104          $this->listener->expectNever('endElement');
 105          $this->listener->expectNever('invalidAttributeSyntax');
 106          $this->parser->parse('<tag attribute=\'"\'>');
 107      }
 108  
 109  	function testEmptyDocType() {
 110          $this->listener->expectOnce('doctype', array('DOCTYPE'));
 111          $this->listener->expectNever('characters');
 112          $this->listener->expectNever('escape');
 113          $this->parser->parse('<!DOCTYPE>');
 114      }
 115  
 116  	function testEmptyClose() {
 117          $this->listener->expectOnce('endElement', array(''));
 118          $this->listener->expectNever('characters');
 119          $this->parser->parse('</>');
 120      }
 121  
 122  	function testEmptyJasp() {
 123          $this->listener->expectOnce('jasp', array(''));
 124          $this->listener->expectNever('characters');
 125          $this->parser->parse('<%%>');
 126      }
 127  
 128  	function testTargetOnlyProcessingInstruction() {
 129          $this->listener->expectOnce('processingInstruction', array('php', ''));
 130          $this->listener->expectNever('characters');
 131          $this->parser->parse('<?php ?>');
 132      }
 133  
 134      function testElementWithPreContent() {
 135          $this->listener->expectOnce('characters', array('stuff'));
 136          $this->listener->expectOnce('startElement', array('br', array()));
 137          $this->listener->expectNever('invalidAttributeSyntax');
 138          $this->parser->parse('stuff<br>');
 139      }
 140  
 141      function testElementWithPostContent() {
 142          $this->listener->expectOnce('startElement', array('br', array()));
 143          $this->listener->expectOnce('characters', array('stuff'));
 144          $this->listener->expectNever('invalidAttributeSyntax');
 145          $this->parser->parse('<br>stuff');
 146      }
 147  
 148      function testMismatchedElements() {
 149          $this->listener->expectArgumentsAt(0, 'startElement', array('b', array()));
 150          $this->listener->expectArgumentsAt(1, 'startElement', array('i', array()));
 151          $this->listener->expectArgumentsAt(0, 'endElement', array('b'));
 152          $this->listener->expectArgumentsAt(1, 'endElement', array('i'));
 153          $this->listener->expectCallCount('startElement', 2);
 154          $this->listener->expectCallCount('endElement', 2);
 155          $this->listener->expectNever('invalidAttributeSyntax');
 156          $this->parser->parse('<b><i>stuff</b></i>');
 157      }
 158  
 159      function testAttributes() {
 160          $this->listener->expectOnce(
 161                  'startElement',
 162                  array('tag', array("a" => "A", "b" => "B", "c" => "C")));
 163          $this->listener->expectNever('invalidAttributeSyntax');
 164          $this->parser->parse('<tag a="A" b=\'B\' c = "C">');
 165      }
 166  
 167      function testEmptyAttributes() {
 168          $this->listener->expectOnce(
 169                  'startElement',
 170                  array('tag', array("a" => NULL, "b" => NULL, "c" => NULL)));
 171          $this->listener->expectNever('invalidAttributeSyntax');
 172          $this->parser->parse('<tag a b c>');
 173      }
 174  
 175      function testNastyAttributes() {
 176          $this->listener->expectOnce(
 177                  'startElement',
 178                  array('tag', array("a" => "&%$'?<>", "b" => "\r\n\t\"", "c" => "")));
 179          $this->listener->expectNever('invalidAttributeSyntax');
 180          $this->parser->parse("<tag a=\"&%$'?<>\" b='\r\n\t\"' c = ''>");
 181      }
 182  
 183      function testAttributesPadding() {
 184          $this->listener->expectOnce(
 185                  'startElement',
 186                  array('tag', array("a" => "A", "b" => "B", "c" => "C")));
 187          $this->listener->expectNever('invalidAttributeSyntax');
 188          $this->parser->parse("<tag\ta=\"A\"\rb='B'\nc = \"C\"\n>");
 189      }
 190  
 191      function testAllprocessingInstruction() {
 192          $this->listener->expectOnce('processingInstruction', array('php', 'print "Hello"; '));
 193          $this->listener->expectNever('characters');
 194          $this->listener->expectNever('startElement');
 195          $this->listener->expectNever('endElement');
 196          $this->parser->parse('<?php print "Hello"; ?>');
 197      }
 198  
 199      function testNestedprocessingInstruction() {
 200          $this->listener->expectOnce('processingInstruction', array('php', 'print "Hello"; '));
 201          $this->listener->expectArgumentsAt(0, 'characters', array('a'));
 202          $this->listener->expectArgumentsAt(1, 'characters', array('b'));
 203          $this->listener->expectCallCount('characters', 2);
 204          $this->listener->expectNever('startElement');
 205          $this->listener->expectNever('endElement');
 206          $this->parser->parse('a<?php print "Hello"; ?>b');
 207      }
 208  
 209  
 210      function testEscapeDocTypeHandler() {
 211          $this->listener->expectOnce(
 212                  'doctype',
 213                  array('doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"'));
 214          $this->parser->parse('<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">');
 215      }
 216  
 217      function testNestedDoctypeHandler() {
 218          $this->listener->expectOnce(
 219                  'doctype',
 220                  array('doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"'));
 221          $this->listener->expectArgumentsAt(0, 'characters', array('a'));
 222          $this->listener->expectArgumentsAt(1, 'characters', array('b'));
 223          $this->listener->expectCallCount('characters', 2);
 224          $this->parser->parse('a<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">b');
 225      }
 226  
 227      function testEscapeCData() {
 228          $this->listener->expectOnce(
 229              'cdata',
 230              array('string = \'A CDATA block\';'));
 231          $this->parser->parse('<![CDATA[string = \'A CDATA block\';]]>');
 232      }
 233  
 234      function testSimpleComment() {
 235          $this->listener->expectOnce('comment', array(' A comment '));
 236          $this->parser->parse('<!-- A comment -->');
 237      }
 238  
 239      function testNastyComment() {
 240          $this->listener->expectOnce(
 241                  'comment',
 242                  array(' <tag></tag><?php ?><' . '% %> '));
 243          $this->parser->parse('<tag><!-- <tag></tag><?php ?><' . '% %> --></tag>');
 244      }
 245      
 246      function testSimpleJasp() {
 247          $this->listener->expectOnce(
 248                  'jasp',
 249                  array(' document.write("Hello World");'));
 250          $this->listener->expectNever('processingInstruction');
 251          $this->listener->expectNever('comment');
 252          $this->listener->expectNever('escape');
 253          $this->listener->expectNever('characters');
 254          $this->listener->expectNever('startElement');
 255          $this->listener->expectNever('endElement');
 256          $this->parser->parse('<' . '% document.write("Hello World");%>');
 257      }
 258  
 259      function testNastyJasp() {
 260          $this->listener->expectOnce(
 261                  'jasp',
 262                  array(' <tag a="A"><?php ?></tag><!-- comment --> '));
 263          $this->listener->expectNever('processingInstruction');
 264          $this->listener->expectNever('comment');
 265          $this->listener->expectNever('escape');
 266          $this->listener->expectNever('characters');
 267          $this->listener->expectNever('startElement');
 268          $this->listener->expectNever('endElement');
 269          $this->parser->parse('<' . '% <tag a="A"><?php ?></tag><!-- comment --> %>');
 270      }
 271  
 272      function testJaspInTag() {
 273          $this->listener->expectOnce(
 274                  'jasp',
 275                  array(' document.write("Hello World");'));
 276          $this->listener->expectNever('processingInstruction');
 277          $this->listener->expectNever('escape');
 278          $this->listener->expectNever('characters');
 279          $this->listener->expectOnce('startElement');
 280          $this->listener->expectOnce('endElement');
 281          $this->parser->parse('<tag><' . '% document.write("Hello World");%></tag>');
 282      }
 283      
 284      /* 
 285      removed due to bug #1000806
 286      see http://www.w3.org/TR/REC-html40/appendix/notes.html#notes-specifying-data
 287      function testScriptElement() {
 288          $this->listener->expectOnce('startElement', array('script', array('language'=>'Javascript')));
 289          $this->listener->expectOnce('endElement', array('script'));
 290          $this->listener->expectOnce('characters', array("document.write('<B>Test<\/B>');"));
 291          $this->listener->expectNever('invalidAttributeSyntax');
 292          $this->parser->parse('<script language="Javascript">document.write(\'<B>Test<\/B>\');</script>');
 293      }
 294  
 295      function testScriptElementEmbedComment() {
 296          $this->listener->expectOnce('startElement', array('script', array('language'=>'Javascript')));
 297          $this->listener->expectOnce('endElement', array('script'));
 298          $this->listener->expectOnce('characters', array("<!-- document.write('<B>Test<\/B>'); -->"));
 299          $this->listener->expectNever('invalidAttributeSyntax');
 300          $this->parser->parse('<script language="Javascript"><!-- document.write(\'<B>Test<\/B>\'); --></script>');
 301      }
 302      */
 303  }
 304  
 305  class HtmlParserTruncatedTestCase extends UnitTestCase {
 306      var $parser;
 307      var $listener;
 308  
 309  	function HtmlParserTruncatedTestCase($name = 'HtmlParserTruncatedTestCase') {
 310          $this->UnitTestCase($name);
 311      }
 312  	function setUp() {
 313          $this->listener =& new MockListener($this);
 314          $this->parser =& new HTMLParser($this->listener);
 315      }
 316  	function tearDown() {
 317          $this->listener->tally();
 318      }
 319      
 320  	function testTruncatedOpen() {
 321          $this->listener->expectOnce('characters', array('stuff'));
 322          $this->listener->expectOnce('unexpectedEOF', array('<'));
 323          $this->listener->expectNever('startElement');
 324          $this->parser->parse('stuff<');
 325      }
 326  
 327  	function testTruncatedEmptyClose() {
 328          $this->listener->expectOnce('characters', array('stuff'));
 329          $this->listener->expectOnce('unexpectedEOF', array('</'));
 330          $this->listener->expectNever('endElement');
 331          $this->parser->parse('stuff</');
 332      }
 333  
 334  	function testTruncatedClose() {
 335          $this->listener->expectOnce('characters', array('stuff'));
 336          $this->listener->expectOnce('unexpectedEOF', array('</a'));
 337          $this->parser->parse('stuff</a');
 338          $this->listener->expectNever('endElement');
 339      }
 340  
 341  	function testTruncatedProcessingInstruction() {
 342          $this->listener->expectOnce('characters', array('stuff'));
 343          $this->listener->expectOnce('unexpectedEOF', array('<?'));
 344          $this->listener->expectNever('startElement');
 345          $this->parser->parse('stuff<?');
 346      }
 347  
 348  	function testTruncatedProcessingInstructionTarget() {
 349          $this->listener->expectOnce('characters', array('stuff'));
 350          $this->listener->expectOnce('unexpectedEOF', array('<?php'));
 351          $this->listener->expectNever('processingInstruction');
 352          $this->parser->parse('stuff<?php');
 353      }
 354  
 355  	function testTruncatedProcessingInstructionNoClose() {
 356          $this->listener->expectOnce('characters', array('stuff'));
 357          $this->listener->expectOnce('unexpectedEOF', array('<?php '));
 358          $this->listener->expectNever('processingInstruction');
 359          $this->parser->parse('stuff<?php ');
 360      }
 361  
 362  	function testTruncatedJasp() {
 363          $this->listener->expectOnce('characters', array('stuff'));
 364          $this->listener->expectOnce('unexpectedEOF', array('<%'));
 365          $this->listener->expectNever('jasp');
 366          $this->parser->parse('stuff<%');
 367      }
 368  
 369  	function testTruncatedJaspNoClose() {
 370          $this->listener->expectOnce('characters', array('stuff'));
 371          $this->listener->expectOnce('unexpectedEOF', array('<% more stuff'));
 372          $this->listener->expectNever('jasp');
 373          $this->parser->parse('stuff<% more stuff');
 374      }
 375  
 376  	function testTruncatedComment() {
 377          $this->listener->expectOnce('characters', array('stuff'));
 378          $this->listener->expectOnce('unexpectedEOF', array('<!--'));
 379          $this->listener->expectNever('escape');
 380          $this->listener->expectNever('comment');
 381          $this->parser->parse('stuff<!--');
 382      }
 383  
 384  	function testTruncatedCommentNoClose() {
 385          $this->listener->expectOnce('characters', array('stuff'));
 386          $this->listener->expectOnce('unexpectedEOF', array('<!-- blah'));
 387          $this->listener->expectNever('escape');
 388          $this->listener->expectNever('comment');
 389          $this->parser->parse('stuff<!-- blah');
 390      }
 391  
 392  	function testTruncatedDocType() {
 393          $this->listener->expectOnce('characters', array('stuff'));
 394          $this->listener->expectOnce('unexpectedEOF', array('<!doctype'));
 395          $this->listener->expectNever('escape');
 396          $this->parser->parse('stuff<!doctype');
 397      }
 398  
 399  	function testTruncatedDocTypetNoClose() {
 400          $this->listener->expectOnce('characters', array('stuff'));
 401          $this->listener->expectOnce('unexpectedEOF', array('<!doctype blah'));
 402          $this->listener->expectNever('escape');
 403          $this->parser->parse('stuff<!doctype blah');
 404      }
 405  
 406  	function testTruncatedOpenElementChar() {
 407          $this->listener->expectOnce('characters', array('stuff'));
 408          $this->listener->expectOnce('unexpectedEOF', array('<a'));
 409          $this->listener->expectNever('startElement');
 410          $this->parser->parse('stuff<a');
 411      }
 412  
 413  	function testTruncatedOpenElement() {
 414          $this->listener->expectOnce('characters', array('stuff'));
 415          $this->listener->expectOnce('unexpectedEOF', array('<tag'));
 416          $this->listener->expectNever('startElement');
 417          $this->parser->parse('stuff<tag');
 418      }
 419  
 420  	function testTruncatedOpenElementSpace() {
 421          $this->listener->expectOnce('characters', array('stuff'));
 422          $this->listener->expectOnce('unexpectedEOF', array('<tag '));
 423          $this->listener->expectNever('startElement');
 424          $this->parser->parse('stuff<tag ');
 425      }
 426  
 427  	function testTruncatedOpenElementMinimizedAttribute() {
 428          $this->listener->expectOnce('characters', array('stuff'));
 429          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute'));
 430          $this->listener->expectNever('startElement');
 431          $this->parser->parse('stuff<tag attribute');
 432      }
 433  
 434      function testTruncatedOpenElementMinimizedAttributeSpace() {
 435          $this->listener->expectOnce('characters', array('stuff'));
 436          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute '));
 437          $this->listener->expectNever('startElement');
 438          $this->parser->parse('stuff<tag attribute ');
 439      }
 440  
 441  	function testTruncatedOpenElementAttribute() {
 442          $this->listener->expectOnce('characters', array('stuff'));
 443          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute='));
 444          $this->listener->expectNever('startElement');
 445          $this->parser->parse('stuff<tag attribute=');
 446      }
 447  
 448  	function testTruncatedOpenElementAttributeSpace() {
 449          $this->listener->expectOnce('characters', array('stuff'));
 450          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute= '));
 451          $this->listener->expectNever('startElement');
 452          $this->parser->parse('stuff<tag attribute= ');
 453      }
 454  
 455  	function testTruncatedOpenElementAttributeNoQuote() {
 456          $this->listener->expectOnce('characters', array('stuff'));
 457          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute=value'));
 458          $this->listener->expectNever('startElement');
 459          $this->parser->parse('stuff<tag attribute=value');
 460      }
 461  
 462  	function testTruncatedOpenElementAttributeDoubleQuote() {
 463          $this->listener->expectOnce('characters', array('stuff'));
 464          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute="'));
 465          $this->listener->expectNever('startElement');
 466          $this->parser->parse('stuff<tag attribute="');
 467      }
 468  
 469      function testTruncatedOpenElementAttributeDoubleQuoteNoClose() {
 470          $this->listener->expectOnce('characters', array('stuff'));
 471          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute="value'));
 472          $this->listener->expectNever('startElement');
 473          $this->parser->parse('stuff<tag attribute="value');
 474      }
 475  
 476      function testTruncatedOpenElementAttributeDoubleQuoteValue() {
 477          $this->listener->expectOnce('characters', array('stuff'));
 478          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute="value"'));
 479          $this->listener->expectNever('startElement');
 480          $this->parser->parse('stuff<tag attribute="value"');
 481      }
 482  
 483  	function testTruncatedOpenElementAttributeSingleQuote() {
 484          $this->listener->expectOnce('characters', array('stuff'));
 485          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute=\''));
 486          $this->listener->expectNever('startElement');
 487          $this->parser->parse('stuff<tag attribute=\'');
 488      }
 489  
 490      function testTruncatedOpenElementAttributeSingleQuoteNoClose() {
 491          $this->listener->expectOnce('characters', array('stuff'));
 492          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute=\'value'));
 493          $this->listener->expectNever('startElement');
 494          $this->parser->parse('stuff<tag attribute=\'value');
 495      }
 496  
 497      function testTruncatedOpenElementAttributeSingleQuoteValue() {
 498          $this->listener->expectOnce('characters', array('stuff'));
 499          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute=\'value\''));
 500          $this->listener->expectNever('startElement');
 501          $this->parser->parse('stuff<tag attribute=\'value\'');
 502      }
 503  
 504  	function testTruncatedOpenElementClose() {
 505          $this->listener->expectOnce('characters', array('stuff'));
 506          $this->listener->expectOnce('unexpectedEOF', array('<tag attribute=\'value\'/'));
 507          $this->listener->expectNever('startElement');
 508          $this->parser->parse('stuff<tag attribute=\'value\'/');
 509      }
 510  
 511  }
 512  
 513  class HtmlParserMalformedTestCase extends UnitTestCase {
 514      var $parser;
 515      var $listener;
 516  
 517  	function HtmlParserMalformedTestCase($name = 'HtmlParserMalformedTestCase') {
 518          $this->UnitTestCase($name);
 519      }
 520  	function setUp() {
 521          $this->listener =& new MockListener($this);
 522          $this->parser =& new HTMLParser($this->listener);
 523      }
 524  	function tearDown() {
 525          $this->listener->tally();
 526      }
 527  	function testMalformedJasp() {
 528          $this->listener->expectOnce('characters', array('stuff'));
 529          $this->listener->expectOnce('unexpectedEOF', array('<%>'));
 530          $this->listener->expectNever('jasp');
 531          $this->parser->parse('stuff<%>');
 532      }
 533  
 534  	function testMalformedProcessingInstruction() {
 535          $this->listener->expectOnce('characters', array('stuff'));
 536          $this->listener->expectOnce('unexpectedEOF', array('<?>'));
 537          $this->listener->expectNever('processingInstruction');
 538          $this->parser->parse('stuff<?>');
 539      }
 540  
 541  	function testMalformedProcessingInstruction2() {
 542          $this->listener->expectOnce('unexpectedEOF', array('<??>'));
 543          $this->listener->expectNever('processingInstruction');
 544          $this->listener->expectNever('characters');
 545          $this->parser->parse('<??>');
 546      }
 547  
 548  	function testMalformedComment() {
 549          $this->listener->expectOnce('unexpectedEOF', array('<!--x->'));
 550          $this->listener->expectNever('escape');
 551          $this->listener->expectNever('comment');
 552          $this->listener->expectNever('characters');
 553          $this->parser->parse('<!--x->');
 554      }
 555  
 556  	function testOpenElementMalformedClose() {
 557          $this->listener->expectOnce('characters', array('stuff'));
 558          $this->listener->expectOnce('invalidEntitySyntax', array('<tag attribute=\'value\'/morestuff'));
 559          $this->listener->expectNever('startElement');
 560          $this->parser->parse('stuff<tag attribute=\'value\'/morestuff');
 561      }
 562  
 563  	function testOpenElementMalformedClose2() {
 564          $this->listener->expectOnce('characters', array('stuff'));
 565          $this->listener->expectOnce('invalidEntitySyntax', array('<tag attribute=\'value\'/morestuff>'));
 566          $this->listener->expectNever('startElement');
 567          $this->parser->parse('stuff<tag attribute=\'value\'/morestuff>');
 568      }
 569  
 570      function testElementNestedSingleQuote() {
 571          $this->listener->expectOnce('startElement', array('tag', array('attribute' => '', "'" => NULL)));
 572          $this->listener->expectOnce('invalidAttributeSyntax');
 573          $this->listener->expectNever('characters');
 574          $this->listener->expectNever('endElement');
 575          $this->parser->parse('<tag attribute=\'\'\'>');
 576      }
 577  
 578      function testElementNestedDoubleQuote() {
 579          $this->listener->expectOnce('startElement', array('tag', array('attribute' => '', '"' => NULL)));
 580          $this->listener->expectOnce('invalidAttributeSyntax');
 581          $this->listener->expectNever('characters');
 582          $this->listener->expectNever('endElement');
 583          $this->parser->parse('<tag attribute=""">');
 584      }
 585  
 586      function testElementMalformedAttribute() {
 587          $this->listener->expectOnce('startElement', array('tag', array('attribute' => 'test', 'extra' => NULL)));
 588          $this->listener->expectOnce('invalidAttributeSyntax');
 589          $this->listener->expectNever('characters');
 590          $this->listener->expectNever('endElement');
 591          $this->parser->parse('<tag attribute="test"extra>');
 592      }
 593  
 594  }
 595  
 596  ?>


Generated: Sun Nov 28 19:36:09 2004 Cross-referenced by PHPXref 0.5