annotate graal/com.oracle.graal.test/src/com/oracle/graal/test/GraalJUnitCore.java @ 16473:f681a647246c

uppercase JSON for consistency
author Andreas Woess <andreas.woess@jku.at>
date Thu, 10 Jul 2014 20:43:26 +0200
parents 7520833c6e7f
children c88ab4f1f04a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15500
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
1 /*
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
2 * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved.
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
4 *
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
7 * published by the Free Software Foundation.
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
8 *
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
13 * accompanied this code).
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
14 *
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
18 *
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
21 * questions.
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
22 */
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
23 package com.oracle.graal.test;
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
24
16419
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
25 import java.io.*;
15500
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
26 import java.util.*;
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
27
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
28 import junit.runner.*;
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
29
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
30 import org.junit.internal.*;
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
31 import org.junit.runner.*;
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
32 import org.junit.runner.notification.*;
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
33
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
34 public class GraalJUnitCore {
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
35
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
36 /**
16388
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
37 * Run the tests contained in the classes named in the <code>args</code>. A single test method
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
38 * can be specified by adding #method after the class name. Only a single test can be run in
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
39 * this way. If all tests run successfully, exit with a status of 0. Otherwise exit with a
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
40 * status of 1. Write feedback while tests are running and write stack traces for all failed
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
41 * tests after the tests all complete.
15500
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
42 *
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
43 * @param args names of classes in which to find tests to run
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
44 */
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
45 public static void main(String... args) {
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
46 JUnitSystem system = new RealSystem();
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
47 JUnitCore junitCore = new JUnitCore();
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
48 system.out().println("GraalJUnitCore");
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
49 system.out().println("JUnit version " + Version.id());
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
50 List<Class<?>> classes = new ArrayList<>();
16388
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
51 String methodName = null;
15500
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
52 List<Failure> missingClasses = new ArrayList<>();
15502
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
53 boolean verbose = false;
15503
c62e120e8cd9 Add TimingDecorator.
Josef Eisl <josef.eisl@jku.at>
parents: 15502
diff changeset
54 boolean enableTiming = false;
15655
ec29b2d3bdb4 mx unittest: add color support.
Josef Eisl <josef.eisl@jku.at>
parents: 15503
diff changeset
55 boolean color = false;
15656
fcf6e5683082 mx unittest: add --eager-stacktrace.
Josef Eisl <josef.eisl@jku.at>
parents: 15655
diff changeset
56 boolean eagerStackTrace = false;
15907
7d1690e145ae mx: option to force a GC after each unit test
Roland Schatz <roland.schatz@oracle.com>
parents: 15656
diff changeset
57 boolean gcAfterTest = false;
16419
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
58 for (String each : expandArgs(args)) {
15502
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
59 if (each.charAt(0) == '-') {
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
60 // command line arguments
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
61 if (each.contentEquals("-JUnitVerbose")) {
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
62 verbose = true;
15503
c62e120e8cd9 Add TimingDecorator.
Josef Eisl <josef.eisl@jku.at>
parents: 15502
diff changeset
63 } else if (each.contentEquals("-JUnitEnableTiming")) {
c62e120e8cd9 Add TimingDecorator.
Josef Eisl <josef.eisl@jku.at>
parents: 15502
diff changeset
64 enableTiming = true;
15655
ec29b2d3bdb4 mx unittest: add color support.
Josef Eisl <josef.eisl@jku.at>
parents: 15503
diff changeset
65 } else if (each.contentEquals("-JUnitColor")) {
ec29b2d3bdb4 mx unittest: add color support.
Josef Eisl <josef.eisl@jku.at>
parents: 15503
diff changeset
66 color = true;
15656
fcf6e5683082 mx unittest: add --eager-stacktrace.
Josef Eisl <josef.eisl@jku.at>
parents: 15655
diff changeset
67 } else if (each.contentEquals("-JUnitEagerStackTrace")) {
fcf6e5683082 mx unittest: add --eager-stacktrace.
Josef Eisl <josef.eisl@jku.at>
parents: 15655
diff changeset
68 eagerStackTrace = true;
15907
7d1690e145ae mx: option to force a GC after each unit test
Roland Schatz <roland.schatz@oracle.com>
parents: 15656
diff changeset
69 } else if (each.contentEquals("-JUnitGCAfterTest")) {
7d1690e145ae mx: option to force a GC after each unit test
Roland Schatz <roland.schatz@oracle.com>
parents: 15656
diff changeset
70 gcAfterTest = true;
15502
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
71 } else {
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
72 system.out().println("Unknown command line argument: " + each);
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
73 }
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
74
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
75 } else {
16388
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
76 /*
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
77 * Entries of the form class#method are handled specially. Only one can be specified
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
78 * on the command line as there's no obvious way to build a runner for multiple
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
79 * ones.
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
80 */
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
81 if (methodName != null) {
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
82 system.out().println("Only a single class and method can be specified: " + each);
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
83 System.exit(1);
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
84 } else if (each.contains("#")) {
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
85 String[] pair = each.split("#");
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
86 if (pair.length != 2) {
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
87 system.out().println("Malformed class and method request: " + each);
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
88 System.exit(1);
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
89 } else if (classes.size() != 0) {
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
90 system.out().println("Only a single class and method can be specified: " + each);
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
91 System.exit(1);
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
92 } else {
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
93 methodName = pair[1];
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
94 each = pair[0];
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
95 }
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
96 }
15502
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
97 try {
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
98 classes.add(Class.forName(each));
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
99 } catch (ClassNotFoundException e) {
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
100 system.out().println("Could not find class: " + each);
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
101 Description description = Description.createSuiteDescription(each);
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
102 Failure failure = new Failure(description, e);
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
103 missingClasses.add(failure);
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
104 }
15500
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
105 }
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
106 }
15502
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
107 GraalJUnitRunListener graalListener;
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
108 if (!verbose) {
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
109 graalListener = new GraalTextListener(system);
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
110 } else {
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
111 graalListener = new GraalVerboseTextListener(system);
a26be2c9b81b Add command line support for JUnit.
Josef Eisl <josef.eisl@jku.at>
parents: 15500
diff changeset
112 }
15503
c62e120e8cd9 Add TimingDecorator.
Josef Eisl <josef.eisl@jku.at>
parents: 15502
diff changeset
113 if (enableTiming) {
c62e120e8cd9 Add TimingDecorator.
Josef Eisl <josef.eisl@jku.at>
parents: 15502
diff changeset
114 graalListener = new TimingDecorator(graalListener);
c62e120e8cd9 Add TimingDecorator.
Josef Eisl <josef.eisl@jku.at>
parents: 15502
diff changeset
115 }
15655
ec29b2d3bdb4 mx unittest: add color support.
Josef Eisl <josef.eisl@jku.at>
parents: 15503
diff changeset
116 if (color) {
ec29b2d3bdb4 mx unittest: add color support.
Josef Eisl <josef.eisl@jku.at>
parents: 15503
diff changeset
117 graalListener = new AnsiTerminalDecorator(graalListener);
ec29b2d3bdb4 mx unittest: add color support.
Josef Eisl <josef.eisl@jku.at>
parents: 15503
diff changeset
118 }
15656
fcf6e5683082 mx unittest: add --eager-stacktrace.
Josef Eisl <josef.eisl@jku.at>
parents: 15655
diff changeset
119 if (eagerStackTrace) {
fcf6e5683082 mx unittest: add --eager-stacktrace.
Josef Eisl <josef.eisl@jku.at>
parents: 15655
diff changeset
120 graalListener = new EagerStackTraceDecorator(graalListener);
fcf6e5683082 mx unittest: add --eager-stacktrace.
Josef Eisl <josef.eisl@jku.at>
parents: 15655
diff changeset
121 }
15907
7d1690e145ae mx: option to force a GC after each unit test
Roland Schatz <roland.schatz@oracle.com>
parents: 15656
diff changeset
122 if (gcAfterTest) {
7d1690e145ae mx: option to force a GC after each unit test
Roland Schatz <roland.schatz@oracle.com>
parents: 15656
diff changeset
123 graalListener = new GCAfterTestDecorator(graalListener);
7d1690e145ae mx: option to force a GC after each unit test
Roland Schatz <roland.schatz@oracle.com>
parents: 15656
diff changeset
124 }
15500
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
125 junitCore.addListener(GraalTextListener.createRunListener(graalListener));
16388
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
126 Request request;
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
127 if (methodName == null) {
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
128 request = Request.classes(classes.toArray(new Class[0]));
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
129 } else {
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
130 request = Request.method(classes.get(0), methodName);
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
131 }
31e242cad4d1 Allow mx unittest to run single test method from a class
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15907
diff changeset
132 Result result = junitCore.run(request);
15500
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
133 for (Failure each : missingClasses) {
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
134 result.getFailures().add(each);
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
135 }
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
136 System.exit(result.wasSuccessful() ? 0 : 1);
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
137 }
16419
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
138
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
139 /**
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
140 * Expand any arguments starting with @ and return the resulting argument array.
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
141 *
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
142 * @param args
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
143 * @return the expanded argument array
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
144 */
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
145 private static String[] expandArgs(String[] args) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
146 List<String> result = null;
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
147 for (int i = 0; i < args.length; i++) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
148 String arg = args[i];
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
149 if (arg.length() > 0 && arg.charAt(0) == '@') {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
150 if (result == null) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
151 result = new ArrayList<>();
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
152 for (int j = 0; j < i; j++) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
153 result.add(args[j]);
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
154 }
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
155 expandArg(arg.substring(1), result);
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
156 }
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
157 } else if (result != null) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
158 result.add(arg);
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
159 }
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
160 }
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
161 return result != null ? result.toArray(new String[0]) : args;
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
162 }
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
163
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
164 /**
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
165 * Add each line from {@code filename} to the list {@code args}.
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
166 *
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
167 * @param filename
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
168 * @param args
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
169 */
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
170 private static void expandArg(String filename, List<String> args) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
171 BufferedReader br = null;
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
172 try {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
173 br = new BufferedReader(new FileReader(filename));
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
174
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
175 String buf;
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
176 while ((buf = br.readLine()) != null) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
177 args.add(buf);
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
178 }
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
179 br.close();
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
180 } catch (IOException ioe) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
181 ioe.printStackTrace();
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
182 System.exit(2);
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
183 } finally {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
184 try {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
185 if (br != null) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
186 br.close();
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
187 }
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
188 } catch (IOException ioe) {
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
189 ioe.printStackTrace();
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
190 System.exit(3);
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
191 }
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
192 }
7520833c6e7f eliminate JUnitWrapper
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16388
diff changeset
193 }
15500
f2132fab8a6f Add custom GraalJUnitCore.
Josef Eisl <josef.eisl@jku.at>
parents:
diff changeset
194 }