KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > xquery > testsuite > TestSuite


1 package gnu.xquery.testsuite;
2 import java.util.Stack JavaDoc;
3 import gnu.lists.*;
4 import gnu.xml.*;
5 import gnu.mapping.CharArrayOutPort;
6 import gnu.kawa.xml.Document;
7
8 /** Run a suite of XQuery tests, as read from an xml file. */
9
10 public class TestSuite extends FilterConsumer
11 {
12   public static void main(String JavaDoc[] args)
13   {
14     gnu.xquery.lang.XQuery.registerEnvironment();
15     for (int i = 0; i < args.length; i++)
16       {
17     try
18       {
19         Document.parse(args[i], new TestSuite());
20       }
21     catch (Throwable JavaDoc ex)
22       {
23         System.err.println("caught "+ex+" while processing "+args[i]);
24       }
25       }
26     TestMisc.printSummary();
27   }
28
29   int nesting = 0;
30   boolean inTestSuite = false;
31   boolean inTest = false;
32   String JavaDoc currentTag;
33   /* #ifdef JAVA5 */
34   // Stack<Object> groupStack = new Stack<Object>();
35
/* #else */
36   Stack JavaDoc groupStack = new Stack JavaDoc();
37   /* #endif */
38
39   CharArrayOutPort cout;
40   XMLPrinter xout;
41
42   String JavaDoc query = null;
43   String JavaDoc expect = null;
44
45   private TestSuite()
46   {
47     this(new CharArrayOutPort());
48   }
49
50   private TestSuite(CharArrayOutPort cout)
51   {
52     this(cout, new XMLPrinter(cout));
53     xout.escapeText = false;
54   }
55
56   private TestSuite(CharArrayOutPort cout, XMLPrinter xout)
57   {
58     super(xout);
59     this.cout = cout;
60     this.xout = xout;
61   }
62
63   public void beginGroup(Object JavaDoc type)
64   {
65     String JavaDoc typeName = type.toString();
66     if ("testsuite".equals(typeName) && nesting == 0)
67       inTestSuite = true;
68     else if ("test".equals(typeName)
69     && (nesting == 0 || (inTestSuite && nesting == 1)))
70       inTest = true;
71     else if (inTestSuite ? nesting == 2 : nesting == 1)
72       {
73         cout.setLength(0);
74     currentTag = typeName;
75       }
76     else if (currentTag == null)
77       throw new RuntimeException JavaDoc("saw <"+typeName+"> not in <test>");
78     else
79       base.beginGroup(type);
80     nesting++;
81     groupStack.push(type);
82   }
83
84   public void endGroup()
85   {
86     nesting--;
87     Object JavaDoc type = groupStack.pop();
88     String JavaDoc typeName = type.toString();
89     if ("testsuite".equals(typeName) && nesting == 0)
90       inTestSuite = false;
91     else if ("test".equals(typeName)
92     && (nesting == 0 || (inTestSuite && nesting == 1)))
93       {
94     inTest = false;
95     TestMisc.evalTest(query, expect);
96       }
97     else if (inTestSuite ? nesting == 2 : nesting == 1)
98       {
99     if ("query".equals(typeName))
100           {
101             xout.flush();
102             query = cout.toString();
103           }
104     else if ("expect".equals(typeName))
105           {
106             xout.flush();
107             expect = cout.toString();
108           }
109     currentTag = null;
110       }
111     else
112       base.endGroup();
113   }
114 }
115
Popular Tags