67
67
private String[] list;
68
68
private String[] skip;
70
Tests(File testDirectory, String[] list, String[] skip) {
70
Tests(File testDirectory, String[] list, String[] skip) throws IOException {
71
71
this.testDirectory = testDirectory;
72
72
this.list = getTestList(list);
73
73
this.skip = getTestList(skip);
76
private String[] getTestList(String[] tests) {
77
ArrayList list = new ArrayList();
76
private String[] getTestList(String[] tests) throws IOException {
77
ArrayList<String> list = new ArrayList<String>();
78
78
for (int i=0; i < tests.length; i++) {
79
79
if (tests[i].startsWith("@"))
80
addTestsFromFile(tests[i].substring(1), list);
80
TestUtils.addTestsFromFile(tests[i].substring(1), list);
82
82
list.add(tests[i]);
84
return (String[])list.toArray(new String[0]);
87
private void addTestsFromFile(String filename, ArrayList list) {
89
Properties props = new Properties();
90
props.load(new FileInputStream(new File(filename)));
91
list.addAll(props.keySet());
92
} catch (IOException e) {
93
throw new RuntimeException("Could not read file '" + filename + "'", e);
97
private boolean matches(String[] patterns, String path) {
98
for (int i=0; i<patterns.length; i++) {
99
if (path.startsWith(patterns[i])) {
84
return list.toArray(new String[0]);
106
87
private boolean matches(String path) {
107
88
if (list.length == 0) return true;
108
return matches(list, path);
89
return TestUtils.matches(list, path);
111
92
private boolean excluded(String path) {
112
93
if (skip.length == 0) return false;
113
return matches(skip, path);
94
return TestUtils.matches(skip, path);
116
private void addFiles(List rv, String prefix, File directory) {
97
private void addFiles(List<Script> rv, String prefix, File directory) {
117
98
File[] files = directory.listFiles();
118
99
if (files == null) throw new RuntimeException("files null for " + directory);
119
100
for (int i=0; i<files.length; i++) {
150
131
Script[] getFiles() {
151
ArrayList rv = new ArrayList();
132
ArrayList<Script> rv = new ArrayList<Script>();
152
133
addFiles(rv, "", testDirectory);
153
return (Script[])rv.toArray(new Script[0]);
134
return rv.toArray(new Script[0]);
179
162
void failed(String s) {
180
163
console.println("Failed: " + jsFile + ": " + s);
184
168
void threw(Throwable t) {
185
169
console.println("Failed: " + jsFile + " with exception.");
186
170
console.println(ShellTest.getStackTrace(t));
190
175
void timedOut() {
191
176
console.println("Failed: " + jsFile + ": timed out.");
195
181
void exitCodesWere(int expected, int actual) {
196
182
if (expected != actual) {
197
183
console.println("Failed: " + jsFile + " expected " + expected + " actual " + actual);
281
268
this.failureHtml = failureHtml;
284
272
void running(File file) {
287
276
void failed(String s) {
289
278
setContent(failureHtml, "failureDetails.reason", "Failure reason: \n" + s);
292
282
void exitCodesWere(int expected, int actual) {
293
283
if (expected != actual) {
299
290
void threw(Throwable e) {
301
292
setContent(failureHtml, "failureDetails.reason", "Threw Java exception:\n" + newlineLineEndings(ShellTest.getStackTrace(e)));
304
296
void timedOut() {
306
298
setContent(failureHtml, "failureDetails.reason", "Timed out.");
309
302
void outputWas(String s) {
402
397
exit.setAttribute("actual", String.valueOf(actual));
405
401
void timedOut() {
407
403
createElement(target, "timedOut");
410
407
void failed(String s) {
412
409
Element failed = createElement(target, "failed");
413
410
setTextContent(failed, s);
416
414
void outputWas(String message) {
418
416
Element output = createElement(target, "output");
419
417
setTextContent(output, message);
422
421
void threw(Throwable t) {
424
423
Element threw = createElement(target, "threw");
621
621
private static class Arguments {
622
private ArrayList options = new ArrayList();
622
private ArrayList<Option> options = new ArrayList<Option>();
624
624
private Option bugUrl = new Option("b", "bugurl", false, false, "http://bugzilla.mozilla.org/show_bug.cgi?id=");
625
625
private Option optimizationLevel = new Option("o", "optimization", false, false, "-1");
651
651
private boolean flag;
652
652
private boolean ignored;
654
private ArrayList values = new ArrayList();
654
private ArrayList<String> values = new ArrayList<String>();
656
656
// array: can this option have multiple values?
657
657
// flag: is this option a simple true/false switch?
658
Option(String letterOption, String wordOption, boolean array, boolean flag, String unspecified) {
658
Option(String letterOption, String wordOption, boolean array,
659
boolean flag, String unspecified)
659
661
this.letterOption = letterOption;
660
662
this.wordOption = wordOption;
661
663
this.flag = flag;
691
693
String[] getValues() {
692
return (String[])values.toArray(new String[0]);
694
return values.toArray(new String[0]);
695
void process(List arguments) {
696
String option = (String)arguments.get(0);
697
void process(List<String> arguments) {
698
String option = arguments.get(0);
697
699
String dashLetter = (letterOption == null) ? (String)null : "-" + letterOption;
698
700
if (option.equals(dashLetter) || option.equals("--" + wordOption)) {
699
701
arguments.remove(0);
701
703
values.add(0, (String)null );
702
704
} else if (array) {
703
while( arguments.size() > 0 && !( (String)arguments.get(0) ).startsWith("-") ) {
705
while (arguments.size() > 0 &&
706
!arguments.get(0).startsWith("-"))
704
708
values.add(arguments.remove(0));
799
void process(List arguments) {
803
void process(List<String> arguments) {
800
804
while(arguments.size() > 0) {
801
String option = (String)arguments.get(0);
805
String option = arguments.get(0);
802
806
if (option.startsWith("--")) {
803
807
// preprocess --name=value options into --name value
804
808
if (option.indexOf("=") != -1) {
831
835
public static void main(String[] args) throws Throwable {
832
ArrayList arguments = new ArrayList();
836
ArrayList<String> arguments = new ArrayList<String>();
833
837
arguments.addAll(Arrays.asList(args));
834
838
Arguments clArguments = new Arguments();
835
839
clArguments.process(arguments);