1 package gnu.xquery.testsuite; 2 import java.util.Stack ; 3 import gnu.lists.*; 4 import gnu.xml.*; 5 import gnu.mapping.CharArrayOutPort; 6 import gnu.kawa.xml.Document; 7 8 9 10 public class TestSuite extends FilterConsumer 11 { 12 public static void main(String [] 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 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 currentTag; 33 34 36 Stack groupStack = new Stack (); 37 38 39 CharArrayOutPort cout; 40 XMLPrinter xout; 41 42 String query = null; 43 String 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 type) 64 { 65 String 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 ("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 type = groupStack.pop(); 88 String 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 |