You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/10/22 10:39:57 UTC
[14/48] olingo-odata4 git commit: [OLINGO-786] Move edm tests to
commons core
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmKeyPropertyRefImplTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmKeyPropertyRefImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmKeyPropertyRefImplTest.java
new file mode 100644
index 0000000..00b2fc5
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmKeyPropertyRefImplTest.java
@@ -0,0 +1,141 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.olingo.commons.api.edm.EdmComplexType;
+import org.apache.olingo.commons.api.edm.EdmElement;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmKeyPropertyRef;
+import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.provider.CsdlPropertyRef;
+import org.apache.olingo.commons.core.edm.EdmKeyPropertyRefImpl;
+import org.junit.Test;
+
+public class EdmKeyPropertyRefImplTest {
+
+ @Test
+ public void noAlias() {
+ CsdlPropertyRef providerRef = new CsdlPropertyRef().setName("Id");
+ EdmEntityType etMock = mock(EdmEntityType.class);
+ EdmProperty keyPropertyMock = mock(EdmProperty.class);
+ when(etMock.getStructuralProperty("Id")).thenReturn(keyPropertyMock);
+ EdmKeyPropertyRef ref = new EdmKeyPropertyRefImpl(etMock, providerRef);
+ assertEquals("Id", ref.getName());
+ assertNull(ref.getAlias());
+
+ EdmProperty property = ref.getProperty();
+ assertNotNull(property);
+ assertTrue(property == keyPropertyMock);
+ assertTrue(property == ref.getProperty());
+ }
+
+ @Test
+ public void aliasForPropertyInComplexPropertyOneLevel() {
+ CsdlPropertyRef providerRef = new CsdlPropertyRef().setName("comp/Id").setAlias("alias");
+ EdmEntityType etMock = mock(EdmEntityType.class);
+ EdmProperty keyPropertyMock = mock(EdmProperty.class);
+ EdmProperty compMock = mock(EdmProperty.class);
+ EdmComplexType compTypeMock = mock(EdmComplexType.class);
+ when(compTypeMock.getStructuralProperty("Id")).thenReturn(keyPropertyMock);
+ when(compMock.getType()).thenReturn(compTypeMock);
+ when(etMock.getStructuralProperty("comp")).thenReturn(compMock);
+ EdmKeyPropertyRef ref = new EdmKeyPropertyRefImpl(etMock, providerRef);
+ assertEquals("alias", ref.getAlias());
+
+ EdmProperty property = ref.getProperty();
+ assertNotNull(property);
+ assertTrue(property == keyPropertyMock);
+ }
+
+ @Test(expected = EdmException.class)
+ public void aliasForPropertyInComplexPropertyButWrongPath() {
+ CsdlPropertyRef providerRef = new CsdlPropertyRef().setName("comp/wrong").setAlias("alias");
+ EdmEntityType etMock = mock(EdmEntityType.class);
+ EdmProperty keyPropertyMock = mock(EdmProperty.class);
+ EdmElement compMock = mock(EdmProperty.class);
+ EdmComplexType compTypeMock = mock(EdmComplexType.class);
+ when(compTypeMock.getProperty("Id")).thenReturn(keyPropertyMock);
+ when(compMock.getType()).thenReturn(compTypeMock);
+ when(etMock.getProperty("comp")).thenReturn(compMock);
+ new EdmKeyPropertyRefImpl(etMock, providerRef).getProperty();
+ }
+
+ @Test(expected = EdmException.class)
+ public void aliasForPropertyInComplexPropertyButWrongPath2() {
+ CsdlPropertyRef providerRef = new CsdlPropertyRef().setName("wrong/Id").setAlias("alias");
+ EdmEntityType etMock = mock(EdmEntityType.class);
+ EdmProperty keyPropertyMock = mock(EdmProperty.class);
+ EdmElement compMock = mock(EdmProperty.class);
+ EdmComplexType compTypeMock = mock(EdmComplexType.class);
+ when(compTypeMock.getProperty("Id")).thenReturn(keyPropertyMock);
+ when(compMock.getType()).thenReturn(compTypeMock);
+ when(etMock.getProperty("comp")).thenReturn(compMock);
+ new EdmKeyPropertyRefImpl(etMock, providerRef).getProperty();
+ }
+
+ @Test
+ public void aliasForPropertyInComplexPropertyTwoLevels() {
+ CsdlPropertyRef providerRef = new CsdlPropertyRef().setName("comp/comp2/Id").setAlias("alias");
+ EdmEntityType etMock = mock(EdmEntityType.class);
+ EdmProperty keyPropertyMock = mock(EdmProperty.class);
+ EdmProperty compMock = mock(EdmProperty.class);
+ EdmComplexType compTypeMock = mock(EdmComplexType.class);
+ EdmProperty comp2Mock = mock(EdmProperty.class);
+ EdmComplexType comp2TypeMock = mock(EdmComplexType.class);
+ when(comp2TypeMock.getStructuralProperty("Id")).thenReturn(keyPropertyMock);
+ when(comp2Mock.getType()).thenReturn(comp2TypeMock);
+ when(compTypeMock.getStructuralProperty("comp2")).thenReturn(comp2Mock);
+ when(compMock.getType()).thenReturn(compTypeMock);
+ when(etMock.getStructuralProperty("comp")).thenReturn(compMock);
+ EdmKeyPropertyRef ref = new EdmKeyPropertyRefImpl(etMock, providerRef);
+
+ EdmProperty property = ref.getProperty();
+ assertNotNull(property);
+ assertTrue(property == keyPropertyMock);
+ }
+
+ @Test(expected = EdmException.class)
+ public void oneKeyNoAliasButInvalidProperty() {
+ CsdlPropertyRef providerRef = new CsdlPropertyRef().setName("Id");
+ EdmKeyPropertyRef ref = new EdmKeyPropertyRefImpl(mock(EdmEntityType.class), providerRef);
+ ref.getProperty();
+ }
+
+ @Test(expected = EdmException.class)
+ public void aliasButNoPath() {
+ CsdlPropertyRef providerRef = new CsdlPropertyRef().setName("Id").setAlias("alias");
+ EdmKeyPropertyRef ref = new EdmKeyPropertyRefImpl(mock(EdmEntityType.class), providerRef);
+ ref.getProperty();
+ }
+
+ @Test(expected = EdmException.class)
+ public void aliasButEmptyPath() {
+ CsdlPropertyRef providerRef = new CsdlPropertyRef().setName("").setAlias("alias");
+ EdmKeyPropertyRef ref = new EdmKeyPropertyRefImpl(mock(EdmEntityType.class), providerRef);
+ ref.getProperty();
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMappingTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMappingTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMappingTest.java
new file mode 100644
index 0000000..c284edf
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMappingTest.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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.util.Date;
+
+import org.apache.olingo.commons.api.edm.EdmParameter;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.CsdlMapping;
+import org.apache.olingo.commons.api.edm.provider.CsdlParameter;
+import org.apache.olingo.commons.api.edm.provider.CsdlProperty;
+import org.apache.olingo.commons.core.edm.EdmParameterImpl;
+import org.apache.olingo.commons.core.edm.EdmPropertyImpl;
+import org.junit.Test;
+
+public class EdmMappingTest {
+
+ @Test
+ public void initialMappingMustBeNull() {
+ CsdlProperty property = new CsdlProperty().setType(EdmPrimitiveTypeKind.DateTimeOffset.getFullQualifiedName());
+ EdmProperty edmProperty = new EdmPropertyImpl(null, new FullQualifiedName("namespace.name"), property);
+
+ assertNull(edmProperty.getMapping());
+
+ CsdlParameter parameter = new CsdlParameter().setType(EdmPrimitiveTypeKind.DateTimeOffset.getFullQualifiedName());
+ EdmParameter edmParameter = new EdmParameterImpl(null, parameter);
+
+ assertNull(edmParameter.getMapping());
+ }
+
+ @Test
+ public void getDataClassForPrimTypeViaMapping() {
+ CsdlMapping mapping = new CsdlMapping().setMappedJavaClass(Date.class);
+ CsdlProperty property = new CsdlProperty()
+ .setType(EdmPrimitiveTypeKind.DateTimeOffset.getFullQualifiedName())
+ .setMapping(mapping);
+ EdmProperty edmProperty = new EdmPropertyImpl(null, new FullQualifiedName("namespace.name"), property);
+
+ assertNotNull(edmProperty.getMapping());
+ assertEquals(Date.class, edmProperty.getMapping().getMappedJavaClass());
+
+ CsdlParameter parameter = new CsdlParameter()
+ .setType(EdmPrimitiveTypeKind.DateTimeOffset.getFullQualifiedName())
+ .setMapping(mapping);
+ EdmParameter edmParameter = new EdmParameterImpl(null, parameter);
+
+ assertNotNull(edmParameter.getMapping());
+ assertEquals(Date.class, edmParameter.getMapping().getMappedJavaClass());
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMemberImplTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMemberImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMemberImplTest.java
new file mode 100644
index 0000000..a5e774c
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMemberImplTest.java
@@ -0,0 +1,40 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+
+import org.apache.olingo.commons.api.edm.provider.CsdlEnumMember;
+import org.apache.olingo.commons.core.edm.EdmMemberImpl;
+import org.apache.olingo.commons.core.edm.EdmProviderImpl;
+import org.junit.Test;
+
+public class EdmMemberImplTest {
+
+ @Test
+ public void enumMember() {
+ final CsdlEnumMember member = new CsdlEnumMember().setName("name").setValue("value");
+ final EdmMemberImpl memberImpl = new EdmMemberImpl(mock(EdmProviderImpl.class), null, member);
+
+ assertEquals("name", memberImpl.getName());
+ assertEquals("value", memberImpl.getValue());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmNavigationPropertyImplTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmNavigationPropertyImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmNavigationPropertyImplTest.java
new file mode 100644
index 0000000..bfab176
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmNavigationPropertyImplTest.java
@@ -0,0 +1,146 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
+import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
+import org.apache.olingo.commons.api.edm.provider.CsdlEntityType;
+import org.apache.olingo.commons.api.edm.provider.CsdlNavigationProperty;
+import org.apache.olingo.commons.api.edm.provider.CsdlPropertyRef;
+import org.apache.olingo.commons.api.edm.provider.CsdlReferentialConstraint;
+import org.apache.olingo.commons.core.edm.EdmNavigationPropertyImpl;
+import org.apache.olingo.commons.core.edm.EdmProviderImpl;
+import org.junit.Test;
+
+public class EdmNavigationPropertyImplTest {
+
+ @Test
+ public void navigationProperty() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName entityTypeName = new FullQualifiedName("ns", "entity");
+ CsdlEntityType entityTypeProvider = new CsdlEntityType();
+ entityTypeProvider.setKey(Collections.<CsdlPropertyRef> emptyList());
+ when(provider.getEntityType(entityTypeName)).thenReturn(entityTypeProvider);
+ CsdlNavigationProperty propertyProvider = new CsdlNavigationProperty();
+ propertyProvider.setType(entityTypeName);
+ propertyProvider.setNullable(false);
+ EdmNavigationProperty property = new EdmNavigationPropertyImpl(edm, entityTypeName, propertyProvider);
+ assertFalse(property.isCollection());
+ assertFalse(property.isNullable());
+ EdmType type = property.getType();
+ assertEquals(EdmTypeKind.ENTITY, type.getKind());
+ assertEquals("ns", type.getNamespace());
+ assertEquals("entity", type.getName());
+ assertNull(property.getReferencingPropertyName("referencedPropertyName"));
+ assertNull(property.getPartner());
+
+ // Test caching
+ EdmType cachedType = property.getType();
+ assertTrue(type == cachedType);
+ }
+
+ @Test
+ public void navigationPropertyWithReferntialConstraint() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName entityTypeName = new FullQualifiedName("ns", "entity");
+ CsdlEntityType entityTypeProvider = new CsdlEntityType();
+ entityTypeProvider.setKey(Collections.<CsdlPropertyRef> emptyList());
+ when(provider.getEntityType(entityTypeName)).thenReturn(entityTypeProvider);
+ CsdlNavigationProperty propertyProvider = new CsdlNavigationProperty();
+ propertyProvider.setType(entityTypeName);
+ propertyProvider.setNullable(false);
+ List<CsdlReferentialConstraint> referentialConstraints = new ArrayList<CsdlReferentialConstraint>();
+ referentialConstraints.add(new CsdlReferentialConstraint().setProperty("property").setReferencedProperty(
+ "referencedProperty"));
+ propertyProvider.setReferentialConstraints(referentialConstraints);
+ EdmNavigationProperty property = new EdmNavigationPropertyImpl(edm, entityTypeName, propertyProvider);
+ assertEquals("property", property.getReferencingPropertyName("referencedProperty"));
+ assertNull(property.getReferencingPropertyName("wrong"));
+ }
+
+ @Test
+ public void navigationPropertyWithPartner() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName entityTypeName = new FullQualifiedName("ns", "entity");
+ CsdlEntityType entityTypeProvider = new CsdlEntityType();
+ entityTypeProvider.setKey(Collections.<CsdlPropertyRef> emptyList());
+
+ List<CsdlNavigationProperty> navigationProperties = new ArrayList<CsdlNavigationProperty>();
+ navigationProperties.add(new CsdlNavigationProperty().setName("partnerName").setType(entityTypeName));
+ entityTypeProvider.setNavigationProperties(navigationProperties);
+ when(provider.getEntityType(entityTypeName)).thenReturn(entityTypeProvider);
+ CsdlNavigationProperty propertyProvider = new CsdlNavigationProperty();
+ propertyProvider.setType(entityTypeName);
+ propertyProvider.setNullable(false);
+ propertyProvider.setPartner("partnerName");
+ EdmNavigationProperty property = new EdmNavigationPropertyImpl(edm, entityTypeName, propertyProvider);
+ EdmNavigationProperty partner = property.getPartner();
+ assertNotNull(partner);
+
+ // Caching
+ assertTrue(partner == property.getPartner());
+ }
+
+ @Test(expected = EdmException.class)
+ public void navigationPropertyWithNonexistentPartner() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName entityTypeName = new FullQualifiedName("ns", "entity");
+ CsdlEntityType entityTypeProvider = new CsdlEntityType();
+ entityTypeProvider.setKey(Collections.<CsdlPropertyRef> emptyList());
+
+ List<CsdlNavigationProperty> navigationProperties = new ArrayList<CsdlNavigationProperty>();
+ navigationProperties.add(new CsdlNavigationProperty().setName("partnerName").setType(entityTypeName));
+ entityTypeProvider.setNavigationProperties(navigationProperties);
+ when(provider.getEntityType(entityTypeName)).thenReturn(entityTypeProvider);
+ CsdlNavigationProperty propertyProvider = new CsdlNavigationProperty();
+ propertyProvider.setType(entityTypeName);
+ propertyProvider.setNullable(false);
+ propertyProvider.setPartner("wrong");
+ EdmNavigationProperty property = new EdmNavigationPropertyImpl(edm, entityTypeName, propertyProvider);
+ property.getPartner();
+ }
+
+ @Test(expected = EdmException.class)
+ public void navigationPropertyWithNonExistentType() throws Exception {
+ EdmProviderImpl edm = mock(EdmProviderImpl.class);
+ CsdlNavigationProperty propertyProvider = new CsdlNavigationProperty();
+ EdmNavigationProperty property = new EdmNavigationPropertyImpl(edm, null, propertyProvider);
+ property.getType();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmParameterImplTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmParameterImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmParameterImplTest.java
new file mode 100644
index 0000000..5babbdb
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmParameterImplTest.java
@@ -0,0 +1,143 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmParameter;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
+import org.apache.olingo.commons.api.edm.provider.CsdlComplexType;
+import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
+import org.apache.olingo.commons.api.edm.provider.CsdlEnumType;
+import org.apache.olingo.commons.api.edm.provider.CsdlParameter;
+import org.apache.olingo.commons.api.edm.provider.CsdlTypeDefinition;
+import org.apache.olingo.commons.core.edm.EdmParameterImpl;
+import org.apache.olingo.commons.core.edm.EdmProviderImpl;
+import org.junit.Test;
+
+public class EdmParameterImplTest {
+
+ @Test
+ public void getTypeReturnsPrimitiveType() {
+ EdmProviderImpl edm = new EdmProviderImpl(mock(CsdlEdmProvider.class));
+ CsdlParameter parameterProvider = new CsdlParameter();
+ parameterProvider.setType(EdmPrimitiveTypeKind.Binary.getFullQualifiedName());
+ final EdmParameter parameter = new EdmParameterImpl(edm, parameterProvider);
+ final EdmType type = parameter.getType();
+ assertEquals(EdmTypeKind.PRIMITIVE, type.getKind());
+ assertEquals(EdmPrimitiveType.EDM_NAMESPACE, type.getNamespace());
+ assertEquals(EdmPrimitiveTypeKind.Binary.toString(), type.getName());
+ }
+
+ @Test
+ public void getTypeReturnsComplexType() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName complexTypeName = new FullQualifiedName("ns", "complex");
+ CsdlComplexType complexTypeProvider = new CsdlComplexType();
+ when(provider.getComplexType(complexTypeName)).thenReturn(complexTypeProvider);
+ CsdlParameter parameterProvider = new CsdlParameter();
+ parameterProvider.setType(complexTypeName);
+ final EdmParameter parameter = new EdmParameterImpl(edm, parameterProvider);
+ assertFalse(parameter.isCollection());
+ final EdmType type = parameter.getType();
+ assertEquals(EdmTypeKind.COMPLEX, type.getKind());
+ assertEquals("ns", type.getNamespace());
+ assertEquals("complex", type.getName());
+ }
+
+ @Test
+ public void getTypeReturnsEnumType() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName enumTypeName = new FullQualifiedName("ns", "enum");
+ CsdlEnumType enumTypeProvider = new CsdlEnumType();
+ when(provider.getEnumType(enumTypeName)).thenReturn(enumTypeProvider);
+ CsdlParameter parameterProvider = new CsdlParameter();
+ parameterProvider.setType(enumTypeName);
+ final EdmParameter parameter = new EdmParameterImpl(edm, parameterProvider);
+ assertFalse(parameter.isCollection());
+ final EdmType type = parameter.getType();
+ assertEquals(EdmTypeKind.ENUM, type.getKind());
+ assertEquals("ns", type.getNamespace());
+ assertEquals("enum", type.getName());
+ }
+
+ @Test
+ public void getTypeReturnsTypeDefinition() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName typeName = new FullQualifiedName("ns", "definition");
+ CsdlTypeDefinition typeProvider =
+ new CsdlTypeDefinition().setUnderlyingType(new FullQualifiedName("Edm", "String"));
+ when(provider.getTypeDefinition(typeName)).thenReturn(typeProvider);
+ CsdlParameter parameterProvider = new CsdlParameter();
+ parameterProvider.setType(typeName);
+ final EdmParameter parameter = new EdmParameterImpl(edm, parameterProvider);
+ final EdmType type = parameter.getType();
+ assertEquals(EdmTypeKind.DEFINITION, type.getKind());
+ assertEquals("ns", type.getNamespace());
+ assertEquals("definition", type.getName());
+ }
+
+ @Test
+ public void facets() {
+ EdmProviderImpl edm = new EdmProviderImpl(mock(CsdlEdmProvider.class));
+ CsdlParameter parameterProvider = new CsdlParameter();
+ parameterProvider.setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
+ parameterProvider.setPrecision(42);
+ parameterProvider.setScale(12);
+ parameterProvider.setMaxLength(128);
+ parameterProvider.setNullable(false);
+ final EdmParameter parameter = new EdmParameterImpl(edm, parameterProvider);
+ assertNull(parameter.getMapping());
+ assertEquals(Integer.valueOf(42), parameter.getPrecision());
+ assertEquals(Integer.valueOf(12), parameter.getScale());
+ assertEquals(Integer.valueOf(128), parameter.getMaxLength());
+ assertFalse(parameter.isNullable());
+ }
+
+ @Test(expected = EdmException.class)
+ public void getTypeWithInvalidSimpleType() {
+ EdmProviderImpl edm = new EdmProviderImpl(mock(CsdlEdmProvider.class));
+ CsdlParameter parameterProvider = new CsdlParameter();
+ parameterProvider.setType(new FullQualifiedName("Edm", "wrong"));
+ final EdmParameter parameter = new EdmParameterImpl(edm, parameterProvider);
+ parameter.getType();
+ }
+
+ @Test(expected = EdmException.class)
+ public void getTypeWithNonexistingType() {
+ EdmProviderImpl edm = new EdmProviderImpl(mock(CsdlEdmProvider.class));
+ CsdlParameter parameterProvider = new CsdlParameter();
+ parameterProvider.setType(new FullQualifiedName("wrong", "wrong"));
+ final EdmParameter parameter = new EdmParameterImpl(edm, parameterProvider);
+ parameter.getType();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmPropertyImplTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmPropertyImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmPropertyImplTest.java
new file mode 100644
index 0000000..e9f907f
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmPropertyImplTest.java
@@ -0,0 +1,158 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
+import org.apache.olingo.commons.api.edm.provider.CsdlComplexType;
+import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
+import org.apache.olingo.commons.api.edm.provider.CsdlEnumType;
+import org.apache.olingo.commons.api.edm.provider.CsdlProperty;
+import org.apache.olingo.commons.api.edm.provider.CsdlTypeDefinition;
+import org.apache.olingo.commons.core.edm.EdmPropertyImpl;
+import org.apache.olingo.commons.core.edm.EdmProviderImpl;
+import org.junit.Test;
+
+public class EdmPropertyImplTest {
+
+ @Test
+ public void getTypeReturnsPrimitiveType() {
+ EdmProviderImpl edm = new EdmProviderImpl(mock(CsdlEdmProvider.class));
+ CsdlProperty propertyProvider = new CsdlProperty();
+ propertyProvider.setType(EdmPrimitiveTypeKind.Binary.getFullQualifiedName());
+ final EdmProperty property = new EdmPropertyImpl(edm, null, propertyProvider);
+ assertTrue(property.isPrimitive());
+ final EdmType type = property.getType();
+ assertEquals(EdmTypeKind.PRIMITIVE, type.getKind());
+ assertEquals(EdmPrimitiveType.EDM_NAMESPACE, type.getNamespace());
+ assertEquals(EdmPrimitiveTypeKind.Binary.toString(), type.getName());
+ }
+
+ @Test
+ public void getTypeReturnsComplexType() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName complexTypeName = new FullQualifiedName("ns", "complex");
+ CsdlComplexType complexTypeProvider = new CsdlComplexType();
+ when(provider.getComplexType(complexTypeName)).thenReturn(complexTypeProvider);
+ CsdlProperty propertyProvider = new CsdlProperty();
+ propertyProvider.setType(complexTypeName);
+ final EdmProperty property = new EdmPropertyImpl(edm, complexTypeName, propertyProvider);
+ assertFalse(property.isCollection());
+ assertFalse(property.isPrimitive());
+ final EdmType type = property.getType();
+ assertEquals(EdmTypeKind.COMPLEX, type.getKind());
+ assertEquals("ns", type.getNamespace());
+ assertEquals("complex", type.getName());
+ }
+
+ @Test
+ public void getTypeReturnsEnumType() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName enumTypeName = new FullQualifiedName("ns", "enum");
+ CsdlEnumType enumTypeProvider = new CsdlEnumType();
+ when(provider.getEnumType(enumTypeName)).thenReturn(enumTypeProvider);
+ CsdlProperty propertyProvider = new CsdlProperty();
+ propertyProvider.setType(enumTypeName);
+ final EdmProperty property = new EdmPropertyImpl(edm, null, propertyProvider);
+ assertFalse(property.isCollection());
+ assertFalse(property.isPrimitive());
+ final EdmType type = property.getType();
+ assertEquals(EdmTypeKind.ENUM, type.getKind());
+ assertEquals("ns", type.getNamespace());
+ assertEquals("enum", type.getName());
+ }
+
+ @Test
+ public void getTypeReturnsTypeDefinition() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final FullQualifiedName typeName = new FullQualifiedName("ns", "definition");
+ CsdlTypeDefinition typeProvider =
+ new CsdlTypeDefinition().setUnderlyingType(new FullQualifiedName("Edm", "String"));
+ when(provider.getTypeDefinition(typeName)).thenReturn(typeProvider);
+ CsdlProperty propertyProvider = new CsdlProperty();
+ propertyProvider.setType(typeName);
+ final EdmProperty property = new EdmPropertyImpl(edm, null, propertyProvider);
+ assertFalse(property.isPrimitive());
+ final EdmType type = property.getType();
+ assertEquals(EdmTypeKind.DEFINITION, type.getKind());
+ assertEquals("ns", type.getNamespace());
+ assertEquals("definition", type.getName());
+ }
+
+ @Test(expected = EdmException.class)
+ public void getTypeReturnsWrongType() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final CsdlProperty propertyProvider = new CsdlProperty()
+ .setType(new FullQualifiedName("ns", "wrong"));
+ final EdmProperty property = new EdmPropertyImpl(edm, null, propertyProvider);
+ property.getType();
+ fail();
+ }
+
+ @Test(expected = EdmException.class)
+ public void getTypeReturnsNoTypeKind() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+ final CsdlProperty propertyProvider = new CsdlProperty()
+ .setType(new FullQualifiedName(EdmPrimitiveType.EDM_NAMESPACE, "type"));
+ final EdmProperty property = new EdmPropertyImpl(edm, null, propertyProvider);
+ property.getType();
+ fail();
+ }
+
+ @Test
+ public void facets() {
+ EdmProviderImpl edm = new EdmProviderImpl(mock(CsdlEdmProvider.class));
+ CsdlProperty propertyProvider = new CsdlProperty();
+ propertyProvider.setType(EdmPrimitiveTypeKind.String.getFullQualifiedName());
+ propertyProvider.setPrecision(42);
+ propertyProvider.setScale(12);
+ propertyProvider.setMaxLength(128);
+ propertyProvider.setUnicode(true);
+ propertyProvider.setNullable(false);
+ propertyProvider.setDefaultValue("x");
+ final EdmProperty property = new EdmPropertyImpl(edm, null, propertyProvider);
+ assertTrue(property.isPrimitive());
+ assertNull(property.getMapping());
+ assertNull(property.getMimeType());
+ assertEquals(Integer.valueOf(42), property.getPrecision());
+ assertEquals(Integer.valueOf(12), property.getScale());
+ assertEquals(Integer.valueOf(128), property.getMaxLength());
+ assertTrue(property.isUnicode());
+ assertFalse(property.isNullable());
+ assertEquals("x", property.getDefaultValue());
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmProviderImplOverloadingTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmProviderImplOverloadingTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmProviderImplOverloadingTest.java
new file mode 100644
index 0000000..45d3d2b
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmProviderImplOverloadingTest.java
@@ -0,0 +1,199 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAction;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmFunction;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.CsdlAction;
+import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
+import org.apache.olingo.commons.api.edm.provider.CsdlFunction;
+import org.apache.olingo.commons.api.edm.provider.CsdlParameter;
+import org.apache.olingo.commons.core.edm.EdmProviderImpl;
+import org.junit.Before;
+import org.junit.Test;
+
+public class EdmProviderImplOverloadingTest {
+
+ private Edm edm;
+ private final FullQualifiedName operationName1 = new FullQualifiedName("n", "o1");
+ private final FullQualifiedName operationType1 = new FullQualifiedName("n", "t1");
+ private final FullQualifiedName operationType2 = new FullQualifiedName("n", "t2");
+ private final FullQualifiedName wrongOperationName = new FullQualifiedName("wrong", "wrong");
+ private final FullQualifiedName badOperationName = new FullQualifiedName("bad", "bad");
+
+ @Before
+ public void setup() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+
+ List<CsdlAction> actions = new ArrayList<CsdlAction>();
+ CsdlAction action = new CsdlAction().setName(operationName1.getName());
+ actions.add(action);
+ List<CsdlParameter> action1Parameters = new ArrayList<CsdlParameter>();
+ action1Parameters.add(new CsdlParameter().setType(operationType1).setCollection(false));
+ action =
+ new CsdlAction().setName(operationName1.getName()).setBound(true).setParameters(action1Parameters);
+ actions.add(action);
+ List<CsdlParameter> action2Parameters = new ArrayList<CsdlParameter>();
+ action2Parameters.add(new CsdlParameter().setType(operationType1).setCollection(true));
+ action =
+ new CsdlAction().setName(operationName1.getName()).setBound(true).setParameters(action2Parameters);
+ actions.add(action);
+ when(provider.getActions(operationName1)).thenReturn(actions);
+
+ List<CsdlFunction> functions = new ArrayList<CsdlFunction>();
+ CsdlFunction function = new CsdlFunction().setName(operationName1.getName());
+ functions.add(function);
+ List<CsdlParameter> function1Parameters = new ArrayList<CsdlParameter>();
+ function1Parameters.add(new CsdlParameter().setType(operationType1).setName("a"));
+ function = new CsdlFunction().setName(operationName1.getName()).setParameters(function1Parameters);
+ functions.add(function);
+ List<CsdlParameter> function2Parameters = new ArrayList<CsdlParameter>();
+ function2Parameters.add(new CsdlParameter().setType(operationType1).setName("b"));
+ function = new CsdlFunction().setName(operationName1.getName()).setParameters(function2Parameters);
+ functions.add(function);
+ List<CsdlParameter> function3Parameters = new ArrayList<CsdlParameter>();
+ function3Parameters.add(new CsdlParameter().setName("a").setType(operationType1));
+ function3Parameters.add(new CsdlParameter().setName("b").setType(operationType1));
+ function = new CsdlFunction().setName(operationName1.getName()).setParameters(function3Parameters).setBound(true);
+ functions.add(function);
+ List<CsdlParameter> function4Parameters = new ArrayList<CsdlParameter>();
+ function4Parameters.add(new CsdlParameter().setName("a").setType(operationType2));
+ function4Parameters.add(new CsdlParameter().setName("b").setType(operationType2));
+ function = new CsdlFunction().setName(operationName1.getName()).setParameters(function4Parameters).setBound(true);
+ functions.add(function);
+ when(provider.getFunctions(operationName1)).thenReturn(functions);
+
+ List<CsdlFunction> badFunctions = new ArrayList<CsdlFunction>();
+ CsdlFunction badFunction = new CsdlFunction().setName(operationName1.getName()).setBound(true).setParameters(null);
+ badFunctions.add(badFunction);
+
+ when(provider.getFunctions(badOperationName)).thenReturn(badFunctions);
+
+ edm = new EdmProviderImpl(provider);
+ }
+
+ @Test
+ public void simpleActionGet() {
+ EdmAction action = edm.getUnboundAction(operationName1);
+ assertNotNull(action);
+ assertEquals(operationName1.getNamespace(), action.getNamespace());
+ assertEquals(operationName1.getName(), action.getName());
+
+ assertNull(edm.getUnboundAction(wrongOperationName));
+ }
+
+ @Test
+ public void boundActionOverloading() {
+ EdmAction action = edm.getBoundAction(operationName1, operationType1, false);
+ assertNotNull(action);
+ assertEquals(operationName1.getNamespace(), action.getNamespace());
+ assertEquals(operationName1.getName(), action.getName());
+ assertTrue(action == edm.getBoundAction(operationName1, operationType1, false));
+
+ EdmAction action2 = edm.getBoundAction(operationName1, operationType1, true);
+ assertNotNull(action2);
+ assertEquals(operationName1.getNamespace(), action2.getNamespace());
+ assertEquals(operationName1.getName(), action2.getName());
+ assertTrue(action2 == edm.getBoundAction(operationName1, operationType1, true));
+
+ assertNotSame(action, action2);
+ }
+
+ @Test
+ public void simpleFunctionGet() {
+ EdmFunction function = edm.getUnboundFunction(operationName1, null);
+ assertNotNull(function);
+ assertEquals(operationName1.getNamespace(), function.getNamespace());
+ assertEquals(operationName1.getName(), function.getName());
+
+ EdmFunction function2 = edm.getUnboundFunction(operationName1, new ArrayList<String>());
+ assertNotNull(function2);
+ assertEquals(operationName1.getNamespace(), function2.getNamespace());
+ assertEquals(operationName1.getName(), function2.getName());
+
+ assertEquals(function, function2);
+
+ assertNull(edm.getUnboundFunction(wrongOperationName, new ArrayList<String>()));
+ }
+
+ @Test
+ public void functionOverloading() {
+ ArrayList<String> parameter1Names = new ArrayList<String>();
+ parameter1Names.add("a");
+ List<String> parameter2Names = new ArrayList<String>();
+ parameter2Names.add("b");
+ EdmFunction function = edm.getUnboundFunction(operationName1, new ArrayList<String>());
+ assertNotNull(function);
+ assertFalse(function.isBound());
+
+ EdmFunction function1 = edm.getUnboundFunction(operationName1, parameter1Names);
+ assertNotNull(function1);
+ assertFalse(function1.isBound());
+
+ assertFalse(function == function1);
+ assertNotSame(function, function1);
+
+ EdmFunction function2 = edm.getUnboundFunction(operationName1, parameter2Names);
+ assertNotNull(function2);
+ assertFalse(function2.isBound());
+
+ assertFalse(function1 == function2);
+ assertNotSame(function1, function2);
+
+ EdmFunction function3 = edm.getBoundFunction(operationName1, operationType1, false, parameter2Names);
+ assertNotNull(function3);
+ assertTrue(function3.isBound());
+ EdmFunction function4 = edm.getBoundFunction(operationName1, operationType2, false, parameter2Names);
+ assertNotNull(function4);
+ assertTrue(function4.isBound());
+
+ assertFalse(function3 == function4);
+ assertNotSame(function3, function4);
+
+ assertFalse(function1 == function3);
+ assertFalse(function1 == function4);
+ assertFalse(function2 == function3);
+ assertFalse(function2 == function4);
+ assertNotSame(function1, function3);
+ assertNotSame(function1, function4);
+ assertNotSame(function2, function3);
+ assertNotSame(function2, function4);
+ }
+
+ @Test(expected = EdmException.class)
+ public void noParametersAtBoundFunctionReslutsInException() {
+ edm.getBoundFunction(badOperationName, operationType1, true, null);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmProviderImplTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmProviderImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmProviderImplTest.java
new file mode 100644
index 0000000..c094b1d
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmProviderImplTest.java
@@ -0,0 +1,225 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.olingo.commons.api.ex.ODataException;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmComplexType;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.CsdlAliasInfo;
+import org.apache.olingo.commons.api.edm.provider.CsdlComplexType;
+import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
+import org.apache.olingo.commons.api.edm.provider.CsdlEntityContainerInfo;
+import org.apache.olingo.commons.api.edm.provider.CsdlEntityType;
+import org.apache.olingo.commons.api.edm.provider.CsdlEnumType;
+import org.apache.olingo.commons.api.edm.provider.CsdlPropertyRef;
+import org.apache.olingo.commons.api.edm.provider.CsdlTypeDefinition;
+import org.apache.olingo.commons.core.edm.EdmProviderImpl;
+import org.junit.Before;
+import org.junit.Test;
+
+public class EdmProviderImplTest {
+
+ private Edm edm;
+ private final FullQualifiedName FQN = new FullQualifiedName("testNamespace", "testName");
+ private final FullQualifiedName WRONG_FQN = new FullQualifiedName("wrong", "wrong");
+
+ @Before
+ public void setup() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ CsdlEntityContainerInfo containerInfo = new CsdlEntityContainerInfo().setContainerName(FQN);
+ when(provider.getEntityContainerInfo(FQN)).thenReturn(containerInfo);
+ when(provider.getEntityContainerInfo(null)).thenReturn(containerInfo);
+
+ CsdlEnumType enumType = new CsdlEnumType().setName(FQN.getName());
+ when(provider.getEnumType(FQN)).thenReturn(enumType);
+
+ CsdlTypeDefinition typeDefinition =
+ new CsdlTypeDefinition().setName(FQN.getName()).setUnderlyingType(new FullQualifiedName("Edm", "String"));
+ when(provider.getTypeDefinition(FQN)).thenReturn(typeDefinition);
+
+ CsdlEntityType entityType = new CsdlEntityType().setName(FQN.getName()).setKey(new ArrayList<CsdlPropertyRef>());
+ when(provider.getEntityType(FQN)).thenReturn(entityType);
+
+ CsdlComplexType complexType = new CsdlComplexType().setName(FQN.getName());
+ when(provider.getComplexType(FQN)).thenReturn(complexType);
+
+ List<CsdlAliasInfo> aliasInfos = new ArrayList<CsdlAliasInfo>();
+ aliasInfos.add(new CsdlAliasInfo().setAlias("alias").setNamespace("namespace"));
+ when(provider.getAliasInfos()).thenReturn(aliasInfos);
+
+ edm = new EdmProviderImpl(provider);
+ }
+
+ @Test
+ public void nothingSpecifiedMustNotResultInExceptions() throws Exception {
+ CsdlEdmProvider localProvider = mock(CsdlEdmProvider.class);
+ when(localProvider.getActions(FQN)).thenReturn(null);
+ when(localProvider.getFunctions(FQN)).thenReturn(null);
+ Edm localEdm = new EdmProviderImpl(localProvider);
+ localEdm.getUnboundAction(FQN);
+ localEdm.getUnboundFunction(FQN, null);
+ localEdm.getBoundAction(FQN, FQN, true);
+ localEdm.getBoundFunction(FQN, FQN, true, null);
+ localEdm.getComplexType(FQN);
+ localEdm.getEntityContainer(FQN);
+ localEdm.getEntityType(FQN);
+ localEdm.getEnumType(FQN);
+ localEdm.getTypeDefinition(FQN);
+ }
+
+ @Test
+ public void convertExceptionsTest() throws Exception {
+ CsdlEdmProvider localProvider = mock(CsdlEdmProvider.class);
+ FullQualifiedName fqn = new FullQualifiedName("namespace", "name");
+ when(localProvider.getEntityContainerInfo(fqn)).thenThrow(new ODataException("msg"));
+ when(localProvider.getEnumType(fqn)).thenThrow(new ODataException("msg"));
+ when(localProvider.getTypeDefinition(fqn)).thenThrow(new ODataException("msg"));
+ when(localProvider.getEntityType(fqn)).thenThrow(new ODataException("msg"));
+ when(localProvider.getComplexType(fqn)).thenThrow(new ODataException("msg"));
+ when(localProvider.getActions(fqn)).thenThrow(new ODataException("msg"));
+ when(localProvider.getFunctions(fqn)).thenThrow(new ODataException("msg"));
+
+ Edm localEdm = new EdmProviderImpl(localProvider);
+
+ callMethodAndExpectEdmException(localEdm, "getEntityContainer");
+ callMethodAndExpectEdmException(localEdm, "getEnumType");
+ callMethodAndExpectEdmException(localEdm, "getTypeDefinition");
+ callMethodAndExpectEdmException(localEdm, "getEntityType");
+ callMethodAndExpectEdmException(localEdm, "getComplexType");
+
+ // seperate because of signature
+ try {
+ localEdm.getUnboundAction(fqn);
+ } catch (EdmException e) {
+ assertEquals("org.apache.olingo.commons.api.ex.ODataException: msg", e.getMessage());
+ }
+
+ try {
+ localEdm.getUnboundFunction(fqn, null);
+ } catch (EdmException e) {
+ assertEquals("org.apache.olingo.commons.api.ex.ODataException: msg", e.getMessage());
+ }
+ try {
+ localEdm.getBoundAction(fqn, fqn, true);
+ } catch (EdmException e) {
+ assertEquals("org.apache.olingo.commons.api.ex.ODataException: msg", e.getMessage());
+ }
+
+ try {
+ localEdm.getBoundFunction(fqn, fqn, true, null);
+ } catch (EdmException e) {
+ assertEquals("org.apache.olingo.commons.api.ex.ODataException: msg", e.getMessage());
+ }
+ }
+
+ private void callMethodAndExpectEdmException(final Edm localEdm, final String methodName) throws Exception {
+ Method method = localEdm.getClass().getMethod(methodName, FullQualifiedName.class);
+ try {
+ method.invoke(localEdm, new FullQualifiedName("namespace", "name"));
+ } catch (InvocationTargetException e) {
+ Throwable cause = e.getCause();
+ if (cause instanceof EdmException) {
+ return;
+ }
+ }
+ fail("EdmException expected for method: " + methodName);
+ }
+
+ @Test(expected = EdmException.class)
+ public void convertExceptionsAliasTest() throws Exception {
+ CsdlEdmProvider localProvider = mock(CsdlEdmProvider.class);
+ when(localProvider.getAliasInfos()).thenThrow(new ODataException("msg"));
+
+ Edm localEdm = new EdmProviderImpl(localProvider);
+ localEdm.getEntityContainer(null);
+ }
+
+ @Test
+ public void getEntityContainer() {
+ EdmEntityContainer entityContainer = edm.getEntityContainer(FQN);
+ assertNotNull(entityContainer);
+ assertEquals(FQN.getNamespace(), entityContainer.getNamespace());
+ assertEquals(FQN.getName(), entityContainer.getName());
+
+ entityContainer = edm.getEntityContainer(null);
+ assertNotNull(entityContainer);
+ assertEquals(FQN.getNamespace(), entityContainer.getNamespace());
+ assertEquals(FQN.getName(), entityContainer.getName());
+
+ assertNull(edm.getEntityContainer(WRONG_FQN));
+ }
+
+ @Test
+ public void getEnumType() {
+ EdmEnumType enumType = edm.getEnumType(FQN);
+ assertNotNull(enumType);
+ assertEquals(FQN.getNamespace(), enumType.getNamespace());
+ assertEquals(FQN.getName(), enumType.getName());
+
+ assertNull(edm.getEnumType(WRONG_FQN));
+ }
+
+ @Test
+ public void getTypeDefinition() {
+ EdmTypeDefinition typeDefinition = edm.getTypeDefinition(FQN);
+ assertNotNull(typeDefinition);
+ assertEquals(FQN.getNamespace(), typeDefinition.getNamespace());
+ assertEquals(FQN.getName(), typeDefinition.getName());
+
+ assertNull(edm.getTypeDefinition(WRONG_FQN));
+ }
+
+ @Test
+ public void getEntityType() {
+ EdmEntityType entityType = edm.getEntityType(FQN);
+ assertNotNull(entityType);
+ assertEquals(FQN.getNamespace(), entityType.getNamespace());
+ assertEquals(FQN.getName(), entityType.getName());
+
+ assertNull(edm.getEntityType(WRONG_FQN));
+ }
+
+ @Test
+ public void getComplexType() {
+ EdmComplexType complexType = edm.getComplexType(FQN);
+ assertNotNull(complexType);
+ assertEquals(FQN.getNamespace(), complexType.getNamespace());
+ assertEquals(FQN.getName(), complexType.getName());
+
+ assertNull(edm.getComplexType(WRONG_FQN));
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmReturnTypeImplTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmReturnTypeImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmReturnTypeImplTest.java
new file mode 100644
index 0000000..ac36635
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmReturnTypeImplTest.java
@@ -0,0 +1,134 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.olingo.commons.api.edm.EdmComplexType;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.EdmReturnType;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.CsdlReturnType;
+import org.apache.olingo.commons.core.edm.EdmProviderImpl;
+import org.apache.olingo.commons.core.edm.EdmReturnTypeImpl;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
+import org.junit.Test;
+
+public class EdmReturnTypeImplTest {
+
+ @Test
+ public void primitiveReturnType() {
+ CsdlReturnType providerType = new CsdlReturnType().setType(new FullQualifiedName("Edm", "String"));
+
+ EdmReturnType typeImpl = new EdmReturnTypeImpl(mock(EdmProviderImpl.class), providerType);
+
+ assertEquals(EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.String), typeImpl.getType());
+ assertFalse(typeImpl.isCollection());
+ assertTrue(typeImpl.isNullable());
+
+ assertNull(typeImpl.getPrecision());
+ assertNull(typeImpl.getMaxLength());
+ assertNull(typeImpl.getScale());
+ }
+
+ @Test
+ public void primitiveCollectionReturnType() {
+ CsdlReturnType providerType = new CsdlReturnType().setType(
+ new FullQualifiedName("Edm", "String")).setCollection(true);
+
+ EdmReturnType typeImpl = new EdmReturnTypeImpl(mock(EdmProviderImpl.class), providerType);
+
+ assertEquals(EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.String), typeImpl.getType());
+ assertTrue(typeImpl.isCollection());
+ }
+
+ @Test(expected = EdmException.class)
+ public void invalidPrimitiveType() {
+ CsdlReturnType providerType = new CsdlReturnType().setType(
+ new FullQualifiedName("Edm", "wrong")).setCollection(true);
+ EdmReturnType typeImpl = new EdmReturnTypeImpl(mock(EdmProviderImpl.class), providerType);
+ typeImpl.getType();
+ }
+
+ @Test
+ public void complexType() {
+ EdmProviderImpl mock = mock(EdmProviderImpl.class);
+ FullQualifiedName baseType = new FullQualifiedName("namespace", "type");
+ EdmComplexType edmType = mock(EdmComplexType.class);
+ when(mock.getComplexType(baseType)).thenReturn(edmType);
+ CsdlReturnType providerType = new CsdlReturnType().setType(baseType);
+ EdmReturnType typeImpl = new EdmReturnTypeImpl(mock, providerType);
+ EdmType returnedType = typeImpl.getType();
+ assertEquals(edmType, returnedType);
+ }
+
+ @Test
+ public void entityType() {
+ EdmProviderImpl mock = mock(EdmProviderImpl.class);
+ FullQualifiedName baseType = new FullQualifiedName("namespace", "type");
+ EdmEntityType edmType = mock(EdmEntityType.class);
+ when(mock.getEntityType(baseType)).thenReturn(edmType);
+ CsdlReturnType providerType = new CsdlReturnType().setType(baseType);
+ EdmReturnType typeImpl = new EdmReturnTypeImpl(mock, providerType);
+ EdmType returnedType = typeImpl.getType();
+ assertEquals(edmType, returnedType);
+ }
+
+ @Test
+ public void enumType() {
+ EdmProviderImpl mock = mock(EdmProviderImpl.class);
+ FullQualifiedName baseType = new FullQualifiedName("namespace", "type");
+ EdmEnumType edmType = mock(EdmEnumType.class);
+ when(mock.getEnumType(baseType)).thenReturn(edmType);
+ CsdlReturnType providerType = new CsdlReturnType().setType(baseType);
+ EdmReturnType typeImpl = new EdmReturnTypeImpl(mock, providerType);
+ EdmType returnedType = typeImpl.getType();
+ assertEquals(edmType, returnedType);
+ }
+
+ @Test
+ public void typeDefinition() {
+ EdmProviderImpl mock = mock(EdmProviderImpl.class);
+ FullQualifiedName baseType = new FullQualifiedName("namespace", "type");
+ EdmTypeDefinition edmType = mock(EdmTypeDefinition.class);
+ when(mock.getTypeDefinition(baseType)).thenReturn(edmType);
+ CsdlReturnType providerType = new CsdlReturnType().setType(baseType);
+ EdmReturnType typeImpl = new EdmReturnTypeImpl(mock, providerType);
+ EdmType returnedType = typeImpl.getType();
+ assertEquals(edmType, returnedType);
+ }
+
+ @Test(expected = EdmException.class)
+ public void invalidType() {
+ CsdlReturnType providerType = new CsdlReturnType().setType(new FullQualifiedName("wrong", "wrong"));
+ EdmReturnType typeImpl = new EdmReturnTypeImpl(mock(EdmProviderImpl.class), providerType);
+ typeImpl.getType();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmSchemaImplTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmSchemaImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmSchemaImplTest.java
new file mode 100644
index 0000000..fd344c5
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmSchemaImplTest.java
@@ -0,0 +1,363 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.olingo.commons.api.ex.ODataException;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmAction;
+import org.apache.olingo.commons.api.edm.EdmActionImport;
+import org.apache.olingo.commons.api.edm.EdmComplexType;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.EdmFunction;
+import org.apache.olingo.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.EdmSchema;
+import org.apache.olingo.commons.api.edm.EdmSingleton;
+import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.CsdlAbstractEdmProvider;
+import org.apache.olingo.commons.api.edm.provider.CsdlAction;
+import org.apache.olingo.commons.api.edm.provider.CsdlActionImport;
+import org.apache.olingo.commons.api.edm.provider.CsdlAliasInfo;
+import org.apache.olingo.commons.api.edm.provider.CsdlComplexType;
+import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
+import org.apache.olingo.commons.api.edm.provider.CsdlEntityContainer;
+import org.apache.olingo.commons.api.edm.provider.CsdlEntityContainerInfo;
+import org.apache.olingo.commons.api.edm.provider.CsdlEntitySet;
+import org.apache.olingo.commons.api.edm.provider.CsdlEntityType;
+import org.apache.olingo.commons.api.edm.provider.CsdlEnumType;
+import org.apache.olingo.commons.api.edm.provider.CsdlFunction;
+import org.apache.olingo.commons.api.edm.provider.CsdlFunctionImport;
+import org.apache.olingo.commons.api.edm.provider.CsdlSchema;
+import org.apache.olingo.commons.api.edm.provider.CsdlSingleton;
+import org.apache.olingo.commons.api.edm.provider.CsdlTerm;
+import org.apache.olingo.commons.api.edm.provider.CsdlTypeDefinition;
+import org.apache.olingo.commons.core.edm.EdmProviderImpl;
+import org.junit.Before;
+import org.junit.Test;
+
+public class EdmSchemaImplTest {
+
+ private EdmSchema schema;
+ private Edm edm;
+
+ @Before
+ public void before() {
+ CsdlEdmProvider provider = new LocalProvider();
+ edm = new EdmProviderImpl(provider);
+ schema = edm.getSchemas().get(0);
+
+ }
+
+ @Test
+ public void initialSchemaTest() {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ edm = new EdmProviderImpl(provider);
+ edm.getSchemas();
+ }
+
+ @Test
+ public void emptySchemaTest() throws Exception {
+ ArrayList<CsdlSchema> schemas = new ArrayList<CsdlSchema>();
+ CsdlSchema providerSchema = new CsdlSchema();
+ schemas.add(providerSchema);
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ when(provider.getSchemas()).thenReturn(schemas);
+ edm = new EdmProviderImpl(provider);
+ edm.getSchemas();
+ }
+
+ @Test
+ public void basicGetters() {
+ assertEquals("org.namespace", schema.getNamespace());
+ assertEquals("alias", schema.getAlias());
+ }
+
+ @Test
+ public void getTypeDefinitions() {
+ List<EdmTypeDefinition> typeDefinitions = schema.getTypeDefinitions();
+ assertNotNull(typeDefinitions);
+ assertEquals(2, typeDefinitions.size());
+
+ for (EdmTypeDefinition def : typeDefinitions) {
+ assertTrue(def == edm.getTypeDefinition(new FullQualifiedName("org.namespace", def.getName())));
+ }
+ }
+
+ @Test
+ public void getEnumTypes() {
+ List<EdmEnumType> enumTypes = schema.getEnumTypes();
+ assertNotNull(enumTypes);
+ assertEquals(2, enumTypes.size());
+
+ for (EdmEnumType enumType : enumTypes) {
+ assertTrue(enumType == edm.getEnumType(new FullQualifiedName("org.namespace", enumType.getName())));
+ }
+ }
+
+ @Test
+ public void getEntityTypes() {
+ List<EdmEntityType> entityTypes = schema.getEntityTypes();
+ assertNotNull(entityTypes);
+ assertEquals(2, entityTypes.size());
+
+ for (EdmEntityType entityType : entityTypes) {
+ assertTrue(entityType == edm.getEntityType(new FullQualifiedName("org.namespace", entityType.getName())));
+ }
+ }
+
+ @Test
+ public void getComplexTypes() {
+ List<EdmComplexType> complexTypes = schema.getComplexTypes();
+ assertNotNull(complexTypes);
+ assertEquals(2, complexTypes.size());
+
+ for (EdmComplexType complexType : complexTypes) {
+ assertTrue(complexType == edm.getComplexType(new FullQualifiedName("org.namespace", complexType.getName())));
+ }
+ }
+
+ @Test
+ public void getActions() {
+ List<EdmAction> actions = schema.getActions();
+ assertNotNull(actions);
+ assertEquals(2, actions.size());
+
+ for (EdmAction action : actions) {
+ assertTrue(action == edm.getUnboundAction(new FullQualifiedName("org.namespace", action.getName())));
+ }
+ }
+
+ @Test
+ public void getFunctions() {
+ List<EdmFunction> functions = schema.getFunctions();
+ assertNotNull(functions);
+ assertEquals(2, functions.size());
+
+ for (EdmFunction function : functions) {
+ FullQualifiedName functionName = new FullQualifiedName("org.namespace", function.getName());
+ assertTrue(function == edm.getUnboundFunction(functionName, null));
+ }
+ }
+
+ @Test
+ public void getContainer() {
+ EdmEntityContainer container = schema.getEntityContainer();
+ assertNotNull(container);
+
+ List<EdmEntitySet> entitySets = container.getEntitySets();
+ assertNotNull(entitySets);
+ assertEquals(2, entitySets.size());
+ for (EdmEntitySet obj : entitySets) {
+ assertNotNull(obj.getEntityType());
+ }
+
+ List<EdmSingleton> singletons = container.getSingletons();
+ assertNotNull(singletons);
+ assertEquals(2, singletons.size());
+ for (EdmSingleton obj : singletons) {
+ assertNotNull(obj.getEntityType());
+ }
+
+ List<EdmActionImport> actionImports = container.getActionImports();
+ assertNotNull(actionImports);
+ assertEquals(2, actionImports.size());
+ for (EdmActionImport obj : actionImports) {
+ assertNotNull(obj.getUnboundAction());
+ }
+
+ List<EdmFunctionImport> functionImports = container.getFunctionImports();
+ assertNotNull(functionImports);
+ assertEquals(2, functionImports.size());
+ for (EdmFunctionImport obj : functionImports) {
+ assertNotNull(obj.getFunctionFqn());
+ }
+
+ assertTrue(container == edm.getEntityContainer(new FullQualifiedName(schema.getNamespace(), container.getName())));
+ assertTrue(container == edm.getEntityContainer(null));
+ }
+
+ private class LocalProvider extends CsdlAbstractEdmProvider {
+
+ private static final String ALIAS = "alias";
+ private static final String NAMESPACE = "org.namespace";
+
+ @Override
+ public CsdlEnumType getEnumType(final FullQualifiedName enumTypeName) throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public CsdlTypeDefinition getTypeDefinition(final FullQualifiedName typeDefinitionName) throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public CsdlEntityType getEntityType(final FullQualifiedName entityTypeName) throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public CsdlComplexType getComplexType(final FullQualifiedName complexTypeName) throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public List<CsdlAction> getActions(final FullQualifiedName actionName) throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public List<CsdlFunction> getFunctions(final FullQualifiedName functionName) throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public CsdlTerm getTerm(final FullQualifiedName termName) throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public CsdlEntitySet getEntitySet(final FullQualifiedName entityContainer, final String entitySetName)
+ throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public CsdlSingleton getSingleton(final FullQualifiedName entityContainer, final String singletonName)
+ throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public CsdlActionImport getActionImport(final FullQualifiedName entityContainer, final String actionImportName)
+ throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public CsdlFunctionImport getFunctionImport(final FullQualifiedName entityContainer,
+ final String functionImportName)
+ throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public CsdlEntityContainerInfo getEntityContainerInfo(final FullQualifiedName entityContainerName)
+ throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public List<CsdlAliasInfo> getAliasInfos() throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+
+ @Override
+ public List<CsdlSchema> getSchemas() throws ODataException {
+ CsdlSchema providerSchema = new CsdlSchema();
+ providerSchema.setNamespace(NAMESPACE);
+ providerSchema.setAlias(ALIAS);
+ CsdlEntityContainer container = new CsdlEntityContainer().setName("container");
+
+ List<CsdlEntitySet> entitySets = new ArrayList<CsdlEntitySet>();
+ entitySets.add(new CsdlEntitySet().setName("entitySetName")
+ .setType(new FullQualifiedName(NAMESPACE, "entityType1")));
+ entitySets
+ .add(new CsdlEntitySet().setName("entitySetName2").setType(new FullQualifiedName(NAMESPACE, "entityType2")));
+ container.setEntitySets(entitySets);
+
+ List<CsdlSingleton> singletons = new ArrayList<CsdlSingleton>();
+ singletons.add(new CsdlSingleton().setName("singletonName")
+ .setType(new FullQualifiedName(NAMESPACE, "entityType1")));
+ singletons
+ .add(new CsdlSingleton().setName("singletonName2").setType(new FullQualifiedName(NAMESPACE, "entityType2")));
+ container.setSingletons(singletons);
+
+ List<CsdlActionImport> actionImports = new ArrayList<CsdlActionImport>();
+ actionImports.add(new CsdlActionImport().setName("actionImportName").setAction(
+ new FullQualifiedName(NAMESPACE, "action1")));
+ actionImports.add(new CsdlActionImport().setName("actionImportName2").setAction(
+ new FullQualifiedName(NAMESPACE, "action2")));
+ container.setActionImports(actionImports);
+
+ List<CsdlFunctionImport> functionImports = new ArrayList<CsdlFunctionImport>();
+ functionImports.add(new CsdlFunctionImport().setName("functionImportName").setFunction(
+ new FullQualifiedName(NAMESPACE, "function1")));
+ functionImports.add(new CsdlFunctionImport().setName("functionImportName2").setFunction(
+ new FullQualifiedName(NAMESPACE, "function2")));
+ container.setFunctionImports(functionImports);
+ providerSchema.setEntityContainer(container);
+
+ List<CsdlTypeDefinition> typeDefinitions = new ArrayList<CsdlTypeDefinition>();
+ typeDefinitions.add(new CsdlTypeDefinition().setName("typeDefinition1").setUnderlyingType(
+ EdmPrimitiveTypeKind.String.getFullQualifiedName()));
+ typeDefinitions.add(new CsdlTypeDefinition().setName("typeDefinition2").setUnderlyingType(
+ EdmPrimitiveTypeKind.String.getFullQualifiedName()));
+ providerSchema.setTypeDefinitions(typeDefinitions);
+
+ List<CsdlEnumType> enumTypes = new ArrayList<CsdlEnumType>();
+ enumTypes.add(new CsdlEnumType().setName("enumType1"));
+ enumTypes.add(new CsdlEnumType().setName("enumType2"));
+ providerSchema.setEnumTypes(enumTypes);
+
+ List<CsdlEntityType> entityTypes = new ArrayList<CsdlEntityType>();
+ entityTypes.add(new CsdlEntityType().setName("entityType1"));
+ entityTypes.add(new CsdlEntityType().setName("entityType2")
+ .setBaseType(new FullQualifiedName(NAMESPACE, "entityType1")));
+ providerSchema.setEntityTypes(entityTypes);
+
+ List<CsdlComplexType> complexTypes = new ArrayList<CsdlComplexType>();
+ complexTypes.add(new CsdlComplexType().setName("complexType1"));
+ complexTypes.add(new CsdlComplexType().setName("complexType2").setBaseType(
+ new FullQualifiedName(NAMESPACE, "complexType1")));
+ providerSchema.setComplexTypes(complexTypes);
+
+ List<CsdlAction> actions = new ArrayList<CsdlAction>();
+ actions.add(new CsdlAction().setName("action1"));
+ actions.add(new CsdlAction().setName("action2"));
+ providerSchema.setActions(actions);
+
+ List<CsdlFunction> functions = new ArrayList<CsdlFunction>();
+ functions.add(new CsdlFunction().setName("function1"));
+ functions.add(new CsdlFunction().setName("function2"));
+ providerSchema.setFunctions(functions);
+ ArrayList<CsdlSchema> schemas = new ArrayList<CsdlSchema>();
+ schemas.add(providerSchema);
+ return schemas;
+ }
+
+ @Override
+ public CsdlEntityContainer getEntityContainer() throws ODataException {
+ throw new RuntimeException("Provider must not be called in the schema case");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9c1981c4/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmSingletonImplTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmSingletonImplTest.java b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmSingletonImplTest.java
new file mode 100644
index 0000000..d1aeb20
--- /dev/null
+++ b/lib/commons-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmSingletonImplTest.java
@@ -0,0 +1,131 @@
+/*
+ * 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.olingo.server.core.edm.provider;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
+
+import org.apache.olingo.commons.api.edm.EdmBindingTarget;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmSingleton;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
+import org.apache.olingo.commons.api.edm.provider.CsdlEntityContainerInfo;
+import org.apache.olingo.commons.api.edm.provider.CsdlEntityType;
+import org.apache.olingo.commons.api.edm.provider.CsdlNavigationPropertyBinding;
+import org.apache.olingo.commons.api.edm.provider.CsdlPropertyRef;
+import org.apache.olingo.commons.api.edm.provider.CsdlSingleton;
+import org.apache.olingo.commons.core.edm.EdmEntityContainerImpl;
+import org.apache.olingo.commons.core.edm.EdmProviderImpl;
+import org.apache.olingo.commons.core.edm.EdmSingletonImpl;
+import org.junit.Test;
+
+public class EdmSingletonImplTest {
+
+ @Test
+ public void singleton() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+
+ final FullQualifiedName typeName = new FullQualifiedName("ns", "entityType");
+ final CsdlEntityType entityTypeProvider = new CsdlEntityType()
+ .setName(typeName.getName())
+ .setKey(Arrays.asList(new CsdlPropertyRef().setName("Id")));
+ when(provider.getEntityType(typeName)).thenReturn(entityTypeProvider);
+
+ final FullQualifiedName containerName = new FullQualifiedName("ns", "container");
+ final CsdlEntityContainerInfo containerInfo = new CsdlEntityContainerInfo().setContainerName(containerName);
+ when(provider.getEntityContainerInfo(containerName)).thenReturn(containerInfo);
+ final EdmEntityContainer entityContainer = new EdmEntityContainerImpl(edm, provider, containerInfo);
+
+ final String singletonName = "singleton";
+ final CsdlSingleton singletonProvider =
+ new CsdlSingleton()
+ .setName(singletonName)
+ .setType(typeName)
+ .setNavigationPropertyBindings(
+ Arrays.asList(
+ new CsdlNavigationPropertyBinding().setPath("path").setTarget(
+ containerName.getFullQualifiedNameAsString() + "/" + singletonName)));
+ when(provider.getSingleton(containerName, singletonName)).thenReturn(singletonProvider);
+
+ final EdmSingleton singleton = new EdmSingletonImpl(edm, entityContainer, singletonProvider);
+ assertEquals(singletonName, entityContainer.getSingleton(singletonName).getName());
+ assertEquals(singletonName, singleton.getName());
+ final EdmEntityType entityType = singleton.getEntityType();
+ assertEquals(typeName.getNamespace(), entityType.getNamespace());
+ assertEquals(typeName.getName(), entityType.getName());
+ assertEquals(entityContainer, singleton.getEntityContainer());
+ assertNull(singleton.getRelatedBindingTarget(null));
+ final EdmBindingTarget target = singleton.getRelatedBindingTarget("path");
+ assertEquals(singletonName, target.getName());
+ }
+
+ @Test(expected = EdmException.class)
+ public void wrongTarget() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+
+ final FullQualifiedName containerName = new FullQualifiedName("ns", "container");
+ final CsdlEntityContainerInfo containerInfo = new CsdlEntityContainerInfo().setContainerName(containerName);
+ when(provider.getEntityContainerInfo(containerName)).thenReturn(containerInfo);
+
+ final String singletonName = "singleton";
+ final CsdlSingleton singletonProvider = new CsdlSingleton()
+ .setNavigationPropertyBindings(Arrays.asList(
+ new CsdlNavigationPropertyBinding().setPath("path")
+ .setTarget(containerName.getFullQualifiedNameAsString() + "/wrong")));
+ when(provider.getSingleton(containerName, singletonName)).thenReturn(singletonProvider);
+
+ final EdmSingleton singleton = new EdmSingletonImpl(edm, null, singletonProvider);
+ singleton.getRelatedBindingTarget("path");
+ }
+
+ @Test(expected = EdmException.class)
+ public void wrongTargetContainer() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+
+ final FullQualifiedName containerName = new FullQualifiedName("ns", "container");
+ final String singletonName = "singleton";
+ final CsdlSingleton singletonProvider = new CsdlSingleton()
+ .setNavigationPropertyBindings(Arrays.asList(
+ new CsdlNavigationPropertyBinding().setPath("path").setTarget("ns.wrongContainer/" + singletonName)));
+ when(provider.getSingleton(containerName, singletonName)).thenReturn(singletonProvider);
+
+ final EdmSingleton singleton = new EdmSingletonImpl(edm, null, singletonProvider);
+ singleton.getRelatedBindingTarget("path");
+ }
+
+ @Test(expected = EdmException.class)
+ public void nonExsistingEntityType() throws Exception {
+ CsdlEdmProvider provider = mock(CsdlEdmProvider.class);
+ EdmProviderImpl edm = new EdmProviderImpl(provider);
+
+ CsdlSingleton singleton = new CsdlSingleton().setName("name");
+ final EdmSingleton edmSingleton = new EdmSingletonImpl(edm, null, singleton);
+ edmSingleton.getEntityType();
+ }
+}