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"));
