SLING-4997 add new method isModelClass and deprecate the old one
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1702186 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/models/it/ModelFactorySimpleTest.java b/src/main/java/org/apache/sling/models/it/ModelFactorySimpleTest.java
new file mode 100644
index 0000000..67f209d
--- /dev/null
+++ b/src/main/java/org/apache/sling/models/it/ModelFactorySimpleTest.java
@@ -0,0 +1,116 @@
+/*
+ * 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.models.it;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.junit.annotations.SlingAnnotationsTestRunner;
+import org.apache.sling.junit.annotations.TestReference;
+import org.apache.sling.models.factory.ModelClassException;
+import org.apache.sling.models.factory.ModelFactory;
+import org.apache.sling.models.it.models.ConstructorInjectionTestModel;
+import org.apache.sling.models.it.models.FieldInjectionTestModel;
+import org.apache.sling.models.it.models.InterfaceInjectionTestModel;
+import org.apache.sling.models.it.models.implextend.InvalidImplementsInterfacePropertyModel;
+import org.apache.sling.models.it.models.implextend.SampleServiceInterface;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(SlingAnnotationsTestRunner.class)
+public class ModelFactorySimpleTest {
+
+ @TestReference
+ private ResourceResolverFactory rrFactory;
+
+ @TestReference
+ private ModelFactory modelFactory;
+
+ private String value;
+ private ResourceResolver resolver;
+ private Resource resource;
+ private Node createdNode;
+
+ @Before
+ public void setUp() throws Exception {
+ value = RandomStringUtils.randomAlphanumeric(10);
+
+ resolver = rrFactory.getAdministrativeResourceResolver(null);
+ Session session = resolver.adaptTo(Session.class);
+ Node rootNode = session.getRootNode();
+ createdNode = rootNode.addNode("test_" + RandomStringUtils.randomAlphanumeric(10));
+ createdNode.setProperty("testProperty", value);
+ session.save();
+
+ resource = resolver.getResource(createdNode.getPath());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ if (createdNode != null) {
+ createdNode.remove();
+ }
+ if (resolver != null) {
+ resolver.close();
+ }
+ }
+
+ @Test
+ public void testCreateModel() {
+ FieldInjectionTestModel model = modelFactory.createModel(resource, FieldInjectionTestModel.class);
+
+ assertNotNull("Model is null", model);
+ assertEquals("Test Property is not set correctly", value, model.getTestProperty());
+ assertNotNull("Filters is null", model.getFilters());
+ assertSame("Adaptable is not injected", resource, model.getResource());
+ }
+
+ private static final class DummyClass {
+ }
+
+ @Test
+ public void testIsModelClass() {
+ assertTrue("Model is not detected as such", modelFactory.isModelClass(ConstructorInjectionTestModel.class));
+ assertFalse("Dummy class incorrectly detected as model class", modelFactory.isModelClass(DummyClass.class));
+ assertFalse("Model with invalid adaptable incorrectly detected as model class" , modelFactory.isModelClass(InvalidImplementsInterfacePropertyModel.class));
+ assertTrue("Model is not detected as such", modelFactory.isModelClass(SampleServiceInterface.class)); // being provided by two adapters
+ }
+
+ @Test
+ public void testCanCreateFromAdaptable() {
+ assertTrue("Model is not detected as such", modelFactory.canCreateFromAdaptable(resource, ConstructorInjectionTestModel.class));
+ assertTrue("Model is not detected as such", modelFactory.canCreateFromAdaptable(resource, SampleServiceInterface.class));
+ assertFalse("Model is not detected as such", modelFactory.canCreateFromAdaptable(new String(), ConstructorInjectionTestModel.class)); // invalid adaptable
+ }
+
+ @Test(expected=ModelClassException.class)
+ public void testCanCreateFromAdaptableWithModelExceptin() {
+ modelFactory.canCreateFromAdaptable(resource, DummyClass.class); // no model class
+ }
+}