Repository: tinkerpop
Updated Branches:
  refs/heads/master f8092a1a8 -> 19a5c389e


Made `has[Id|Label|Key|Value]` compatible with the old varargs method signature 
and added tests to ensure the compatibility.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5cd2bcaf
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5cd2bcaf
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5cd2bcaf

Branch: refs/heads/master
Commit: 5cd2bcaff3892a06673f7b0b6db2d45649793700
Parents: 4293eb3
Author: Daniel Kuppitz <daniel_kupp...@hotmail.com>
Authored: Fri Sep 16 18:06:08 2016 +0200
Committer: Daniel Kuppitz <daniel_kupp...@hotmail.com>
Committed: Fri Sep 16 18:06:08 2016 +0200

----------------------------------------------------------------------
 .../traversal/dsl/graph/GraphTraversal.java     | 21 +++----
 .../traversal/step/filter/HasStepTest.java      | 66 ++++++++++++++++++++
 2 files changed, 73 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5cd2bcaf/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index d025184..c8af8ca 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -968,27 +968,20 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
     }
 
     public default GraphTraversal<S, E> has(final T accessor, final Object 
value, final Object... values) {
-        final Object[] objects;
         if (value instanceof Object[]) {
             final Object[] arr = (Object[]) value;
             if (values.length == 0) {
                 if (arr.length == 1) {
-                    return has(accessor, P.eq(arr));
+                    return has(accessor, P.eq(arr[0]));
                 }
-                objects = arr;
-            } else {
-                objects = new Object[arr.length + values.length];
-                System.arraycopy(arr, 0, objects, 0, arr.length);
-                System.arraycopy(values, 0, objects, arr.length, 
values.length);
+                return has(accessor, P.within(arr));
             }
-        } else {
-            if (values.length == 0) {
-                return has(accessor, value instanceof P ? (P) value : 
P.eq(value));
-            }
-            objects = new Object[values.length + 1];
-            objects[0] = value;
-            System.arraycopy(values, 0, objects, 1, values.length);
+        } else if (values.length == 0) {
+            return has(accessor, value instanceof P ? (P) value : P.eq(value));
         }
+        final Object[] objects = new Object[values.length + 1];
+        objects[0] = value;
+        System.arraycopy(values, 0, objects, 1, values.length);
         return has(accessor, P.within(objects));
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5cd2bcaf/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java
index 90ef4a2..63c843d 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasStepTest.java
@@ -18,14 +18,19 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.StepTest;
+import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.List;
 
+import static org.apache.tinkerpop.gremlin.process.traversal.P.eq;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.within;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
+import static org.junit.Assert.assertEquals;
 
 /**
  * @author Daniel Kuppitz (http://gremlin.guru)
@@ -50,4 +55,65 @@ public class HasStepTest extends StepTest {
                 __.hasValue("josh")
         );
     }
+
+    /**
+     * This test ensures that `has[Id|Label|Key|Value]` are compatible with 
the old varargs method signatures.
+     */
+    @Test
+    public void testVarargsCompatibility() {
+        final List<List<Traversal>> traversalLists = Arrays.asList(
+                // hasId(Object id, Object... moreIds) should be compatible 
with hasId(Object... ids)
+                Arrays.asList(
+                        __.hasId(1),
+                        __.hasId(eq(1)),
+                        __.hasId(new Integer[]{1})),
+                Arrays.asList(
+                        __.hasId(1, 2),
+                        __.hasId(within(1, 2)),
+                        __.hasId(new Integer[]{1, 2})),
+
+                // hasLabel(Object label, Object... moreLabels) should be 
compatible with hasLabel(Object... labels)
+                Arrays.asList(
+                        __.hasLabel("person"),
+                        __.hasLabel(eq("person")),
+                        __.hasLabel(new String[]{"person"})),
+                Arrays.asList(
+                        __.hasLabel("person", "software"),
+                        __.hasLabel(within("person", "software")),
+                        __.hasLabel(new String[]{"person", "software"})),
+
+                // hasKey(Object key, Object... moreKeys) should be compatible 
with hasKey(Object... keys)
+                Arrays.asList(
+                        __.hasKey("name"),
+                        __.hasKey(eq("name")),
+                        __.hasKey(new String[]{"name"})),
+                Arrays.asList(
+                        __.hasKey("name", "age"),
+                        __.hasKey(within("name", "age")),
+                        __.hasKey(new String[]{"name", "age"})),
+
+                // hasValue(Object value, Object... moreValues) should be 
compatible with hasValue(Object... values)
+                Arrays.asList(
+                        __.hasValue("marko"),
+                        __.hasValue(eq("marko")),
+                        __.hasValue(new String[]{"marko"})),
+                Arrays.asList(
+                        __.hasValue("marko", 32),
+                        __.hasValue(within("marko", 32)),
+                        __.hasValue(new Object[]{"marko", 32}))
+        );
+        
+        for (final List<Traversal> traversals : traversalLists) {
+            for (Traversal traversal1 : traversals) {
+                final Step step1 = traversal1.asAdmin().getEndStep();
+                assertEquals(step1, step1.clone());
+                assertEquals(step1.hashCode(), step1.clone().hashCode());
+                for (Traversal traversal2 : traversals) {
+                    final Step step2 = traversal2.asAdmin().getEndStep();
+                    assertEquals(step1, step2);
+                    assertEquals(step1.hashCode(), step2.hashCode());
+                }
+            }
+        }
+    }
 }

Reply via email to