From a5a5d1c5e3104f41527a45c6e1f6613c004b3a2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20W=C3=BCrl?= Date: Thu, 24 Sep 2015 00:49:11 +0200 Subject: [PATCH] support coveralls --- .travis.yml | 5 ++++- README.md | 2 +- pom.xml | 18 ++++++++++++++++++ .../tngtech/configbuilder/ConfigBuilder.java | 16 ++++++++-------- .../configbuilder/util/CommandLineHelper.java | 3 +++ .../configbuilder/util/FieldSetter.java | 4 ++++ .../ConfigBuilderIntegrationTest.java | 16 ++++++++++------ .../configbuilder/testclasses/TestConfig.java | 9 +++------ .../configbuilder/util/FieldSetterTest.java | 1 - 9 files changed, 51 insertions(+), 23 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0206b6fd..016d2386 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,8 @@ language: java install: "mvn install -DskipTests=true" -script: "mvn test -e" +script: "mvn -e clean test jacoco:report coveralls:report" jdk: - oraclejdk7 + - oraclejdk8 + - openjdk7 + diff --git a/README.md b/README.md index ee19d1de..2ff482fd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Java Config-Builder [![Build Status](https://travis-ci.org/TNG/config-builder.png?branch=master)](https://travis-ci.org/TNG/config-builder) +Java Config-Builder [![Build Status](https://travis-ci.org/TNG/config-builder.svg?branch=coveralls_support)](https://travis-ci.org/TNG/config-builder) [![Coverage Status](https://coveralls.io/repos/wuan/config-builder/badge.svg?branch=coveralls_support&service=github)](https://coveralls.io/github/wuan/config-builder?branch=coveralls_support) ================== #### Table of Contents diff --git a/pom.xml b/pom.xml index 16038e8f..c87bd0df 100644 --- a/pom.xml +++ b/pom.xml @@ -88,6 +88,24 @@ + + org.jacoco + jacoco-maven-plugin + 0.7.5.201505241946 + + + prepare-agent + + prepare-agent + + + + + + org.eluder.coveralls + coveralls-maven-plugin + 4.0.0 + diff --git a/src/main/java/com/tngtech/configbuilder/ConfigBuilder.java b/src/main/java/com/tngtech/configbuilder/ConfigBuilder.java index 4a4544f1..78faab52 100644 --- a/src/main/java/com/tngtech/configbuilder/ConfigBuilder.java +++ b/src/main/java/com/tngtech/configbuilder/ConfigBuilder.java @@ -24,26 +24,26 @@ * Builds a config object. * ConfigBuilder instantiates a class and sets fields of the instance by parsing annotations and * loading values from properties files or the command line. It validates the instance by parsing JSR303 constraint annotations.

- *

+ * * Fields of the config class can have the following annotations:
* {@link com.tngtech.configbuilder.annotation.valueextractor.DefaultValue}
* {@link com.tngtech.configbuilder.annotation.valueextractor.PropertyValue}
* {@link com.tngtech.configbuilder.annotation.valueextractor.CommandLineValue}
* {@link com.tngtech.configbuilder.annotation.valueextractor.SystemPropertyValue}
* {@link com.tngtech.configbuilder.annotation.valueextractor.EnvironmentVariableValue}
- * {@link LoadingOrder}

- *

+ * {@link LoadingOrder}
+ * * Properties files are loaded with a PropertyLoader using its default config. In order to change settings for the PropertyLoader, the config class may be annotated with
* {@link com.tngtech.configbuilder.annotation.propertyloaderconfiguration.PropertiesFiles}
* {@link com.tngtech.configbuilder.annotation.propertyloaderconfiguration.PropertyLocations}
* {@link com.tngtech.configbuilder.annotation.propertyloaderconfiguration.PropertySuffixes}
- * {@link com.tngtech.configbuilder.annotation.propertyloaderconfiguration.PropertyExtension}

- *

+ * {@link com.tngtech.configbuilder.annotation.propertyloaderconfiguration.PropertyExtension}
+ * * To specify a global order for parsing {@link com.tngtech.configbuilder.annotation.valueextractor.ValueExtractorAnnotation} annotations, annotate the class with
- * {@link LoadingOrder}

- *

+ * {@link LoadingOrder}
+ * * To specify your own error messages file (which is loaded by the PropertyLoader with the same settings as other the properties files), annotate the class with
- * {@link ErrorMessageFile}

+ * {@link ErrorMessageFile}
* * @param The type of the config class which shall be instantiated. * @author Matthias Bollwein diff --git a/src/main/java/com/tngtech/configbuilder/util/CommandLineHelper.java b/src/main/java/com/tngtech/configbuilder/util/CommandLineHelper.java index 7c126bb0..00a326e6 100644 --- a/src/main/java/com/tngtech/configbuilder/util/CommandLineHelper.java +++ b/src/main/java/com/tngtech/configbuilder/util/CommandLineHelper.java @@ -32,6 +32,9 @@ public CommandLine getCommandLine(Class configClass, String[] args) { public Options getOptions(Class configClass) { Options options = configBuilderFactory.createInstance(Options.class); for (Field field : annotationHelper.getFieldsAnnotatedWith(configClass, CommandLineValue.class)) { + if (field.isSynthetic()) { + continue; + } options.addOption(getOption(field)); } return options; diff --git a/src/main/java/com/tngtech/configbuilder/util/FieldSetter.java b/src/main/java/com/tngtech/configbuilder/util/FieldSetter.java index 75e4d514..9252f332 100644 --- a/src/main/java/com/tngtech/configbuilder/util/FieldSetter.java +++ b/src/main/java/com/tngtech/configbuilder/util/FieldSetter.java @@ -31,6 +31,10 @@ public FieldSetter(ConfigBuilderFactory configBuilderFactory) { public void setFields(T instanceOfConfigClass, BuilderConfiguration builderConfiguration) { for (Field field : getInheritedPrivateFields(instanceOfConfigClass.getClass())) { + if (field.isSynthetic()) { + continue; + } + if (annotationHelper.fieldHasAnnotationAnnotatedWith(field, ValueExtractorAnnotation.class)) { Object value = fieldValueExtractor.extractValue(field, builderConfiguration); value = fieldValueTransformer.transformFieldValue(field, value); diff --git a/src/test/java/com/tngtech/configbuilder/ConfigBuilderIntegrationTest.java b/src/test/java/com/tngtech/configbuilder/ConfigBuilderIntegrationTest.java index 057f4a51..f5537263 100644 --- a/src/test/java/com/tngtech/configbuilder/ConfigBuilderIntegrationTest.java +++ b/src/test/java/com/tngtech/configbuilder/ConfigBuilderIntegrationTest.java @@ -1,6 +1,7 @@ package com.tngtech.configbuilder; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.tngtech.configbuilder.testclasses.TestConfig; @@ -13,14 +14,17 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.unitils.reflectionassert.ReflectionAssert.assertReflectionEquals; +import static org.unitils.reflectionassert.ReflectionAssert.assertLenientEquals; @RunWith(Parameterized.class) public class ConfigBuilderIntegrationTest { @@ -64,7 +68,7 @@ public ConfigBuilderIntegrationTest(Class configClass, Object configInstance) { @Test public void testConfigBuilderWithParameters() { - ConfigBuilder configBuilder = new ConfigBuilder(configClass); + ConfigBuilder configBuilder = ConfigBuilder.on(configClass); String[] args = new String[]{"-u", "--collection", "first entry,second entry"}; Object result = configBuilder.withCommandLineArgs(args).build(); assertReflectionEquals(configInstance, result); @@ -86,11 +90,12 @@ public void testWithImportedConfig() { TestConfig importedTestConfig = new TestConfig(); importedTestConfig.setSomeNumber(5); - importedTestConfig.setStringCollection(Lists.newArrayList("/mnt","/home")); + importedTestConfig.setStringCollection(Lists.newArrayList("/mnt", "/home")); TestConfig expectedTestConfig = new TestConfig(); expectedTestConfig.setSomeNumber(5); - expectedTestConfig.setPathCollection(Sets.newHashSet(Paths.get("/mnt"), Paths.get("/home"))); + List paths = Arrays.asList(Paths.get("/mnt"), Paths.get("/home")); + expectedTestConfig.setPathCollection(Sets.newLinkedHashSet(paths)); expectedTestConfig.setCopiedStringCollection(importedTestConfig.getStringCollection()); expectedTestConfig.setSomeString("Hello, World!"); expectedTestConfig.setBoolean(true); @@ -100,12 +105,11 @@ public void testWithImportedConfig() { expectedTestConfig.setHomeDir(Paths.get(home)); expectedTestConfig.setSystemProperty(userLanguage); - - ConfigBuilder configBuilder = new ConfigBuilder(configClass); + ConfigBuilder configBuilder = ConfigBuilder.on(configClass); String[] args = new String[]{"-u", "--collection", "collection,two"}; Object result = configBuilder.withCommandLineArgs(args).withImportedConfiguration(importedTestConfig).build(); - assertReflectionEquals(expectedTestConfig, result); + assertLenientEquals(expectedTestConfig, result); assertTrue(outContent.toString().contains("config validated")); } } diff --git a/src/test/java/com/tngtech/configbuilder/testclasses/TestConfig.java b/src/test/java/com/tngtech/configbuilder/testclasses/TestConfig.java index c0f3551c..f9387fd5 100644 --- a/src/test/java/com/tngtech/configbuilder/testclasses/TestConfig.java +++ b/src/test/java/com/tngtech/configbuilder/testclasses/TestConfig.java @@ -22,10 +22,7 @@ import com.tngtech.propertyloader.impl.filters.VariableResolvingFilter; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; +import java.util.*; @PropertyExtension("testproperties") @PropertySuffixes(extraSuffixes = {"test"}) @@ -66,7 +63,7 @@ public TestConfig transform(String input) { @DefaultValue("/etc,/usr") @ImportedValue("stringCollection") - private HashSet pathCollection; + private Set pathCollection; @ImportedValue("stringCollection") private Iterable copiedStringCollection; @@ -116,7 +113,7 @@ public Collection getPathCollection() { return pathCollection; } - public void setPathCollection(HashSet pathCollection) { + public void setPathCollection(Set pathCollection) { this.pathCollection = pathCollection; } diff --git a/src/test/java/com/tngtech/configbuilder/util/FieldSetterTest.java b/src/test/java/com/tngtech/configbuilder/util/FieldSetterTest.java index 1ba6b7ae..933b0d34 100644 --- a/src/test/java/com/tngtech/configbuilder/util/FieldSetterTest.java +++ b/src/test/java/com/tngtech/configbuilder/util/FieldSetterTest.java @@ -43,7 +43,6 @@ private static class TestConfigForIllegalArgumentException { } private static class TestConfigWithoutAnnotations { - public String testString = "testString"; }