001: /*
002: * Copyright (C) Chaperon. All rights reserved.
003: * -------------------------------------------------------------------------
004: * This software is published under the terms of the Apache Software License
005: * version 1.1, a copy of which has been included with this distribution in
006: * the LICENSE file.
007: */
008:
009: package net.sourceforge.chaperon.test;
010:
011: import junit.framework.Test;
012: import junit.framework.TestCase;
013: import junit.framework.TestSuite;
014:
015: import net.sourceforge.chaperon.build.Automaton;
016: import net.sourceforge.chaperon.common.ConsoleLog;
017: import net.sourceforge.chaperon.model.grammar.Grammar;
018: import net.sourceforge.chaperon.model.grammar.GrammarFactory;
019: import net.sourceforge.chaperon.process.GeneralParserProcessor;
020:
021: import org.custommonkey.xmlunit.Diff;
022:
023: import org.w3c.dom.Document;
024:
025: import org.xml.sax.InputSource;
026: import org.xml.sax.XMLReader;
027:
028: import javax.xml.parsers.SAXParserFactory;
029: import javax.xml.transform.TransformerFactory;
030: import javax.xml.transform.dom.DOMResult;
031: import javax.xml.transform.dom.DOMSource;
032: import javax.xml.transform.sax.SAXTransformerFactory;
033: import javax.xml.transform.sax.TransformerHandler;
034: import javax.xml.transform.stream.StreamResult;
035:
036: public class GeneralParserProcessorTestCase extends TestCase {
037: public GeneralParserProcessorTestCase(String name) {
038: super (name);
039: }
040:
041: public void testTest01() throws Exception {
042: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test1.xgrm");
043: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
044: Document result = process(processor,
045: "net/sourceforge/chaperon/test/parser/test1.in");
046: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test1.out");
047:
048: assertEqual(expected, result);
049: }
050:
051: /*
052: public void testTest02() throws Exception
053: {
054: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test2.xgrm");
055: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
056: Document result = process(processor, "net/sourceforge/chaperon/test/parser/test2.in");
057: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test2.out");
058:
059: assertEqual(expected, result);
060: }*/
061: public void testTest03() throws Exception {
062: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test3.xgrm");
063: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
064: Document result = process(processor,
065: "net/sourceforge/chaperon/test/parser/test3.in");
066: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test3.out");
067:
068: assertEqual(expected, result);
069: }
070:
071: public void testTest04() throws Exception {
072: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test4.xgrm");
073: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
074: Document result = process(processor,
075: "net/sourceforge/chaperon/test/parser/test4.in");
076: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test4.out");
077:
078: assertEqual(expected, result);
079: }
080:
081: public void testTest04_2() throws Exception {
082: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test15.xgrm");
083: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
084: Document result = process(processor,
085: "net/sourceforge/chaperon/test/parser/test15.in");
086: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test15.out");
087:
088: assertEqual(expected, result);
089: }
090:
091: /* public void testTest05() throws Exception
092: {
093: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test5.xgrm");
094: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
095: Document result = process(processor, "net/sourceforge/chaperon/test/parser/test5.in");
096: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test5.out");
097:
098: assertEqual(expected, result);
099: }*/
100: /* public void testTest06() throws Exception
101: {
102: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test6.xgrm");
103: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
104: Document result = process(processor, "net/sourceforge/chaperon/test/parser/test6.in");
105: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test6.out");
106:
107: assertEqual(expected, result);
108: }*/
109: /* public void testTest07() throws Exception
110: {
111: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test7.xgrm");
112: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
113: Document result = process(processor, "net/sourceforge/chaperon/test/parser/test7.in");
114: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test7.out");
115:
116: assertEqual(expected, result);
117: }*/
118: /* public void testTest08() throws Exception
119: {
120: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test8.xgrm");
121: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
122: Document result = process(processor, "net/sourceforge/chaperon/test/parser/test8.in");
123: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test8.out");
124:
125: assertEqual(expected, result);
126: }*/
127: /* public void testTest09() throws Exception
128: {
129: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test9.xgrm");
130: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
131: Document result = process(processor, "net/sourceforge/chaperon/test/parser/test9.in");
132: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test9.out");
133:
134: assertEqual(expected, result);
135: }*/
136: /* public void testTest10() throws Exception
137: {
138: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test10.xgrm");
139: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
140: Document result = process(processor, "net/sourceforge/chaperon/test/parser/test10.in");
141: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test10.out");
142:
143: assertEqual(expected, result);
144: }
145:
146: public void testTest11() throws Exception
147: {
148: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test11.xgrm");
149: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
150: Document result = process(processor, "net/sourceforge/chaperon/test/parser/test11.in");
151: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test11.out");
152:
153: assertEqual(expected, result);
154: }
155:
156: public void testTest12() throws Exception
157: {
158: System.out.println("=========================================");
159: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test12.xgrm");
160: System.out.println("grammar:\n"+grammar);
161: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
162: Document result = process(processor, "net/sourceforge/chaperon/test/parser/test12.in");
163: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test12.out");
164:
165: assertEqual(expected, result);
166: }*/
167: /* Endless loop*/
168: public void testTest13() throws Exception {
169: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test13.xgrm");
170: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
171: Document result = process(processor,
172: "net/sourceforge/chaperon/test/parser/test13.in");
173: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test13.out");
174:
175: assertEqual(expected, result);
176: }
177:
178: public void testTest14() throws Exception {
179: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test14.xgrm");
180: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
181: Document result = process(processor,
182: "net/sourceforge/chaperon/test/parser/test14.in");
183: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test14.out");
184:
185: assertEqual(expected, result);
186: }
187:
188: public void testTest16() throws Exception {
189: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test16.xgrm");
190: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
191: Document result = process(processor,
192: "net/sourceforge/chaperon/test/parser/test16.in");
193: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test16.out");
194:
195: assertEqual(expected, result);
196: }
197:
198: public void testTest17() throws Exception {
199: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test17.xgrm");
200: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
201: Document result = process(processor,
202: "net/sourceforge/chaperon/test/parser/test17.in");
203: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test17.out");
204:
205: assertEqual(expected, result);
206: }
207:
208: public void testTest18() throws Exception {
209: Grammar grammar = getGrammar("net/sourceforge/chaperon/test/parser/test18.xgrm");
210: GeneralParserProcessor processor = getGeneralParserProcessor(grammar);
211: Document result = process(processor,
212: "net/sourceforge/chaperon/test/parser/test18.in");
213: Document expected = getDocument("net/sourceforge/chaperon/test/parser/test18.out");
214:
215: assertEqual(expected, result);
216: }
217:
218: private GeneralParserProcessor getGeneralParserProcessor(
219: Grammar grammar) {
220: GeneralParserProcessor processor = new GeneralParserProcessor();
221: processor.setLog(new ConsoleLog());
222:
223: /*Automaton automaton =
224: (new AutomatonBuilder(grammar, new ConsoleLog())).getParserAutomaton();*/
225:
226: // (new AutomatonBuilder(grammar)).getParserAutomaton();
227: Automaton automaton = new Automaton(grammar, new ConsoleLog());
228:
229: assertNotNull("Test if automaton is generated", automaton);
230:
231: processor.setParserAutomaton(automaton);
232:
233: return processor;
234: }
235:
236: private Document process(GeneralParserProcessor processor, String in)
237: throws Exception {
238: SAXParserFactory parserfactory = SAXParserFactory.newInstance();
239: parserfactory.setNamespaceAware(true);
240:
241: XMLReader parser = parserfactory.newSAXParser().getXMLReader();
242:
243: SAXTransformerFactory transformerfactory = (SAXTransformerFactory) SAXTransformerFactory
244: .newInstance();
245: TransformerHandler handler = transformerfactory
246: .newTransformerHandler();
247: DOMResult result = new DOMResult();
248: handler.setResult(result);
249:
250: processor.setContentHandler(new WhitespaceFilter(handler));
251:
252: parser.setContentHandler(processor);
253: parser.parse(new InputSource(getClass().getClassLoader()
254: .getResourceAsStream(in)));
255:
256: return (Document) result.getNode();
257: }
258:
259: private Grammar getGrammar(String in) throws Exception {
260: SAXParserFactory parserfactory = SAXParserFactory.newInstance();
261: parserfactory.setNamespaceAware(true);
262:
263: XMLReader parser = parserfactory.newSAXParser().getXMLReader();
264:
265: GrammarFactory grammarfactory = new GrammarFactory();
266: parser.setContentHandler(grammarfactory);
267: parser.parse(new InputSource(getClass().getClassLoader()
268: .getResourceAsStream(in)));
269:
270: //System.out.println("====================================\nGrammar:\n"+grammarfactory.getGrammar()+"\n");
271: return grammarfactory.getGrammar();
272: }
273:
274: private Document getDocument(String in) throws Exception {
275: SAXParserFactory parserfactory = SAXParserFactory.newInstance();
276: parserfactory.setNamespaceAware(true);
277:
278: XMLReader parser = parserfactory.newSAXParser().getXMLReader();
279:
280: SAXTransformerFactory transformerfactory = (SAXTransformerFactory) SAXTransformerFactory
281: .newInstance();
282: TransformerHandler handler = transformerfactory
283: .newTransformerHandler();
284: DOMResult result = new DOMResult();
285: handler.setResult(result);
286:
287: parser.setContentHandler(new WhitespaceFilter(handler));
288: parser.parse(new InputSource(getClass().getClassLoader()
289: .getResourceAsStream(in)));
290:
291: return (Document) result.getNode();
292: }
293:
294: public final void print(Document document) throws Exception {
295: TransformerFactory factory = TransformerFactory.newInstance();
296: javax.xml.transform.Transformer serializer = factory
297: .newTransformer();
298: serializer.transform(new DOMSource(document), new StreamResult(
299: System.out));
300: System.out.println();
301: }
302:
303: /**
304: * Compare two XML documents provided as strings
305: *
306: * @param control Control document
307: * @param test Document to test
308: *
309: * @return Diff object describing differences in documents
310: */
311: public final Diff compareXML(Document control, Document test) {
312: return new Diff(control, test);
313: }
314:
315: /**
316: * Assert that the result of an XML comparison is similar.
317: *
318: * @param msg The assertion message
319: * @param expected The expected XML document
320: * @param actual The actual XML Document
321: */
322: public final void assertEqual(String msg, Document expected,
323: Document actual) {
324: expected.getDocumentElement().normalize();
325: actual.getDocumentElement().normalize();
326:
327: Diff diff = compareXML(expected, actual);
328:
329: assertEquals(msg + ", " + diff.toString(), true, diff.similar());
330: }
331:
332: /**
333: * Assert that the result of an XML comparison is similar.
334: *
335: * @param msg The assertion message
336: * @param expected The expected XML document
337: * @param actual The actual XML Document
338: */
339: public final void assertEqual(Document expected, Document actual) {
340: expected.getDocumentElement().normalize();
341: actual.getDocumentElement().normalize();
342:
343: Diff diff = compareXML(expected, actual);
344:
345: try {
346: System.out.println("expected:");
347: print(expected);
348: System.out.println("actual:");
349: print(actual);
350: } catch (Exception e) {
351: }
352:
353: assertEquals("Test if the assertion document is equal, "
354: + diff.toString(), true, diff.similar());
355: }
356:
357: public static Test suite() {
358: return new TestSuite(GeneralParserProcessorTestCase.class);
359: }
360: }
|