Added:
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidatorMapTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidatorMapTest.java?rev=1787945&view=auto
==============================================================================
---
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidatorMapTest.java
(added)
+++
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidatorMapTest.java
Tue Mar 21 12:03:33 2017
@@ -0,0 +1,109 @@
+/*
+ * 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.validation.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.sling.validation.impl.util.examplevalidators.DateValidator;
+import org.apache.sling.validation.impl.util.examplevalidators.StringValidator;
+import org.apache.sling.validation.spi.Validator;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ValidatorMapTest {
+
+ private ValidatorMap validatorMap;
+ private DateValidator dateValidator;
+
+ @Mock
+ private ServiceReference<Validator<?>> validatorServiceReference;
+ @Mock
+ private ServiceReference<Validator<?>> newValidatorServiceReference;
+ @Mock
+ private Bundle providingBundle;
+
+ private static final String DATE_VALIDATOR_ID = "DateValidator";
+
+ @Before
+ public void setUp() {
+ validatorMap = new ValidatorMap();
+ dateValidator = new DateValidator();
+ Mockito.doReturn("some name").when(providingBundle).getSymbolicName();
+
Mockito.doReturn(providingBundle).when(validatorServiceReference).getBundle();
+
Mockito.doReturn(providingBundle).when(newValidatorServiceReference).getBundle();
+ validatorMap.put(DATE_VALIDATOR_ID, dateValidator,
validatorServiceReference, 10);
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testPutWithoutValidatorIdProperty() {
+ Map<String, Object> validatorProperties = new HashMap<>();
+ validatorMap.put(validatorProperties, dateValidator,
validatorServiceReference);
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testPutWithWronglyTypedValidatorId() {
+ Map<String, Object> validatorProperties = new HashMap<>();
+ validatorProperties.put(Validator.PROPERTY_VALIDATOR_ID, new
String[]{"some", "value"});
+ validatorMap.put(validatorProperties, dateValidator,
validatorServiceReference);
+ }
+
+ @Test
+ public void testPutValidatorWithSameValidatorIdAndHigherRanking() {
+ Map<String, Object> validatorProperties = new HashMap<>();
+ validatorProperties.put(Validator.PROPERTY_VALIDATOR_ID,
DATE_VALIDATOR_ID);
+ validatorProperties.put(Validator.PROPERTY_VALIDATOR_SEVERITY, 2);
+
Mockito.doReturn(1).when(newValidatorServiceReference).compareTo(Mockito.anyObject());
+ Validator<String> stringValidator = new StringValidator();
+ validatorMap.put(validatorProperties,stringValidator,
newValidatorServiceReference);
+ Assert.assertEquals(new
ValidatorMap.ValidatorMetaData(stringValidator, newValidatorServiceReference,
2), validatorMap.get(DATE_VALIDATOR_ID));
+ }
+
+ @Test
+ public void testPutValidatorWithSameValidatorIdAndLowerRanking() {
+ Map<String, Object> validatorProperties = new HashMap<>();
+ validatorProperties.put(Validator.PROPERTY_VALIDATOR_ID,
DATE_VALIDATOR_ID);
+ validatorProperties.put(Validator.PROPERTY_VALIDATOR_SEVERITY, 2);
+
Mockito.doReturn(-1).when(newValidatorServiceReference).compareTo(Mockito.anyObject());
+ Validator<String> stringValidator = new StringValidator();
+ validatorMap.put(validatorProperties, stringValidator,
newValidatorServiceReference);
+ Assert.assertEquals(new ValidatorMap.ValidatorMetaData(dateValidator,
validatorServiceReference, 10), validatorMap.get(DATE_VALIDATOR_ID));
+ }
+
+ @Test
+ public void testUpdateChangingValidatorId() {
+ Map<String, Object> validatorProperties = new HashMap<>();
+ String newId = "newId";
+ validatorProperties.put(Validator.PROPERTY_VALIDATOR_ID, newId);
+ validatorProperties.put(Validator.PROPERTY_VALIDATOR_SEVERITY, 1);
+
Mockito.doReturn(-1).when(newValidatorServiceReference).compareTo(Mockito.anyObject());
+ validatorMap.update(validatorProperties, dateValidator,
validatorServiceReference);
+ Assert.assertEquals(new ValidatorMap.ValidatorMetaData(dateValidator,
validatorServiceReference, 1), validatorMap.get(newId));
+ // make sure that the old validator id is no longer in the list
+ Assert.assertNull(validatorMap.get(DATE_VALIDATOR_ID));
+ }
+}
Propchange:
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidatorMapTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java?rev=1787945&r1=1787944&r2=1787945&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java
(original)
+++
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java
Tue Mar 21 12:03:33 2017
@@ -54,10 +54,9 @@ import org.apache.sling.validation.impl.
import org.apache.sling.validation.impl.model.ValidationModelBuilder;
import org.apache.sling.validation.impl.validators.RegexValidator;
import org.apache.sling.validation.model.ChildResource;
-import org.apache.sling.validation.model.ParameterizedValidator;
+import org.apache.sling.validation.model.ValidatorInvocation;
import org.apache.sling.validation.model.ResourceProperty;
import org.apache.sling.validation.model.ValidationModel;
-import org.apache.sling.validation.model.ValidatorAndSeverity;
import org.hamcrest.Matchers;
import org.junit.After;
import org.junit.Assert;
@@ -130,7 +129,6 @@ public class ResourceValidationModelProv
private ResourceResolverFactory resourceResolverFactory;
private MockQueryResultHandler prefixBasedResultHandler;
private Map<PrefixAndResourceType, List<Node>>
validatorModelNodesPerPrefixAndResourceType;
- private Map<String, ValidatorAndSeverity<?>> validatorMap;
private ValidationModelBuilder modelBuilder;
// extract resource type from strings like
@@ -146,14 +144,12 @@ public class ResourceValidationModelProv
primaryTypeUnstructuredMap.put(JcrConstants.JCR_PRIMARYTYPE,
JcrConstants.NT_UNSTRUCTURED);
modelProvider = new ResourceValidationModelProviderImpl();
- validatorMap = new HashMap<>();
-
validatorMap.put("org.apache.sling.validation.impl.validators.RegexValidator",
new ValidatorAndSeverity<String>(new RegexValidator(), 2));
// one default model
modelBuilder = new ValidationModelBuilder();
modelBuilder.setApplicablePath("/content/site1");
ResourcePropertyBuilder propertyBuilder = new
ResourcePropertyBuilder();
- propertyBuilder.validator(new ValidatorAndSeverity<String>(new
RegexValidator(), 2), 10, RegexValidator.REGEX_PARAM, "prefix.*");
+ propertyBuilder.validator("validatorId", 10,
RegexValidator.REGEX_PARAM, "prefix.*");
ResourceProperty property = propertyBuilder.build("field1");
modelBuilder.resourceProperty(property);
@@ -230,7 +226,7 @@ public class ResourceValidationModelProv
createValidationModelResource(rr, libsValidatorsRoot.getPath(),
"testValidationModel2", model2);
// check that both models are returned
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.containsInAnyOrder(model1, model2));
}
@@ -247,7 +243,7 @@ public class ResourceValidationModelProv
properties.remove("applicablePaths");
// check that both models are returned
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.containsInAnyOrder(model1));
}
@@ -262,7 +258,7 @@ public class ResourceValidationModelProv
createValidationModelResource(rr, libsValidatorsRoot.getPath(),
"testValidationModel1", model1);
// check that both models are returned
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.containsInAnyOrder(model1));
}
@@ -278,7 +274,7 @@ public class ResourceValidationModelProv
createValidationModelResource(rr, contentValidatorsRoot.getPath(),
"testValidationModel1", model1);
// check that no model is found
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat("Model was placed outside resource resolver
search path but still found", models, Matchers.empty());
} finally {
rr.delete(contentValidatorsRoot);
@@ -300,7 +296,7 @@ public class ResourceValidationModelProv
createValidationModelResource(rr, libsValidatorsRoot.getPath(),
"testValidationModel1", model1);
// compare both models
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.contains(model1));
}
@@ -316,7 +312,7 @@ public class ResourceValidationModelProv
createValidationModelResource(rr, appsValidatorsRoot.getPath(),
"testValidationModel1", model2);
// only the apps model should be returned
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.contains(model2));
}
@@ -331,18 +327,7 @@ public class ResourceValidationModelProv
Resource resource = createValidationModelResource(rr,
libsValidatorsRoot.getPath(), "testValidationModel1", model1);
// make created model invalid by removing the properties sub resource
rr.delete(resource.getChild("properties"));
- modelProvider.getModels("sling/validation/test", validatorMap);
- }
-
- @Test(expected = IllegalStateException.class)
- public void testGetValidationModelsWithInvalidValidatorId() throws
Exception {
- // create one default model
- ValidationModel model1 = modelBuilder.build("sling/validation/test",
libsValidatorsRoot.getPath() + "/testValidationModel1");
- createValidationModelResource(rr, libsValidatorsRoot.getPath(),
"testValidationModel1", model1);
-
- // clear validator map to make the referenced validator unknown
- validatorMap.clear();
- modelProvider.getModels("sling/validation/test", validatorMap);
+ modelProvider.getModels("sling/validation/test");
}
@Test
@@ -355,11 +340,11 @@ public class ResourceValidationModelProv
validatorArguments.put("key2", "value1");
validatorArguments.put("key3", "value1=value2");
modelBuilder = new ValidationModelBuilder();
- modelBuilder.resourceProperty(new
ResourcePropertyBuilder().validator(new ValidatorAndSeverity<String>(new
RegexValidator(), 2), 10, validatorArguments).build("field1"));
+ modelBuilder.resourceProperty(new
ResourcePropertyBuilder().validator("validatorId", 10,
validatorArguments).build("field1"));
modelBuilder.addApplicablePath("content/site1");
ValidationModel model1 = modelBuilder.build("sling/validation/test",
libsValidatorsRoot.getPath() + "/testValidationModel1");
createValidationModelResource(rr, libsValidatorsRoot.getPath(),
"testValidationModel1", model1);
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.contains(model1));
}
@@ -370,10 +355,10 @@ public class ResourceValidationModelProv
// create valid model first
Resource modelResource = createValidationModelResource(rr,
libsValidatorsRoot.getPath(), "testValidationModel1", model1);
// and make parametrization of validator invalid afterwards
- Resource validatorResource =
modelResource.getChild("properties/field1/validators/" +
RegexValidator.class.getName());
+ Resource validatorResource =
modelResource.getChild("properties/field1/validators/validatorId");
ModifiableValueMap validatorArguments =
validatorResource.adaptTo(ModifiableValueMap.class);
validatorArguments.put("validatorArguments", "key1"); // value without
"="
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.contains(model1));
}
@@ -384,10 +369,10 @@ public class ResourceValidationModelProv
// create valid model first
Resource modelResource = createValidationModelResource(rr,
libsValidatorsRoot.getPath(), "testValidationModel1", model1);
// and make parametrization of validator invalid afterwards
- Resource validatorResource =
modelResource.getChild("properties/field1/validators/" +
RegexValidator.class.getName());
+ Resource validatorResource =
modelResource.getChild("properties/field1/validators/validatorId");
ModifiableValueMap validatorArguments =
validatorResource.adaptTo(ModifiableValueMap.class);
validatorArguments.put("validatorArguments", "=value2"); // starting
with "="
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.contains(model1));
}
@@ -398,10 +383,10 @@ public class ResourceValidationModelProv
// create valid model first
Resource modelResource = createValidationModelResource(rr,
libsValidatorsRoot.getPath(), "testValidationModel1", model1);
// and make parametrization of validator invalid afterwards
- Resource validatorResource =
modelResource.getChild("properties/field1/validators/" +
RegexValidator.class.getName());
+ Resource validatorResource =
modelResource.getChild("properties/field1/validators/validatorId");
ModifiableValueMap validatorArguments =
validatorResource.adaptTo(ModifiableValueMap.class);
validatorArguments.put("validatorArguments", "key1="); // ending with
"="
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.contains(model1));
}
@@ -416,11 +401,11 @@ public class ResourceValidationModelProv
createValidationModelResource(rr, libsValidatorsRoot.getPath(),
"testValidationModel1", model1);
// check that both models are returned
- Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models =
modelProvider.getModels("sling/validation/test");
Assert.assertThat(models, Matchers.containsInAnyOrder(model1));
// the 2nd time the same instance should be returned
- Collection<ValidationModel> models2 =
modelProvider.getModels("sling/validation/test", validatorMap);
+ Collection<ValidationModel> models2 =
modelProvider.getModels("sling/validation/test");
Assert.assertEquals("Due to caching both models should be actually the
same instance", System.identityHashCode(models),
System.identityHashCode(models2));
}
@@ -485,22 +470,21 @@ public class ResourceValidationModelProv
Resource validators = ResourceUtil.getOrCreateResource(rr,
propertyResource.getPath() + "/"
+ ResourceValidationModelProviderImpl.VALIDATORS,
JcrConstants.NT_UNSTRUCTURED, null, true);
if (validators != null) {
- for (ParameterizedValidator validator :
property.getValidators()) {
+ for (ValidatorInvocation validatorIncovation :
property.getValidatorInvocations()) {
Map<String, Object> validatorProperties = new
HashMap<String, Object>();
validatorProperties.put(JcrConstants.JCR_PRIMARYTYPE,
JcrConstants.NT_UNSTRUCTURED);
- ValueMap parameters = validator.getParameters();
+ ValueMap parameters =
validatorIncovation.getParameters();
if (!parameters.isEmpty()) {
// convert to right format
validatorProperties.put(ResourceValidationModelProviderImpl.VALIDATOR_ARGUMENTS,
convertMapToJcrValidatorArguments(parameters));
}
- Integer severity = validator.getSeverity();
+ Integer severity = validatorIncovation.getSeverity();
if (severity != null) {
validatorProperties.put(ResourceValidationModelProviderImpl.SEVERITY, severity);
}
- // TODO: get real validator id here!
ResourceUtil.getOrCreateResource(rr,
validators.getPath() + "/"
- +
validator.getValidator().getClass().getName(), validatorProperties, null, true);
+ + validatorIncovation.getValidatorId(),
validatorProperties, null, true);
}
}
}