Author: sseifert Date: Tue Sep 6 21:03:07 2016 New Revision: 1759511 URL: http://svn.apache.org/viewvc?rev=1759511&view=rev Log: SLING-6040 add ResourceBuilder support to SlingContext This closes #167
Modified: sling/branches/testing/mocks/sling-mock-1.x/pom.xml sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java sling/branches/testing/mocks/sling-mock-1.x/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java sling/trunk/testing/mocks/sling-mock/pom.xml sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java Modified: sling/branches/testing/mocks/sling-mock-1.x/pom.xml URL: http://svn.apache.org/viewvc/sling/branches/testing/mocks/sling-mock-1.x/pom.xml?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/branches/testing/mocks/sling-mock-1.x/pom.xml (original) +++ sling/branches/testing/mocks/sling-mock-1.x/pom.xml Tue Sep 6 21:03:07 2016 @@ -140,6 +140,12 @@ <version>2.2.4</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.resourcebuilder</artifactId> + <version>0.0.1-SNAPSHOT</version> + <scope>compile</scope> + </dependency> <dependency> <groupId>commons-collections</groupId> Modified: sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java URL: http://svn.apache.org/viewvc/sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java (original) +++ sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java Tue Sep 6 21:03:07 2016 @@ -46,6 +46,9 @@ import org.apache.sling.models.impl.inje import org.apache.sling.models.impl.injectors.SlingObjectInjector; import org.apache.sling.models.impl.injectors.ValueMapInjector; import org.apache.sling.models.spi.ImplementationPicker; +import org.apache.sling.resourcebuilder.api.ResourceBuilder; +import org.apache.sling.resourcebuilder.api.ResourceBuilderFactory; +import org.apache.sling.resourcebuilder.impl.ResourceBuilderFactoryService; import org.apache.sling.settings.SlingSettingsService; import org.apache.sling.testing.mock.osgi.context.OsgiContextImpl; import org.apache.sling.testing.mock.sling.MockSling; @@ -92,6 +95,7 @@ public class SlingContextImpl extends Os protected SlingScriptHelper slingScriptHelper; protected ContentLoader contentLoader; protected ContentBuilder contentBuilder; + protected ResourceBuilder resourceBuilder; protected UniqueRoot uniqueRoot; private Map<String, Object> resourceResolverFactoryActivatorProps; @@ -171,6 +175,7 @@ public class SlingContextImpl extends Os // other services registerService(SlingSettingsService.class, new MockSlingSettingService(DEFAULT_RUN_MODES)); registerService(MimeTypeService.class, new MockMimeTypeService()); + registerInjectActivateService(new ResourceBuilderFactoryService()); } /** @@ -208,6 +213,7 @@ public class SlingContextImpl extends Os this.slingScriptHelper = null; this.contentLoader = null; this.contentBuilder = null; + this.resourceBuilder = null; this.uniqueRoot = null; super.tearDown(); @@ -298,6 +304,19 @@ public class SlingContextImpl extends Os } return this.contentBuilder; } + + /** + * Creates a {@link ResourceBuilder} object for easily creating test content. + * This is a separate API which can be used inside sling mocks or in a running instance. + * You can use alternatively the {@link #create()} method to use the {@link ContentBuilder} API. + * @return Resource builder for building test content. + */ + public ResourceBuilder build() { + if (this.resourceBuilder == null) { + this.resourceBuilder = getService(ResourceBuilderFactory.class).forResolver(this.resourceResolver()); + } + return this.resourceBuilder; + } /** * @return Current resource Modified: sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java URL: http://svn.apache.org/viewvc/sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java (original) +++ sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java Tue Sep 6 21:03:07 2016 @@ -19,5 +19,5 @@ /** * Sling context implementation for unit tests. */ -@aQute.bnd.annotation.Version("3.2") +@aQute.bnd.annotation.Version("3.3") package org.apache.sling.testing.mock.sling.context; Modified: sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java URL: http://svn.apache.org/viewvc/sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java (original) +++ sling/branches/testing/mocks/sling-mock-1.x/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java Tue Sep 6 21:03:07 2016 @@ -19,5 +19,5 @@ /** * Rule for providing easy access to Sling context in JUnit tests. */ -@aQute.bnd.annotation.Version("3.2") +@aQute.bnd.annotation.Version("3.3") package org.apache.sling.testing.mock.sling.junit; Modified: sling/branches/testing/mocks/sling-mock-1.x/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java URL: http://svn.apache.org/viewvc/sling/branches/testing/mocks/sling-mock-1.x/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/branches/testing/mocks/sling-mock-1.x/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java (original) +++ sling/branches/testing/mocks/sling-mock-1.x/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java Tue Sep 6 21:03:07 2016 @@ -27,7 +27,9 @@ import static org.mockito.Mockito.verify import java.io.IOException; import org.apache.sling.api.resource.PersistenceException; +import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.api.resource.ResourceUtil; import org.apache.sling.testing.mock.sling.ResourceResolverType; import org.junit.Before; import org.junit.Rule; @@ -109,4 +111,19 @@ public class SlingContextTest { assertNull(context.resourceResolver().adaptTo(Double.class)); } + @Test + public void testResourceBuilder() { + + context.build().resource("/test1", "prop1", "value1") + .siblingsMode() + .resource("a") + .resource("b"); + + Resource test1 = context.resourceResolver().getResource("/test1"); + assertNotNull(test1); + assertEquals("value1", ResourceUtil.getValueMap(test1).get("prop1", String.class)); + assertNotNull(test1.getChild("a")); + assertNotNull(test1.getChild("b")); + } + } Modified: sling/trunk/testing/mocks/sling-mock/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/pom.xml?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/pom.xml (original) +++ sling/trunk/testing/mocks/sling-mock/pom.xml Tue Sep 6 21:03:07 2016 @@ -148,6 +148,12 @@ <scope>compile</scope> </dependency> <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.resourcebuilder</artifactId> + <version>0.0.1-SNAPSHOT</version> + <scope>compile</scope> + </dependency> + <dependency> <groupId>org.apache.jackrabbit</groupId> <artifactId>jackrabbit-api</artifactId> <version>2.11.3</version> Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java Tue Sep 6 21:03:07 2016 @@ -46,6 +46,9 @@ import org.apache.sling.models.impl.inje import org.apache.sling.models.impl.injectors.SlingObjectInjector; import org.apache.sling.models.impl.injectors.ValueMapInjector; import org.apache.sling.models.spi.ImplementationPicker; +import org.apache.sling.resourcebuilder.api.ResourceBuilder; +import org.apache.sling.resourcebuilder.api.ResourceBuilderFactory; +import org.apache.sling.resourcebuilder.impl.ResourceBuilderFactoryService; import org.apache.sling.settings.SlingSettingsService; import org.apache.sling.testing.mock.osgi.context.OsgiContextImpl; import org.apache.sling.testing.mock.sling.MockSling; @@ -92,6 +95,7 @@ public class SlingContextImpl extends Os protected SlingScriptHelper slingScriptHelper; protected ContentLoader contentLoader; protected ContentBuilder contentBuilder; + protected ResourceBuilder resourceBuilder; protected UniqueRoot uniqueRoot; private Map<String, Object> resourceResolverFactoryActivatorProps; @@ -171,6 +175,7 @@ public class SlingContextImpl extends Os // other services registerService(SlingSettingsService.class, new MockSlingSettingService(DEFAULT_RUN_MODES)); registerService(MimeTypeService.class, new MockMimeTypeService()); + registerInjectActivateService(new ResourceBuilderFactoryService()); } /** @@ -208,6 +213,7 @@ public class SlingContextImpl extends Os this.slingScriptHelper = null; this.contentLoader = null; this.contentBuilder = null; + this.resourceBuilder = null; this.uniqueRoot = null; super.tearDown(); @@ -292,6 +298,9 @@ public class SlingContextImpl extends Os } /** + * Creates a {@link ContentBuilder} object for easily creating test content. + * This API was part of Sling Mocks since version 1.x. + * You can use alternatively the {@link #build()} method and use the {@link ResourceBuilder} API. * @return Content builder for building test content */ public ContentBuilder create() { @@ -300,6 +309,19 @@ public class SlingContextImpl extends Os } return this.contentBuilder; } + + /** + * Creates a {@link ResourceBuilder} object for easily creating test content. + * This is a separate API which can be used inside sling mocks or in a running instance. + * You can use alternatively the {@link #create()} method to use the {@link ContentBuilder} API. + * @return Resource builder for building test content. + */ + public ResourceBuilder build() { + if (this.resourceBuilder == null) { + this.resourceBuilder = getService(ResourceBuilderFactory.class).forResolver(this.resourceResolver()); + } + return this.resourceBuilder; + } /** * @return Current resource Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java Tue Sep 6 21:03:07 2016 @@ -19,5 +19,5 @@ /** * Sling context implementation for unit tests. */ -@org.osgi.annotation.versioning.Version("3.2.1") +@org.osgi.annotation.versioning.Version("3.3") package org.apache.sling.testing.mock.sling.context; Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java Tue Sep 6 21:03:07 2016 @@ -19,5 +19,5 @@ /** * Rule for providing easy access to Sling context in JUnit tests. */ -@org.osgi.annotation.versioning.Version("3.2") +@org.osgi.annotation.versioning.Version("3.3") package org.apache.sling.testing.mock.sling.junit; Modified: sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java?rev=1759511&r1=1759510&r2=1759511&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java Tue Sep 6 21:03:07 2016 @@ -29,6 +29,7 @@ import java.io.IOException; import org.apache.sling.api.adapter.AdapterFactory; import org.apache.sling.api.adapter.SlingAdaptable; import org.apache.sling.api.resource.PersistenceException; +import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.testing.mock.sling.ResourceResolverType; import org.junit.Before; @@ -138,6 +139,22 @@ public class SlingContextTest { assertEquals("testMessage3-dynamic", new TestAdaptable("testMessage3").adaptTo(String.class)); } + @Test + public void testResourceBuilder() { + + context.build().resource("/test1", "prop1", "value1") + .siblingsMode() + .resource("a") + .resource("b"); + + Resource test1 = context.resourceResolver().getResource("/test1"); + assertNotNull(test1); + assertEquals("value1", test1.getValueMap().get("prop1", String.class)); + assertNotNull(test1.getChild("a")); + assertNotNull(test1.getChild("b")); + } + + private void prepareInitialAdapterFactory() { // register "traditional" adapter factory without specific service ranking AdapterFactory adapterFactory = new AdapterFactory() {