You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/09/23 15:01:36 UTC

[5/6] git commit: [OLINGO-422] Minor code refactorings and fixes

[OLINGO-422] Minor code refactorings and fixes


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

Branch: refs/heads/master
Commit: 588ae2a70c8593dba382f65b20940cd5c94ac431
Parents: a1d9f74
Author: Michael Bolz <mi...@sap.com>
Authored: Wed Sep 17 10:53:33 2014 +0200
Committer: Michael Bolz <mi...@sap.com>
Committed: Wed Sep 17 10:53:33 2014 +0200

----------------------------------------------------------------------
 .../core/serializer/utils/ContextURLHelper.java |  15 +--
 .../core/serializer/ExpandSelectMock.java       |  90 ++++++++++++++
 .../json/ODataJsonSerializerTest.java           | 116 +++++--------------
 .../serializer/utils/ContextURLHelperTest.java  |  82 ++++++++-----
 4 files changed, 184 insertions(+), 119 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/588ae2a7/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelper.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelper.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelper.java
index 49aa3c3..5c7d3a6 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelper.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelper.java
@@ -47,8 +47,7 @@ public final class ContextURLHelper {
   public static String buildSelectList(final EdmEntityType entityType,
       final ExpandOption expand, final SelectOption select) throws ODataSerializerException {
     StringBuilder result = new StringBuilder();
-    boolean isSelected = select != null && select.getSelectItems() != null && !select.getSelectItems().isEmpty();
-    if(isSelected) {
+    if (ExpandSelectHelper.hasSelect(select)) {
       handleSelect(entityType, select, result);
     }
 
@@ -58,7 +57,7 @@ public final class ContextURLHelper {
     return result.length() == 0 ? null : result.toString();
   }
 
-  private static void handleSelect(EdmEntityType entityType, SelectOption select, StringBuilder result) {
+  private static void handleSelect(final EdmEntityType entityType, final SelectOption select, StringBuilder result) {
     if (ExpandSelectHelper.isAll(select)) {
       result.append('*');
     } else {
@@ -98,7 +97,7 @@ public final class ContextURLHelper {
     }
   }
 
-  private static void handleExpand(EdmEntityType entityType, ExpandOption expand, StringBuilder result)
+  private static void handleExpand(final EdmEntityType entityType, final ExpandOption expand, StringBuilder result)
       throws ODataSerializerException {
     final Set<String> expandedPropertyNames = ExpandSelectHelper.getExpandedPropertyNames(expand.getExpandItems());
     for (final String propertyName : entityType.getNavigationPropertyNames()) {
@@ -109,10 +108,12 @@ public final class ContextURLHelper {
             || ExpandSelectHelper.hasSelect(expandItem.getSelectOption())) {
           final String innerSelectList = buildSelectList(entityType.getNavigationProperty(propertyName).getType(),
               expandItem.getExpandOption(), expandItem.getSelectOption());
-          if (result.length() > 0) {
-            result.append(',');
+          if (innerSelectList != null) {
+            if (result.length() > 0) {
+              result.append(',');
+            }
+            result.append(Encoder.encode(propertyName)).append('(').append(innerSelectList).append(')');
           }
-          result.append(Encoder.encode(propertyName)).append('(').append(innerSelectList).append(')');
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/588ae2a7/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/ExpandSelectMock.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/ExpandSelectMock.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/ExpandSelectMock.java
new file mode 100644
index 0000000..1bf2c9d
--- /dev/null
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/ExpandSelectMock.java
@@ -0,0 +1,90 @@
+/*
+ * 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.serializer;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.olingo.commons.api.edm.EdmElement;
+import org.apache.olingo.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
+import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.EdmStructuredType;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
+import org.apache.olingo.server.api.uri.UriInfoResource;
+import org.apache.olingo.server.api.uri.UriResource;
+import org.apache.olingo.server.api.uri.UriResourceNavigation;
+import org.apache.olingo.server.api.uri.UriResourceProperty;
+import org.apache.olingo.server.api.uri.queryoption.ExpandItem;
+import org.apache.olingo.server.api.uri.queryoption.ExpandOption;
+import org.apache.olingo.server.api.uri.queryoption.SelectItem;
+import org.apache.olingo.server.api.uri.queryoption.SelectOption;
+import org.mockito.Mockito;
+
+public final class ExpandSelectMock {
+
+  private static UriInfoResource mockResource(final EdmEntitySet edmEntitySet, final String... names) {
+    EdmStructuredType type = edmEntitySet.getEntityType();
+    List<UriResource> elements = new ArrayList<UriResource>();
+    for (final String name : Arrays.asList(names)) {
+      final EdmElement edmElement = type.getProperty(name);
+      if (edmElement.getType().getKind() == EdmTypeKind.ENTITY) {
+        UriResourceNavigation element = Mockito.mock(UriResourceNavigation.class);
+        Mockito.when(element.getProperty()).thenReturn((EdmNavigationProperty) edmElement);
+        elements.add(element);
+      } else {
+        final EdmProperty property = (EdmProperty) edmElement;
+        UriResourceProperty element = Mockito.mock(UriResourceProperty.class);
+        Mockito.when(element.getProperty()).thenReturn(property);
+        elements.add(element);
+        type = property.isPrimitive() ? null : (EdmStructuredType) property.getType();
+      }
+    }
+    UriInfoResource resource = Mockito.mock(UriInfoResource.class);
+    Mockito.when(resource.getUriResourceParts()).thenReturn(elements);
+    return resource;
+  }
+
+  public static SelectItem mockSelectItem(final EdmEntitySet edmEntitySet, final String... names) {
+    final UriInfoResource resource = mockResource(edmEntitySet, names);
+    SelectItem selectItem = Mockito.mock(SelectItem.class);
+    Mockito.when(selectItem.getResourcePath()).thenReturn(resource);
+    return selectItem;
+  }
+
+  public static SelectOption mockSelectOption(final List<SelectItem> selectItems) {
+    SelectOption select = Mockito.mock(SelectOption.class);
+    Mockito.when(select.getSelectItems()).thenReturn(selectItems);
+    return select;
+  }
+
+  public static ExpandItem mockExpandItem(final EdmEntitySet edmEntitySet, final String... names) {
+    final UriInfoResource resource = mockResource(edmEntitySet, names);
+    ExpandItem expandItem = Mockito.mock(ExpandItem.class);
+    Mockito.when(expandItem.getResourcePath()).thenReturn(resource);
+    return expandItem;
+  }
+
+  public static ExpandOption mockExpandOption(final List<ExpandItem> expandItems) {
+    ExpandOption expand = Mockito.mock(ExpandOption.class);
+    Mockito.when(expand.getExpandItems()).thenReturn(expandItems);
+    return expand;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/588ae2a7/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 c22f677..83e2173 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
@@ -20,9 +20,7 @@ package org.apache.olingo.server.core.serializer.json;
 
 import java.io.InputStream;
 import java.net.URI;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.olingo.commons.api.data.ContextURL;
@@ -31,28 +29,20 @@ import org.apache.olingo.commons.api.data.Entity;
 import org.apache.olingo.commons.api.data.EntitySet;
 import org.apache.olingo.commons.api.data.ValueType;
 import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmElement;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
-import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
-import org.apache.olingo.commons.api.edm.EdmProperty;
-import org.apache.olingo.commons.api.edm.EdmStructuredType;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
-import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.serializer.ODataSerializer;
 import org.apache.olingo.server.api.serializer.ODataSerializerException;
 import org.apache.olingo.server.api.serializer.ODataSerializerOptions;
-import org.apache.olingo.server.api.uri.UriInfoResource;
-import org.apache.olingo.server.api.uri.UriResource;
-import org.apache.olingo.server.api.uri.UriResourceNavigation;
-import org.apache.olingo.server.api.uri.UriResourceProperty;
 import org.apache.olingo.server.api.uri.queryoption.CountOption;
 import org.apache.olingo.server.api.uri.queryoption.ExpandItem;
 import org.apache.olingo.server.api.uri.queryoption.ExpandOption;
 import org.apache.olingo.server.api.uri.queryoption.SelectItem;
 import org.apache.olingo.server.api.uri.queryoption.SelectOption;
+import org.apache.olingo.server.core.serializer.ExpandSelectMock;
 import org.apache.olingo.server.tecsvc.data.DataProvider;
 import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
 import org.hamcrest.CoreMatchers;
@@ -347,9 +337,10 @@ public class ODataJsonSerializerTest {
   public void select() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
     final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
-    final SelectItem selectItem1 = mockSelectItem(edmEntitySet, "PropertyDate");
-    final SelectItem selectItem2 = mockSelectItem(edmEntitySet, "PropertyBoolean");
-    final SelectOption select = mockSelectOption(Arrays.asList(selectItem1, selectItem2, selectItem2));
+    final SelectItem selectItem1 = ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyDate");
+    final SelectItem selectItem2 = ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyBoolean");
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        selectItem1, selectItem2, selectItem2));
     InputStream result = serializer
         .entity(edmEntitySet, entity,
             ODataSerializerOptions.with()
@@ -369,10 +360,10 @@ public class ODataJsonSerializerTest {
   public void selectAll() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESTwoPrim");
     final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
-    final SelectItem selectItem1 = mockSelectItem(edmEntitySet, "PropertyString");
+    final SelectItem selectItem1 = ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyString");
     SelectItem selectItem2 = Mockito.mock(SelectItem.class);
     Mockito.when(selectItem2.isStar()).thenReturn(true);
-    final SelectOption select = mockSelectOption(Arrays.asList(selectItem1, selectItem2));
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(selectItem1, selectItem2));
     InputStream result = serializer.entity(edmEntitySet, entity,
         ODataSerializerOptions.with()
             .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build())
@@ -388,8 +379,8 @@ public class ODataJsonSerializerTest {
   public void selectComplex() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESCompComp");
     final EntitySet entitySet = data.readAll(edmEntitySet);
-    final SelectOption select = mockSelectOption(Arrays.asList(
-        mockSelectItem(edmEntitySet, "PropertyComp", "PropertyComp", "PropertyString")));
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", "PropertyComp", "PropertyString")));
     InputStream result = serializer
         .entitySet(edmEntitySet, entitySet,
             ODataSerializerOptions.with()
@@ -411,9 +402,9 @@ public class ODataJsonSerializerTest {
   public void selectComplexTwice() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESCompComp");
     final EntitySet entitySet = data.readAll(edmEntitySet);
-    final SelectOption select = mockSelectOption(Arrays.asList(
-        mockSelectItem(edmEntitySet, "PropertyComp", "PropertyComp", "PropertyString"),
-        mockSelectItem(edmEntitySet, "PropertyComp", "PropertyComp")));
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", "PropertyComp", "PropertyString"),
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", "PropertyComp")));
     final String resultString = IOUtils.toString(serializer
         .entitySet(edmEntitySet, entitySet,
             ODataSerializerOptions.with()
@@ -434,8 +425,8 @@ public class ODataJsonSerializerTest {
   public void expand() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESTwoPrim");
     final Entity entity = data.readAll(edmEntitySet).getEntities().get(3);
-    final ExpandOption expand = mockExpandOption(Arrays.asList(
-        mockExpandItem(edmEntitySet, "NavPropertyETAllPrimOne")));
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(
+        ExpandSelectMock.mockExpandItem(edmEntitySet, "NavPropertyETAllPrimOne")));
     InputStream result = serializer.entity(edmEntitySet, entity,
         ODataSerializerOptions.with()
             .contextURL(ContextURL.with().entitySet(edmEntitySet).suffix(Suffix.ENTITY).build())
@@ -468,11 +459,11 @@ public class ODataJsonSerializerTest {
   public void expandSelect() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESTwoPrim");
     final Entity entity = data.readAll(edmEntitySet).getEntities().get(3);
-    final SelectOption select = mockSelectOption(Arrays.asList(
-        mockSelectItem(entityContainer.getEntitySet("ESAllPrim"), "PropertyDate")));
-    ExpandItem expandItem = mockExpandItem(edmEntitySet, "NavPropertyETAllPrimOne");
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        ExpandSelectMock.mockSelectItem(entityContainer.getEntitySet("ESAllPrim"), "PropertyDate")));
+    ExpandItem expandItem = ExpandSelectMock.mockExpandItem(edmEntitySet, "NavPropertyETAllPrimOne");
     Mockito.when(expandItem.getSelectOption()).thenReturn(select);
-    final ExpandOption expand = mockExpandOption(Arrays.asList(expandItem));
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItem));
     final String resultString = IOUtils.toString(serializer
         .entity(edmEntitySet, entity,
             ODataSerializerOptions.with()
@@ -492,11 +483,13 @@ public class ODataJsonSerializerTest {
   public void expandAll() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
     final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
-    final ExpandItem expandItem = mockExpandItem(edmEntitySet, "NavPropertyETTwoPrimOne");
+    final ExpandItem expandItem = ExpandSelectMock.mockExpandItem(edmEntitySet, "NavPropertyETTwoPrimOne");
     ExpandItem expandItemAll = Mockito.mock(ExpandItem.class);
     Mockito.when(expandItemAll.isStar()).thenReturn(true);
-    final ExpandOption expand = mockExpandOption(Arrays.asList(expandItem, expandItem, expandItemAll));
-    final SelectOption select = mockSelectOption(Arrays.asList(mockSelectItem(edmEntitySet, "PropertySByte")));
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(
+        expandItem, expandItem, expandItemAll));
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertySByte")));
     final String resultString = IOUtils.toString(serializer
         .entity(edmEntitySet, entity,
             ODataSerializerOptions.with()
@@ -520,8 +513,9 @@ public class ODataJsonSerializerTest {
     final Entity entity = data.readAll(edmEntitySet).getEntities().get(1);
     ExpandItem expandItemAll = Mockito.mock(ExpandItem.class);
     Mockito.when(expandItemAll.isStar()).thenReturn(true);
-    final ExpandOption expand = mockExpandOption(Arrays.asList(expandItemAll));
-    final SelectOption select = mockSelectOption(Arrays.asList(mockSelectItem(edmEntitySet, "PropertyTimeOfDay")));
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItemAll));
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyTimeOfDay")));
     final String resultString = IOUtils.toString(serializer
         .entity(edmEntitySet, entity,
             ODataSerializerOptions.with()
@@ -545,13 +539,13 @@ public class ODataJsonSerializerTest {
     final Entity entity = data.readAll(edmEntitySet).getEntities().get(1);
     ExpandItem expandItemSecond = Mockito.mock(ExpandItem.class);
     Mockito.when(expandItemSecond.isStar()).thenReturn(true);
-    final ExpandOption expandInner = mockExpandOption(Arrays.asList(expandItemSecond));
-    ExpandItem expandItemFirst = mockExpandItem(edmEntitySet, "NavPropertyETAllPrimMany");
+    final ExpandOption expandInner = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItemSecond));
+    ExpandItem expandItemFirst = ExpandSelectMock.mockExpandItem(edmEntitySet, "NavPropertyETAllPrimMany");
     Mockito.when(expandItemFirst.getExpandOption()).thenReturn(expandInner);
-    final SelectOption select = mockSelectOption(Arrays.asList(
-        mockSelectItem(innerEntitySet, "PropertyInt32")));
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        ExpandSelectMock.mockSelectItem(innerEntitySet, "PropertyInt32")));
     Mockito.when(expandItemFirst.getSelectOption()).thenReturn(select);
-    final ExpandOption expand = mockExpandOption(Arrays.asList(expandItemFirst));
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItemFirst));
     final String resultString = IOUtils.toString(serializer
         .entity(edmEntitySet, entity,
             ODataSerializerOptions.with()
@@ -572,52 +566,4 @@ public class ODataJsonSerializerTest {
         + "{\"PropertyInt16\":32767,\"PropertyString\":\"Test String4\"}]}]}",
         resultString);
   }
-
-  private static UriInfoResource mockResource(final EdmEntitySet edmEntitySet, final String... names) {
-    EdmStructuredType type = edmEntitySet.getEntityType();
-    List<UriResource> elements = new ArrayList<UriResource>();
-    for (final String name : Arrays.asList(names)) {
-      final EdmElement edmElement = type.getProperty(name);
-      if (edmElement.getType().getKind() == EdmTypeKind.ENTITY) {
-        UriResourceNavigation element = Mockito.mock(UriResourceNavigation.class);
-        Mockito.when(element.getProperty()).thenReturn((EdmNavigationProperty) edmElement);
-        elements.add(element);
-      } else {
-        final EdmProperty property = (EdmProperty) edmElement;
-        UriResourceProperty element = Mockito.mock(UriResourceProperty.class);
-        Mockito.when(element.getProperty()).thenReturn(property);
-        elements.add(element);
-        type = property.isPrimitive() ? null : (EdmStructuredType) property.getType();
-      }
-    }
-    UriInfoResource resource = Mockito.mock(UriInfoResource.class);
-    Mockito.when(resource.getUriResourceParts()).thenReturn(elements);
-    return resource;
-  }
-
-  public static SelectItem mockSelectItem(final EdmEntitySet edmEntitySet, final String... names) {
-    final UriInfoResource resource = mockResource(edmEntitySet, names);
-    SelectItem selectItem = Mockito.mock(SelectItem.class);
-    Mockito.when(selectItem.getResourcePath()).thenReturn(resource);
-    return selectItem;
-  }
-
-  public static SelectOption mockSelectOption(final List<SelectItem> selectItems) {
-    SelectOption select = Mockito.mock(SelectOption.class);
-    Mockito.when(select.getSelectItems()).thenReturn(selectItems);
-    return select;
-  }
-
-  public static ExpandItem mockExpandItem(final EdmEntitySet edmEntitySet, final String... names) {
-    final UriInfoResource resource = mockResource(edmEntitySet, names);
-    ExpandItem expandItem = Mockito.mock(ExpandItem.class);
-    Mockito.when(expandItem.getResourcePath()).thenReturn(resource);
-    return expandItem;
-  }
-
-  public static ExpandOption mockExpandOption(final List<ExpandItem> expandItems) {
-    ExpandOption expand = Mockito.mock(ExpandOption.class);
-    Mockito.when(expand.getExpandItems()).thenReturn(expandItems);
-    return expand;
-  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/588ae2a7/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
index 96f8817..f622cd1 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
@@ -32,7 +32,7 @@ import org.apache.olingo.server.api.uri.queryoption.ExpandItem;
 import org.apache.olingo.server.api.uri.queryoption.ExpandOption;
 import org.apache.olingo.server.api.uri.queryoption.SelectItem;
 import org.apache.olingo.server.api.uri.queryoption.SelectOption;
-import org.apache.olingo.server.core.serializer.json.ODataJsonSerializerTest;
+import org.apache.olingo.server.core.serializer.ExpandSelectMock;
 import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -46,9 +46,9 @@ public class ContextURLHelperTest {
   @Test
   public void buildSelect() throws Exception {
     final EdmEntitySet entitySet = entityContainer.getEntitySet("ESAllPrim");
-    final SelectItem selectItem1 = ODataJsonSerializerTest.mockSelectItem(entitySet, "PropertyString");
-    final SelectItem selectItem2 = ODataJsonSerializerTest.mockSelectItem(entitySet, "PropertyInt16");
-    final SelectOption select = ODataJsonSerializerTest.mockSelectOption(Arrays.asList(
+    final SelectItem selectItem1 = ExpandSelectMock.mockSelectItem(entitySet, "PropertyString");
+    final SelectItem selectItem2 = ExpandSelectMock.mockSelectItem(entitySet, "PropertyInt16");
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
         selectItem1, selectItem2, selectItem2));
     final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
         .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), null, select)).build();
@@ -59,10 +59,10 @@ public class ContextURLHelperTest {
   @Test
   public void buildSelectAll() throws Exception {
     final EdmEntitySet entitySet = entityContainer.getEntitySet("ESAllPrim");
-    final SelectItem selectItem1 = ODataJsonSerializerTest.mockSelectItem(entitySet, "PropertyGuid");
+    final SelectItem selectItem1 = ExpandSelectMock.mockSelectItem(entitySet, "PropertyGuid");
     SelectItem selectItem2 = Mockito.mock(SelectItem.class);
     Mockito.when(selectItem2.isStar()).thenReturn(true);
-    final SelectOption select = ODataJsonSerializerTest.mockSelectOption(Arrays.asList(selectItem1, selectItem2));
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(selectItem1, selectItem2));
     final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
         .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), null, select)).build();
     assertEquals("$metadata#ESAllPrim(*)", ContextURLBuilder.create(contextURL).toASCIIString());
@@ -71,14 +71,14 @@ public class ContextURLHelperTest {
   @Test
   public void buildSelectComplex() throws Exception {
     final EdmEntitySet entitySet = entityContainer.getEntitySet("ESCompMixPrimCollComp");
-    final SelectOption select = ODataJsonSerializerTest.mockSelectOption(Arrays.asList(
-        ODataJsonSerializerTest.mockSelectItem(entitySet,
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        ExpandSelectMock.mockSelectItem(entitySet,
             "PropertyMixedPrimCollComp", "PropertyComp", "PropertyString"),
-        ODataJsonSerializerTest.mockSelectItem(entitySet,
+        ExpandSelectMock.mockSelectItem(entitySet,
             "PropertyMixedPrimCollComp", "PropertyComp", "PropertyInt16"),
-        ODataJsonSerializerTest.mockSelectItem(entitySet, "PropertyMixedPrimCollComp", "CollPropertyString"),
-        ODataJsonSerializerTest.mockSelectItem(entitySet, "PropertyMixedPrimCollComp", "CollPropertyComp"),
-        ODataJsonSerializerTest.mockSelectItem(entitySet, "PropertyInt16")));
+        ExpandSelectMock.mockSelectItem(entitySet, "PropertyMixedPrimCollComp", "CollPropertyString"),
+        ExpandSelectMock.mockSelectItem(entitySet, "PropertyMixedPrimCollComp", "CollPropertyComp"),
+        ExpandSelectMock.mockSelectItem(entitySet, "PropertyInt16")));
     final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
         .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), null, select)).build();
     assertEquals("$metadata#ESCompMixPrimCollComp("
@@ -95,7 +95,7 @@ public class ContextURLHelperTest {
     final EdmEntitySet entitySet = entityContainer.getEntitySet("ESTwoPrim");
     ExpandItem expandItem = Mockito.mock(ExpandItem.class);
     Mockito.when(expandItem.isStar()).thenReturn(true);
-    final ExpandOption expand = ODataJsonSerializerTest.mockExpandOption(Arrays.asList(expandItem));
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItem));
     final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
         .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), expand, null)).build();
     assertEquals("$metadata#ESTwoPrim", ContextURLBuilder.create(contextURL).toASCIIString());
@@ -104,8 +104,8 @@ public class ContextURLHelperTest {
   @Test
   public void buildExpandNoSelect() throws Exception {
     final EdmEntitySet entitySet = entityContainer.getEntitySet("ESTwoPrim");
-    final ExpandOption expand = ODataJsonSerializerTest.mockExpandOption(Arrays.asList(
-        ODataJsonSerializerTest.mockExpandItem(entitySet, "NavPropertyETAllPrimOne")));
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(
+        ExpandSelectMock.mockExpandItem(entitySet, "NavPropertyETAllPrimOne")));
     final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
         .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), expand, null)).build();
     assertEquals("$metadata#ESTwoPrim", ContextURLBuilder.create(contextURL).toASCIIString());
@@ -114,16 +114,16 @@ public class ContextURLHelperTest {
   @Test
   public void buildExpandSelect() throws Exception {
     final EdmEntitySet entitySet = entityContainer.getEntitySet("ESTwoPrim");
-    final ExpandItem expandItem1 = ODataJsonSerializerTest.mockExpandItem(entitySet, "NavPropertyETAllPrimOne");
+    final ExpandItem expandItem1 = ExpandSelectMock.mockExpandItem(entitySet, "NavPropertyETAllPrimOne");
     final EdmEntitySet innerEntitySet = entityContainer.getEntitySet("ESAllPrim");
-    ExpandItem expandItem2 = ODataJsonSerializerTest.mockExpandItem(entitySet, "NavPropertyETAllPrimMany");
-    final SelectOption innerSelect = ODataJsonSerializerTest.mockSelectOption(Arrays.asList(
-        ODataJsonSerializerTest.mockSelectItem(innerEntitySet, "PropertyInt32")));
+    ExpandItem expandItem2 = ExpandSelectMock.mockExpandItem(entitySet, "NavPropertyETAllPrimMany");
+    final SelectOption innerSelect = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        ExpandSelectMock.mockSelectItem(innerEntitySet, "PropertyInt32")));
     Mockito.when(expandItem2.getSelectOption()).thenReturn(innerSelect);
-    final ExpandOption expand = ODataJsonSerializerTest.mockExpandOption(Arrays.asList(
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(
         expandItem1, expandItem2));
-    final SelectItem selectItem = ODataJsonSerializerTest.mockSelectItem(entitySet, "PropertyString");
-    final SelectOption select = ODataJsonSerializerTest.mockSelectOption(Arrays.asList(selectItem));
+    final SelectItem selectItem = ExpandSelectMock.mockSelectItem(entitySet, "PropertyString");
+    final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(selectItem));
     final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
         .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), expand, select)).build();
     assertEquals("$metadata#ESTwoPrim(PropertyString,NavPropertyETAllPrimMany(PropertyInt32))",
@@ -131,18 +131,46 @@ public class ContextURLHelperTest {
   }
 
   @Test
+  public void buildExpandTwoLevels() throws Exception {
+    final EdmEntitySet entitySet = entityContainer.getEntitySet("ESTwoPrim");
+    final EdmEntitySet innerEntitySet = entityContainer.getEntitySet("ESAllPrim");
+    final ExpandOption innerExpand = ExpandSelectMock.mockExpandOption(Arrays.asList(
+        ExpandSelectMock.mockExpandItem(innerEntitySet, "NavPropertyETTwoPrimOne")));
+    ExpandItem expandItem = ExpandSelectMock.mockExpandItem(entitySet, "NavPropertyETAllPrimOne");
+    Mockito.when(expandItem.getExpandOption()).thenReturn(innerExpand);
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItem));
+    final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
+        .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), expand, null)).build();
+    assertEquals("$metadata#ESTwoPrim", ContextURLBuilder.create(contextURL).toASCIIString());
+  }
+
+  @Test
+  public void buildExpandTwoLevelsInnerAll() throws Exception {
+    final EdmEntitySet entitySet = entityContainer.getEntitySet("ESTwoPrim");
+    ExpandItem expandItemInner = Mockito.mock(ExpandItem.class);
+    Mockito.when(expandItemInner.isStar()).thenReturn(true);
+    final ExpandOption innerExpand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItemInner));
+    ExpandItem expandItem = ExpandSelectMock.mockExpandItem(entitySet, "NavPropertyETAllPrimOne");
+    Mockito.when(expandItem.getExpandOption()).thenReturn(innerExpand);
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItem));
+    final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
+        .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), expand, null)).build();
+    assertEquals("$metadata#ESTwoPrim", ContextURLBuilder.create(contextURL).toASCIIString());
+  }
+
+  @Test
   public void buildExpandSelectTwoLevels() throws Exception {
     final EdmEntitySet entitySet = entityContainer.getEntitySet("ESTwoPrim");
     final EdmEntitySet innerEntitySet = entityContainer.getEntitySet("ESAllPrim");
-    ExpandItem expandItemInner = ODataJsonSerializerTest.mockExpandItem(innerEntitySet, "NavPropertyETTwoPrimOne");
+    ExpandItem expandItemInner = ExpandSelectMock.mockExpandItem(innerEntitySet, "NavPropertyETTwoPrimOne");
     SelectItem innerSelectItem = Mockito.mock(SelectItem.class);
     Mockito.when(innerSelectItem.isStar()).thenReturn(true);
-    final SelectOption innerSelect = ODataJsonSerializerTest.mockSelectOption(Arrays.asList(innerSelectItem));
+    final SelectOption innerSelect = ExpandSelectMock.mockSelectOption(Arrays.asList(innerSelectItem));
     Mockito.when(expandItemInner.getSelectOption()).thenReturn(innerSelect);
-    final ExpandOption innerExpand = ODataJsonSerializerTest.mockExpandOption(Arrays.asList(expandItemInner));
-    ExpandItem expandItem = ODataJsonSerializerTest.mockExpandItem(entitySet, "NavPropertyETAllPrimOne");
+    final ExpandOption innerExpand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItemInner));
+    ExpandItem expandItem = ExpandSelectMock.mockExpandItem(entitySet, "NavPropertyETAllPrimOne");
     Mockito.when(expandItem.getExpandOption()).thenReturn(innerExpand);
-    final ExpandOption expand = ODataJsonSerializerTest.mockExpandOption(Arrays.asList(expandItem));
+    final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItem));
     final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
         .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), expand, null)).build();
     assertEquals("$metadata#ESTwoPrim(NavPropertyETAllPrimOne(NavPropertyETTwoPrimOne(*)))",