| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| <head> |
| <meta http-equiv="content-type" content="text/html;charset=utf-8" /> |
| <title>t012lexerXML</title> |
| |
| <!-- ANTLR includes --> |
| <script type="text/javascript" src="../../lib/antlr3-all.js"></script> |
| <script type="text/javascript" src="t012lexerXML.js"></script> |
| |
| <!-- JsUnit include --> |
| <script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> |
| |
| <!-- Test Code --> |
| <script type="text/javascript"> |
| function TLexer() { |
| TLexer.superclass.constructor.apply(this, arguments); |
| } |
| org.antlr.lang.extend(TLexer, t012lexerXML, { |
| reportError: function(re) { |
| /* don't recover, just crash */ |
| throw re; |
| } |
| }); |
| |
| function testValid() { |
| var xinput = [ |
| "<?xml version='1.0'?>", |
| "<!DOCTYPE component [", |
| "<!ELEMENT component (PCDATA|sub)*>", |
| "<!ATTLIST component", |
| " attr CDATA #IMPLIED", |
| " attr2 CDATA #IMPLIED", |
| ">", |
| "<!ELMENT sub EMPTY>", |
| "", |
| "]>", |
| "<component attr=\"val'ue\" attr2='val\"ue'>", |
| "<!-- This is a comment -->", |
| "Text", |
| "<![CDATA[huhu]]>", |
| "öäüß", |
| "&", |
| "<", |
| "<?xtal cursor='11'?>", |
| "<sub/>", |
| "<sub></sub>", |
| "</component>" |
| ].join("\n"), |
| xoutput = [ |
| "XML declaration", |
| "Attr: version='1.0'", |
| "ROOTELEMENT: component", |
| "INTERNAL DTD: [", |
| "<!ELEMENT component (PCDATA|sub)*>", |
| "<!ATTLIST component", |
| " attr CDATA #IMPLIED", |
| " attr2 CDATA #IMPLIED", |
| ">", |
| "<!ELMENT sub EMPTY>", |
| "", |
| "]", |
| "Start Tag: component", |
| "Attr: attr=\"val'ue\"", |
| "Attr: attr2='val\"ue'", |
| "PCDATA: \"", |
| "\"", |
| "Comment: \"<!-- This is a comment -->\"", |
| "PCDATA: \"", |
| "Text", |
| "\"", |
| "CDATA: \"<![CDATA[huhu]]>\"", |
| "PCDATA: \"", |
| "öäüß", |
| "&", |
| "<", |
| "\"", |
| "PI: xtal", |
| "Attr: cursor='11'", |
| "PCDATA: \"", |
| "\"", |
| "Empty Element: sub", |
| "PCDATA: \"", |
| "\"", |
| "Start Tag: sub", |
| "End Tag: sub", |
| "PCDATA: \"", |
| "\"", |
| "End Tag: component" |
| ].join("\n"), |
| stream = new org.antlr.runtime.ANTLRStringStream(xinput), |
| lexer = new TLexer(stream), |
| token; |
| |
| while (true) { |
| token = lexer.nextToken(); |
| if (token.type == org.antlr.runtime.Token.EOF) { |
| break; |
| } |
| } |
| |
| assertEquals(xoutput, lexer.lout.join("\n")); |
| } |
| |
| function testMalformedInput1() { |
| var input = [ |
| "<?xml version='1.0'?>", |
| "<document d>", |
| "</document>" |
| ].join("\n"), |
| stream = new org.antlr.runtime.ANTLRStringStream(input), |
| lexer = new TLexer(stream), |
| token; |
| |
| try { |
| while (true) { |
| token = lexer.nextToken(); |
| if (token.type == org.antlr.runtime.Token.EOF) { |
| break; |
| } |
| } |
| fail("block should have thrown an nvae"); |
| } catch(exc) { |
| assert(exc instanceof org.antlr.runtime.NoViableAltException); |
| assertEquals(exc.getUnexpectedType(), ">"); |
| assertEquals(exc.charPositionInLine, 11); |
| assertEquals(exc.line, 2); |
| } |
| } |
| |
| function testMalformedInput2() { |
| var input = [ |
| "<?tml version='1.0'?>", |
| "<document>", |
| "</document>" |
| ].join("\n"), |
| stream = new org.antlr.runtime.ANTLRStringStream(input), |
| lexer = new TLexer(stream), |
| token; |
| |
| try { |
| while (true) { |
| token = lexer.nextToken(); |
| if (token.type == org.antlr.runtime.Token.EOF) { |
| break; |
| } |
| } |
| fail("block should have thrown an nvae"); |
| } catch(exc) { |
| assert(exc instanceof org.antlr.runtime.MismatchedSetException); |
| assertEquals(exc.getUnexpectedType(), "t"); |
| assertEquals(exc.charPositionInLine, 2); |
| assertEquals(exc.line, 1); |
| } |
| } |
| |
| function testMalformedInput3() { |
| var input = [ |
| "<?xml version='1.0'?>", |
| "<docu ment attr=\"foo\">", |
| "</document>" |
| ].join("\n"), |
| stream = new org.antlr.runtime.ANTLRStringStream(input), |
| lexer = new TLexer(stream), |
| token; |
| |
| try { |
| while (true) { |
| token = lexer.nextToken(); |
| if (token.type == org.antlr.runtime.Token.EOF) { |
| break; |
| } |
| } |
| fail("block should have thrown an nvae"); |
| } catch(exc) { |
| assert(exc instanceof org.antlr.runtime.NoViableAltException); |
| assertEquals(exc.getUnexpectedType(), "a"); |
| assertEquals(exc.charPositionInLine, 11); |
| assertEquals(exc.line, 2); |
| } |
| } |
| </script> |
| </head> |
| <body> |
| <h1>t012lexerXML</h1> |
| </body> |
| </html> |