blob: 656fc5f6f19bdbe32ade1407180fddc2aa5e3fff [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
/* $Id$ */
package org.apache.fop.layoutengine;
import java.io.File;
/**
* A class that contains the information needed to run a suite of layout engine and FO tree
* tests.
*/
public final class TestFilesConfiguration {
private final File testDirectory;
private final String singleTest;
private final String testStartsWith;
private final String testFileSuffix;
private final String testSet;
private final String disabledTests;
private final boolean privateTests;
private TestFilesConfiguration(Builder builder) {
this.testDirectory = new File(builder.testDirectory);
this.singleTest = builder.singleTest;
this.testStartsWith = builder.testStartsWith;
this.testFileSuffix = builder.testFileSuffix;
this.testSet = builder.testSet;
this.privateTests = builder.privateTests;
this.disabledTests = builder.disabledTests;
}
/**
* Returns the directory of the tests.
* @return the test directory
*/
public File getTestDirectory() {
return testDirectory;
}
/**
* Returns the name of the single test file to run.
* @return the single test file name
*/
public String getSingleTest() {
return singleTest;
}
/**
* Returns the string that must prefix the test file names.
* @return the prefixing string
*/
public String getStartsWith() {
return testStartsWith;
}
/**
* Returns the file suffix (i.e. ".xml" for XML files and ".fo" for FOs).
* @return the file suffix
*/
public String getFileSuffix() {
return testFileSuffix;
}
/**
* Returns the directory set of tests to be run.
* @return the directory tests
*/
public String getTestSet() {
return testSet;
}
/**
* Returns the name of the XML file containing the disabled tests.
* @return a file name, may be null
*/
public String getDisabledTests() {
return disabledTests;
}
/**
* Whether any private tests should be invoked.
* @return true if private tests should be tested
*/
public boolean hasPrivateTests() {
return privateTests;
}
/**
* A builder class that configures the data for running a suite of tests designed for the
* layout engine and FOTree.
*/
public static class Builder {
private String testDirectory;
private String singleTest;
private String testStartsWith;
private String testFileSuffix;
private String testSet;
private String disabledTests;
private boolean privateTests;
/**
* Configures the test directory.
* @param dir the test directory
* @return {@code this}
*/
public Builder testDir(String dir) {
testDirectory = dir;
return this;
}
/**
* Configures the name of the single test to run.
* @param singleProperty name of the property that determines the single test case
* @return {@code this}
*/
public Builder singleProperty(String singleProperty) {
singleTest = getSystemProperty(singleProperty);
return this;
}
/**
* Configures the prefix that all test cases must match.
* @param startsWithProperty name of the property that determines the common prefix
* @return {@code this}
*/
public Builder startsWithProperty(String startsWithProperty) {
testStartsWith = getSystemProperty(startsWithProperty);
return this;
}
/**
* Configures the test file name suffix.
* @param suffix the suffixing string
* @return {@code this}
*/
public Builder suffix(String suffix) {
testFileSuffix = suffix;
return this;
}
/**
* Configures the name of the directory containing the set of tests.
* @param testSet the directory of tests. If null, defaults to "standard-testcases"
* @return {@code this}
*/
public Builder testSet(String testSet) {
this.testSet = testSet != null ? testSet : "standard-testcases";
return this;
}
/**
* Configures whether any tests are disabled.
* @param disabledProperty name of the property that determines the file of
* disabled test cases
* @param defaultValue if the property was not defined, uses this file name
* instead
* @return {@code this}
*/
public Builder disabledProperty(String disabledProperty, String defaultValue) {
String property = getSystemProperty(disabledProperty);
disabledTests = property != null ? property : defaultValue;
return this;
}
/**
* Configures whether private tests must be run or not.
* @param privateTestsProperty name of the property containing the boolean switch
* @return {@code this}
*/
public Builder privateTestsProperty(String privateTestsProperty) {
String property = getSystemProperty(privateTestsProperty);
this.privateTests = property != null && property.equalsIgnoreCase("true");
return this;
}
private String getSystemProperty(String property) {
return System.getProperty(property);
}
/**
* Creates the configuration instance.
* @return a configuration instance configured by this builder
*/
public TestFilesConfiguration build() {
return new TestFilesConfiguration(this);
}
}
}