xref: /aosp_15_r20/external/antlr/runtime/JavaScript/tests/functional/t012lexerXML.html (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2*16467b97STreehugger Robot<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3*16467b97STreehugger Robot<head>
4*16467b97STreehugger Robot<meta http-equiv="content-type" content="text/html;charset=utf-8" />
5*16467b97STreehugger Robot<title>t012lexerXML</title>
6*16467b97STreehugger Robot
7*16467b97STreehugger Robot<!-- ANTLR includes -->
8*16467b97STreehugger Robot<script type="text/javascript" src="../../lib/antlr3-all.js"></script>
9*16467b97STreehugger Robot<script type="text/javascript" src="t012lexerXML.js"></script>
10*16467b97STreehugger Robot
11*16467b97STreehugger Robot<!-- JsUnit include -->
12*16467b97STreehugger Robot<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
13*16467b97STreehugger Robot
14*16467b97STreehugger Robot<!-- Test Code -->
15*16467b97STreehugger Robot<script type="text/javascript">
16*16467b97STreehugger Robot    function TLexer() {
17*16467b97STreehugger Robot        TLexer.superclass.constructor.apply(this, arguments);
18*16467b97STreehugger Robot    }
19*16467b97STreehugger Robot    org.antlr.lang.extend(TLexer, t012lexerXML, {
20*16467b97STreehugger Robot        reportError: function(re) {
21*16467b97STreehugger Robot            /* don't recover, just crash */
22*16467b97STreehugger Robot            throw re;
23*16467b97STreehugger Robot        }
24*16467b97STreehugger Robot    });
25*16467b97STreehugger Robot
26*16467b97STreehugger Robot    function testValid() {
27*16467b97STreehugger Robot        var xinput = [
28*16467b97STreehugger Robot                "<?xml version='1.0'?>",
29*16467b97STreehugger Robot                "<!DOCTYPE component [",
30*16467b97STreehugger Robot                "<!ELEMENT component (PCDATA|sub)*>",
31*16467b97STreehugger Robot                "<!ATTLIST component",
32*16467b97STreehugger Robot                "          attr CDATA #IMPLIED",
33*16467b97STreehugger Robot                "          attr2 CDATA #IMPLIED",
34*16467b97STreehugger Robot                ">",
35*16467b97STreehugger Robot                "<!ELMENT sub EMPTY>",
36*16467b97STreehugger Robot                "",
37*16467b97STreehugger Robot                "]>",
38*16467b97STreehugger Robot                "<component attr=\"val'ue\" attr2='val\"ue'>",
39*16467b97STreehugger Robot                "<!-- This is a comment -->",
40*16467b97STreehugger Robot                "Text",
41*16467b97STreehugger Robot                "<![CDATA[huhu]]>",
42*16467b97STreehugger Robot                "öäüß",
43*16467b97STreehugger Robot                "&amp;",
44*16467b97STreehugger Robot                "&lt;",
45*16467b97STreehugger Robot                "<?xtal cursor='11'?>",
46*16467b97STreehugger Robot                "<sub/>",
47*16467b97STreehugger Robot                "<sub></sub>",
48*16467b97STreehugger Robot                "</component>"
49*16467b97STreehugger Robot            ].join("\n"),
50*16467b97STreehugger Robot            xoutput = [
51*16467b97STreehugger Robot                "XML declaration",
52*16467b97STreehugger Robot                "Attr: version='1.0'",
53*16467b97STreehugger Robot                "ROOTELEMENT: component",
54*16467b97STreehugger Robot                "INTERNAL DTD: [",
55*16467b97STreehugger Robot                "<!ELEMENT component (PCDATA|sub)*>",
56*16467b97STreehugger Robot                "<!ATTLIST component",
57*16467b97STreehugger Robot                "          attr CDATA #IMPLIED",
58*16467b97STreehugger Robot                "          attr2 CDATA #IMPLIED",
59*16467b97STreehugger Robot                ">",
60*16467b97STreehugger Robot                "<!ELMENT sub EMPTY>",
61*16467b97STreehugger Robot                "",
62*16467b97STreehugger Robot                "]",
63*16467b97STreehugger Robot                "Start Tag: component",
64*16467b97STreehugger Robot                "Attr: attr=\"val'ue\"",
65*16467b97STreehugger Robot                "Attr: attr2='val\"ue'",
66*16467b97STreehugger Robot                "PCDATA: \"",
67*16467b97STreehugger Robot                "\"",
68*16467b97STreehugger Robot                "Comment: \"<!-- This is a comment -->\"",
69*16467b97STreehugger Robot                "PCDATA: \"",
70*16467b97STreehugger Robot                "Text",
71*16467b97STreehugger Robot                "\"",
72*16467b97STreehugger Robot                "CDATA: \"<![CDATA[huhu]]>\"",
73*16467b97STreehugger Robot                "PCDATA: \"",
74*16467b97STreehugger Robot                "öäüß",
75*16467b97STreehugger Robot                "&amp;",
76*16467b97STreehugger Robot                "&lt;",
77*16467b97STreehugger Robot                "\"",
78*16467b97STreehugger Robot                "PI: xtal",
79*16467b97STreehugger Robot                "Attr: cursor='11'",
80*16467b97STreehugger Robot                "PCDATA: \"",
81*16467b97STreehugger Robot                "\"",
82*16467b97STreehugger Robot                "Empty Element: sub",
83*16467b97STreehugger Robot                "PCDATA: \"",
84*16467b97STreehugger Robot                "\"",
85*16467b97STreehugger Robot                "Start Tag: sub",
86*16467b97STreehugger Robot                "End Tag: sub",
87*16467b97STreehugger Robot                "PCDATA: \"",
88*16467b97STreehugger Robot                "\"",
89*16467b97STreehugger Robot                "End Tag: component"
90*16467b97STreehugger Robot            ].join("\n"),
91*16467b97STreehugger Robot            stream = new org.antlr.runtime.ANTLRStringStream(xinput),
92*16467b97STreehugger Robot            lexer = new TLexer(stream),
93*16467b97STreehugger Robot            token;
94*16467b97STreehugger Robot
95*16467b97STreehugger Robot        while (true) {
96*16467b97STreehugger Robot            token = lexer.nextToken();
97*16467b97STreehugger Robot            if (token.type == org.antlr.runtime.Token.EOF) {
98*16467b97STreehugger Robot                break;
99*16467b97STreehugger Robot            }
100*16467b97STreehugger Robot        }
101*16467b97STreehugger Robot
102*16467b97STreehugger Robot        assertEquals(xoutput, lexer.lout.join("\n"));
103*16467b97STreehugger Robot    }
104*16467b97STreehugger Robot
105*16467b97STreehugger Robot    function testMalformedInput1() {
106*16467b97STreehugger Robot        var input = [
107*16467b97STreehugger Robot            "<?xml version='1.0'?>",
108*16467b97STreehugger Robot            "<document d>",
109*16467b97STreehugger Robot            "</document>"
110*16467b97STreehugger Robot        ].join("\n"),
111*16467b97STreehugger Robot        stream = new org.antlr.runtime.ANTLRStringStream(input),
112*16467b97STreehugger Robot        lexer = new TLexer(stream),
113*16467b97STreehugger Robot        token;
114*16467b97STreehugger Robot
115*16467b97STreehugger Robot        try {
116*16467b97STreehugger Robot            while (true) {
117*16467b97STreehugger Robot                token = lexer.nextToken();
118*16467b97STreehugger Robot                if (token.type == org.antlr.runtime.Token.EOF) {
119*16467b97STreehugger Robot                    break;
120*16467b97STreehugger Robot                }
121*16467b97STreehugger Robot            }
122*16467b97STreehugger Robot            fail("block should have thrown an nvae");
123*16467b97STreehugger Robot        } catch(exc) {
124*16467b97STreehugger Robot            assert(exc instanceof org.antlr.runtime.NoViableAltException);
125*16467b97STreehugger Robot            assertEquals(exc.getUnexpectedType(), ">");
126*16467b97STreehugger Robot            assertEquals(exc.charPositionInLine, 11);
127*16467b97STreehugger Robot            assertEquals(exc.line, 2);
128*16467b97STreehugger Robot        }
129*16467b97STreehugger Robot    }
130*16467b97STreehugger Robot
131*16467b97STreehugger Robot    function testMalformedInput2() {
132*16467b97STreehugger Robot        var input = [
133*16467b97STreehugger Robot            "<?tml version='1.0'?>",
134*16467b97STreehugger Robot            "<document>",
135*16467b97STreehugger Robot            "</document>"
136*16467b97STreehugger Robot        ].join("\n"),
137*16467b97STreehugger Robot        stream = new org.antlr.runtime.ANTLRStringStream(input),
138*16467b97STreehugger Robot        lexer = new TLexer(stream),
139*16467b97STreehugger Robot        token;
140*16467b97STreehugger Robot
141*16467b97STreehugger Robot        try {
142*16467b97STreehugger Robot            while (true) {
143*16467b97STreehugger Robot                token = lexer.nextToken();
144*16467b97STreehugger Robot                if (token.type == org.antlr.runtime.Token.EOF) {
145*16467b97STreehugger Robot                    break;
146*16467b97STreehugger Robot                }
147*16467b97STreehugger Robot            }
148*16467b97STreehugger Robot            fail("block should have thrown an nvae");
149*16467b97STreehugger Robot        } catch(exc) {
150*16467b97STreehugger Robot            assert(exc instanceof org.antlr.runtime.MismatchedSetException);
151*16467b97STreehugger Robot            assertEquals(exc.getUnexpectedType(), "t");
152*16467b97STreehugger Robot            assertEquals(exc.charPositionInLine, 2);
153*16467b97STreehugger Robot            assertEquals(exc.line, 1);
154*16467b97STreehugger Robot        }
155*16467b97STreehugger Robot    }
156*16467b97STreehugger Robot
157*16467b97STreehugger Robot    function testMalformedInput3() {
158*16467b97STreehugger Robot        var input = [
159*16467b97STreehugger Robot        "<?xml version='1.0'?>",
160*16467b97STreehugger Robot        "<docu ment attr=\"foo\">",
161*16467b97STreehugger Robot        "</document>"
162*16467b97STreehugger Robot        ].join("\n"),
163*16467b97STreehugger Robot        stream = new org.antlr.runtime.ANTLRStringStream(input),
164*16467b97STreehugger Robot        lexer = new TLexer(stream),
165*16467b97STreehugger Robot        token;
166*16467b97STreehugger Robot
167*16467b97STreehugger Robot        try {
168*16467b97STreehugger Robot            while (true) {
169*16467b97STreehugger Robot                token = lexer.nextToken();
170*16467b97STreehugger Robot                if (token.type == org.antlr.runtime.Token.EOF) {
171*16467b97STreehugger Robot                    break;
172*16467b97STreehugger Robot                }
173*16467b97STreehugger Robot            }
174*16467b97STreehugger Robot            fail("block should have thrown an nvae");
175*16467b97STreehugger Robot        } catch(exc) {
176*16467b97STreehugger Robot            assert(exc instanceof org.antlr.runtime.NoViableAltException);
177*16467b97STreehugger Robot            assertEquals(exc.getUnexpectedType(), "a");
178*16467b97STreehugger Robot            assertEquals(exc.charPositionInLine, 11);
179*16467b97STreehugger Robot            assertEquals(exc.line, 2);
180*16467b97STreehugger Robot        }
181*16467b97STreehugger Robot    }
182*16467b97STreehugger Robot</script>
183*16467b97STreehugger Robot</head>
184*16467b97STreehugger Robot<body>
185*16467b97STreehugger Robot    <h1>t012lexerXML</h1>
186*16467b97STreehugger Robot</body>
187*16467b97STreehugger Robot</html>
188