This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.testing.osgi-mock-1.5.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-osgi-mock.git
commit 45d1dbcd4771b887ac1ba78d22337a0726f93935 Author: Stefan Seifert <[email protected]> AuthorDate: Thu Jul 23 21:57:09 2015 +0000 SLING-4901 osgi-mock: Add support for ComponentContext.getUsingBundle() git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/osgi-mock@1692452 13f79535-47bb-0310-9956-ffa450edef68 --- .../testing/mock/osgi/ComponentContextBuilder.java | 72 ++++++++++++++++++++++ .../testing/mock/osgi/MockComponentContext.java | 22 +++---- .../apache/sling/testing/mock/osgi/MockOsgi.java | 17 +++-- .../sling/testing/mock/osgi/package-info.java | 2 +- .../mock/osgi/MockComponentContextTest.java | 14 +++++ 5 files changed, 109 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/ComponentContextBuilder.java b/src/main/java/org/apache/sling/testing/mock/osgi/ComponentContextBuilder.java new file mode 100644 index 0000000..2e8916a --- /dev/null +++ b/src/main/java/org/apache/sling/testing/mock/osgi/ComponentContextBuilder.java @@ -0,0 +1,72 @@ +/* + * 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.sling.testing.mock.osgi; + +import java.util.Dictionary; +import java.util.Hashtable; +import java.util.Map; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.service.component.ComponentContext; + +/** + * Builds a mocked {@link ComponentContext}. + */ +public final class ComponentContextBuilder { + + private BundleContext bundleContext; + private Dictionary<String, Object> properties; + private Bundle usingBundle; + + ComponentContextBuilder() { + // constructor package-scope only + } + + public ComponentContextBuilder bundleContext(BundleContext bundleContext) { + this.bundleContext = bundleContext; + return this; + } + + public ComponentContextBuilder properties(Dictionary<String, Object> properties) { + this.properties = properties; + return this; + } + + public ComponentContextBuilder properties(Map<String, Object> properties) { + this.properties = MapUtil.toDictionary(properties); + return this; + } + + public ComponentContextBuilder usingBundle(Bundle usingBundle) { + this.usingBundle = usingBundle; + return this; + } + + public ComponentContext build() { + if (bundleContext == null) { + bundleContext = MockOsgi.newBundleContext(); + } + if (properties == null) { + properties = new Hashtable<String, Object>(); + } + return new MockComponentContext((MockBundleContext)bundleContext, properties, usingBundle); + } + +} diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/MockComponentContext.java b/src/main/java/org/apache/sling/testing/mock/osgi/MockComponentContext.java index 40e57a9..78154a5 100644 --- a/src/main/java/org/apache/sling/testing/mock/osgi/MockComponentContext.java +++ b/src/main/java/org/apache/sling/testing/mock/osgi/MockComponentContext.java @@ -19,7 +19,6 @@ package org.apache.sling.testing.mock.osgi; import java.util.Dictionary; -import java.util.Hashtable; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; @@ -34,14 +33,13 @@ class MockComponentContext implements ComponentContext { private final MockBundleContext bundleContext; private final Dictionary<String, Object> properties; + private final Bundle usingBundle; - public MockComponentContext(final MockBundleContext mockBundleContext) { - this(mockBundleContext, null); - } - - public MockComponentContext(final MockBundleContext mockBundleContext, final Dictionary<String, Object> properties) { + public MockComponentContext(final MockBundleContext mockBundleContext, + final Dictionary<String, Object> properties, final Bundle usingBundle) { this.bundleContext = mockBundleContext; - this.properties = properties != null ? properties : new Hashtable<String, Object>(); + this.properties = properties; + this.usingBundle = usingBundle; } @Override @@ -69,19 +67,19 @@ class MockComponentContext implements ComponentContext { // allow calling, but ignore } - // --- unsupported operations --- @Override - public ComponentInstance getComponentInstance() { - throw new UnsupportedOperationException(); + public Bundle getUsingBundle() { + return usingBundle; } + // --- unsupported operations --- @Override - public ServiceReference getServiceReference() { + public ComponentInstance getComponentInstance() { throw new UnsupportedOperationException(); } @Override - public Bundle getUsingBundle() { + public ServiceReference getServiceReference() { throw new UnsupportedOperationException(); } diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/MockOsgi.java b/src/main/java/org/apache/sling/testing/mock/osgi/MockOsgi.java index dfba00e..8d74aac 100644 --- a/src/main/java/org/apache/sling/testing/mock/osgi/MockOsgi.java +++ b/src/main/java/org/apache/sling/testing/mock/osgi/MockOsgi.java @@ -60,7 +60,7 @@ public final class MockOsgi { * @return Mocked {@link ComponentContext} instance */ public static ComponentContext newComponentContext() { - return new MockComponentContext((MockBundleContext) newBundleContext()); + return componentContext().build(); } /** @@ -68,7 +68,7 @@ public final class MockOsgi { * @return Mocked {@link ComponentContext} instance */ public static ComponentContext newComponentContext(Dictionary<String, Object> properties) { - return newComponentContext(newBundleContext(), properties); + return componentContext().properties(properties).build(); } /** @@ -76,7 +76,7 @@ public final class MockOsgi { * @return Mocked {@link ComponentContext} instance */ public static ComponentContext newComponentContext(Map<String, Object> properties) { - return newComponentContext(toDictionary(properties)); + return componentContext().properties(properties).build(); } /** @@ -86,7 +86,7 @@ public final class MockOsgi { */ public static ComponentContext newComponentContext(BundleContext bundleContext, Dictionary<String, Object> properties) { - return new MockComponentContext((MockBundleContext) bundleContext, properties); + return componentContext().bundleContext(bundleContext).properties(properties).build(); } /** @@ -95,10 +95,17 @@ public final class MockOsgi { * @return Mocked {@link ComponentContext} instance */ public static ComponentContext newComponentContext(BundleContext bundleContext, Map<String, Object> properties) { - return newComponentContext(bundleContext, toDictionary(properties)); + return componentContext().bundleContext(bundleContext).properties(properties).build(); } /** + * @return {@link ComponentContextBuilder} to build a mocked {@link ComponentContext} + */ + public static ComponentContextBuilder componentContext() { + return new ComponentContextBuilder(); + } + + /** * @param loggerContext Context class for logging * @return Mocked {@link LogService} instance */ diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/package-info.java b/src/main/java/org/apache/sling/testing/mock/osgi/package-info.java index f5cd3c6..dbaa66f 100644 --- a/src/main/java/org/apache/sling/testing/mock/osgi/package-info.java +++ b/src/main/java/org/apache/sling/testing/mock/osgi/package-info.java @@ -19,5 +19,5 @@ /** * Mock implementation of selected OSGi APIs. */ [email protected]("2.2") [email protected]("2.3") package org.apache.sling.testing.mock.osgi; diff --git a/src/test/java/org/apache/sling/testing/mock/osgi/MockComponentContextTest.java b/src/test/java/org/apache/sling/testing/mock/osgi/MockComponentContextTest.java index 18f7ba4..b4497eb 100644 --- a/src/test/java/org/apache/sling/testing/mock/osgi/MockComponentContextTest.java +++ b/src/test/java/org/apache/sling/testing/mock/osgi/MockComponentContextTest.java @@ -20,13 +20,16 @@ package org.apache.sling.testing.mock.osgi; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; +import static org.mockito.Mockito.mock; import java.util.Dictionary; import java.util.Hashtable; import org.junit.Before; import org.junit.Test; +import org.osgi.framework.Bundle; import org.osgi.framework.ServiceReference; import org.osgi.service.component.ComponentContext; @@ -81,4 +84,15 @@ public class MockComponentContextTest { underTest.disableComponent("myComponent"); } + @Test + public void testGetUsingBundle() { + // test context without using bundle + assertNull(underTest.getUsingBundle()); + + // test context with using bundle + Bundle usingBundle = mock(Bundle.class); + ComponentContext contextWithUsingBundle = MockOsgi.componentContext().usingBundle(usingBundle).build(); + assertSame(usingBundle, contextWithUsingBundle.getUsingBundle()); + } + } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
