com.thesett.junit.extensions.util.TestContextProperties Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junit-toolkit Show documentation
Show all versions of junit-toolkit Show documentation
JUnit Toolkit enhances JUnit with performance testing, asymptotic behaviour analysis, and concurrency testing.
/*
* Copyright The Sett Ltd, 2005 to 2014.
*
* 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.thesett.junit.extensions.util;
import java.util.Properties;
import com.thesett.common.properties.ParsedProperties;
/**
* TestContextProperties is an extension of {@link ParsedProperties} that keeps track of property key/value pairs that
* are used by tests being run under the {@link com.thesett.junit.extensions.TKTestRunner}. To keep the test runner
* notified of configurable test parameters, tests should establish their required property values by initiliazing
* fields or statics or in the constructor, through this class. The tk test runner automatically places any additional
* properties specified on the command line into the this class, and these are held statically.
*
* Here is an example:
*
*
* public class MyTestClass extends TestCase {
* ParsedProperties testProps = TestContextProperties.getInstance();
* private int testParam = testProps.setPropertyIfNull("testParam", 1);
* ...
*
*
* This has the effect of setting up the field testParam with the default value of 1, unless it is overridden by
* values passed to the tk test runner. It also notifies the tk test runner of the name and value of the test parameter
* actually used for the test, so that this can be logged in the test output file.
*
*
CRC Card
* Responsibilities Collaborations
* Log all name/value pairs read or written.
*
*
* @author Rupert Smith
*/
public class TestContextProperties extends ParsedProperties
{
/** The singleton instance of the test context properties. */
private static TestContextProperties singleton;
/** Used for debugging. */
// Logger log = Logger.getLogger(TestContextProperties.class);
/** Holds all properties set or read through this property extension class. */
private final Properties accessedProps = new Properties();
/** Default constructor that builds a ContextualProperties that uses environment defaults. */
private TestContextProperties()
{
super();
}
/**
* Gets the singleton instance of the test context properties.
*
* @return The singleton instance of the test context properties.
*/
public static synchronized ParsedProperties getInstance()
{
if (singleton == null)
{
singleton = new TestContextProperties();
}
return singleton;
}
/**
* Gets the singleton instance of the test context properties, applying a specified set of default properties to it,
* if they are not already set.
*
* @param defaults The defaults to apply for properties not already set.
*
* @return The singleton instance of the test context properties.
*/
public static synchronized ParsedProperties getInstance(Properties defaults)
{
ParsedProperties props = getInstance();
for (Object key : defaults.keySet())
{
String stringKey = (String) key;
String value = defaults.getProperty(stringKey);
props.setPropertyIfNull(stringKey, value);
}
return props;
}
/*
* Creates a ContextualProperties that uses environment defaults and is initialized with the specified properties.
*
* @param props The properties to initialize this with.
*/
/*public TestContextProperties(Properties props)
{
super();
}*/
/**
* Gets all of the properties (with their most recent values) that have been set or read through this class.
*
* @return All of the properties accessed through this class.
*/
public static Properties getAccessedProps()
{
return (singleton == null) ? new Properties() : singleton;
// return accessedProps;
}
/**
* Looks up a property value relative to the environment, callers class and method. The default environment will be
* checked for a matching property if defaults are being used. The property key/value pair is remembered and made
* available to {@link com.thesett.junit.extensions.TKTestRunner}.
*
* @param key The property key.
*
* @return The value of this property searching from the most specific definition (environment, class, method, key)
* to the most general (key only), unless use of default environments is turned off in which case the most
* general proeprty searched is (environment, key).
*/
public String getProperty(String key)
{
// log.debug("public String getProperty(String key = " + key + "): called");
String value = super.getProperty(key);
if (value != null)
{
accessedProps.setProperty(key, value);
}
// log.debug("value = " + value);
return value;
}
/**
* Calls the Hashtable method put
. Provided for parallelism with the getProperty
* method. Enforces use of strings for property keys and values. The value returned is the result of the
* Hashtable call to put
. The property key/value pair is remembered and made available to
* {@link com.thesett.junit.extensions.TKTestRunner}.
*
* @param key The key to be placed into this property list.
* @param value The value corresponding to key.
*
* @return The previous value of the specified key in this property list, or null
if it did not have
* one.
*/
public synchronized Object setProperty(String key, String value)
{
// log.debug("public synchronized Object setProperty(String key = " + key + ", String value = " + value + "): called");
Object result = super.setProperty(key, value);
accessedProps.setProperty(key, value);
return result;
}
/**
* Helper method for setting properties to defaults when they are not already set. The property key/value pair is
* remembered and made available to {@link com.thesett.junit.extensions.TKTestRunner}.
*
* @param key The name of the system property to set.
* @param value The value to set it to.
*
* @return The value of the property, which will be the value passed in if it was null, or the existing value
* otherwise.
*/
public String setPropertyIfNull(String key, String value)
{
// log.debug("public String setPropertyIfNull(String key = " + key + ", String value = " + value + "): called");
String result = super.setPropertyIfNull(key, value);
if (value != null)
{
accessedProps.setProperty(key, result);
}
// log.debug("result = " + result);
return result;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy