Make ElementHelper.areEqual(Property, Object) handle nulls so that it can
be used correctly in equals() methods of Property impls.

Added test methods for additional equality "scenarios" in ElementHelper.


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

Branch: refs/heads/TINKERPOP-1545-tp32
Commit: c76d36600a9a3bdc77e8a2667aefe575a8f492cd
Parents: 34d9e58
Author: Lukas Krejci <[email protected]>
Authored: Thu Dec 22 01:03:53 2016 +0100
Committer: Lukas Krejci <[email protected]>
Committed: Thu Dec 22 01:03:53 2016 +0100

----------------------------------------------------------------------
 .../gremlin/structure/util/ElementHelper.java   |  6 +-
 .../structure/util/ElementHelperTest.java       | 73 ++++++++++++++++----
 2 files changed, 61 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c76d3660/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java
index d42bdee..7f06912 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelper.java
@@ -467,10 +467,8 @@ public final class ElementHelper {
      * @return true if equal and false otherwise
      */
     public static boolean areEqual(final Property a, final Object b) {
-        if (null == a)
-            throw Graph.Exceptions.argumentCanNotBeNull("a");
-        if (null == b)
-            throw Graph.Exceptions.argumentCanNotBeNull("b");
+        if (null == b || null == a)
+            return false;
 
         if (a == b)
             return true;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c76d3660/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelperTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelperTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelperTest.java
index e8ec27c..1af7174 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelperTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/util/ElementHelperTest.java
@@ -262,6 +262,23 @@ public class ElementHelperTest {
     }
 
     @Test
+    public void shouldDetermineElementsAreNotEqualWhenBothNull() {
+        assertFalse(ElementHelper.areEqual((Element) null, null));
+    }
+
+    @Test
+    public void shouldDetermineElementsAreNotEqualBecauseFirstArgumentIsNull() 
{
+        Element v = mock(Element.class);
+        assertFalse(ElementHelper.areEqual((Element) null, v));
+    }
+
+    @Test
+    public void 
shouldDetermineElementsAreNotEqualBecauseSecondArgumentIsNull() {
+        Element v = mock(Element.class);
+        assertFalse(ElementHelper.areEqual(v, null));
+    }
+
+    @Test
     public void shouldDetermineEdgesAreEqual() {
         final Element mockEdgeA = mock(Edge.class);
         final Element mockEdgeB = mock(Edge.class);
@@ -280,24 +297,19 @@ public class ElementHelperTest {
     }
 
     @Test
-    public void shouldFailPropertyAreEqualTestBecauseFirstArgumentIsNull() {
-        try {
-            ElementHelper.areEqual((Property) null, "some object");
-            fail("Should throw exception since the first argument is null");
-        } catch (IllegalArgumentException iae) {
-            
assertEquals(Graph.Exceptions.argumentCanNotBeNull("a").getMessage(), 
iae.getMessage());
-        }
+    public void shouldDeterminePropertiesAreNotEqualBecauseBothAreNull() {
+        assertFalse(ElementHelper.areEqual((Property) null, null));
+    }
+
+    @Test
+    public void 
shouldDeterminePropertiesAreNotEqualBecauseFirstArgumentIsNull() {
+        assertFalse(ElementHelper.areEqual((Property) null, "some object"));
     }
 
     @Test
-    public void shouldFailPropertyAreEqualTestBecauseSecondArgumentIsNull() {
+    public void 
shouldDeterminePropertiesAreNotEqualTestBecauseSecondArgumentIsNull() {
         final Property mockProperty = mock(Property.class);
-        try {
-            ElementHelper.areEqual(mockProperty, null);
-            fail("Should throw exception since the second argument is null");
-        } catch (IllegalArgumentException iae) {
-            
assertEquals(Graph.Exceptions.argumentCanNotBeNull("b").getMessage(), 
iae.getMessage());
-        }
+        assertFalse(ElementHelper.areEqual(mockProperty, null));
     }
 
     @Test
@@ -409,6 +421,39 @@ public class ElementHelperTest {
     }
 
     @Test
+    public void shouldDetermineAbsentPropertiesEqual() {
+        Property<?> p1 = mock(Property.class);
+        Property<?> p2 = mock(Property.class);
+
+        when(p1.isPresent()).thenReturn(false);
+        when(p2.isPresent()).thenReturn(false);
+
+        assertTrue(ElementHelper.areEqual(p1, p2));
+    }
+
+    @Test
+    public void shouldDetermineAbsentPropertyNotEqualToPresent() {
+        Property<?> p1 = mock(Property.class);
+        Property<?> p2 = mock(Property.class);
+
+        when(p1.isPresent()).thenReturn(false);
+        when(p2.isPresent()).thenReturn(true);
+
+        assertFalse(ElementHelper.areEqual(p1, p2));
+    }
+
+    @Test
+    public void shouldDeterminePresentPropertyNotEqualToAbsent() {
+        Property<?> p1 = mock(Property.class);
+        Property<?> p2 = mock(Property.class);
+
+        when(p1.isPresent()).thenReturn(true);
+        when(p2.isPresent()).thenReturn(false);
+
+        assertFalse(ElementHelper.areEqual(p1, p2));
+    }
+
+    @Test
     public void shouldExtractKeys() {
         final Set<String> keys = ElementHelper.getKeys("test1", "something", 
"test2", "something else");
         assertTrue(keys.contains("test1"));

Reply via email to