| /* |
| * 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.hamcrest; |
| |
| import java.util.Map; |
| |
| import org.apache.sling.api.resource.Resource; |
| import org.apache.sling.api.resource.ResourceResolver; |
| import org.apache.sling.testing.mock.sling.junit.SlingContext; |
| import org.hamcrest.Matchers; |
| import org.junit.Assert; |
| import org.junit.Rule; |
| import org.junit.Test; |
| |
| import com.google.common.collect.ImmutableMap; |
| |
| public class ResourceMatchersTest { |
| |
| @Rule |
| public final SlingContext context = new SlingContext(); |
| |
| @Test |
| public void testResourceType() { |
| context.build().resource("/resource", |
| ResourceResolver.PROPERTY_RESOURCE_TYPE, "some/type", |
| "some other key", "some other value"); |
| |
| Resource resource = context.resourceResolver().getResource("/resource"); |
| Assert.assertThat(resource, ResourceMatchers.resourceType("some/type")); |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.resourceType("some/other/type"))); |
| } |
| |
| @Test |
| public void testPath() { |
| context.build().resource("/resource"); |
| |
| Resource resource = context.resourceResolver().getResource("/resource"); |
| Assert.assertThat(resource, ResourceMatchers.path("/resource")); |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.path("some/other/name"))); |
| } |
| |
| @Test |
| public void testName() { |
| context.build().resource("/resource"); |
| |
| Resource resource = context.resourceResolver().getResource("/resource"); |
| Assert.assertThat(resource, ResourceMatchers.name("resource")); |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.name("some/other/name"))); |
| } |
| |
| @Test |
| public void testProps() { |
| context.build().resource("/resource", |
| "key1", "value1", |
| "key2", 123, |
| "key3", new String[] { "item1", "item2" }, |
| "key4", "otherValue"); |
| |
| Map<String, Object> expectedProperties = ImmutableMap.<String, Object>builder() |
| .put("key1", "value1") |
| .put("key2", 123) |
| .put("key3", new String[] { "item1", "item2" }) |
| .build(); |
| |
| Resource resource = context.resourceResolver().getResource("/resource"); |
| Assert.assertThat(resource, ResourceMatchers.props(expectedProperties)); |
| |
| // test existing key with not matching value |
| expectedProperties = ImmutableMap.<String, Object>builder() |
| .put("key1", "value1") |
| .put("key3", "value3") |
| .build(); |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.props(expectedProperties))); |
| |
| // test non-existing key |
| expectedProperties = ImmutableMap.<String, Object>builder() |
| .put("key5", "value5") |
| .build(); |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.props(expectedProperties))); |
| } |
| |
| @Test |
| public void testPropsVarargs() { |
| context.build().resource("/resource", |
| "key1", "value1", |
| "key2", true, |
| "key3", new int[] { 1, 2, 3 }, |
| "key4", "otherValue"); |
| |
| Object[] expectedProperties = new Object[] { |
| "key1", "value1", |
| "key2", true, |
| "key3", new int[] { 1, 2, 3 } |
| }; |
| |
| Resource resource = context.resourceResolver().getResource("/resource"); |
| Assert.assertThat(resource, ResourceMatchers.props(expectedProperties)); |
| |
| // test existing key with not matching value |
| expectedProperties = new Object[] { |
| "key1", "value1", |
| "key3", new int[] { 1, 2, 5 } |
| }; |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.props(expectedProperties))); |
| |
| expectedProperties = new Object[] { |
| "key1", "value1", |
| "key3", new int[] { 1, 2 } |
| }; |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.props(expectedProperties))); |
| |
| expectedProperties = new Object[] { |
| "key1", "value1", |
| "key3", 1 |
| }; |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.props(expectedProperties))); |
| |
| expectedProperties = new Object[] { |
| "key1", "value1", |
| "key3", null |
| }; |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.props(expectedProperties))); |
| |
| // test non-existing key |
| expectedProperties = new Object[] { |
| "key5", "value5" |
| }; |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.props(expectedProperties))); |
| } |
| |
| @Test |
| public void testHasChildren() { |
| context.build() |
| .resource("/parent").resource("child1") |
| .resource("/parent/child2"); |
| |
| Resource resource = context.resourceResolver().getResource("/parent"); |
| Assert.assertThat(resource, ResourceMatchers.hasChildren("child1")); |
| } |
| |
| @Test |
| public void testNameAndProps() { |
| context.build().resource("/resource", |
| "key1", "value1", |
| "key2", new String[] { "item1" }, |
| "key3", "value3"); |
| |
| Map<String, Object> expectedProperties = ImmutableMap.<String, Object>builder() |
| .put("key1", "value1") |
| .put("key2", new String[] { "item1" }) |
| .build(); |
| |
| Resource resource = context.resourceResolver().getResource("/resource"); |
| Assert.assertThat(resource, ResourceMatchers.nameAndProps("resource", expectedProperties)); |
| |
| // test not matching name |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.nameAndProps("resource1", expectedProperties))); |
| |
| // test existing key with not matching value |
| expectedProperties = ImmutableMap.<String, Object>builder() |
| .put("key1", "value1") |
| .put("key2", "value3") |
| .build(); |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.nameAndProps("resource", expectedProperties))); |
| } |
| |
| @Test |
| public void testNameAndPropsVarargs() { |
| context.build().resource("/resource", |
| "key1", "value1", |
| "key2", "value2", |
| "key3", "value3"); |
| |
| Object[] expectedProperties = new Object[] { |
| "key1", "value1", |
| "key2", "value2" |
| }; |
| |
| Resource resource = context.resourceResolver().getResource("/resource"); |
| Assert.assertThat(resource, ResourceMatchers.nameAndProps("resource", expectedProperties)); |
| |
| // test not matching name |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.nameAndProps("resource1", expectedProperties))); |
| |
| // test existing key with not matching value |
| expectedProperties = new Object[] { |
| "key1", "value1", |
| "key2", "value3" |
| }; |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.nameAndProps("resource", expectedProperties))); |
| } |
| |
| @Test |
| public void testContainsChildrenInAnyOrder() { |
| context.build() |
| .resource("/parent").resource("child1") |
| .resource("/parent/child2"); |
| |
| Resource resource = context.resourceResolver().getResource("/parent"); |
| Assert.assertThat(resource, ResourceMatchers.containsChildrenInAnyOrder("child2", "child1")); |
| Assert.assertThat(resource, ResourceMatchers.containsChildrenInAnyOrder("child1", "child2")); |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.containsChildren("child2", "child3", "child1"))); |
| } |
| |
| @Test |
| public void testContainsChildren() { |
| context.build() |
| .resource("/parent").resource("child1") |
| .resource("/parent/child2"); |
| |
| Resource resource = context.resourceResolver().getResource("/parent"); |
| Assert.assertThat(resource, ResourceMatchers.containsChildren("child1", "child2")); |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.containsChildren("child2", "child1"))); |
| Assert.assertThat(resource, Matchers.not(ResourceMatchers.containsChildren("child1", "child2", "child3"))); |
| } |
| |
| } |