diff --git a/README.md b/README.md index e8b50c7c..2b494445 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Requirements * Fixed Issue #24 - ExecutionResultsCollector didn't work with forked mode * Added 3rd colour to usage report pie charts to show not run state * Corrected the path to the screenshots in the report data and the final report +* Replaced Apache config with [Typesafe Config](https://github.com/typesafehub/config) - similar functionality but provides better nesting of properties, variable substitution 1.0.3 ----- diff --git a/api/pom.xml b/api/pom.xml index 3a26cf01..ab107b3f 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -13,10 +13,12 @@ SubSteps API + - commons-configuration - commons-configuration + com.typesafe + config + org.slf4j slf4j-api diff --git a/api/src/main/java/com/technophobia/substeps/model/Configuration.java b/api/src/main/java/com/technophobia/substeps/model/Configuration.java index 23d61c6a..7e5901d1 100644 --- a/api/src/main/java/com/technophobia/substeps/model/Configuration.java +++ b/api/src/main/java/com/technophobia/substeps/model/Configuration.java @@ -19,18 +19,12 @@ package com.technophobia.substeps.model; -import com.technophobia.substeps.model.exception.SubstepsConfigurationException; -import org.apache.commons.configuration.CombinedConfiguration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.commons.configuration.tree.OverrideCombiner; +import com.typesafe.config.Config; +import com.typesafe.config.ConfigFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.URL; -import java.util.Iterator; -import java.util.List; -import java.util.Set; /** * @author ian @@ -41,31 +35,12 @@ public enum Configuration { private static final Logger logger = LoggerFactory.getLogger(Configuration.class); - private final CombinedConfiguration combinedConfig = new CombinedConfiguration( - new OverrideCombiner()); + private final Config config; private Configuration() { - initialise(); - } - - private void initialise() { - final String resourceBundleName = resourceBundleName(); + config = ConfigFactory.load(resourceBundleName); - final URL customPropsUrl = Configuration.class.getResource(resourceBundleName); - - if (customPropsUrl != null) { - - try { - final PropertiesConfiguration customProps = new PropertiesConfiguration( - customPropsUrl); - combinedConfig.addConfiguration(customProps, "customProps"); - - } catch (final ConfigurationException e) { - logger.error("error loading custom properties", e); - - } - } } @@ -76,77 +51,39 @@ private void initialise() { * @param url to a properties file containing default values * @param name to name of the properties file that is being added */ + @Deprecated public void addDefaultProperties(final URL url, final String name) { - - if (url != null) { - try { - - final PropertiesConfiguration defaultProps = new PropertiesConfiguration(url); - - combinedConfig.addConfiguration(defaultProps, name); - } catch (final ConfigurationException e) { - logger.error("error loading default properties", e); - throw new SubstepsConfigurationException(e); - } - } + throw new IllegalArgumentException("method no longer supported, rename default substep library properties to reference.conf and they will be loaded by Typesafe config"); } - public void addDefaultProperty(final String key, final Object value) { - combinedConfig.addProperty(key, value); - } - public String getConfigurationInfo() { - - final List configurationNameList = combinedConfig.getConfigurationNameList(); - - final StringBuilder buf = new StringBuilder(); - - for (final String configurationName : configurationNameList) { - - buf.append("In config: ").append(configurationName).append("\n"); - - final org.apache.commons.configuration.Configuration cfg = combinedConfig - .getConfiguration(configurationName); - - final Iterator keys = cfg.getKeys(); - - while (keys.hasNext()) { - final String key = keys.next(); - - final String val = cfg.getString(key); - - buf.append("key: ").append(key).append("\tval: [").append(val).append("]\n"); - } - - buf.append("\n"); - } - return buf.toString(); + return config.root().render(); } private static String resourceBundleName() { - return "/" + System.getProperty("environment", "localhost") + ".properties"; + return System.getProperty("environment", "localhost") + ".properties"; } public String getString(final String key) { - return combinedConfig.getString(key); + return config.getString(key); } public int getInt(final String key) { - return combinedConfig.getInt(key); + return config.getInt(key); } public long getLong(final String key) { - return combinedConfig.getLong(key); + return config.getLong(key); } public boolean getBoolean(final String key) { - return combinedConfig.getBoolean(key); + return config.getBoolean(key); } } diff --git a/api/src/main/java/org/substeps/runner/CoreSubstepsPropertiesConfiguration.java b/api/src/main/java/org/substeps/runner/CoreSubstepsPropertiesConfiguration.java index 84bac3eb..11beec82 100644 --- a/api/src/main/java/org/substeps/runner/CoreSubstepsPropertiesConfiguration.java +++ b/api/src/main/java/org/substeps/runner/CoreSubstepsPropertiesConfiguration.java @@ -41,14 +41,6 @@ public enum CoreSubstepsPropertiesConfiguration implements CoreSubstepsConfigura private CoreSubstepsPropertiesConfiguration() { - final URL defaultURL = getClass().getResource("/default-core-substeps.properties"); - - if (defaultURL == null){ - throw new IllegalStateException("Unable to find default core properties"); - } - - Configuration.INSTANCE.addDefaultProperties(defaultURL, "default-core-substeps"); - stepDepthForDescription = Configuration.INSTANCE.getInt("step.depth.description"); logUncalledAndUnusedStepImpls = Configuration.INSTANCE.getBoolean("log.unused.uncalled"); @@ -57,7 +49,6 @@ private CoreSubstepsPropertiesConfiguration() { reportDataBaseDir = Configuration.INSTANCE.getString("report.data.base.dir"); - LOG.info("Using core properties:\n" + Configuration.INSTANCE.getConfigurationInfo()); } diff --git a/api/src/main/resources/reference.conf b/api/src/main/resources/reference.conf new file mode 100644 index 00000000..54e7a1e5 --- /dev/null +++ b/api/src/main/resources/reference.conf @@ -0,0 +1,12 @@ + +# depth limiter for the creation of step description, beyond 6 deep no descriptions +step.depth.description=6 + +# flag tp control whether unused calls are logged out, generally true for CI, complete executions, false for Intellij, junit tests etc +log.unused.uncalled=false + +# flag to enable pretty printing of the json report data +report.data.pretty.print=false + +# the base directory under which report data will be written +report.data.base.dir=target \ No newline at end of file diff --git a/api/src/test/java/com/technophobia/substeps/model/ConfigurationTest.java b/api/src/test/java/com/technophobia/substeps/model/ConfigurationTest.java index 9d42f67e..3dc4576e 100644 --- a/api/src/test/java/com/technophobia/substeps/model/ConfigurationTest.java +++ b/api/src/test/java/com/technophobia/substeps/model/ConfigurationTest.java @@ -19,6 +19,7 @@ package com.technophobia.substeps.model; +import com.typesafe.config.ConfigException; import org.junit.Assert; import org.junit.Test; @@ -38,8 +39,8 @@ public void testConfig() { // set the custom props, then override with defaults System.setProperty("environment", "custom"); - final URL defaultPropsUrl = ConfigurationTest.class.getResource("/default.properties"); - Configuration.INSTANCE.addDefaultProperties(defaultPropsUrl, "default"); +// final URL defaultPropsUrl = ConfigurationTest.class.getResource("/default.properties"); +// Configuration.INSTANCE.addDefaultProperties(defaultPropsUrl, "default"); // overridden Assert.assertThat(Configuration.INSTANCE.getString("overridden.key"), is("overridden")); @@ -50,7 +51,15 @@ public void testConfig() { // custom Assert.assertThat(Configuration.INSTANCE.getString("custom.key"), is("custom-key")); + + + } + + @Test(expected = ConfigException.Missing.class) + public void negativeTest(){ + System.setProperty("environment", "custom"); Assert.assertNull(Configuration.INSTANCE.getString("non-existant")); + } } diff --git a/api/src/test/resources/reference.conf b/api/src/test/resources/reference.conf new file mode 100644 index 00000000..4a720ccc --- /dev/null +++ b/api/src/test/resources/reference.conf @@ -0,0 +1,2 @@ +overridden.key=default-overridden +default.key=default-key \ No newline at end of file diff --git a/core/pom.xml b/core/pom.xml index 00be73bc..fffb451c 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -67,12 +67,12 @@ velocity velocity 1.5 - - - commons-lang - commons-lang - - + + + + + + org.apache.commons diff --git a/core/src/main/java/com/technophobia/substeps/model/PatternMap.java b/core/src/main/java/com/technophobia/substeps/model/PatternMap.java index 3d689d2a..d931237f 100755 --- a/core/src/main/java/com/technophobia/substeps/model/PatternMap.java +++ b/core/src/main/java/com/technophobia/substeps/model/PatternMap.java @@ -19,7 +19,7 @@ package com.technophobia.substeps.model; import com.google.common.base.Strings; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.Map.Entry; diff --git a/glossary/src/main/java/com/technophobia/substeps/glossary/HTMLSubstepsPublisher.java b/glossary/src/main/java/com/technophobia/substeps/glossary/HTMLSubstepsPublisher.java index 3768a28e..da82613d 100644 --- a/glossary/src/main/java/com/technophobia/substeps/glossary/HTMLSubstepsPublisher.java +++ b/glossary/src/main/java/com/technophobia/substeps/glossary/HTMLSubstepsPublisher.java @@ -18,7 +18,7 @@ */ package com.technophobia.substeps.glossary; -import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang3.StringEscapeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,12 +67,12 @@ private void buildStepTagRows(final StringBuilder buf, final Collection"); for (final Step step : scenario.getSteps()) { - buf.append(StringEscapeUtils.escapeHtml(step.getLine())).append("
").append("\n"); + buf.append(StringEscapeUtils.escapeHtml4(step.getLine())).append("
").append("\n"); } buf.append(""); buf.append("

\n"); diff --git a/pom.xml b/pom.xml index be4f66f0..a23761a6 100644 --- a/pom.xml +++ b/pom.xml @@ -201,19 +201,9 @@
- commons-configuration - commons-configuration - 1.10 - - - + com.typesafe + config + 1.3.1