From commits-return-6034-archive-asf-public=cust-asf.ponee.io@tamaya.incubator.apache.org Sun Feb 25 21:04:49 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 49C8F18064C for ; Sun, 25 Feb 2018 21:04:48 +0100 (CET) Received: (qmail 41336 invoked by uid 500); 25 Feb 2018 20:04:47 -0000 Mailing-List: contact commits-help@tamaya.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tamaya.incubator.apache.org Delivered-To: mailing list commits@tamaya.incubator.apache.org Received: (qmail 41326 invoked by uid 99); 25 Feb 2018 20:04:47 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 25 Feb 2018 20:04:47 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id C11341A028B for ; Sun, 25 Feb 2018 20:04:46 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.231 X-Spam-Level: X-Spam-Status: No, score=-4.231 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id kknVPLPwpf9b for ; Sun, 25 Feb 2018 20:04:33 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with SMTP id 743A15F2F1 for ; Sun, 25 Feb 2018 20:04:32 +0000 (UTC) Received: (qmail 39903 invoked by uid 99); 25 Feb 2018 20:04:32 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 25 Feb 2018 20:04:32 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 21478EB4E7; Sun, 25 Feb 2018 20:04:30 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: pottlinger@apache.org To: commits@tamaya.incubator.apache.org Date: Sun, 25 Feb 2018 20:04:33 -0000 Message-Id: <6e102f7170d74a4aaef496e20bee094b@git.apache.org> In-Reply-To: <99b05edd53be4447b035cba393f61c71@git.apache.org> References: <99b05edd53be4447b035cba393f61c71@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [4/4] incubator-tamaya git commit: TAMAYA-288: Additional test coverage TAMAYA-288: Additional test coverage This closes #14 Things that this PR does * Significant increase in test coverage, especially mutation coverage ** API from 57% to 92% ** Core from 38% to 82% ** SPI-Support from ??% (mutation coverage disabled) to 86% * Tests now succeed with OpenJDK, Hotspot, and OpenJ9. * Generated a series of additional bug tickets. :-) What this does not do: * Touch any implementation code. This is only tests. * Reduce code duplication, especially between API/Core and SPI-Support. * Have a great answer for OSGI testing. It ends up being a pile of mocks. Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/125eed20 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/125eed20 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/125eed20 Branch: refs/heads/master Commit: 125eed2029c4d92e07e4aba1c1ac8b9576a576db Parents: 5136203 Author: William Lieurance Authored: Sat Feb 24 23:19:18 2018 -0600 Committer: Phil Ottlinger Committed: Sun Feb 25 21:02:22 2018 +0100 ---------------------------------------------------------------------- .gitignore | 3 +- .../tamaya/ConfigurationProviderTest.java | 103 +++ .../org/apache/tamaya/ConfigurationTest.java | 45 +- .../org/apache/tamaya/TestConfiguration.java | 133 ++-- .../tamaya/TestConfigurationProvider.java | 29 +- .../java/org/apache/tamaya/TypeLiteralTest.java | 67 +- .../spi/ConfigurationProviderSpiTest.java | 58 ++ .../tamaya/spi/PropertySourceProviderTest.java | 35 + .../apache/tamaya/spi/PropertySourceTest.java | 71 ++ .../tamaya/spi/PropertyValueBuilderTest.java | 59 +- .../apache/tamaya/core/OSGIActivatorTest.java | 81 +++ .../internal/CoreConfigurationBuilderTest.java | 36 +- .../apache/tamaya/core/internal/MockBundle.java | 225 +++++++ .../tamaya/core/internal/MockBundleContext.java | 202 ++++++ .../internal/OSGIServiceComparatorTest.java | 114 ++++ .../core/internal/OSGIServiceContextTest.java | 129 ++++ .../core/internal/OSGIServiceLoaderTest.java | 114 ++++ .../converters/BigDecimalConverterTest.java | 6 + .../converters/BigIntegerConverterTest.java | 161 +++++ .../converters/BooleanConverterTest.java | 36 + .../internal/converters/ByteConverterTest.java | 32 + .../internal/converters/CharConverterTest.java | 75 ++- .../internal/converters/ClassConverterTest.java | 15 + .../internal/converters/ConvertQueryTest.java | 80 +++ .../ConverterTestsPropertySource.java | 62 +- .../converters/CurrencyConverterTest.java | 60 +- .../converters/DoubleConverterTest.java | 51 +- .../converters/DurationConverterTest.java | 16 + .../internal/converters/FileConverterTest.java | 58 ++ .../internal/converters/FloatConverterTest.java | 51 +- .../converters/InstantConverterTest.java | 16 + .../converters/IntegerConverterTest.java | 26 + .../converters/LocalDateConverterTest.java | 15 + .../converters/LocalDateTimeConverterTest.java | 15 + .../converters/LocalTimeConverterTest.java | 15 + .../internal/converters/LongConverterTest.java | 26 + .../converters/NumberConverterTest.java | 78 ++- .../converters/OffsetDateTimeConverterTest.java | 16 + .../converters/OffsetTimeConverterTest.java | 18 +- .../converters/OptionalConverterTest.java | 43 +- .../internal/converters/PathConverterTest.java | 33 +- .../internal/converters/ShortConverterTest.java | 27 + .../converters/SupplierConverterTest.java | 84 +++ .../internal/converters/URIConverterTest.java | 27 + .../internal/converters/URLConverterTest.java | 25 + code/core/src/test/resources/mockbundle.service | 18 + code/spi-support/pom.xml | 14 - .../BuildablePropertySourceProviderTest.java | 26 +- .../spisupport/BuildablePropertySourceTest.java | 63 +- .../DefaultConfigValueEvaluatorTest.java | 61 ++ .../DefaultConfigurationBuilderTest.java | 302 +++++++-- .../DefaultConfigurationContextBuilderTest.java | 675 +++++++++++++++++++ .../DefaultConfigurationContextTest.java | 59 ++ .../spisupport/DefaultConfigurationTest.java | 177 ++--- .../tamaya/spisupport/EnumConverterTest.java | 60 +- .../tamaya/spisupport/IntegerTestConverter.java | 41 ++ .../spisupport/MockedConfigurationContext.java | 96 +++ .../tamaya/spisupport/MockedPropertyFilter.java | 39 ++ .../tamaya/spisupport/MockedPropertySource.java | 83 +++ .../PropertyConverterManagerTest.java | 60 ++ .../tamaya/spisupport/ReflectionUtilTest.java | 55 ++ .../spisupport/RegexPropertyFilterTest.java | 15 + .../propertysource/BasePropertySourceTest.java | 47 +- .../propertysource/CLIPropertySourceTest.java | 84 ++- .../EnvironmentPropertySourceTest.java | 93 ++- .../JavaConfigurationProviderTest.java | 47 +- .../PropertiesResourcePropertySourceTest.java | 82 +++ .../SimplePropertySourceTest.java | 109 ++- .../SystemPropertySourceTest.java | 75 ++- .../WrappedPropertySourceTest.java | 168 +++++ .../org.apache.tamaya.spi.PropertyConverter | 3 +- .../org.apache.tamaya.spi.PropertyFilter | 19 + .../org.apache.tamaya.spi.PropertySource | 19 + 73 files changed, 4859 insertions(+), 402 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index 274ebae..5a53be5 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,5 @@ modules/integration/commons-config/commons-configuration.iml examples/simple-propertysource/tamaya-example-simple-propertysource.iml **/*.checkstyle **/*.fbExcludeFilterFile - +nbproject +nb-configuration.xml http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/api/src/test/java/org/apache/tamaya/ConfigurationProviderTest.java ---------------------------------------------------------------------- diff --git a/code/api/src/test/java/org/apache/tamaya/ConfigurationProviderTest.java b/code/api/src/test/java/org/apache/tamaya/ConfigurationProviderTest.java new file mode 100644 index 0000000..e58806e --- /dev/null +++ b/code/api/src/test/java/org/apache/tamaya/ConfigurationProviderTest.java @@ -0,0 +1,103 @@ +/* + * 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. + */ +package org.apache.tamaya; + +import org.apache.tamaya.spi.ConfigurationBuilder; +import org.apache.tamaya.spi.ConfigurationContext; +import org.apache.tamaya.spi.ConfigurationContextBuilder; +import org.junit.Test; +import static org.junit.Assert.*; +import org.mockito.Mockito; + +/** + * + * Test the {@link ConfigurationProivder} class. The tests end up being tests of + * the default methods in the {@link ConfigurationProivder} interface as they + * pass through to the {@link TestConfigurationProvider} mocked object. + */ +public class ConfigurationProviderTest { + + + /** + * Test of createConfiguration method, of class ConfigurationProvider. + */ + @Test + public void testCreateConfiguration() { + Configuration result = ConfigurationProvider.createConfiguration(ConfigurationProvider.getConfiguration().getContext()); + assertNotNull(result); + } + + /** + * Test of getConfigurationContext and setConfigurationContext method, of + * class ConfigurationProvider. + */ + @Test + public void testGetSetConfigurationContext() { + ConfigurationContext currentContext = ConfigurationProvider.getConfigurationContext(); + assertTrue(currentContext instanceof ConfigurationContext); + ConfigurationContext newContext = Mockito.mock(ConfigurationContext.class); + try{ + ConfigurationProvider.setConfigurationContext(newContext); + assertEquals(newContext, ConfigurationProvider.getConfigurationContext()); + }finally{ + ConfigurationProvider.setConfigurationContext(currentContext); + } + assertEquals(currentContext, ConfigurationProvider.getConfigurationContext()); + } + + /** + * Test of getConfiguration method, of class ConfigurationProvider. + */ + @Test + public void testGetSetConfiguration() { + Configuration currentConfig = ConfigurationProvider.getConfiguration(); + assertTrue(currentConfig instanceof Configuration); + Configuration newConfig = Mockito.mock(Configuration.class); + try{ + ConfigurationProvider.setConfiguration(newConfig); + assertEquals(newConfig, ConfigurationProvider.getConfiguration()); + }finally{ + ConfigurationProvider.setConfiguration(currentConfig); + } + assertEquals(currentConfig, ConfigurationProvider.getConfiguration()); + } + + /** + * Test of getConfigurationBuilder method, of class ConfigurationProvider. + */ + @Test + public void testGetConfigurationBuilder() { + ConfigurationBuilder result = ConfigurationProvider.getConfigurationBuilder(); + assertTrue(result instanceof ConfigurationBuilder); + } + + /** + * Test of getConfigurationContextBuilder method, of class ConfigurationProvider. + */ + @Test + public void testGetConfigurationContextBuilder() { + ConfigurationContextBuilder result = ConfigurationProvider.getConfigurationContextBuilder(); + assertTrue(result instanceof ConfigurationContextBuilder); + } + + @Test + public void testConstructorFails(){ + assertTrue(ConfigurationProvider.class.getConstructors().length == 0); + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/api/src/test/java/org/apache/tamaya/ConfigurationTest.java ---------------------------------------------------------------------- diff --git a/code/api/src/test/java/org/apache/tamaya/ConfigurationTest.java b/code/api/src/test/java/org/apache/tamaya/ConfigurationTest.java index ecbb75c..26e2058 100644 --- a/code/api/src/test/java/org/apache/tamaya/ConfigurationTest.java +++ b/code/api/src/test/java/org/apache/tamaya/ConfigurationTest.java @@ -22,8 +22,10 @@ import org.junit.Test; import static org.junit.Assert.*; /** - * Test class that tests the default methods implemented on {@link org.apache.tamaya.Configuration}. The provided - * {@link org.apache.tamaya.TestConfiguration} is implemeted with maximal use of the default methods. + * Test class that tests the default methods implemented on + * {@link org.apache.tamaya.Configuration}. The provided + * {@link org.apache.tamaya.TestConfiguration} is implemented with maximal use of + * the default methods. */ public class ConfigurationTest { @@ -31,11 +33,12 @@ public class ConfigurationTest { public void testget() throws Exception { assertEquals(Boolean.TRUE, ConfigurationProvider.getConfiguration().get("booleanTrue", Boolean.class)); assertEquals(Boolean.FALSE, ConfigurationProvider.getConfiguration().get("booleanFalse", Boolean.class)); - assertEquals((int)Byte.MAX_VALUE, (int)ConfigurationProvider.getConfiguration().get("byte", Byte.class)); - assertEquals(Integer.MAX_VALUE, (int)ConfigurationProvider.getConfiguration().get("int", Integer.class)); - assertEquals(Long.MAX_VALUE, (long)ConfigurationProvider.getConfiguration().get("long", Long.class)); - assertEquals(Float.MAX_VALUE, (double)ConfigurationProvider.getConfiguration().get("float", Float.class), 0.0d); + assertEquals((int) Byte.MAX_VALUE, (int) ConfigurationProvider.getConfiguration().get("byte", Byte.class)); + assertEquals(Integer.MAX_VALUE, (int) ConfigurationProvider.getConfiguration().get("int", Integer.class)); + assertEquals(Long.MAX_VALUE, (long) ConfigurationProvider.getConfiguration().get("long", Long.class)); + assertEquals(Float.MAX_VALUE, (double) ConfigurationProvider.getConfiguration().get("float", Float.class), 0.0d); assertEquals(Double.MAX_VALUE, ConfigurationProvider.getConfiguration().get("double", Double.class), 0.0d); + assertEquals("aStringValue", ConfigurationProvider.getConfiguration().get("String")); } @Test @@ -47,17 +50,39 @@ public class ConfigurationTest { @Test public void testGetInteger() throws Exception { - assertEquals(Integer.MAX_VALUE,(int) ConfigurationProvider.getConfiguration().get("int", Integer.class)); + assertEquals(Integer.MAX_VALUE, (int) ConfigurationProvider.getConfiguration().get("int", Integer.class)); } @Test public void testGetLong() throws Exception { - assertEquals(Long.MAX_VALUE,(long) ConfigurationProvider.getConfiguration().get("long", Long.class)); + assertEquals(Long.MAX_VALUE, (long) ConfigurationProvider.getConfiguration().get("long", Long.class)); } @Test public void testGetDouble() throws Exception { - assertEquals(Double.MAX_VALUE,ConfigurationProvider.getConfiguration().get("double", Double.class), 0.0d); + assertEquals(Double.MAX_VALUE, ConfigurationProvider.getConfiguration().get("double", Double.class), 0.0d); } -} \ No newline at end of file + @Test + public void testGetOrDefault() throws Exception { + assertEquals("StringIfThereWasNotAValueThere", ConfigurationProvider.getConfiguration().getOrDefault("nonexistant", "StringIfThereWasNotAValueThere")); + assertEquals("StringIfThereWasNotAValueThere", ConfigurationProvider.getConfiguration().getOrDefault("nonexistant", String.class, "StringIfThereWasNotAValueThere")); + } + + @Test + public void testToBuilder() throws Exception { + assertNotNull(ConfigurationProvider.getConfiguration().toBuilder()); + } + + @Test + public void testWith() throws Exception { + ConfigOperator noop = (Configuration config) -> config; + assertNotNull(ConfigurationProvider.getConfiguration().with(noop)); + } + + @Test + public void testQuery() throws Exception { + ConfigQuery stringQuery = (ConfigQuery) (Configuration config) -> config.get("String"); + assertEquals("aStringValue", ConfigurationProvider.getConfiguration().query(stringQuery)); + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/api/src/test/java/org/apache/tamaya/TestConfiguration.java ---------------------------------------------------------------------- diff --git a/code/api/src/test/java/org/apache/tamaya/TestConfiguration.java b/code/api/src/test/java/org/apache/tamaya/TestConfiguration.java index f50c1dc..dd85a8d 100644 --- a/code/api/src/test/java/org/apache/tamaya/TestConfiguration.java +++ b/code/api/src/test/java/org/apache/tamaya/TestConfiguration.java @@ -18,120 +18,97 @@ */ package org.apache.tamaya; - import org.apache.tamaya.spi.ConfigurationContext; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; +import org.mockito.Mockito; /** - * Test Configuration class, that is used to testdata the default methods provided by the API. + * Test Configuration class, that is used to testdata the default methods + * provided by the API. */ -public class TestConfiguration implements Configuration{ +public class TestConfiguration implements Configuration { + + private static final Map VALUES; - private static final Map VALUES; static { VALUES = new HashMap<>(); - VALUES.put("long", String.valueOf(Long.MAX_VALUE)); - VALUES.put("int", String.valueOf(Integer.MAX_VALUE)); - VALUES.put("double", String.valueOf(Double.MAX_VALUE)); - VALUES.put("float", String.valueOf(Float.MAX_VALUE)); - VALUES.put("short", String.valueOf(Short.MAX_VALUE)); - VALUES.put("byte", String.valueOf(Byte.MAX_VALUE)); - VALUES.put("booleanTrue", "true"); - VALUES.put("booleanFalse", "false"); + VALUES.put("long", Long.MAX_VALUE); + VALUES.put("int", Integer.MAX_VALUE); + VALUES.put("double", Double.MAX_VALUE); + VALUES.put("float", Float.MAX_VALUE); + VALUES.put("short", Short.MAX_VALUE); + VALUES.put("byte", Byte.MAX_VALUE); VALUES.put("String", "aStringValue"); } - @Override - public String get(String key) { - return VALUES.get(key); - } - - @Override - public String getOrDefault(String key, String defaultValue) { - String val = get(key); - if(val==null){ - return defaultValue; - } - return val; - } - - @Override - public T getOrDefault(String key, Class type, T defaultValue) { - T val = get(key, type); - if(val==null){ - return defaultValue; - } - return val; - } - @SuppressWarnings("unchecked") - @Override - public T get(String key, Class type) { - if(type.equals(Long.class)){ - return (T)(Object)Long.MAX_VALUE; - } - else if(type.equals(Integer.class)){ - return (T)(Object) Integer.MAX_VALUE; - } - else if(type.equals(Double.class)){ - return (T)(Object) Double.MAX_VALUE; - } - else if(type.equals(Float.class)){ - return (T)(Object) Float.MAX_VALUE; - } - else if(type.equals(Short.class)){ - return (T)(Object) Short.MAX_VALUE; - } - else if(type.equals(Byte.class)){ - return (T)(Object) Byte.MAX_VALUE; - } - else if(type.equals(Boolean.class)){ - if("booleanTrue".equals(key)) { - return (T)Boolean.TRUE; - } - else{ - return (T)Boolean.FALSE; + @Override + public T get(String key, TypeLiteral type) { + if (type.getRawType().equals(Long.class)) { + return (T) VALUES.get(key); + } else if (type.getRawType().equals(Integer.class)) { + return (T) VALUES.get(key); + } else if (type.getRawType().equals(Double.class)) { + return (T) VALUES.get(key); + } else if (type.getRawType().equals(Float.class)) { + return (T) VALUES.get(key); + } else if (type.getRawType().equals(Short.class)) { + return (T) VALUES.get(key); + } else if (type.getRawType().equals(Byte.class)) { + return (T) VALUES.get(key); + } else if (type.getRawType().equals(Boolean.class)) { + if ("booleanTrue".equals(key)) { + return (T) Boolean.TRUE; + } else { + return (T) Boolean.FALSE; } - } - else if(type.equals(String.class)){ - return (T)"aStringValue"; + } else if (type.getRawType().equals(String.class)) { + return (T) VALUES.get(key); } throw new ConfigException("No such property: " + key); } @Override - public T get(String key, TypeLiteral type) { - throw new RuntimeException("Method not implemented yet."); - } - - @Override public T getOrDefault(String key, TypeLiteral type, T defaultValue) { T val = get(key, type); - if(val==null){ + if (val == null) { return defaultValue; } return val; } @Override - public Configuration with(ConfigOperator operator) { - return null; + public ConfigurationContext getContext() { + return Mockito.mock(ConfigurationContext.class); } @Override - public T query(ConfigQuery query) { - throw new RuntimeException("Method not implemented yet."); + public Map getProperties() { + // run toString on each value of the (key, value) set in VALUES + return VALUES.entrySet().stream().collect( + Collectors.toMap( + Map.Entry::getKey, + e -> e.getValue().toString())); } @Override - public ConfigurationContext getContext() { - return null; + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof TestConfiguration)) { + return false; + } + TestConfiguration that = (TestConfiguration) o; + return that.getProperties().equals(this.getProperties()); } @Override - public Map getProperties() { - throw new RuntimeException("Method not implemented yet."); + public int hashCode() { + return VALUES.hashCode(); } + } http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/api/src/test/java/org/apache/tamaya/TestConfigurationProvider.java ---------------------------------------------------------------------- diff --git a/code/api/src/test/java/org/apache/tamaya/TestConfigurationProvider.java b/code/api/src/test/java/org/apache/tamaya/TestConfigurationProvider.java index 1ccce31..2136129 100644 --- a/code/api/src/test/java/org/apache/tamaya/TestConfigurationProvider.java +++ b/code/api/src/test/java/org/apache/tamaya/TestConfigurationProvider.java @@ -24,14 +24,17 @@ import org.apache.tamaya.spi.ConfigurationContext; import org.apache.tamaya.spi.ConfigurationBuilder; import org.apache.tamaya.spi.ConfigurationContextBuilder; import org.apache.tamaya.spi.ConfigurationProviderSpi; +import org.mockito.Mockito; /** - * Test Configuration class, that is used to testdata the default methods provided by the API. + * Test Configuration class, that is used to testdata the default methods + * provided by the API. */ @Priority(-1) public class TestConfigurationProvider implements ConfigurationProviderSpi { - private static final Configuration config = new TestConfiguration(); + private Configuration config = new TestConfiguration(); + private ConfigurationContext context = Mockito.mock(ConfigurationContext.class); @Override public Configuration getConfiguration() { @@ -45,35 +48,31 @@ public class TestConfigurationProvider implements ConfigurationProviderSpi { @Override public ConfigurationContext getConfigurationContext() { - return config.getContext(); + return context; + } + + public ConfigurationContext getConfigurationContextFromInterface(){ + return ConfigurationProviderSpi.super.getConfigurationContext(); } @Override public void setConfigurationContext(ConfigurationContext context) { - throw new UnsupportedOperationException(); + this.context = context; } - @Override - public boolean isConfigurationContextSettable() { - return false; - } @Override public ConfigurationBuilder getConfigurationBuilder() { - return null; + return Mockito.mock(ConfigurationBuilder.class, Mockito.RETURNS_DEEP_STUBS); } @Override public ConfigurationContextBuilder getConfigurationContextBuilder() { - return null; + return Mockito.mock(ConfigurationContextBuilder.class); } @Override public void setConfiguration(Configuration config) { - } - - @Override - public boolean isConfigurationSettable() { - return false; + this.config = config; } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/api/src/test/java/org/apache/tamaya/TypeLiteralTest.java ---------------------------------------------------------------------- diff --git a/code/api/src/test/java/org/apache/tamaya/TypeLiteralTest.java b/code/api/src/test/java/org/apache/tamaya/TypeLiteralTest.java index 7435e08..65fe706 100644 --- a/code/api/src/test/java/org/apache/tamaya/TypeLiteralTest.java +++ b/code/api/src/test/java/org/apache/tamaya/TypeLiteralTest.java @@ -18,6 +18,7 @@ */ package org.apache.tamaya; +import java.lang.reflect.Type; import static org.apache.tamaya.TypeLiteral.getGenericInterfaceTypeParameters; import static org.apache.tamaya.TypeLiteral.getTypeParameters; import static org.junit.Assert.assertEquals; @@ -25,8 +26,10 @@ import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Map; import org.junit.Test; +import static org.junit.Assert.*; /** * Tests for the {@link TypeLiteral} class. @@ -34,21 +37,21 @@ import org.junit.Test; @SuppressWarnings("serial") public class TypeLiteralTest { - @Test(expected = NullPointerException.class) + @Test(expected = NullPointerException.class) public void constructorRequiresNonNullParameter() { - new TypeLiteral>(null){}; + new TypeLiteral>(null) { }; } @Test - public void test_constrcutor(){ - TypeLiteral> listTypeLiteral = new TypeLiteral>(){}; + public void test_constructor() { + TypeLiteral> listTypeLiteral = new TypeLiteral>() { }; assertEquals(List.class, listTypeLiteral.getRawType()); assertEquals(String.class, TypeLiteral.getTypeParameters(listTypeLiteral.getType())[0]); } @Test - public void test_of(){ - class MyListClass extends ArrayList{} + public void test_of() { + class MyListClass extends ArrayList { } TypeLiteral listTypeLiteral = TypeLiteral.of(MyListClass.class); assertEquals(MyListClass.class, listTypeLiteral.getRawType()); assertEquals(MyListClass.class, listTypeLiteral.getType()); @@ -60,18 +63,28 @@ public class TypeLiteralTest { } @Test - public void test_getTypeParameter(){ - TypeLiteral> listTypeLiteral = new TypeLiteral>(){}; + public void test_getTypeParameters() { + TypeLiteral> listTypeLiteral = new TypeLiteral>() { }; assertEquals(List.class, listTypeLiteral.getRawType()); assertEquals(String.class, TypeLiteral.getTypeParameters(listTypeLiteral.getType())[0]); } @Test - public void test_getGenericInterfaceTypeParameter(){ - class MyListClass extends ArrayList implements List{} + public void testGetTypeParametersNoGenerics() { + assertEquals(0, getTypeParameters(String.class).length); + } + + @Test + public void test_getGenericInterfaceTypeParameter() { + class MyListClass extends ArrayList implements List { } assertEquals(String.class, getGenericInterfaceTypeParameters(MyListClass.class, List.class)[0]); } + @Test + public void testGetGenericInterfaceTypeParameterNoGenerics() { + assertEquals(0, getGenericInterfaceTypeParameters(String.class, String.class).length); + } + @Test(expected = NullPointerException.class) public void getGenericInterfaceTypeParametersRequiredNonNullValueForClassParameter() { getGenericInterfaceTypeParameters(null, Iterator.class); @@ -87,4 +100,38 @@ public class TypeLiteralTest { getTypeParameters(null); } + @Test + public void testTypeTakingParametersMustBeSubclassOfParameterizedType() { + //Reflection on ArrayList gives a ParameterizedType + class A extends ArrayList { }; + class B extends A { }; + TypeLiteral> checker = new TypeLiteral>() { }; + Type t = checker.getDefinedType(B.class); + assertEquals(t.getTypeName(), "java.lang.String"); + } + + @Test(expected = RuntimeException.class) + public void testTypeTakingParametersMustNotBeSubclassOfObject() { + //Create a class hierarchy where B is a subclass of Object and not + // ParameterizedType, but still takes parameters. + class A { }; + class B extends A { }; + TypeLiteral> checker = new TypeLiteral>() { }; + checker.getDefinedType(B.class); + } + + @Test + public void testHashAndEquals(){ + TypeLiteral a = TypeLiteral.of(List.class); + TypeLiteral b = TypeLiteral.of(List.class); + TypeLiteral c = TypeLiteral.of(Map.class); + assertEquals(a.hashCode(), b.hashCode()); + assertNotEquals(a.hashCode(), c.hashCode()); + assertTrue(a.equals(a)); + assertTrue(a.equals(b)); + assertFalse(a.equals(null)); + assertFalse(a.equals("SomeString")); + assertFalse(a.equals(c)); + } + } http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/api/src/test/java/org/apache/tamaya/spi/ConfigurationProviderSpiTest.java ---------------------------------------------------------------------- diff --git a/code/api/src/test/java/org/apache/tamaya/spi/ConfigurationProviderSpiTest.java b/code/api/src/test/java/org/apache/tamaya/spi/ConfigurationProviderSpiTest.java new file mode 100644 index 0000000..2e1a836 --- /dev/null +++ b/code/api/src/test/java/org/apache/tamaya/spi/ConfigurationProviderSpiTest.java @@ -0,0 +1,58 @@ +/* + * 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. + */ +package org.apache.tamaya.spi; + +import org.apache.tamaya.TestConfigurationProvider; +import org.junit.Test; +import static org.junit.Assert.*; +import org.mockito.Mockito; + +public class ConfigurationProviderSpiTest { + +TestConfigurationProvider configProvider = new TestConfigurationProvider(); + + @Test + public void testIsConfigurationSettableByDefault(){ + assertTrue(configProvider.isConfigurationSettable()); + } + + @Test + public void testIsConfigurationContextSettable(){ + assertTrue(configProvider.isConfigurationContextSettable()); + } + + /** + * Test of getConfigurationContext and setConfigurationContext method, of + * class ConfigurationProviderSpi. + */ + @Test + public void testGetSetConfigurationContext() { + ConfigurationContext currentContext = configProvider.getConfigurationContextFromInterface(); + assertTrue(currentContext instanceof ConfigurationContext); + ConfigurationContext newContext = Mockito.mock(ConfigurationContext.class); + try{ + configProvider.setConfigurationContext(newContext); + //The mocked TestConfigurationProvider doesn't set the context on the + // inner Configuration object, as that's deprecated. + assertEquals(newContext, configProvider.getConfigurationContext()); + }finally{ + configProvider.setConfigurationContext(currentContext); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/api/src/test/java/org/apache/tamaya/spi/PropertySourceProviderTest.java ---------------------------------------------------------------------- diff --git a/code/api/src/test/java/org/apache/tamaya/spi/PropertySourceProviderTest.java b/code/api/src/test/java/org/apache/tamaya/spi/PropertySourceProviderTest.java new file mode 100644 index 0000000..0e8bcfb --- /dev/null +++ b/code/api/src/test/java/org/apache/tamaya/spi/PropertySourceProviderTest.java @@ -0,0 +1,35 @@ +/* + * 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. + */ +package org.apache.tamaya.spi; + +import org.junit.Test; +import static org.junit.Assert.*; + +public class PropertySourceProviderTest { + + /** + * Test of EMPTY instance of PropertySourceProvider + */ + @Test + public void testEmptySourceProvider() { + PropertySourceProvider instance = PropertySourceProvider.EMPTY; + assertTrue(instance.getPropertySources().isEmpty()); + assertEquals("PropertySourceProvider(empty)", instance.toString()); + } +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/api/src/test/java/org/apache/tamaya/spi/PropertySourceTest.java ---------------------------------------------------------------------- diff --git a/code/api/src/test/java/org/apache/tamaya/spi/PropertySourceTest.java b/code/api/src/test/java/org/apache/tamaya/spi/PropertySourceTest.java new file mode 100644 index 0000000..3b7c0ff --- /dev/null +++ b/code/api/src/test/java/org/apache/tamaya/spi/PropertySourceTest.java @@ -0,0 +1,71 @@ +/* + * 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. + */ +package org.apache.tamaya.spi; + +import java.util.Map; +import org.junit.Test; +import static org.junit.Assert.*; + +public class PropertySourceTest { + + + /** + * Test of EMPTY instance of PropertySource + */ + @Test + public void testEmptySource() { + PropertySource instance = PropertySource.EMPTY; + assertEquals(Integer.MIN_VALUE, instance.getOrdinal()); + assertEquals("", instance.getName()); + assertNull(instance.get("key")); + assertTrue(instance.getProperties().isEmpty()); + assertFalse(instance.isScannable()); + assertEquals("PropertySource.EMPTY", instance.toString()); + + } + + /** + * Test of default isScannable method, of class PropertySource. + */ + @Test + public void testIsScannableByDefault() { + PropertySource instance = new PropertySourceImpl(); + assertEquals(true, instance.isScannable()); + } + + public class PropertySourceImpl implements PropertySource { + + public int getOrdinal() { + return 0; + } + + public String getName() { + return ""; + } + + public PropertyValue get(String key) { + return null; + } + + public Map getProperties() { + return null; + } + } + +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/api/src/test/java/org/apache/tamaya/spi/PropertyValueBuilderTest.java ---------------------------------------------------------------------- diff --git a/code/api/src/test/java/org/apache/tamaya/spi/PropertyValueBuilderTest.java b/code/api/src/test/java/org/apache/tamaya/spi/PropertyValueBuilderTest.java index cd187db..8f983bc 100644 --- a/code/api/src/test/java/org/apache/tamaya/spi/PropertyValueBuilderTest.java +++ b/code/api/src/test/java/org/apache/tamaya/spi/PropertyValueBuilderTest.java @@ -18,9 +18,7 @@ */ package org.apache.tamaya.spi; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.*; import java.util.HashMap; import java.util.Map; @@ -89,7 +87,7 @@ public class PropertyValueBuilderTest { public void setKeyRequiresNonNullParameterForValue() { new PropertyValueBuilder("a", "b", "s").setValue(null); } - + /* * Tests für addMetaEntries(Map) */ @@ -124,21 +122,26 @@ public class PropertyValueBuilderTest { PropertyValueBuilder b = new PropertyValueBuilder("k", "testKey").setValue("v"); PropertyValue val = b.build(); assertEquals(val.getKey(),"k"); + assertEquals(val.getValue(),"v"); + assertNull(val.getMetaEntries().get("k")); } - + @Test - public void testSource() throws Exception { - PropertyValueBuilder b = new PropertyValueBuilder("k", "testSource").setValue("v"); + public void testSetKey() { + PropertyValueBuilder b = new PropertyValueBuilder("k", "testSetKey").setKey("key"); PropertyValue val = b.build(); - assertEquals(val.getSource(),"testSource"); + assertEquals(val.getKey(),"key"); } @Test - public void testValue() throws Exception { - PropertyValueBuilder b = new PropertyValueBuilder("k", "testValue").setValue("v"); + public void testSource() throws Exception { + PropertyValueBuilder b = new PropertyValueBuilder("k", "testSource").setValue("v"); PropertyValue val = b.build(); - assertEquals(val.getValue(),"v"); - assertNull(val.getMetaEntries().get("k")); + assertEquals(val.getSource(),"testSource"); + + PropertyValueBuilder b2 = b.setSource("differentSource"); + val = b2.build(); + assertEquals(val.getSource(),"differentSource"); } @Test(expected=NullPointerException.class) @@ -157,8 +160,9 @@ public class PropertyValueBuilderTest { .setMetaEntries(meta).build(); assertEquals("v", pv.getValue()); assertEquals("k", pv.getKey()); - assertNull("v2", pv.getMetaEntry("k")); + assertNull(pv.getMetaEntry("k")); assertEquals("testGetKey", pv.getSource()); + assertEquals(2, pv.getMetaEntries().size()); assertEquals("2", pv.getMetaEntry("1")); assertEquals("b", pv.getMetaEntry("a")); } @@ -207,9 +211,11 @@ public class PropertyValueBuilderTest { Map meta = new HashMap<>(); meta.put("1","2"); meta.put("a", "b"); - PropertyValue pv = PropertyValue.builder("k", "testGetKey") + PropertyValueBuilder b = PropertyValue.builder("k", "testGetKey") .setValue("v") - .setMetaEntries(meta).build(); + .setMetaEntries(meta); + PropertyValue pv = b.build(); + assertEquals(meta, b.getMetaEntries()); assertEquals(meta, pv.getMetaEntries()); } @@ -242,5 +248,28 @@ public class PropertyValueBuilderTest { assertNotNull(contextData.getMetaEntry("ts")); assertEquals(contextData.getMetaEntry("y"), "y2"); } + + @Test + public void testMapKey() { + PropertyValueBuilder b = new PropertyValueBuilder("key", "testMapKey") + .setValue("value") + .addMetaEntry("_keyAndThenSome", "mappedvalue") + .addMetaEntry("somethingelse", "othervalue") + .mapKey("mappedkey"); + PropertyValue pv = b.build(); + assertEquals("mappedkey", pv.getKey()); + assertEquals("value", pv.getValue()); + assertEquals(2, pv.getMetaEntries().size()); + assertEquals("mappedvalue", pv.getMetaEntry("_mappedkey.AndThenSome")); + assertEquals("othervalue", pv.getMetaEntry("somethingelse")); + } + + @Test + public void testToString(){ + PropertyValueBuilder b = new PropertyValueBuilder("k") + .setValue("v") + .addMetaEntry("metak", "metav"); + assertEquals("PropertyValueBuilder{key='k'value='v', metaEntries={metak=metav}}", b.toString()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/core/src/test/java/org/apache/tamaya/core/OSGIActivatorTest.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/OSGIActivatorTest.java b/code/core/src/test/java/org/apache/tamaya/core/OSGIActivatorTest.java new file mode 100644 index 0000000..1d59c68 --- /dev/null +++ b/code/core/src/test/java/org/apache/tamaya/core/OSGIActivatorTest.java @@ -0,0 +1,81 @@ +/* + * 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. + */ +package org.apache.tamaya.core; + +import org.apache.tamaya.Configuration; +import org.apache.tamaya.ConfigurationProvider; +import org.apache.tamaya.core.internal.MockBundle; +import org.apache.tamaya.core.internal.MockBundleContext; +import org.apache.tamaya.spi.ServiceContext; +import org.apache.tamaya.spi.ServiceContextManager; +import org.junit.After; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotSame; +import org.junit.Before; +import org.junit.Test; +import org.osgi.framework.Bundle; + +/** + * + * @author William.Lieurance 2018-02-05 + */ +public class OSGIActivatorTest { + + ServiceContext prevServiceContext; + Configuration prevConfiguration; + + @Before + public void setUp() throws Exception { + prevServiceContext = ServiceContextManager.getServiceContext(); + prevConfiguration = ConfigurationProvider.getConfiguration(); + } + + @After + public void tearDown() throws Exception { + ServiceContextManager.set(prevServiceContext); + ConfigurationProvider.setConfiguration(prevConfiguration); + } + + /** + * Test of start and stop methods, of class OSGIActivator. + */ + @Test + public void testStartThenStop() { + //Set up the mock + MockBundleContext mockBundleContext = new MockBundleContext(); + MockBundle startedBundle = new MockBundle(); + startedBundle.setState(Bundle.ACTIVE); + startedBundle.setBundleId(1); + startedBundle.setBundleContext(mockBundleContext); + mockBundleContext.installBundle(startedBundle); + OSGIActivator instance = new OSGIActivator(); + + //Start + instance.start(mockBundleContext); + assertEquals(1, mockBundleContext.getBundleListenersCount()); + assertFalse(ConfigurationProvider.getConfiguration().getContext().getPropertyConverters().isEmpty()); + assertNotSame(prevConfiguration, ConfigurationProvider.getConfiguration()); + + //Stop + instance.stop(mockBundleContext); + assertEquals(0, mockBundleContext.getBundleListenersCount()); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/core/src/test/java/org/apache/tamaya/core/internal/CoreConfigurationBuilderTest.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/CoreConfigurationBuilderTest.java b/code/core/src/test/java/org/apache/tamaya/core/internal/CoreConfigurationBuilderTest.java index 37dc2cb..2e9fcd0 100644 --- a/code/core/src/test/java/org/apache/tamaya/core/internal/CoreConfigurationBuilderTest.java +++ b/code/core/src/test/java/org/apache/tamaya/core/internal/CoreConfigurationBuilderTest.java @@ -18,6 +18,13 @@ */ package org.apache.tamaya.core.internal; +import java.io.File; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.net.URI; +import java.net.URL; +import java.nio.file.Path; +import java.util.Collection; import org.apache.tamaya.Configuration; import org.apache.tamaya.ConfigurationProvider; import org.apache.tamaya.TypeLiteral; @@ -25,7 +32,9 @@ import org.apache.tamaya.spi.*; import org.junit.Test; import java.util.Collections; +import java.util.Currency; import java.util.Map; +import org.apache.tamaya.core.internal.converters.BigDecimalConverter; import static org.junit.Assert.*; @@ -52,6 +61,7 @@ public class CoreConfigurationBuilderTest { assertEquals(cfg, b.build()); } + @Test public void addPropertySources_Array() throws Exception { PropertySource testPS2 = new TestPropertySource("addPropertySources_Array_2"); @@ -173,10 +183,34 @@ public class CoreConfigurationBuilderTest { } @Test - public void bla() throws Exception { + public void addDefaultPropertyConverters() throws Exception { ConfigurationBuilder builder = ConfigurationProvider.getConfigurationBuilder(); builder.addDefaultPropertyConverters(); } + + @Test + public void addCorePropertyConverters() throws Exception { + CoreConfigurationBuilder b = new CoreConfigurationBuilder(); + b.addCorePropertyConverters(); + Map, Collection>> converters = b.getPropertyConverter(); + assertTrue(converters.containsKey(TypeLiteral.of(BigDecimal.class))); + assertTrue(converters.containsKey(TypeLiteral.of(BigInteger.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Boolean.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Byte.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Character.class))); + assertTrue(converters.containsKey(TypeLiteral.>of(Class.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Currency.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Double.class))); + assertTrue(converters.containsKey(TypeLiteral.of(File.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Float.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Integer.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Long.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Number.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Path.class))); + assertTrue(converters.containsKey(TypeLiteral.of(Short.class))); + assertTrue(converters.containsKey(TypeLiteral.of(URI.class))); + assertTrue(converters.containsKey(TypeLiteral.of(URL.class))); + } private static class TestPropertySource implements PropertySource{ http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/core/src/test/java/org/apache/tamaya/core/internal/MockBundle.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/MockBundle.java b/code/core/src/test/java/org/apache/tamaya/core/internal/MockBundle.java new file mode 100644 index 0000000..415a323 --- /dev/null +++ b/code/core/src/test/java/org/apache/tamaya/core/internal/MockBundle.java @@ -0,0 +1,225 @@ +/* + * 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. + */ +package org.apache.tamaya.core.internal; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.cert.X509Certificate; +import java.util.Dictionary; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; +import java.util.Vector; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.Version; + +/** + * + * @author William.Lieurance 2018-02-05 + */ +public class MockBundle implements Bundle { + + private int state = Bundle.ACTIVE; + + @Override + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + @Override + public void start(int i) throws BundleException { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public void start() throws BundleException { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public void stop(int i) throws BundleException { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public void stop() throws BundleException { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public void update(InputStream in) throws BundleException { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public void update() throws BundleException { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public void uninstall() throws BundleException { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public Dictionary getHeaders() { + return new Hashtable<>(); + } + + private long bundleId = 1L; + + @Override + public long getBundleId() { + return bundleId; + } + + public void setBundleId(long bundleId) { + this.bundleId = bundleId; + } + + @Override + public String getLocation() { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public ServiceReference[] getRegisteredServices() { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public ServiceReference[] getServicesInUse() { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public boolean hasPermission(Object o) { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public URL getResource(String string) { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public Dictionary getHeaders(String string) { + return new Hashtable<>(); + } + + @Override + public String getSymbolicName() { + return "MockBundle"; + } + + @Override + public Class loadClass(String string) throws ClassNotFoundException { + if (string.contains("org.something.else") || string.endsWith("/")) { + throw new UnsupportedOperationException("Requested class that should not be requested: " + string); + } + return String.class; + } + + @Override + public Enumeration getResources(String string) throws IOException { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public Enumeration getEntryPaths(String string) { + Vector v = new Vector<>(); + v.add("META-INF/services/" + "someslash/"); + v.add("META-INF/services/" + "org.apache.tamaya"); + v.add("META-INF/services/" + "org.something.else"); + return v.elements(); + } + + @Override + public URL getEntry(String string) { + if (string.equals("META-INF/services/")) { + try { + return new URL("file:///"); + } catch (MalformedURLException ex) { + return null; + } + } + if (string.contains("org.something.else") || string.endsWith("/")) { + throw new UnsupportedOperationException("Requested entry that should not be requested: " + string); + } + return getClass().getClassLoader().getResource("mockbundle.service"); + } + + @Override + public long getLastModified() { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public Enumeration findEntries(String string, String string1, boolean bln) { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + private BundleContext bundleContext = new MockBundleContext(); + + @Override + public BundleContext getBundleContext() { + return bundleContext; + } + + public void setBundleContext(BundleContext bundleContext) { + this.bundleContext = bundleContext; + } + + @Override + public Map> getSignerCertificates(int i) { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public Version getVersion() { + return new Version(0, 0, 1); + } + + @Override + public A adapt(Class type) { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public File getDataFile(String string) { + throw new UnsupportedOperationException("Not supported (MockBundle)"); + } + + @Override + public int compareTo(Bundle o) { + return Long.compare(this.getBundleId(), o.getBundleId()); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/core/src/test/java/org/apache/tamaya/core/internal/MockBundleContext.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/MockBundleContext.java b/code/core/src/test/java/org/apache/tamaya/core/internal/MockBundleContext.java new file mode 100644 index 0000000..3d16ebf --- /dev/null +++ b/code/core/src/test/java/org/apache/tamaya/core/internal/MockBundleContext.java @@ -0,0 +1,202 @@ +/* + * 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. + */ +package org.apache.tamaya.core.internal; + +import java.io.File; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Dictionary; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.osgi.framework.BundleListener; +import org.osgi.framework.Filter; +import org.osgi.framework.FrameworkListener; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceListener; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.ServiceRegistration; + +/** + * + * @author William.Lieurance 2018-02-05 + */ +public class MockBundleContext implements BundleContext { + + private ArrayList bundles = new ArrayList<>(); + + @Override + public String getProperty(String string) { + throw new UnsupportedOperationException("Not supported (MockBundleContext getProperty)"); + } + + @Override + public Bundle getBundle() { + return bundles.get(0); + } + + @Override + public Bundle installBundle(String string, InputStream in) throws BundleException { + throw new UnsupportedOperationException("Not supported (MockBundleContext installBundle)"); + } + + @Override + public Bundle installBundle(String string) throws BundleException { + throw new UnsupportedOperationException("Not supported (MockBundleContext installBundle)"); + } + + public Bundle installBundle(Bundle bundle) { + bundles.add(bundle); + return bundle; + } + + @Override + public Bundle getBundle(long l) { + return bundles.get(0); + } + + @Override + public Bundle[] getBundles() { + return bundles.toArray(new Bundle[bundles.size()]); + } + + @Override + public void addServiceListener(ServiceListener sl, String string) throws InvalidSyntaxException { + throw new UnsupportedOperationException("Not supported (MockBundleContext addServiceListener)"); + } + + @Override + public void addServiceListener(ServiceListener sl) { + throw new UnsupportedOperationException("Not supported (MockBundleContext addServiceListener)"); + } + + @Override + public void removeServiceListener(ServiceListener sl) { + throw new UnsupportedOperationException("Not supported (MockBundleContext removeServiceListener)"); + } + + int bundleListenersCount = 0; + + public int getBundleListenersCount() { + return bundleListenersCount; + } + + public void setBundleListenersCount(int bundleListenersCount) { + this.bundleListenersCount = bundleListenersCount; + } + + @Override + public void addBundleListener(BundleListener bl) { + bundleListenersCount++; + } + + @Override + public void removeBundleListener(BundleListener bl) { + bundleListenersCount--; + } + + @Override + public void addFrameworkListener(FrameworkListener fl) { + throw new UnsupportedOperationException("Not supported (MockBundleContext addFrameworkListener)"); + } + + @Override + public void removeFrameworkListener(FrameworkListener fl) { + throw new UnsupportedOperationException("Not supported (MockBundleContext removeFrameworkListener)"); + } + + int serviceCount = 0; + + public int getServiceCount() { + return serviceCount; + } + + public void setServiceCount(int serviceCount) { + this.serviceCount = serviceCount; + } + + @Override + public ServiceRegistration registerService(String[] strings, Object o, Dictionary dctnr) { + serviceCount++; + return null; + } + + @Override + public ServiceRegistration registerService(String string, Object o, Dictionary dctnr) { + serviceCount++; + return null; + } + + @Override + public ServiceRegistration registerService(Class type, S s, Dictionary dctnr) { + serviceCount++; + return null; + } + + @Override + public ServiceReference[] getServiceReferences(String string, String string1) throws InvalidSyntaxException { + return new ServiceReference[0]; + } + + @Override + public ServiceReference[] getAllServiceReferences(String string, String string1) throws InvalidSyntaxException { + throw new UnsupportedOperationException("Not supported (MockBundleContext getAllServiceReferences)"); + } + + @Override + public ServiceReference getServiceReference(String string) { + throw new UnsupportedOperationException("Not supported (MockBundleContext getServiceReference)"); + } + + @Override + public ServiceReference getServiceReference(Class type) { + return null; + } + + @Override + public Collection> getServiceReferences(Class type, String string) throws InvalidSyntaxException { + return new ArrayList(); + } + + @Override + public S getService(ServiceReference sr) { + throw new UnsupportedOperationException("Not supported (MockBundleContext getService)"); + } + + @Override + public boolean ungetService(ServiceReference sr) { + throw new UnsupportedOperationException("Not supported (MockBundleContext ungetService)"); + } + + @Override + public File getDataFile(String string) { + throw new UnsupportedOperationException("Not supported (MockBundleContext getDataFile)"); + } + + @Override + public Filter createFilter(String string) throws InvalidSyntaxException { + throw new UnsupportedOperationException("Not supported (MockBundleContext createFilter)"); + } + + @Override + public Bundle getBundle(String string) { + return bundles.get(0); + } +}; http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceComparatorTest.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceComparatorTest.java b/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceComparatorTest.java new file mode 100644 index 0000000..f956d1a --- /dev/null +++ b/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceComparatorTest.java @@ -0,0 +1,114 @@ +/* + * 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. + */ +package org.apache.tamaya.core.internal; + +import javax.annotation.Priority; +import org.junit.Test; +import static org.junit.Assert.*; +import org.osgi.framework.Bundle; +import org.osgi.framework.ServiceReference; + +/** + * + * @author William.Lieurance 2018-02-05 + */ +public class OSGIServiceComparatorTest { + + /** + * Test of compare method, of class OSGIServiceComparator. + */ + @Test + public void testCompare() { + ServiceReference low = new MockLowPriorityServiceReference(); + ServiceReference nullPriority = new MockServiceReference(); + ServiceReference high = new MockHighPriorityServiceReference(); + OSGIServiceComparator instance = new OSGIServiceComparator(); + + assertEquals(1, instance.compare(low, high)); + assertEquals(-1, instance.compare(high, low)); + assertEquals(0, instance.compare(low, low)); + + assertEquals(1, instance.compare(nullPriority, high)); + assertEquals(-1, instance.compare(high, nullPriority)); + assertEquals(0, instance.compare(nullPriority, low)); + } + + /** + * Test of getPriority method, of class OSGIServiceComparator. + */ + @Test + public void testGetPriority_Object() { + ServiceReference low = new MockLowPriorityServiceReference(); + assertEquals(1, OSGIServiceComparator.getPriority(low)); + + ServiceReference nullPriority = new MockServiceReference(); + assertEquals(1, OSGIServiceComparator.getPriority(nullPriority)); + + ServiceReference high = new MockHighPriorityServiceReference(); + assertEquals(10, OSGIServiceComparator.getPriority(high)); + } + + /** + * Test of getPriority method, of class OSGIServiceComparator. + */ + @Test + public void testGetPriority_Class() { + assertEquals(10, OSGIServiceComparator.getPriority(MockHighPriorityServiceReference.class)); + assertEquals(1, OSGIServiceComparator.getPriority(MockLowPriorityServiceReference.class)); + assertEquals(1, OSGIServiceComparator.getPriority(MockServiceReference.class)); + } + + private class MockServiceReference implements ServiceReference { + @Override + public Object getProperty(String string) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public String[] getPropertyKeys() { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Bundle getBundle() { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Bundle[] getUsingBundles() { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public boolean isAssignableTo(Bundle bundle, String string) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public int compareTo(Object o) { + throw new UnsupportedOperationException("Not supported."); + } + } + + @Priority(1) + private class MockLowPriorityServiceReference extends MockServiceReference {}; + @Priority(10) + private class MockHighPriorityServiceReference extends MockServiceReference {}; + +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceContextTest.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceContextTest.java b/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceContextTest.java new file mode 100644 index 0000000..2507672 --- /dev/null +++ b/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceContextTest.java @@ -0,0 +1,129 @@ +/* + * 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. + */ +package org.apache.tamaya.core.internal; + +import java.io.IOException; +import java.net.URL; +import java.util.Enumeration; +import java.util.List; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import static org.junit.Assert.*; +import org.mockito.Mockito; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; + +/** + * + * @author William.Lieurance 2018-02-10 + */ +public class OSGIServiceContextTest { + + /** + * Test of isInitialized method, of class OSGIServiceContext. + */ + @Test + public void testIsInitialized() { + OSGIServiceContext instance = new OSGIServiceContext(Mockito.mock(OSGIServiceLoader.class)); + assertTrue(instance.isInitialized()); + } + + /** + * Test of ordinal method, of class OSGIServiceContext. + */ + @Test + public void testOrdinal() { + OSGIServiceContext instance = new OSGIServiceContext(Mockito.mock(OSGIServiceLoader.class)); + assertEquals(10, instance.ordinal()); + } + + /** + * Test of create method, of class OSGIServiceContext. + */ + @Test + public void testCreateThenGet() { + BundleContext mockBundleContext = new MockBundleContext(); + OSGIServiceLoader loader = new OSGIServiceLoader(mockBundleContext); + OSGIServiceContext instance = new OSGIServiceContext(loader); + + Integer value = instance.create(Integer.class); + assertNull(value); + value = instance.getService(Integer.class); + assertNull(value); + } + + /** + * Test of getServices method, of class OSGIServiceContext. + */ + @Test + public void testGetServices() { + BundleContext mockBundleContext = new MockBundleContext(); + OSGIServiceLoader loader = new OSGIServiceLoader(mockBundleContext); + OSGIServiceContext instance = new OSGIServiceContext(loader); + + List services = instance.getServices(Integer.class); + assertNotNull(services); + assertTrue(services.isEmpty()); + } + + /** + * Test of getResources method, of class OSGIServiceContext. + * @throws java.io.IOException + */ + @Test + public void testGetResources() throws IOException { + MockBundleContext mockBundleContext = new MockBundleContext(); + OSGIServiceLoader loader = new OSGIServiceLoader(mockBundleContext); + MockBundle startedBundle = new MockBundle(); + startedBundle.setState(Bundle.ACTIVE); + startedBundle.setBundleId(1); + startedBundle.setBundleContext(mockBundleContext); + mockBundleContext.installBundle(startedBundle); + OSGIServiceContext instance = new OSGIServiceContext(loader); + + Enumeration resources = instance.getResources("dummy" , ClassLoader.getSystemClassLoader()); + assertNotNull(resources); + URL resource = (URL)resources.nextElement(); + assertTrue(resource.toString().contains("mockbundle.service")); + assertFalse(resources.hasMoreElements()); + } + + /** + * Test of getResource method, of class OSGIServiceContext. + */ + @Test + public void testGetResource() { + MockBundleContext mockBundleContext = new MockBundleContext(); + OSGIServiceLoader loader = new OSGIServiceLoader(mockBundleContext); + MockBundle startedBundle = new MockBundle(); + startedBundle.setState(Bundle.ACTIVE); + startedBundle.setBundleId(1); + startedBundle.setBundleContext(mockBundleContext); + mockBundleContext.installBundle(startedBundle); + OSGIServiceContext instance = new OSGIServiceContext(loader); + + URL resource = instance.getResource("mockbundle.service", ClassLoader.getSystemClassLoader()); + assertNotNull(resource); + assertTrue(resource.toString().contains("mockbundle.service")); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceLoaderTest.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceLoaderTest.java b/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceLoaderTest.java new file mode 100644 index 0000000..4da6b34 --- /dev/null +++ b/code/core/src/test/java/org/apache/tamaya/core/internal/OSGIServiceLoaderTest.java @@ -0,0 +1,114 @@ +/* + * 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. + */ +package org.apache.tamaya.core.internal; + +import java.util.Set; +import org.junit.Test; +import static org.junit.Assert.*; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleEvent; + +/** + * + * @author William.Lieurance 2018-02-06 + */ +public class OSGIServiceLoaderTest { + + /** + * Test of getBundleContext method, of class OSGIServiceLoader. + */ + @Test + public void testGetBundleContext() { + BundleContext mockBundleContext = new MockBundleContext(); + OSGIServiceLoader instance = new OSGIServiceLoader(mockBundleContext); + BundleContext result = instance.getBundleContext(); + assertEquals(mockBundleContext, result); + } + + /** + * Test of getResourceBundles method, of class OSGIServiceLoader. + * + * @throws java.lang.Exception + */ + @Test + public void testGetResourceBundles() throws Exception { + MockBundleContext mockBundleContext = new MockBundleContext(); + MockBundle startedBundle = new MockBundle(); + startedBundle.setState(Bundle.ACTIVE); + startedBundle.setBundleId(1); + startedBundle.setBundleContext(mockBundleContext); + mockBundleContext.installBundle(startedBundle); + OSGIServiceLoader instance = new OSGIServiceLoader(mockBundleContext); + Set result = instance.getResourceBundles(); + assertFalse(result.isEmpty()); + } + + /** + * Test of bundleChanged method, of class OSGIServiceLoader. + * + * @throws java.lang.Exception + */ + @Test + public void testBundleChanged() throws Exception { + //Set up mocks + Set resultBundles; + MockBundleContext mockBundleContext = new MockBundleContext(); + MockBundle startedBundle = new MockBundle(); + startedBundle.setState(Bundle.ACTIVE); + startedBundle.setBundleId(1); + startedBundle.setBundleContext(mockBundleContext); + MockBundle stoppedBundle = new MockBundle(); + stoppedBundle.setState(Bundle.INSTALLED); + stoppedBundle.setBundleId(2); + stoppedBundle.setBundleContext(mockBundleContext); + MockBundle flipBundle = new MockBundle(); + flipBundle.setState(Bundle.INSTALLED); + flipBundle.setBundleId(3); + flipBundle.setBundleContext(mockBundleContext); + mockBundleContext.installBundle(startedBundle); + mockBundleContext.installBundle(stoppedBundle); + mockBundleContext.installBundle(flipBundle); + + //Default case + mockBundleContext.setServiceCount(0); + OSGIServiceLoader instance = new OSGIServiceLoader(mockBundleContext); + resultBundles = instance.getResourceBundles(); + assertEquals(1, resultBundles.size()); + assertEquals(2, mockBundleContext.getServiceCount()); + + //After start + mockBundleContext.setServiceCount(0); + BundleEvent startedEvent = new BundleEvent(BundleEvent.STARTED, flipBundle); + instance.bundleChanged(startedEvent); + resultBundles = instance.getResourceBundles(); + assertEquals(2, resultBundles.size()); + assertEquals(2, mockBundleContext.getServiceCount()); + + //After stop + mockBundleContext.setServiceCount(0); + BundleEvent stoppedEvent = new BundleEvent(BundleEvent.STOPPED, flipBundle); + instance.bundleChanged(stoppedEvent); + resultBundles = instance.getResourceBundles(); + assertEquals(1, resultBundles.size()); + assertEquals(0, mockBundleContext.getServiceCount()); + } + + +} http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/core/src/test/java/org/apache/tamaya/core/internal/converters/BigDecimalConverterTest.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/converters/BigDecimalConverterTest.java b/code/core/src/test/java/org/apache/tamaya/core/internal/converters/BigDecimalConverterTest.java index 91d3bb8..5cae3da 100644 --- a/code/core/src/test/java/org/apache/tamaya/core/internal/converters/BigDecimalConverterTest.java +++ b/code/core/src/test/java/org/apache/tamaya/core/internal/converters/BigDecimalConverterTest.java @@ -65,6 +65,12 @@ public class BigDecimalConverterTest { valueRead = config.get("tests.converter.bd.hex.upperX", BigDecimal.class); assertThat(valueRead).isNotNull(); assertEquals(new BigDecimal("63"), valueRead); + valueRead = config.get("tests.converter.bd.hex.negLowerX", BigDecimal.class); + assertThat(valueRead).isNotNull(); + assertEquals(new BigDecimal("-47"), valueRead); + valueRead = config.get("tests.converter.bd.hex.negUpperX", BigDecimal.class); + assertThat(valueRead).isNotNull(); + assertEquals(new BigDecimal("-63"), valueRead); } /** http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/125eed20/code/core/src/test/java/org/apache/tamaya/core/internal/converters/BigIntegerConverterTest.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/converters/BigIntegerConverterTest.java b/code/core/src/test/java/org/apache/tamaya/core/internal/converters/BigIntegerConverterTest.java new file mode 100644 index 0000000..108159c --- /dev/null +++ b/code/core/src/test/java/org/apache/tamaya/core/internal/converters/BigIntegerConverterTest.java @@ -0,0 +1,161 @@ +/* + * 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. + */ +package org.apache.tamaya.core.internal.converters; + +import java.math.BigInteger; +import org.apache.tamaya.ConfigException; +import org.apache.tamaya.Configuration; +import org.apache.tamaya.ConfigurationProvider; +import org.apache.tamaya.TypeLiteral; +import org.apache.tamaya.spi.ConversionContext; +import static org.assertj.core.api.Assertions.assertThat; +import org.junit.Test; +import static org.junit.Assert.*; +import org.junit.Ignore; +import static org.mockito.Mockito.mock; + +/** + * + * @author William.Lieurance 2018-02-01 + */ +public class BigIntegerConverterTest { + + /** + * Test conversion. The value are provided by + * {@link org.apache.tamaya.core.internal.converters.ConverterTestsPropertySource}. + * + * @throws Exception + */ + @Test + public void testConvert_BigInteger_Decimal() throws Exception { + Configuration config = ConfigurationProvider.getConfiguration(); + BigInteger valueRead = config.get("tests.converter.bd.decimal", BigInteger.class); + assertThat(valueRead).isNotNull(); + assertEquals(BigInteger.valueOf(101), valueRead); + } + + /** + * Test conversion. The value are provided by + * {@link org.apache.tamaya.core.internal.converters.ConverterTestsPropertySource}. + * + * @throws Exception + */ + @Test + public void testConvert_BigInteger_Hex() throws Exception { + Configuration config = ConfigurationProvider.getConfiguration(); + BigInteger valueRead = config.get("tests.converter.bd.hex.lowerX", BigInteger.class); + assertThat(valueRead).isNotNull(); + assertEquals(new BigInteger("47"), valueRead); + valueRead = config.get("tests.converter.bd.hex.upperX", BigInteger.class); + assertThat(valueRead).isNotNull(); + assertEquals(new BigInteger("63"), valueRead); + valueRead = config.get("tests.converter.bd.hex.negLowerX", BigInteger.class); + assertThat(valueRead).isNotNull(); + assertEquals(new BigInteger("-47"), valueRead); + valueRead = config.get("tests.converter.bd.hex.negUpperX", BigInteger.class); + assertThat(valueRead).isNotNull(); + assertEquals(new BigInteger("-63"), valueRead); + + } + + /** + * Test conversion. The value are provided by + * {@link org.apache.tamaya.core.internal.converters.ConverterTestsPropertySource}. + * + * @throws Exception + */ + @Ignore + @Test + public void testConvert_BigInteger_BigHex() throws Exception { + Configuration config = ConfigurationProvider.getConfiguration(); + BigInteger valueRead = config.get("tests.converter.bd.hex.subTenX", BigInteger.class); + assertThat(valueRead).isNotNull(); + assertEquals(new BigInteger("16777215"), valueRead); + valueRead = config.get("tests.converter.bd.hex.negSubTenX", BigInteger.class); + assertThat(valueRead).isNotNull(); + assertEquals(new BigInteger("-263"), valueRead); + } + + @Test(expected = ConfigException.class) + public void badPositiveHex() { + Configuration config = ConfigurationProvider.getConfiguration(); + config.get("tests.converter.bd.hex.badX", BigInteger.class); + } + + @Test(expected = ConfigException.class) + public void badNegativeHex() { + Configuration config = ConfigurationProvider.getConfiguration(); + config.get("tests.converter.bd.hex.negBadX", BigInteger.class); + } + + /** + * Test conversion. The value are provided by + * {@link org.apache.tamaya.core.internal.converters.ConverterTestsPropertySource}. + * + * @throws Exception + */ + @Test + public void testConvert_NotPresent() throws Exception { + Configuration config = ConfigurationProvider.getConfiguration(); + BigInteger valueRead = config.get("tests.converter.bd.foo", BigInteger.class); + assertNull(valueRead); + } + + /** + * Test conversion. The value are provided by + * {@link ConverterTestsPropertySource}. + * + * @throws Exception + */ + @Test + public void testConvert_BigInteger_BigValue() throws Exception { + Configuration config = ConfigurationProvider.getConfiguration(); + BigInteger valueRead = config.get("tests.converter.bd.big", BigInteger.class); + assertThat(valueRead).isNotNull(); + assertEquals(new BigInteger("101666666666666662333337263723628763821638923628193612983618293628763"), + valueRead); + } + + @Test + public void converterHandlesNullValueCorrectly() throws Exception { + ConversionContext context = mock(ConversionContext.class); + + BigIntegerConverter converter = new BigIntegerConverter(); + BigInteger value = converter.convert("", context); + + assertThat(value).isNull(); + } + + @Test + public void callToConvertAddsMoreSupportedFormatsToTheContext() throws Exception { + ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(BigInteger.class)).build(); + BigIntegerConverter converter = new BigIntegerConverter(); + BigInteger value = converter.convert("", context); + + assertThat(value).isNull(); + assertTrue(context.getSupportedFormats().contains(" -> new BigInteger(bigint) (BigIntegerConverter)")); + } + + @Test + public void testHashCode() { + BigIntegerConverter instance = new BigIntegerConverter(); + assertEquals(BigIntegerConverter.class.hashCode(), instance.hashCode()); + } + +}