Repository: olingo-odata4
Updated Branches:
  refs/heads/master 5255c336e -> cc0a6a51a


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cc0a6a51/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
index 82f49aa..cf29d5f 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
@@ -18,6 +18,9 @@
  */
 package org.apache.olingo.server.core.serializer.json;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
@@ -44,7 +47,17 @@ 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.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.geo.Point;
+import org.apache.olingo.commons.api.edm.geo.Polygon;
+import org.apache.olingo.commons.api.edm.geo.SRID;
+import org.apache.olingo.commons.api.edm.geo.Geospatial.Dimension;
+import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;
+import org.apache.olingo.commons.api.edm.geo.LineString;
+import org.apache.olingo.commons.api.edm.geo.MultiLineString;
+import org.apache.olingo.commons.api.edm.geo.MultiPoint;
+import org.apache.olingo.commons.api.edm.geo.MultiPolygon;
 import org.apache.olingo.commons.api.edmx.EdmxReference;
 import org.apache.olingo.commons.api.format.ContentType;
 import org.apache.olingo.server.api.OData;
@@ -647,13 +660,13 @@ public class ODataJsonSerializerTest {
     final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESTwoPrim");
     final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
     InputStream result = serializer
-          .entity(metadata, edmEntitySet.getEntityType(), entity, 
EntitySerializerOptions.with()
-                   
.contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build())
-                        .build()).getContent();
+        .entity(metadata, edmEntitySet.getEntityType(), entity, 
EntitySerializerOptions.with()
+            
.contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build())
+            .build()).getContent();
     final String resultString = IOUtils.toString(result);
-    final String expectedResult = 
"{\"@odata.context\":\"$metadata#ESTwoPrim/$entity\"," +
-            "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," +
-            "\"PropertyInt16\":32766,\"PropertyString\":\"Test String1\"}";
+    final String expectedResult = 
"{\"@odata.context\":\"$metadata#ESTwoPrim/$entity\","
+        + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+        + "\"PropertyInt16\":32766,\"PropertyString\":\"Test String1\"}";
         Assert.assertEquals(expectedResult, resultString);
   }
 
@@ -673,67 +686,67 @@ public class ODataJsonSerializerTest {
         + 
"\"value\":[{\"@odata.type\":\"#olingo.odata.test1.ETTwoPrim\",\"@odata.id\":\"ESTwoPrim(32766)\","
         + "\"propertyin...@odata.type\":\"#Int16\",\"PropertyInt16\":32766,"
         + "\"PropertyString\":\"Test String1\","
-        +"\"#olingo.odata.test1.BAETTwoPrimRTString\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTString\","
-            
+"\"target\":\"ESTwoPrim(32766)/olingo.odata.test1.BAETTwoPrimRTString\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCollString\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollString\","
-            
+"\"target\":\"ESTwoPrim(32766)/olingo.odata.test1.BAETTwoPrimRTCollString\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCTAllPrim\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCTAllPrim\","
-            
+"\"target\":\"ESTwoPrim(32766)/olingo.odata.test1.BAETTwoPrimRTCTAllPrim\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\","
-            
+"\"target\":\"ESTwoPrim(32766)/olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\"}"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTString\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTString\","
+        + 
"\"target\":\"ESTwoPrim(32766)/olingo.odata.test1.BAETTwoPrimRTString\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCollString\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollString\","
+        + 
"\"target\":\"ESTwoPrim(32766)/olingo.odata.test1.BAETTwoPrimRTCollString\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCTAllPrim\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCTAllPrim\","
+        + 
"\"target\":\"ESTwoPrim(32766)/olingo.odata.test1.BAETTwoPrimRTCTAllPrim\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\","
+        + 
"\"target\":\"ESTwoPrim(32766)/olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\"}"
         + "},"
         + 
"{\"@odata.type\":\"#olingo.odata.test1.ETTwoPrim\",\"@odata.id\":\"ESTwoPrim(-365)\","
         + "\"propertyin...@odata.type\":\"#Int16\",\"PropertyInt16\":-365,"
         + "\"PropertyString\":\"Test String2\","
         + 
"\"NavPropertyETAllPrimMany@odata.navigationLink\":\"ESTwoPrim(-365)/NavPropertyETAllPrimMany\","
-        +"\"#olingo.odata.test1.BAETTwoPrimRTString\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTString\","
-            
+"\"target\":\"ESTwoPrim(-365)/olingo.odata.test1.BAETTwoPrimRTString\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCollString\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollString\","
-            
+"\"target\":\"ESTwoPrim(-365)/olingo.odata.test1.BAETTwoPrimRTCollString\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCTAllPrim\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCTAllPrim\","
-            
+"\"target\":\"ESTwoPrim(-365)/olingo.odata.test1.BAETTwoPrimRTCTAllPrim\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\","
-            
+"\"target\":\"ESTwoPrim(-365)/olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\"}},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTString\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTString\","
+        + 
"\"target\":\"ESTwoPrim(-365)/olingo.odata.test1.BAETTwoPrimRTString\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCollString\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollString\","
+        + 
"\"target\":\"ESTwoPrim(-365)/olingo.odata.test1.BAETTwoPrimRTCollString\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCTAllPrim\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCTAllPrim\","
+        + 
"\"target\":\"ESTwoPrim(-365)/olingo.odata.test1.BAETTwoPrimRTCTAllPrim\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\","
+        + 
"\"target\":\"ESTwoPrim(-365)/olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\"}},"
         + 
"{\"@odata.type\":\"#olingo.odata.test1.ETTwoPrim\",\"@odata.id\":\"ESTwoPrim(-32766)\","
         + "\"propertyin...@odata.type\":\"#Int16\",\"PropertyInt16\":-32766,"
         + "\"PropertyString\":null,"
-            +"\"#olingo.odata.test1.BAETTwoPrimRTString\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTString\","
-            
+"\"target\":\"ESTwoPrim(-32766)/olingo.odata.test1.BAETTwoPrimRTString\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCollString\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollString\","
-            
+"\"target\":\"ESTwoPrim(-32766)/olingo.odata.test1.BAETTwoPrimRTCollString\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCTAllPrim\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCTAllPrim\","
-            
+"\"target\":\"ESTwoPrim(-32766)/olingo.odata.test1.BAETTwoPrimRTCTAllPrim\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\","
-            
+"\"target\":\"ESTwoPrim(-32766)/olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\"}},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTString\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTString\","
+        + 
"\"target\":\"ESTwoPrim(-32766)/olingo.odata.test1.BAETTwoPrimRTString\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCollString\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollString\","
+        + 
"\"target\":\"ESTwoPrim(-32766)/olingo.odata.test1.BAETTwoPrimRTCollString\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCTAllPrim\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCTAllPrim\","
+        + 
"\"target\":\"ESTwoPrim(-32766)/olingo.odata.test1.BAETTwoPrimRTCTAllPrim\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\","
+        + 
"\"target\":\"ESTwoPrim(-32766)/olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\"}},"
         + 
"{\"@odata.type\":\"#olingo.odata.test1.ETTwoPrim\",\"@odata.id\":\"ESTwoPrim(32767)\","
         + "\"propertyin...@odata.type\":\"#Int16\",\"PropertyInt16\":32767,"
         + "\"PropertyString\":\"Test String4\","
-        
+"\"NavPropertyETAllPrimOne@odata.navigationLink\":\"ESAllPrim(32767)\","
-            +"\"#olingo.odata.test1.BAETTwoPrimRTString\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTString\","
-            
+"\"target\":\"ESTwoPrim(32767)/olingo.odata.test1.BAETTwoPrimRTString\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCollString\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollString\","
-            
+"\"target\":\"ESTwoPrim(32767)/olingo.odata.test1.BAETTwoPrimRTCollString\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCTAllPrim\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCTAllPrim\","
-            
+"\"target\":\"ESTwoPrim(32767)/olingo.odata.test1.BAETTwoPrimRTCTAllPrim\"},"
-        +"\"#olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\":"
-            +"{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\","
-            
+"\"target\":\"ESTwoPrim(32767)/olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\"}"
       
-            +"}]}";
+        + 
"\"NavPropertyETAllPrimOne@odata.navigationLink\":\"ESAllPrim(32767)\","
+        + "\"#olingo.odata.test1.BAETTwoPrimRTString\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTString\","
+        + 
"\"target\":\"ESTwoPrim(32767)/olingo.odata.test1.BAETTwoPrimRTString\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCollString\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollString\","
+        + 
"\"target\":\"ESTwoPrim(32767)/olingo.odata.test1.BAETTwoPrimRTCollString\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCTAllPrim\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCTAllPrim\","
+        + 
"\"target\":\"ESTwoPrim(32767)/olingo.odata.test1.BAETTwoPrimRTCTAllPrim\"},"
+        + "\"#olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\":"
+        + "{\"title\":\"olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\","
+        + 
"\"target\":\"ESTwoPrim(32767)/olingo.odata.test1.BAETTwoPrimRTCollCTAllPrim\"}"
       
+        + "}]}";
     Assert.assertEquals(expectedResult, resultString);
   }
   
@@ -972,20 +985,20 @@ public class ODataJsonSerializerTest {
                 .build()).getContent();
     final String resultString = IOUtils.toString(result);
     final String expected = "{"
-           +     "\"@odata.context\":\"$metadata#ESFourKeyAlias"
-           +        
"(PropertyInt16,PropertyCompComp/PropertyComp/PropertyString)\"," 
-           +     "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
-           +     "\"value\":[" 
-           +     "{" 
-           +         "\"@odata.id\":\""
-           +         
"ESFourKeyAlias(PropertyInt16=1,KeyAlias1=11,KeyAlias2='Num11',KeyAlias3='Num111')\","
 
-           +         "\"PropertyInt16\":1," 
-           +         "\"PropertyCompComp\":{" 
-           +             "\"PropertyComp\":{" 
-           +             "\"@odata.type\":\"#olingo.odata.test1.CTBase\"," 
-           +             "\"PropertyString\":\"Num111\"" 
-           +     "}}}]}";
-    
+        +     "\"@odata.context\":\"$metadata#ESFourKeyAlias"
+        +        
"(PropertyInt16,PropertyCompComp/PropertyComp/PropertyString)\"," 
+        +     "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+        +     "\"value\":[" 
+        +     "{" 
+        +         "\"@odata.id\":\""
+        +         
"ESFourKeyAlias(PropertyInt16=1,KeyAlias1=11,KeyAlias2='Num11',KeyAlias3='Num111')\","
 
+        +         "\"PropertyInt16\":1," 
+        +         "\"PropertyCompComp\":{" 
+        +             "\"PropertyComp\":{" 
+        +             "\"@odata.type\":\"#olingo.odata.test1.CTBase\"," 
+        +             "\"PropertyString\":\"Num111\"" 
+        +     "}}}]}";
+
    Assert.assertEquals(expected, resultString);
   }
   
@@ -1000,24 +1013,24 @@ public class ODataJsonSerializerTest {
                 .contextURL(ContextURL.with().entitySet(edmEntitySet).build())
                 .build()).getContent();
     final String resultString = IOUtils.toString(result);
-    
-    String expected = "{"
-            + "\"@odata.context\":\"$metadata#ESFourKeyAlias\","
-            + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
-            + "\"value\":[{"
-                + "\"PropertyInt16\":1,"
-                + "\"PropertyComp\":{"
-                    + "\"PropertyInt16\":11,"
-                    + "\"PropertyString\":\"Num11\""
-                + "},"
-                + "\"PropertyCompComp\":{"
-                    + "\"PropertyComp\":{"
-                        + "\"@odata.type\":\"#olingo.odata.test1.CTBase\","
-                        + "\"PropertyInt16\":111,"
-                        + "\"PropertyString\":\"Num111\","
-                        + "\"AdditionalPropString\":\"Test123\""
-            + "}}}]}";
-    
+
+    final String expected = "{"
+        + "\"@odata.context\":\"$metadata#ESFourKeyAlias\","
+        + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+        + "\"value\":[{"
+        + "\"PropertyInt16\":1,"
+        + "\"PropertyComp\":{"
+        + "\"PropertyInt16\":11,"
+        + "\"PropertyString\":\"Num11\""
+        + "},"
+        + "\"PropertyCompComp\":{"
+        + "\"PropertyComp\":{"
+        + "\"@odata.type\":\"#olingo.odata.test1.CTBase\","
+        + "\"PropertyInt16\":111,"
+        + "\"PropertyString\":\"Num111\","
+        + "\"AdditionalPropString\":\"Test123\""
+        + "}}}]}";
+
     Assert.assertEquals(expected, resultString);
   }  
 
@@ -1058,127 +1071,127 @@ public class ODataJsonSerializerTest {
     Assert.assertEquals(expected, resultString);
   }
 
-    @Test
-    public void selectComplexNestedCollectionOfComplexWithMetadataFull() 
throws Exception{
-         final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompCollComp");
-         final EntityCollection entitySet = data.readAll(edmEntitySet);
-         InputStream result = serializerFullMetadata
-             .entityCollection(metadata, edmEntitySet.getEntityType(), 
entitySet,
-             EntityCollectionSerializerOptions.with()
-                 .contextURL(ContextURL.with().entitySet(edmEntitySet).build())
-                 .build())
-         .getContent();
-         final String resultString = IOUtils.toString(result);
-         final String expectedResult = 
"{\"@odata.context\":\"$metadata#ESCompCollComp\","
-             + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
-             + 
"\"value\":[{\"@odata.type\":\"#olingo.odata.test1.ETCompCollComp\","
-             + "\"@odata.id\":\"ESCompCollComp(32767)\","
-             + 
"\"propertyin...@odata.type\":\"#Int16\",\"PropertyInt16\":32767,"
-             + "\"PropertyComp\":{"
-             + "\"@odata.type\":\"#olingo.odata.test1.CTCompCollComp\","
-             + 
"\"collpropertyc...@odata.type\":\"#Collection(olingo.odata.test1.CTTwoPrim)\","
-             + "\"CollPropertyComp\":["
-             + "{" 
-             + "\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
-             + "\"propertyin...@odata.type\":\"#Int16\","
-             +"\"PropertyInt16\":555,"
-             +"\"PropertyString\":\"1 Test Complex in Complex Property\""
-             +"},{"
-             +"\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
-             +"\"propertyin...@odata.type\":\"#Int16\","
-             +"\"PropertyInt16\":666,"
-             +"\"PropertyString\":\"2 Test Complex in Complex Property\""
-             +"},{"
-             +"\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
-             +"\"propertyin...@odata.type\":\"#Int16\","
-             +"\"PropertyInt16\":777,"
-             +"\"PropertyString\":\"3 Test Complex in Complex Property\""
-             +"}]}},{"
-             +"\"@odata.type\":\"#olingo.odata.test1.ETCompCollComp\","
-             +"\"@odata.id\":\"ESCompCollComp(12345)\","
-             +"\"propertyin...@odata.type\":\"#Int16\","
-             +"\"PropertyInt16\":12345,"
-             +"\"PropertyComp\":{"
-             +"\"@odata.type\":\"#olingo.odata.test1.CTCompCollComp\","
-             
+"\"collpropertyc...@odata.type\":\"#Collection(olingo.odata.test1.CTTwoPrim)\","
-             +"\"CollPropertyComp\":["
-             +"{"
-             +"\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
-             +"\"propertyin...@odata.type\":\"#Int16\","
-             +"\"PropertyInt16\":888,"
-             +"\"PropertyString\":\"11 Test Complex in Complex Property\""
-             +"},{"
-             +"\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
-             +"\"propertyin...@odata.type\":\"#Int16\","
-             +"\"PropertyInt16\":999,"
-             +"\"PropertyString\":\"12 Test Complex in Complex Property\""
-             +"},{"
-             +"\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
-             +"\"propertyin...@odata.type\":\"#Int16\","
-             +"\"PropertyInt16\":0,"
-             +"\"PropertyString\":\"13 Test Complex in Complex Property\""
-             +"}]}}]}";
-         Assert.assertEquals(expectedResult, resultString);
-    }
-    
-    @Test
-    public void selectComplexNestedCollectionOfComplexWithMetadataMinimal() 
throws Exception{
-         final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompCollComp");
-         final EntityCollection entitySet = data.readAll(edmEntitySet);
-         InputStream result = serializer
-             .entityCollection(metadata, edmEntitySet.getEntityType(), 
entitySet,
+  @Test
+  public void selectComplexNestedCollectionOfComplexWithMetadataFull() throws 
Exception{
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompCollComp");
+    final EntityCollection entitySet = data.readAll(edmEntitySet);
+    InputStream result = serializerFullMetadata
+        .entityCollection(metadata, edmEntitySet.getEntityType(), entitySet,
              EntityCollectionSerializerOptions.with()
                  .contextURL(ContextURL.with().entitySet(edmEntitySet).build())
                  .build())
-         .getContent();
-         final String resultString = IOUtils.toString(result);
-         final String expectedResult = 
"{\"@odata.context\":\"$metadata#ESCompCollComp\","
-             + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
-             + "\"value\":[{"
-             + "\"PropertyInt16\":32767,"
-             + "\"PropertyComp\":{"
-             + "\"CollPropertyComp\":["
-             + "{" 
-             +"\"PropertyInt16\":555,"
-             +"\"PropertyString\":\"1 Test Complex in Complex Property\""
-             +"},{"
-             +"\"PropertyInt16\":666,"
-             +"\"PropertyString\":\"2 Test Complex in Complex Property\""
-             +"},{"
-             +"\"PropertyInt16\":777,"
-             +"\"PropertyString\":\"3 Test Complex in Complex Property\""
-             +"}]}},{"
-             +"\"PropertyInt16\":12345,"
-             +"\"PropertyComp\":{"
-             +"\"CollPropertyComp\":["
-             +"{"
-             +"\"PropertyInt16\":888,"
-             +"\"PropertyString\":\"11 Test Complex in Complex Property\""
-             +"},{"
-             +"\"PropertyInt16\":999,"
-             +"\"PropertyString\":\"12 Test Complex in Complex Property\""
-             +"},{"
-             +"\"PropertyInt16\":0,"
-             +"\"PropertyString\":\"13 Test Complex in Complex Property\""
-             +"}]}}]}";
-         Assert.assertEquals(expectedResult, resultString);
-    }
-   
-    @Test
-    public void selectComplexNestedCollectionOfComplexWithMetadataNone() 
throws Exception{
-        final String METADATA_TEXT = "@odata.";
-        final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompCollComp");
-        final EntityCollection entitySet = data.readAll(edmEntitySet);
-          InputStream result = serializerNoMetadata
-             .entityCollection(metadata, edmEntitySet.getEntityType(), 
entitySet,
+        .getContent();
+    final String resultString = IOUtils.toString(result);
+    final String expectedResult = 
"{\"@odata.context\":\"$metadata#ESCompCollComp\","
+        + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+        + "\"value\":[{\"@odata.type\":\"#olingo.odata.test1.ETCompCollComp\","
+        + "\"@odata.id\":\"ESCompCollComp(32767)\","
+        + "\"propertyin...@odata.type\":\"#Int16\",\"PropertyInt16\":32767,"
+        + "\"PropertyComp\":{"
+        + "\"@odata.type\":\"#olingo.odata.test1.CTCompCollComp\","
+        + 
"\"collpropertyc...@odata.type\":\"#Collection(olingo.odata.test1.CTTwoPrim)\","
+        + "\"CollPropertyComp\":["
+        + "{" 
+        + "\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
+        + "\"propertyin...@odata.type\":\"#Int16\","
+        + "\"PropertyInt16\":555,"
+        + "\"PropertyString\":\"1 Test Complex in Complex Property\""
+        + "},{"
+        + "\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
+        + "\"propertyin...@odata.type\":\"#Int16\","
+        + "\"PropertyInt16\":666,"
+        + "\"PropertyString\":\"2 Test Complex in Complex Property\""
+        + "},{"
+        + "\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
+        + "\"propertyin...@odata.type\":\"#Int16\","
+        + "\"PropertyInt16\":777,"
+        + "\"PropertyString\":\"3 Test Complex in Complex Property\""
+        + "}]}},{"
+        + "\"@odata.type\":\"#olingo.odata.test1.ETCompCollComp\","
+        + "\"@odata.id\":\"ESCompCollComp(12345)\","
+        + "\"propertyin...@odata.type\":\"#Int16\","
+        + "\"PropertyInt16\":12345,"
+        + "\"PropertyComp\":{"
+        + "\"@odata.type\":\"#olingo.odata.test1.CTCompCollComp\","
+        + 
"\"collpropertyc...@odata.type\":\"#Collection(olingo.odata.test1.CTTwoPrim)\","
+        + "\"CollPropertyComp\":["
+        + "{"
+        + "\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
+        + "\"propertyin...@odata.type\":\"#Int16\","
+        + "\"PropertyInt16\":888,"
+        + "\"PropertyString\":\"11 Test Complex in Complex Property\""
+        + "},{"
+        + "\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
+        + "\"propertyin...@odata.type\":\"#Int16\","
+        + "\"PropertyInt16\":999,"
+        + "\"PropertyString\":\"12 Test Complex in Complex Property\""
+        + "},{"
+        + "\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
+        + "\"propertyin...@odata.type\":\"#Int16\","
+        + "\"PropertyInt16\":0,"
+        + "\"PropertyString\":\"13 Test Complex in Complex Property\""
+        + "}]}}]}";
+    Assert.assertEquals(expectedResult, resultString);
+  }
+
+  @Test
+  public void selectComplexNestedCollectionOfComplexWithMetadataMinimal() 
throws Exception{
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompCollComp");
+    final EntityCollection entitySet = data.readAll(edmEntitySet);
+    InputStream result = serializer
+        .entityCollection(metadata, edmEntitySet.getEntityType(), entitySet,
              EntityCollectionSerializerOptions.with()
                  .contextURL(ContextURL.with().entitySet(edmEntitySet).build())
                  .build())
-         .getContent();
-        final String resultString = IOUtils.toString(result);
-       Assert.assertEquals(false, resultString.contains(METADATA_TEXT));
-    }
-  
+        .getContent();
+    final String resultString = IOUtils.toString(result);
+    final String expectedResult = 
"{\"@odata.context\":\"$metadata#ESCompCollComp\","
+        + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+        + "\"value\":[{"
+        + "\"PropertyInt16\":32767,"
+        + "\"PropertyComp\":{"
+        + "\"CollPropertyComp\":["
+        + "{" 
+        + "\"PropertyInt16\":555,"
+        + "\"PropertyString\":\"1 Test Complex in Complex Property\""
+        + "},{"
+        + "\"PropertyInt16\":666,"
+        + "\"PropertyString\":\"2 Test Complex in Complex Property\""
+        + "},{"
+        + "\"PropertyInt16\":777,"
+        + "\"PropertyString\":\"3 Test Complex in Complex Property\""
+        + "}]}},{"
+        + "\"PropertyInt16\":12345,"
+        + "\"PropertyComp\":{"
+        + "\"CollPropertyComp\":["
+        + "{"
+        + "\"PropertyInt16\":888,"
+        + "\"PropertyString\":\"11 Test Complex in Complex Property\""
+        + "},{"
+        + "\"PropertyInt16\":999,"
+        + "\"PropertyString\":\"12 Test Complex in Complex Property\""
+        + "},{"
+        + "\"PropertyInt16\":0,"
+        + "\"PropertyString\":\"13 Test Complex in Complex Property\""
+        + "}]}}]}";
+    Assert.assertEquals(expectedResult, resultString);
+  }
+
+  @Test
+  public void selectComplexNestedCollectionOfComplexWithMetadataNone() throws 
Exception{
+    final String METADATA_TEXT = "@odata.";
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompCollComp");
+    final EntityCollection entitySet = data.readAll(edmEntitySet);
+    InputStream result = serializerNoMetadata
+        .entityCollection(metadata, edmEntitySet.getEntityType(), entitySet,
+            EntityCollectionSerializerOptions.with()
+            .contextURL(ContextURL.with().entitySet(edmEntitySet).build())
+            .build())
+        .getContent();
+    final String resultString = IOUtils.toString(result);
+    Assert.assertEquals(false, resultString.contains(METADATA_TEXT));
+  }
+
   @Test(expected = SerializerException.class)
   public void selectMissingId() throws Exception {
     final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESAllPrim");
@@ -1386,27 +1399,27 @@ public class ODataJsonSerializerTest {
                 .expand(expand)
                 .build()).getContent());
     Assert.assertEquals("{\"@odata.context\":\"$metadata#ESTwoPrim/$entity\","
-            + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
-            + "\"PropertyInt16\":-365,\"PropertyString\":\"Test String2\","
-            + "\"NavPropertyETAllPrimOne\":null,"
-            + "\"NavPropertyETAllPrimMany\":["
-            + "{\"PropertyInt16\":-32768,\"PropertyString\":\"Second Resource 
- negative values\","
-            + 
"\"PropertyBoolean\":false,\"PropertyByte\":0,\"PropertySByte\":-128,\"PropertyInt32\":-2147483648,"
-            + 
"\"PropertyInt64\":-9223372036854775808,\"PropertySingle\":-1.79E8,\"PropertyDouble\":-179000.0,"
-            + 
"\"PropertyDecimal\":-34,\"PropertyBinary\":\"ASNFZ4mrze8=\",\"PropertyDate\":\"2015-11-05\","
-            + 
"\"PropertyDateTimeOffset\":\"2005-12-03T07:17:08Z\",\"PropertyDuration\":\"PT9S\","
-            + 
"\"PropertyGuid\":\"76543201-23ab-cdef-0123-456789dddfff\",\"PropertyTimeOfDay\":\"23:49:14\","
-            + 
"\"NavPropertyETTwoPrimOne\":null,\"NavPropertyETTwoPrimMany\":[]},"
-            + 
"{\"PropertyInt16\":0,\"PropertyString\":\"\",\"PropertyBoolean\":false,\"PropertyByte\":0,"
-            + 
"\"PropertySByte\":0,\"PropertyInt32\":0,\"PropertyInt64\":0,\"PropertySingle\":0.0,"
-            + 
"\"PropertyDouble\":0.0,\"PropertyDecimal\":0,\"PropertyBinary\":\"\","
-            + 
"\"PropertyDate\":\"1970-01-01\",\"PropertyDateTimeOffset\":\"2005-12-03T00:00:00Z\","
-            + 
"\"PropertyDuration\":\"PT0S\",\"PropertyGuid\":\"76543201-23ab-cdef-0123-456789cccddd\","
-            + 
"\"PropertyTimeOfDay\":\"00:01:01\",\"NavPropertyETTwoPrimOne\":null,"
-            + "\"NavPropertyETTwoPrimMany\":["
-            + "{\"PropertyInt16\":32766,\"PropertyString\":\"Test String1\"},"
-            + "{\"PropertyInt16\":-32766,\"PropertyString\":null},"
-            + "{\"PropertyInt16\":32767,\"PropertyString\":\"Test 
String4\"}]}]}",
+        + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+        + "\"PropertyInt16\":-365,\"PropertyString\":\"Test String2\","
+        + "\"NavPropertyETAllPrimOne\":null,"
+        + "\"NavPropertyETAllPrimMany\":["
+        + "{\"PropertyInt16\":-32768,\"PropertyString\":\"Second Resource - 
negative values\","
+        + 
"\"PropertyBoolean\":false,\"PropertyByte\":0,\"PropertySByte\":-128,\"PropertyInt32\":-2147483648,"
+        + 
"\"PropertyInt64\":-9223372036854775808,\"PropertySingle\":-1.79E8,\"PropertyDouble\":-179000.0,"
+        + 
"\"PropertyDecimal\":-34,\"PropertyBinary\":\"ASNFZ4mrze8=\",\"PropertyDate\":\"2015-11-05\","
+        + 
"\"PropertyDateTimeOffset\":\"2005-12-03T07:17:08Z\",\"PropertyDuration\":\"PT9S\","
+        + 
"\"PropertyGuid\":\"76543201-23ab-cdef-0123-456789dddfff\",\"PropertyTimeOfDay\":\"23:49:14\","
+        + "\"NavPropertyETTwoPrimOne\":null,\"NavPropertyETTwoPrimMany\":[]},"
+        + 
"{\"PropertyInt16\":0,\"PropertyString\":\"\",\"PropertyBoolean\":false,\"PropertyByte\":0,"
+        + 
"\"PropertySByte\":0,\"PropertyInt32\":0,\"PropertyInt64\":0,\"PropertySingle\":0.0,"
+        + 
"\"PropertyDouble\":0.0,\"PropertyDecimal\":0,\"PropertyBinary\":\"\","
+        + 
"\"PropertyDate\":\"1970-01-01\",\"PropertyDateTimeOffset\":\"2005-12-03T00:00:00Z\","
+        + 
"\"PropertyDuration\":\"PT0S\",\"PropertyGuid\":\"76543201-23ab-cdef-0123-456789cccddd\","
+        + 
"\"PropertyTimeOfDay\":\"00:01:01\",\"NavPropertyETTwoPrimOne\":null,"
+        + "\"NavPropertyETTwoPrimMany\":["
+        + "{\"PropertyInt16\":32766,\"PropertyString\":\"Test String1\"},"
+        + "{\"PropertyInt16\":-32766,\"PropertyString\":null},"
+        + "{\"PropertyInt16\":32767,\"PropertyString\":\"Test String4\"}]}]}",
         resultString);
   }
 
@@ -1908,24 +1921,182 @@ public class ODataJsonSerializerTest {
     }
     Assert.assertEquals(3, count);
   }
-  
-   @Test
-   public void expandCycle() throws Exception {
-     final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESPeople");
-     final Entity entity = data.readAll(edmEntitySet).getEntities().get(1);
-     ExpandItem mockExpandItem = ExpandSelectMock.mockExpandItem(edmEntitySet, 
"friends");
-     LevelsExpandOption levels = Mockito.mock(LevelsExpandOption.class);
-     Mockito.when(levels.isMax()).thenReturn(Boolean.TRUE);
-     Mockito.when(mockExpandItem.getLevelsOption()).thenReturn(levels);
-     final ExpandOption expand = 
ExpandSelectMock.mockExpandOption(Collections.singletonList(
-         mockExpandItem));
-     InputStream result = serializer.entity(metadata, 
edmEntitySet.getEntityType(), entity,
-         EntitySerializerOptions.with()
-             
.contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build())
-             .expand(expand)
-             .build()).getContent();
-     final String resultString = IOUtils.toString(result);
-     String expected = "{" + 
+
+  @Test
+  public void geoPoint() throws Exception {
+    final EdmEntityType entityType = 
mockEntityType(EdmPrimitiveTypeKind.GeometryPoint);
+    Entity entity = new Entity()
+        .addProperty(new Property(null, entityType.getPropertyNames().get(0), 
ValueType.GEOSPATIAL,
+            createPoint(1.5, 4.25)));
+    Assert.assertEquals("{\"" + entityType.getPropertyNames().get(0) + "\":{"
+        + "\"type\":\"Point\",\"coordinates\":[1.5,4.25]}}",
+        IOUtils.toString(serializerNoMetadata.entity(metadata, entityType, 
entity, null).getContent()));
+
+    Point point = new Point(Dimension.GEOMETRY, null);
+    point.setZ(42);
+    entity = new Entity().addProperty(new Property(null, 
entityType.getPropertyNames().get(0), ValueType.GEOSPATIAL,
+        point));
+    Assert.assertEquals("{\"" + entityType.getPropertyNames().get(0) + "\":{"
+        + "\"type\":\"Point\",\"coordinates\":[0.0,0.0,42.0]}}",
+        IOUtils.toString(serializerNoMetadata.entity(metadata, entityType, 
entity, null).getContent()));
+  }
+
+  @Test
+  public void geoMultiPoint() throws Exception {
+    final EdmEntityType entityType = 
mockEntityType(EdmPrimitiveTypeKind.GeometryMultiPoint);
+    final Entity entity = new Entity()
+        .addProperty(new Property(null, entityType.getPropertyNames().get(0), 
ValueType.GEOSPATIAL,
+            new MultiPoint(Dimension.GEOMETRY, null, Arrays.asList(
+                createPoint(2.5, 3.125), createPoint(3.5, 4.125), 
createPoint(4.5, 5.125)))));
+    Assert.assertEquals("{\"" + entityType.getPropertyNames().get(0) + "\":{"
+        + 
"\"type\":\"MultiPoint\",\"coordinates\":[[2.5,3.125],[3.5,4.125],[4.5,5.125]]}}",
+        IOUtils.toString(serializerNoMetadata.entity(metadata, entityType, 
entity, null).getContent()));
+  }
+
+  @Test
+  public void geoLineString() throws Exception {
+    final EdmEntityType entityType = 
mockEntityType(EdmPrimitiveTypeKind.GeometryLineString);
+    final Entity entity = new Entity()
+        .addProperty(new Property(null, entityType.getPropertyNames().get(0), 
ValueType.GEOSPATIAL,
+            new LineString(Dimension.GEOMETRY, null, Arrays.asList(
+                createPoint(1, 1), createPoint(2, 2), createPoint(3, 3), 
createPoint(4, 4), createPoint(5, 5)))));
+    Assert.assertEquals("{\"" + entityType.getPropertyNames().get(0) + "\":{"
+        + 
"\"type\":\"LineString\",\"coordinates\":[[1.0,1.0],[2.0,2.0],[3.0,3.0],[4.0,4.0],[5.0,5.0]]}}",
+        IOUtils.toString(serializerNoMetadata.entity(metadata, entityType, 
entity, null).getContent()));
+  }
+
+  @Test
+  public void geoMultiLineString() throws Exception {
+    final EdmEntityType entityType = 
mockEntityType(EdmPrimitiveTypeKind.GeometryMultiLineString);
+    final Entity entity = new Entity()
+        .addProperty(new Property(null, entityType.getPropertyNames().get(0), 
ValueType.GEOSPATIAL,
+            new MultiLineString(Dimension.GEOMETRY, null, Arrays.asList(
+                new LineString(Dimension.GEOMETRY, null, Arrays.asList(
+                    createPoint(1, 1), createPoint(2, 2), createPoint(3, 3), 
createPoint(4, 4), createPoint(5, 5))),
+                new LineString(Dimension.GEOMETRY, null, Arrays.asList(
+                    createPoint(99.5, 101.5), createPoint(150, 151.25)))))));
+    Assert.assertEquals("{\"" + entityType.getPropertyNames().get(0) + "\":{"
+        + "\"type\":\"MultiLineString\",\"coordinates\":["
+        + "[[1.0,1.0],[2.0,2.0],[3.0,3.0],[4.0,4.0],[5.0,5.0]],"
+        + "[[99.5,101.5],[150.0,151.25]]]}}",
+        IOUtils.toString(serializerNoMetadata.entity(metadata, entityType, 
entity, null).getContent()));
+  }
+
+  @Test
+  public void geoPolygon() throws Exception {
+    final EdmEntityType entityType = 
mockEntityType(EdmPrimitiveTypeKind.GeometryPolygon);
+    Entity entity = new Entity()
+        .addProperty(new Property(null, entityType.getPropertyNames().get(0), 
ValueType.GEOSPATIAL,
+            new Polygon(Dimension.GEOMETRY, null,
+                Arrays.asList(
+                    createPoint(1, 1), createPoint(1, 2), createPoint(2, 2), 
createPoint(2, 1), createPoint(1, 1)),
+                Arrays.asList(
+                    createPoint(0, 0), createPoint(3, 0), createPoint(3, 3), 
createPoint(0, 3), createPoint(0, 0)))));
+    Assert.assertEquals("{\"" + entityType.getPropertyNames().get(0) + "\":{"
+        + 
"\"type\":\"Polygon\",\"coordinates\":[[[0.0,0.0],[3.0,0.0],[3.0,3.0],[0.0,3.0],[0.0,0.0]],"
+        + "[[1.0,1.0],[1.0,2.0],[2.0,2.0],[2.0,1.0],[1.0,1.0]]]}}",
+        IOUtils.toString(serializerNoMetadata.entity(metadata, entityType, 
entity, null).getContent()));
+
+    entity = new Entity().addProperty(new Property(null, 
entityType.getPropertyNames().get(0), ValueType.GEOSPATIAL,
+        new Polygon(Dimension.GEOMETRY, null, null, Arrays.asList(
+            createPoint(10, 10), createPoint(30, 10), createPoint(30, 30), 
createPoint(10, 30),
+            createPoint(10, 10)))));
+    Assert.assertEquals("{\"" + entityType.getPropertyNames().get(0) + "\":{"
+        + 
"\"type\":\"Polygon\",\"coordinates\":[[[10.0,10.0],[30.0,10.0],[30.0,30.0],[10.0,30.0],[10.0,10.0]]]}}",
+        IOUtils.toString(serializerNoMetadata.entity(metadata, entityType, 
entity, null).getContent()));
+  }
+
+  @Test
+  public void geoMultiPolygon() throws Exception {
+    final EdmEntityType entityType = 
mockEntityType(EdmPrimitiveTypeKind.GeometryMultiPolygon);
+    final Entity entity = new Entity()
+        .addProperty(new Property(null, entityType.getPropertyNames().get(0), 
ValueType.GEOSPATIAL,
+            new MultiPolygon(Dimension.GEOMETRY, null, Arrays.asList(
+                new Polygon(Dimension.GEOMETRY, null,
+                    Arrays.asList(
+                        createPoint(1, 1), createPoint(1, 2), createPoint(2, 
2), createPoint(2, 1), createPoint(1, 1)),
+                    Arrays.asList(
+                        createPoint(0, 0), createPoint(3, 0), createPoint(3, 
3), createPoint(0, 3),
+                        createPoint(0, 0))),
+                new Polygon(Dimension.GEOMETRY, null,
+                    Arrays.asList(
+                        createPoint(10, 10), createPoint(10, 20), 
createPoint(20, 10), createPoint(10, 10)),
+                    Arrays.asList(
+                        createPoint(0, 0), createPoint(30, 0), createPoint(0, 
30), createPoint(0, 0)))))));
+    Assert.assertEquals("{\"" + entityType.getPropertyNames().get(0) + "\":{"
+        + "\"type\":\"MultiPolygon\",\"coordinates\":["
+        + "[[[0.0,0.0],[3.0,0.0],[3.0,3.0],[0.0,3.0],[0.0,0.0]],"
+        + "[[1.0,1.0],[1.0,2.0],[2.0,2.0],[2.0,1.0],[1.0,1.0]]],"
+        + "[[[0.0,0.0],[30.0,0.0],[0.0,30.0],[0.0,0.0]],"
+        + "[[10.0,10.0],[10.0,20.0],[20.0,10.0],[10.0,10.0]]]]}}",
+        IOUtils.toString(serializerNoMetadata.entity(metadata, entityType, 
entity, null).getContent()));
+  }
+
+  @Test
+  public void geoCollection() throws Exception {
+    final EdmEntityType entityType = 
mockEntityType(EdmPrimitiveTypeKind.GeometryCollection);
+    final Entity entity = new Entity()
+        .addProperty(new Property(null, entityType.getPropertyNames().get(0), 
ValueType.GEOSPATIAL,
+            new GeospatialCollection(Dimension.GEOMETRY, null, Arrays.asList(
+                createPoint(100, 0),
+                new LineString(Dimension.GEOMETRY, null, 
Arrays.asList(createPoint(101, 0), createPoint(102, 1)))))));
+    Assert.assertEquals("{\"" + entityType.getPropertyNames().get(0) + "\":{"
+        + "\"type\":\"GeometryCollection\",\"geometries\":["
+        + "{\"type\":\"Point\",\"coordinates\":[100.0,0.0]},"
+        + 
"{\"type\":\"LineString\",\"coordinates\":[[101.0,0.0],[102.0,1.0]]}]}}",
+        IOUtils.toString(serializerNoMetadata.entity(metadata, entityType, 
entity, null).getContent()));
+  }
+
+  private EdmEntityType mockEntityType(final EdmPrimitiveTypeKind type) {
+    EdmProperty property = Mockito.mock(EdmProperty.class);
+    final String name = "Property" + type.name();
+    Mockito.when(property.getName()).thenReturn(name);
+    
Mockito.when(property.getType()).thenReturn(odata.createPrimitiveTypeInstance(type));
+    Mockito.when(property.isPrimitive()).thenReturn(true);
+    EdmEntityType entityType = Mockito.mock(EdmEntityType.class);
+    
Mockito.when(entityType.getPropertyNames()).thenReturn(Arrays.asList(name));
+    Mockito.when(entityType.getStructuralProperty(name)).thenReturn(property);
+    return entityType;
+  }
+
+  @Test
+  public void geoNonstandardSRID() throws Exception {
+    final EdmEntityType entityType = 
mockEntityType(EdmPrimitiveTypeKind.GeometryPoint);
+    final Entity entity = new Entity()
+        .addProperty(new Property(null, entityType.getPropertyNames().get(0), 
ValueType.GEOSPATIAL,
+            new Point(Dimension.GEOMETRY, SRID.valueOf("42"))));
+    try {
+      serializerNoMetadata.entity(metadata, entityType, entity, null);
+      fail("Expected exception not thrown.");
+    } catch (final SerializerException e) {
+      assertNotNull(e);
+    }
+  }
+
+  private Point createPoint(final double x, final double y) {
+    Point point = new Point(Dimension.GEOMETRY, null);
+    point.setX(x);
+    point.setY(y);
+    return point;
+  }
+
+  @Test
+  public void expandCycle() throws Exception {
+    final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESPeople");
+    final Entity entity = data.readAll(edmEntitySet).getEntities().get(1);
+    ExpandItem mockExpandItem = ExpandSelectMock.mockExpandItem(edmEntitySet, 
"friends");
+    LevelsExpandOption levels = Mockito.mock(LevelsExpandOption.class);
+    Mockito.when(levels.isMax()).thenReturn(Boolean.TRUE);
+    Mockito.when(mockExpandItem.getLevelsOption()).thenReturn(levels);
+    final ExpandOption expand = 
ExpandSelectMock.mockExpandOption(Collections.singletonList(mockExpandItem));
+    InputStream result = serializer.entity(metadata, 
edmEntitySet.getEntityType(), entity,
+        EntitySerializerOptions.with()
+            
.contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build())
+            .expand(expand)
+            .build())
+        .getContent();
+    final String resultString = IOUtils.toString(result);
+    final String expected = "{" + 
          "\"@odata.context\":\"$metadata#ESPeople/$entity\"," + 
          "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + 
          "\"id\":1," + 
@@ -1981,27 +2152,27 @@ public class ODataJsonSerializerTest {
                "}" + 
             "]" + 
          "}";
-     Assert.assertEquals(expected, resultString);
-   }
-   
-   @Test
-   public void expandCycleWith3Level() throws Exception {
-     final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESPeople");
-     final Entity entity = data.readAll(edmEntitySet).getEntities().get(1);
-     ExpandItem mockExpandItem = ExpandSelectMock.mockExpandItem(edmEntitySet, 
"friends");
-     LevelsExpandOption levels = Mockito.mock(LevelsExpandOption.class);
-     Mockito.when(levels.isMax()).thenReturn(Boolean.FALSE);
-     Mockito.when(levels.getValue()).thenReturn(3);
-     Mockito.when(mockExpandItem.getLevelsOption()).thenReturn(levels);
-     final ExpandOption expand = 
ExpandSelectMock.mockExpandOption(Collections.singletonList(
-         mockExpandItem));
-     InputStream result = serializer.entity(metadata, 
edmEntitySet.getEntityType(), entity,
-         EntitySerializerOptions.with()
-             
.contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build())
-             .expand(expand)
-             .build()).getContent();
-     final String resultString = IOUtils.toString(result);
-     String expected = "{" + 
+    Assert.assertEquals(expected, resultString);
+  }
+
+  @Test
+  public void expandCycleWith3Level() throws Exception {
+    final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESPeople");
+    final Entity entity = data.readAll(edmEntitySet).getEntities().get(1);
+    ExpandItem mockExpandItem = ExpandSelectMock.mockExpandItem(edmEntitySet, 
"friends");
+    LevelsExpandOption levels = Mockito.mock(LevelsExpandOption.class);
+    Mockito.when(levels.isMax()).thenReturn(Boolean.FALSE);
+    Mockito.when(levels.getValue()).thenReturn(3);
+    Mockito.when(mockExpandItem.getLevelsOption()).thenReturn(levels);
+    final ExpandOption expand = 
ExpandSelectMock.mockExpandOption(Collections.singletonList(mockExpandItem));
+    InputStream result = serializer.entity(metadata, 
edmEntitySet.getEntityType(), entity,
+        EntitySerializerOptions.with()
+            
.contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build())
+            .expand(expand)
+            .build())
+        .getContent();
+    final String resultString = IOUtils.toString(result);
+    final String expected = "{" +
        "\"@odata.context\":\"$metadata#ESPeople/$entity\"," + 
        "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + 
        "\"id\":1," + 
@@ -2055,6 +2226,6 @@ public class ODataJsonSerializerTest {
          "}" + 
        "]" + 
        "}"; 
-     Assert.assertEquals(expected, resultString);
-   }   
+    Assert.assertEquals(expected, resultString);
+  }
 }

Reply via email to