| // Copyright 2016 The Bazel Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package com.google.testing.junit.runner; |
| |
| import com.google.testing.junit.runner.util.GoogleTestSecurityManager; |
| import java.util.ArrayList; |
| import java.util.List; |
| import org.junit.runner.JUnitCore; |
| import org.junit.runner.Request; |
| import org.junit.runner.Result; |
| |
| /** |
| * A straightforward JUnit test runner that runs the test in the specified class using |
| * {@link JUnitCore}. |
| */ |
| public class TestRunner { |
| private static final String PACKAGE = TestRunner.class.getPackage().getName(); |
| |
| private TestRunner() {} |
| |
| public static void main(String[] args) throws ClassNotFoundException { |
| if (args.length == 0) { |
| throw new IllegalArgumentException( |
| "Must specify at least one argument (source files of the tests to run)!"); |
| } |
| |
| JUnitCore junitCore = new JUnitCore(); |
| junitCore.addListener(new TestListener()); |
| SecurityManager previousSecurityManager = setGoogleTestSecurityManager(); |
| Request request = createRequest(args); |
| Result result = junitCore.run(request); |
| restorePreviousSecurityManager(previousSecurityManager); |
| |
| System.exit(result.wasSuccessful() ? 0 : 1); |
| } |
| |
| private static Request createRequest(String[] filepaths) throws ClassNotFoundException { |
| List<Class<?>> classes = new ArrayList<>(filepaths.length); |
| for (String path : filepaths) { |
| classes.add(getClass(path)); |
| } |
| return Request.classes(classes.toArray(new Class<?>[0])); |
| } |
| |
| private static Class<?> getClass(String filepath) throws ClassNotFoundException { |
| String className = filepath.replace('/', '.'); |
| if (filepath.endsWith(".java")) { |
| className = className.substring(0, className.length() - 5); |
| } |
| return Class.forName(PACKAGE + "." + className); |
| } |
| |
| // Sets a new GoogleTestSecurityManager as security manager and returns the previous one. |
| private static SecurityManager setGoogleTestSecurityManager() { |
| SecurityManager previousSecurityManager = System.getSecurityManager(); |
| GoogleTestSecurityManager newSecurityManager = new GoogleTestSecurityManager(); |
| System.setSecurityManager(newSecurityManager); |
| return previousSecurityManager; |
| } |
| |
| private static void restorePreviousSecurityManager(SecurityManager previousSecurityManager) { |
| GoogleTestSecurityManager.uninstallIfInstalled(); |
| System.setSecurityManager(previousSecurityManager); |
| } |
| } |