1   /*
2    * Created on Apr 7, 2004
3    *
4    * To change the template for this generated file go to
5    * Window - Preferences - Java - Code Generation - Code and Comments
6    */
7   package groovy.security;
8   
9   import java.io.File;
10  import java.util.ArrayList;
11  import java.util.Iterator;
12  import java.util.List;
13  
14  import junit.framework.TestCase;
15  import junit.framework.TestResult;
16  import junit.framework.TestSuite;
17  
18  /***
19   * Run all the .groovy scripts found under the src/test tree with a security manager active.
20   * Not currently part of the build because it adds about 4 minutes to the build process.
21   * 
22   * @author Steve Goetze
23   */
24  public class RunAllGroovyScriptsSuite extends SecurityTestSupport {
25  
26      /***
27       * Find all Groovy script test cases in the source tree and execute them with a security policy in effect.
28       * The complete filename of the groovy source file is used as the codebase so that the proper grants can be
29       * made for each script.
30       */
31      protected void executeTests(File dir, TestResult result) throws Exception {
32          File[] files = dir.listFiles();
33          List traverseList = new ArrayList();
34          for (int i = 0; i < files.length; i++) {
35              File file = files[i];
36              if (file.isDirectory()) {
37                  traverseList.add(file);
38              }
39              else {
40                  String name = file.getName();
41                  if (name.endsWith("Test.groovy") || name.endsWith("Bug.groovy")) {
42                  //if (name.endsWith("IanMaceysBug.groovy")) {
43                  	Class clazz = parseClass(file);
44              		if (TestCase.class.isAssignableFrom(clazz)) {
45              			TestSuite suite = new TestSuite(clazz);
46              			suite.run(result);
47              		}
48                  }
49              }
50          }
51          for (Iterator iter = traverseList.iterator(); iter.hasNext();) {
52              executeTests((File) iter.next(), result);
53          }
54      }
55  
56  	public void testGroovyScripts() throws Exception {
57      	if (!isSecurityAvailable()) {
58      		return;
59      	}
60     		TestResult result = new TestResult();
61     		executeTests(new File("src/test"), result);
62     		if (!result.wasSuccessful()) {
63     			new SecurityTestResultPrinter(System.out).print(result);
64     			fail("At least one groovy testcase did not run under the secure groovy environment.  Results in the testcase output");
65     		}
66      }
67  }