Repository: olingo-odata4
Updated Branches:
  refs/heads/master 098ed145d -> 95e2d8d33


[OLINGO-317] Added additional tests


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/839e9604
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/839e9604
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/839e9604

Branch: refs/heads/master
Commit: 839e96045a1240a1e35743b5da7ea3a34e806905
Parents: 4c4f82e
Author: mibo <[email protected]>
Authored: Mon Jun 30 15:01:28 2014 +0200
Committer: mibo <[email protected]>
Committed: Mon Jun 30 15:15:28 2014 +0200

----------------------------------------------------------------------
 .../olingo/commons/core/data/PropertyImpl.java  |   2 +-
 .../core/edm/primitivetype/EdmString.java       |   3 +-
 .../json/ODataJsonSerializerTest.java           | 312 +++++++++++++++++--
 3 files changed, 294 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/839e9604/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/PropertyImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/PropertyImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/PropertyImpl.java
index b6f2f36..4ad374d 100755
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/PropertyImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/PropertyImpl.java
@@ -35,7 +35,7 @@ public class PropertyImpl extends AbstractValuable implements 
Property {
   }
 
   public PropertyImpl(String type, String name, ValueType valueType, Object 
value) {
-    this(name, type);
+    this(type, name);
     setValue(valueType, value);
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/839e9604/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmString.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmString.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmString.java
index 4defe91..600467a 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmString.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmString.java
@@ -74,7 +74,8 @@ public final class EdmString extends SingletonPrimitiveType {
     if (isUnicode != null && !isUnicode && 
!PATTERN_ASCII.matcher(result).matches()
         || maxLength != null && maxLength < result.length()) {
       throw new EdmPrimitiveTypeException(
-              
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
+              
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent('" +
+                  value + "', facets)");
     }
 
     return result;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/839e9604/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
index 79a1b65..1008c5f 100644
--- 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
+++ 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
@@ -18,14 +18,20 @@
  */
 package org.apache.olingo.server.core.serializer.json;
 
+import org.apache.olingo.commons.api.ODataRuntimeException;
 import org.apache.olingo.commons.api.data.ContextURL;
 import org.apache.olingo.commons.api.data.Entity;
 import org.apache.olingo.commons.api.data.ValueType;
+import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
+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.constants.EdmTypeKind;
 import org.apache.olingo.commons.core.data.EntityImpl;
+import org.apache.olingo.commons.core.data.EntitySetImpl;
 import org.apache.olingo.commons.core.data.PropertyImpl;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmString;
+import 
org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -36,50 +42,314 @@ import org.slf4j.LoggerFactory;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.List;
+import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class ODataJsonSerializerTest {
 
-  public static final String PROPERTY_1 = "Property1";
+  private static final String ETAllPrim = "ETAllPrim";
+  private static final String ETCompAllPrim = "ETCompAllPrim";
+  private static final String CTAllPrim = "CTAllPrim";
+  private static final String CTAllPrim_Type = "com.sap.odata.test1.CTAllPrim";
+
+  interface TechProperty {
+    String getName();
+    String getTypeName();
+    EdmPrimitiveTypeKind getType();
+  }
+
+  public static class TecComplexProperty implements TechProperty {
+
+    final String name;
+    final String typeName;
+    public TecComplexProperty(String typeName, String name) {
+      this.name = name;
+      this.typeName = typeName;
+    }
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getTypeName() {
+      return typeName;
+    }
+    @Override
+    public EdmPrimitiveTypeKind getType() {
+      return null;
+    }
+  }
+
+  enum TecSimpleProperty implements TechProperty {
+    Int16("PropertyInt16", EdmPrimitiveTypeKind.Int16),
+    String("PropertyString", EdmPrimitiveTypeKind.String),
+    Boolean("PropertyBoolean", EdmPrimitiveTypeKind.Boolean),
+    Byte("PropertyByte", EdmPrimitiveTypeKind.Byte),
+    SByte("PropertySByte", EdmPrimitiveTypeKind.SByte),
+    Int32("PropertyInt32", EdmPrimitiveTypeKind.Int32),
+    Int64("PropertyInt64", EdmPrimitiveTypeKind.Int64),
+    Single("PropertySingle", EdmPrimitiveTypeKind.Single),
+    Double("PropertyDouble", EdmPrimitiveTypeKind.Double),
+    Decimal("PropertyDecimal", EdmPrimitiveTypeKind.Decimal),
+    Binary("PropertyBinary", EdmPrimitiveTypeKind.Binary),
+    Date("PropertyDate", EdmPrimitiveTypeKind.Date),
+    DateTimeOffset("PropertyDateTimeOffset", 
EdmPrimitiveTypeKind.DateTimeOffset),
+    Duration("PropertyDuration", EdmPrimitiveTypeKind.Duration),
+    Guid("PropertyGuid", EdmPrimitiveTypeKind.Guid),
+    TimeOfDay("PropertyTimeOfDay", EdmPrimitiveTypeKind.TimeOfDay);
+    //  <NavigationProperty Name="NavPropertyETTwoPrimOne" 
Type="test1.ETTwoPrim" Nullable="false"/>
+//    NavETTwoPrimOne = "NavPropertyETTwoPrimOne", EdmPrimitiveTypeKind.),
+    //  <NavigationProperty Name="NavPropertyETTwoPrimMany" 
Type="Collection(test1.ETTwoPrim)" Nullable="false"/>
+//    NavETTwoPrimMany("NavPropertyETTwoPrimMany", EdmCom.);
+
+    final String name;
+    final EdmPrimitiveTypeKind type;
+
+    TecSimpleProperty(String name, EdmPrimitiveTypeKind type) {
+      this.name = name;
+      this.type = type;
+    }
+
+    @Override
+    public String getTypeName() {
+      return type.name();
+    }
+
+    @Override
+    public EdmPrimitiveTypeKind getType() {
+      return type;
+    }
+    @Override
+    public String getName() {
+      return name;
+    }
+  }
 
   private ContextURL contextUrl;
-  private EdmEntityType edmEntityType;
-  private final Logger LOG = 
LoggerFactory.getLogger(ODataJsonSerializerTest.class);
+  private EdmEntitySet edmESAllPrim;
+  private EdmEntityType edmETAllPrim;
+  private EdmEntityType edmETCompAllPrim;
 
   private ODataJsonSerializer serializer = new ODataJsonSerializer();
 
   @Before
   public void prepare() throws Exception {
     contextUrl = ContextURL.getInstance(new 
URI("http://localhost:8080/test.svc";));
-    edmEntityType = Mockito.mock(EdmEntityType.class);
-    List<String> propertyNames = Arrays.asList(PROPERTY_1);
-    Mockito.when(edmEntityType.getPropertyNames()).thenReturn(propertyNames);
 
+    edmETAllPrim = Mockito.mock(EdmEntityType.class);
+    Mockito.when(edmETAllPrim.getName()).thenReturn(ETAllPrim);
+    List<EdmProperty> properties = Arrays.asList(
+        mockProperty(TecSimpleProperty.Int16, false),
+        mockProperty(TecSimpleProperty.String),
+        mockProperty(TecSimpleProperty.Boolean),
+        mockProperty(TecSimpleProperty.Byte),
+        mockProperty(TecSimpleProperty.SByte),
+        mockProperty(TecSimpleProperty.Int32),
+        mockProperty(TecSimpleProperty.Int64),
+        mockProperty(TecSimpleProperty.Single),
+        mockProperty(TecSimpleProperty.Double),
+        mockProperty(TecSimpleProperty.Decimal),
+        mockProperty(TecSimpleProperty.Binary),
+        mockProperty(TecSimpleProperty.Date),
+        mockProperty(TecSimpleProperty.DateTimeOffset),
+        mockProperty(TecSimpleProperty.Duration),
+        mockProperty(TecSimpleProperty.Guid),
+        mockProperty(TecSimpleProperty.TimeOfDay)
+//        mockProperty(NavPropertyETTwoPrimOne, false),
+//        mockProperty(NavPropertyETTwoPrimMany, false)
+    );
+    List<String> propertyNames = new ArrayList<String>();
+
+    for (EdmProperty property : properties) {
+      propertyNames.add(property.getName());
+      
Mockito.when(edmETAllPrim.getProperty(property.getName())).thenReturn(property);
+    }
+    Mockito.when(edmETAllPrim.getPropertyNames()).thenReturn(propertyNames);
+
+    // Entity Set All Primitive
+    edmESAllPrim = Mockito.mock(EdmEntitySet.class);
+    Mockito.when(edmESAllPrim.getName()).thenReturn("ESAllPrim");
+    Mockito.when(edmESAllPrim.getEntityType()).thenReturn(edmETAllPrim);
+
+    // Entity Type Complex All Primitive
+    edmETCompAllPrim = Mockito.mock(EdmEntityType.class);
+    Mockito.when(edmETCompAllPrim.getName()).thenReturn(ETCompAllPrim);
+    List<EdmProperty> capProperties = Arrays.asList(
+        mockProperty(TecSimpleProperty.Int16, false),
+        mockProperty(new TecComplexProperty(CTAllPrim_Type, CTAllPrim), false, 
true)
+    );
+    List<String> capPropertyNames = new ArrayList<String>();
+
+    for (EdmProperty property : capProperties) {
+      capPropertyNames.add(property.getName());
+      
Mockito.when(edmETCompAllPrim.getProperty(property.getName())).thenReturn(property);
+    }
+    
Mockito.when(edmETCompAllPrim.getPropertyNames()).thenReturn(capPropertyNames);
+  }
+
+  private EdmProperty mockProperty(TechProperty name) {
+    return mockProperty(name, true, false);
+  }
+
+  private EdmProperty mockProperty(TechProperty name, boolean nullable) {
+    return mockProperty(name, nullable, false);
+  }
+
+  private EdmProperty mockProperty(TechProperty tecProperty, boolean nullable, 
boolean complex) {
     EdmProperty edmElement = Mockito.mock(EdmProperty.class);
-    Mockito.when(edmElement.getName()).thenReturn(PROPERTY_1);
-    Mockito.when(edmElement.isPrimitive()).thenReturn(true);
-    Mockito.when(edmElement.getMaxLength()).thenReturn(20);
-    Mockito.when(edmElement.getType()).thenReturn(EdmString.getInstance());
-    Mockito.when(edmEntityType.getProperty(PROPERTY_1)).thenReturn(edmElement);
+    Mockito.when(edmElement.getName()).thenReturn(tecProperty.getName());
+    if(complex) {
+      Mockito.when(edmElement.isPrimitive()).thenReturn(false);
+      EdmType type = Mockito.mock(EdmType.class);
+      Mockito.when(type.getKind()).thenReturn(EdmTypeKind.COMPLEX);
+      Mockito.when(type.getName()).thenReturn(tecProperty.getTypeName());
+      Mockito.when(edmElement.getType()).thenReturn(type);
+    } else {
+      Mockito.when(edmElement.isPrimitive()).thenReturn(true);
+      // TODO: set default values
+      Mockito.when(edmElement.getMaxLength()).thenReturn(40);
+      Mockito.when(edmElement.getPrecision()).thenReturn(10);
+      Mockito.when(edmElement.getScale()).thenReturn(10);
+      
Mockito.when(edmElement.getType()).thenReturn(EdmPrimitiveTypeFactory.getInstance(tecProperty.getType()));
+    }
+    Mockito.when(edmElement.isNullable()).thenReturn(nullable);
+    return edmElement;
+  }
+
+  private PropertyImpl createProperty(TechProperty property, ValueType vType, 
Object value) {
+    return new PropertyImpl(property.getTypeName(), property.getName(), vType, 
value);
+  }
 
+  private PropertyImpl createProperty(String type, TecSimpleProperty property, 
ValueType vType, Object value) {
+    return new PropertyImpl(type, property.name, vType, value);
   }
 
   @Test
   public void entitySimple() throws Exception {
+    Entity entity = createETAllPrim();
+
+    InputStream result = serializer.entity(edmETAllPrim, entity, contextUrl);
+    String resultString = streamToString(result);
+    String expectedResult = "{" +
+        "\"@odata.context\":\"http://localhost:8080/test.svc\","; +
+        "\"PropertyInt16\":4711," +
+        "\"PropertyString\":\"StringValue\"," +
+        "\"PropertyBoolean\":true," +
+        "\"PropertyByte\":19," +
+        "\"PropertySByte\":1," +
+        "\"PropertyInt32\":2147483647," +
+        "\"PropertyInt64\":9223372036854775807," +
+        "\"PropertySingle\":47.11," +
+        "\"PropertyDouble\":4.711," +
+        "\"PropertyDecimal\":4711.1174," +
+        "\"PropertyBinary\":\"BAcBAQ==\"," +
+        "\"PropertyDate\":\"2014-03-19\"," +
+        "\"PropertyDateTimeOffset\":\"2014-03-19T10:12:00+01:00\"," +
+        "\"PropertyDuration\":\"P16148383DT8H0S\"," +
+        "\"PropertyGuid\":\"0000aaaa-00bb-00cc-00dd-000000ffffff\"," +
+        "\"PropertyTimeOfDay\":\"10:12:00\"" +
+        "}";
+    Assert.assertEquals(expectedResult, resultString);
+  }
+
+
+  @Test
+  public void entitySetETAllPrim() throws Exception {
+    EdmEntitySet edmEntitySet = edmESAllPrim;
+    EntitySetImpl entitySet = new EntitySetImpl();
+    for (int i = 0; i < 100; i++) {
+      entitySet.getEntities().add(createETAllPrim(i));
+    }
+    entitySet.setCount(entitySet.getEntities().size());
+    entitySet.setNext(URI.create(contextUrl.getURI().toASCIIString() + 
"/next"));
+
+    InputStream result = serializer.entitySet(edmEntitySet, entitySet, 
contextUrl);
+    String resultString = streamToString(result);
+
+    Assert.assertTrue(resultString.matches("\\{" +
+        "\"@odata\\.context\":\"http://localhost:8080/test.svc\","; +
+        "\"@odata\\.count\":100," +
+        "\"value\":\\[.*\\]," +
+        "\"@odata\\.nextLink\":\"http://localhost:8080/test.svc/next\""; +
+        "\\}"));
+
+    Matcher matcher = Pattern.compile("(\\{[a-z0-9:\\=\"\\-,\\.\\+]*\\})",
+        Pattern.CASE_INSENSITIVE).matcher(resultString);
+    int count = 0;
+    while(matcher.find()) {
+      Assert.assertTrue(matcher.group().contains("PropertyInt16\":" + 
count++));
+    }
+    Assert.assertEquals(100, count);
+  }
+
+  @Test(expected = ODataRuntimeException.class)
+  public void entityETCompAllPrim() throws Exception {
+    Entity complexCtAllPrim = createETAllPrim();
 
-//    Entity entity = new EntityImpl();
-//    entity.addProperty(new PropertyImpl("Edm.String", PROPERTY_1, 
ValueType.PRIMITIVE, "Value_1"));
     Entity entity = new EntityImpl();
-    PropertyImpl property = new PropertyImpl("Edm.String", PROPERTY_1);
-    property.setValue(ValueType.PRIMITIVE, "Value_1");
-    entity.addProperty(property);
+    entity.addProperty(new PropertyImpl("Edm.Int16", 
TecSimpleProperty.Int16.name, ValueType.PRIMITIVE, 4711));
+    entity.addProperty(createProperty(new TecComplexProperty(CTAllPrim_Type, 
CTAllPrim),
+        ValueType.COMPLEX, complexCtAllPrim));
 
-    InputStream result = serializer.entity(edmEntityType, entity, contextUrl);
+    InputStream result = serializer.entity(edmETCompAllPrim, entity, 
contextUrl);
     String resultString = streamToString(result);
-//    System.out.println(resultString);
-    
Assert.assertEquals("{\"@odata.context\":\"http://localhost:8080/test.svc\",\"Property1\":\"Value_1\"}";,
-            resultString);
+    String expectedResult = "{" +
+        "\"@odata.context\":\"http://localhost:8080/test.svc\","; +
+        "\"PropertyInt16\":4711," +
+        "\"PropertyString\":\"StringValue\"," +
+        "\"PropertyBoolean\":true," +
+        "\"PropertyByte\":19," +
+        "\"PropertySByte\":1," +
+        "\"PropertyInt32\":2147483647," +
+        "\"PropertyInt64\":9223372036854775807," +
+        "\"PropertySingle\":47.11," +
+        "\"PropertyDouble\":4.711," +
+        "\"PropertyDecimal\":4711.1174," +
+        "\"PropertyBinary\":\"BAcBAQ==\"," +
+        "\"PropertyDate\":\"2014-03-19\"," +
+        "\"PropertyDateTimeOffset\":\"2014-03-19T10:12:00+01:00\"," +
+        "\"PropertyDuration\":\"P16148383DT8H0S\"," +
+        "\"PropertyGuid\":\"0000aaaa-00bb-00cc-00dd-000000ffffff\"," +
+        "\"PropertyTimeOfDay\":\"10:12:00\"" +
+        "}";
+    Assert.assertEquals(expectedResult, resultString);
+  }
+
+  private Entity createETAllPrim() {
+    return createETAllPrim(4711);
+  }
+
+  private Entity createETAllPrim(int id) {
+    Entity entity = new EntityImpl();
+    Calendar date = Calendar.getInstance();
+    date.set(2014, Calendar.MARCH, 19, 10, 12, 0);
+    date.set(Calendar.MILLISECOND, 0);
+    entity.addProperty(createProperty("Edm.Int16", TecSimpleProperty.Int16, 
ValueType.PRIMITIVE, id));
+    entity.addProperty(createProperty("Edm.String", TecSimpleProperty.String, 
ValueType.PRIMITIVE, "StringValue"));
+    entity.addProperty(createProperty("Edm.Boolean", 
TecSimpleProperty.Boolean, ValueType.PRIMITIVE, Boolean.TRUE));
+    entity.addProperty(createProperty("Edm.Byte", TecSimpleProperty.Byte, 
ValueType.PRIMITIVE, Byte.valueOf("19")));
+    entity.addProperty(createProperty("Edm.SByte", TecSimpleProperty.SByte, 
ValueType.PRIMITIVE, Short.valueOf("1")));
+    entity.addProperty(createProperty("Edm.Int32", TecSimpleProperty.Int32, 
ValueType.PRIMITIVE, Integer.MAX_VALUE));
+    entity.addProperty(createProperty("Edm.Int64", TecSimpleProperty.Int64, 
ValueType.PRIMITIVE, Long.MAX_VALUE));
+    entity.addProperty(createProperty("Edm.Single", TecSimpleProperty.Single, 
ValueType.PRIMITIVE, 47.11));
+    entity.addProperty(createProperty("Edm.Double", TecSimpleProperty.Double, 
ValueType.PRIMITIVE, 4.711));
+    entity.addProperty(createProperty("Edm.Decimal", 
TecSimpleProperty.Decimal, ValueType.PRIMITIVE, 4711.1174));
+    entity.addProperty(createProperty("Edm.Binary", TecSimpleProperty.Binary, 
ValueType.PRIMITIVE,
+        new byte[]{0x04, 0x07, 0x01, 0x01}));
+    entity.addProperty(createProperty("Edm.Date", TecSimpleProperty.Date, 
ValueType.PRIMITIVE, date));
+    entity.addProperty(createProperty("Edm.DateTimeOffset", 
TecSimpleProperty.DateTimeOffset, ValueType.PRIMITIVE,
+        date.getTime()));
+    entity.addProperty(createProperty("Edm.Duration", 
TecSimpleProperty.Duration, ValueType.PRIMITIVE,
+        date.getTimeInMillis()));
+    entity.addProperty(createProperty("Edm.Guid", TecSimpleProperty.Guid, 
ValueType.PRIMITIVE,
+        UUID.fromString("AAAA-BB-CC-DD-FFFFFF")));
+    entity.addProperty(createProperty("Edm.TimeOfDay", 
TecSimpleProperty.TimeOfDay, ValueType.PRIMITIVE, date));
+    return entity;
   }
 
   private String streamToString(InputStream result) throws IOException {

Reply via email to