com.google.testing.junit.runner.junit4.JUnit4Config.java Source code

Java tutorial

Introduction

Here is the source code for com.google.testing.junit.runner.junit4.JUnit4Config.java

Source

// Copyright 2010 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.junit4;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;

import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Properties;

/**
 * Configuration for the JUnit4 test runner.
 */
class JUnit4Config {
    @VisibleForTesting
    static final String JUNIT_API_VERSION_PROPERTY = "com.google.testing.junit.runner.apiVersion";

    private final String testIncludeFilterRegexp;
    private final String testExcludeFilterRegexp;
    private final Optional<Path> xmlOutputPath;
    private final String junitApiVersion;
    private final boolean shouldInstallSecurityManager;

    private static final String XML_OUTPUT_FILE_ENV_VAR = "XML_OUTPUT_FILE";

    public JUnit4Config(String testIncludeFilterRegexp, String testExcludeFilterRegexp,
            Optional<Path> outputXmlFilePath) {
        this(testIncludeFilterRegexp, testExcludeFilterRegexp, outputXmlFilePath, System.getProperties());
    }

    @VisibleForTesting
    JUnit4Config(String testIncludeFilterRegexp, String testExcludeFilterRegexp, Optional<Path> xmlOutputPath,
            Properties systemProperties) {
        this.testIncludeFilterRegexp = testIncludeFilterRegexp;
        this.testExcludeFilterRegexp = testExcludeFilterRegexp;
        this.xmlOutputPath = xmlOutputPath;
        junitApiVersion = systemProperties.getProperty(JUNIT_API_VERSION_PROPERTY, "1").trim();
        shouldInstallSecurityManager = systemProperties.getProperty("java.security.manager") == null;
    }

    /**
     * @return Whether the test security manager should be installed
     */
    public boolean shouldInstallSecurityManager() {
        return shouldInstallSecurityManager;
    }

    /**
     * Returns the XML output path, or null if not specified.
     */
    public Optional<Path> getXmlOutputPath() {
        if (!xmlOutputPath.isPresent()) {
            Optional<String> envXmlOutputPath = Optional.fromNullable(System.getenv(XML_OUTPUT_FILE_ENV_VAR));
            return envXmlOutputPath.transform(new Function<String, Path>() {
                @Override
                public Path apply(String path) {
                    return FileSystems.getDefault().getPath(path);
                }
            });
        }

        return xmlOutputPath;
    }

    /**
     * Gets the version of the JUnit Runner that the test is expecting.
     * Some features may be enabled or disabled based on this value.
     *
     * @return api version
     * @throws IllegalStateException if the API version is unsupported.
     */
    public int getJUnitRunnerApiVersion() {
        int apiVersion = 0;
        try {
            apiVersion = Integer.parseInt(junitApiVersion);
        } catch (NumberFormatException e) {
            // ignore; handled below
        }

        Preconditions.checkState(apiVersion == 1, "Unsupported JUnit Runner API version %s=%s (must be \"1\")",
                JUNIT_API_VERSION_PROPERTY, junitApiVersion);
        return apiVersion;
    }

    /**
     * Returns a regular expression representing an inclusive filter.
     * Only test descriptions that match this regular expression should be run.
     */
    public String getTestIncludeFilterRegexp() {
        return testIncludeFilterRegexp;
    }

    /**
     * Returns a regular expression representing an exclusive filter.
     * Test descriptions that match this regular expression should not be run.
     */
    public String getTestExcludeFilterRegexp() {
        return testExcludeFilterRegexp;
    }
}