From b593e9a223b4d80e5f74b3af7f2068dcaec8102b Mon Sep 17 00:00:00 2001 From: tobrun Date: Tue, 29 May 2018 13:10:16 +0200 Subject: [android] - fix literal wrapping in comparission expressions --- .../mapboxsdk/style/expressions/Expression.java | 28 +++++++------- .../style/expressions/ExpressionTest.java | 44 +++++++++++++++++++++- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java index c8f848f4d7..6497eb4e17 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java @@ -180,6 +180,8 @@ public class Expression { public static Expression literal(@NonNull Object object) { if (object.getClass().isArray()) { return literal(ExpressionArray.toObjectArray(object)); + } else if(object instanceof Expression){ + throw new RuntimeException("Can't convert an expression to a literal"); } return new ExpressionLiteral(object); } @@ -426,7 +428,7 @@ public class Expression { * @see Style specification */ public static Expression eq(@NonNull Expression compareOne, @NonNull String compareTwo) { - return eq(literal(compareOne), literal(compareTwo)); + return eq(compareOne, literal(compareTwo)); } /** @@ -449,7 +451,7 @@ public class Expression { * @see Style specification */ public static Expression eq(@NonNull Expression compareOne, @NonNull Number compareTwo) { - return eq(literal(compareOne), literal(compareTwo)); + return eq(compareOne, literal(compareTwo)); } /** @@ -496,7 +498,7 @@ public class Expression { * @see Style specification */ public static Expression neq(Expression compareOne, boolean compareTwo) { - return new Expression("!=", literal(compareOne), literal(compareTwo)); + return new Expression("!=", compareOne, literal(compareTwo)); } /** @@ -519,7 +521,7 @@ public class Expression { * @see Style specification */ public static Expression neq(@NonNull Expression compareOne, @NonNull String compareTwo) { - return new Expression("!=", literal(compareOne), literal(compareTwo)); + return new Expression("!=", compareOne, literal(compareTwo)); } /** @@ -542,7 +544,7 @@ public class Expression { * @see Style specification */ public static Expression neq(@NonNull Expression compareOne, @NonNull Number compareTwo) { - return new Expression("!=", literal(compareOne), literal(compareTwo)); + return new Expression("!=", compareOne, literal(compareTwo)); } /** @@ -589,7 +591,7 @@ public class Expression { * @see Style specification */ public static Expression gt(@NonNull Expression compareOne, @NonNull Number compareTwo) { - return new Expression(">", literal(compareOne), literal(compareTwo)); + return new Expression(">", compareOne, literal(compareTwo)); } /** @@ -612,7 +614,7 @@ public class Expression { * @see Style specification */ public static Expression gt(@NonNull Expression compareOne, @NonNull String compareTwo) { - return new Expression(">", literal(compareOne), literal(compareTwo)); + return new Expression(">", compareOne, literal(compareTwo)); } /** @@ -659,7 +661,7 @@ public class Expression { * @see Style specification */ public static Expression lt(@NonNull Expression compareOne, @NonNull Number compareTwo) { - return new Expression("<", literal(compareOne), literal(compareTwo)); + return new Expression("<", compareOne, literal(compareTwo)); } /** @@ -682,7 +684,7 @@ public class Expression { * @see Style specification */ public static Expression lt(@NonNull Expression compareOne, @NonNull String compareTwo) { - return new Expression("<", literal(compareOne), literal(compareTwo)); + return new Expression("<", compareOne, literal(compareTwo)); } /** @@ -729,7 +731,7 @@ public class Expression { * @see Style specification */ public static Expression gte(@NonNull Expression compareOne, @NonNull Number compareTwo) { - return new Expression(">=", literal(compareOne), literal(compareTwo)); + return new Expression(">=", compareOne, literal(compareTwo)); } /** @@ -752,7 +754,7 @@ public class Expression { * @see Style specification */ public static Expression gte(@NonNull Expression compareOne, @NonNull String compareTwo) { - return new Expression(">=", literal(compareOne), literal(compareTwo)); + return new Expression(">=", compareOne, literal(compareTwo)); } /** @@ -799,7 +801,7 @@ public class Expression { * @see Style specification */ public static Expression lte(@NonNull Expression compareOne, @NonNull Number compareTwo) { - return new Expression("<=", literal(compareOne), literal(compareTwo)); + return new Expression("<=", compareOne, literal(compareTwo)); } /** @@ -822,7 +824,7 @@ public class Expression { * @see Style specification */ public static Expression lte(@NonNull Expression compareOne, @NonNull String compareTwo) { - return new Expression("<=", literal(compareOne), literal(compareTwo)); + return new Expression("<=", compareOne, literal(compareTwo)); } /** diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java index f87fd31172..1070a25f55 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java @@ -1,9 +1,7 @@ package com.mapbox.mapboxsdk.style.expressions; import android.graphics.Color; - import com.mapbox.mapboxsdk.style.layers.PropertyFactory; - import org.junit.Test; import java.util.Arrays; @@ -138,6 +136,13 @@ public class ExpressionTest { assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } + @Test + public void testEqExpression() throws Exception { + Object[] expected = new Object[] {"==",new Object[]{"get", "hello"}, 1f}; + Object[] actual = eq(get("hello"), 1).toArray(); + assertTrue("expression should match", Arrays.deepEquals(expected, actual)); + } + @Test public void testNeq() throws Exception { Object[] expected = new Object[] {"!=", 0f, 1f}; @@ -152,6 +157,13 @@ public class ExpressionTest { assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } + @Test + public void testNeqExpression() throws Exception { + Object[] expected = new Object[] {"!=",new Object[]{"get", "hello"}, 1f}; + Object[] actual = neq(get("hello"), 1).toArray(); + assertTrue("expression should match", Arrays.deepEquals(expected, actual)); + } + @Test public void testGt() throws Exception { Object[] expected = new Object[] {">", 0f, 1f}; @@ -166,6 +178,13 @@ public class ExpressionTest { assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } + @Test + public void testGtExpression() throws Exception { + Object[] expected = new Object[] {">", new Object[] {"get", "hello"}, 1f}; + Object[] actual = gt(get("hello"), 1).toArray(); + assertTrue("expression should match", Arrays.deepEquals(expected, actual)); + } + @Test public void testLt() throws Exception { Object[] expected = new Object[] {"<", 1f, 0f}; @@ -180,6 +199,13 @@ public class ExpressionTest { assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } + @Test + public void testLtExpression() throws Exception { + Object[] expected = new Object[] {"<", new Object[] {"get", "hello"}, 1f}; + Object[] actual = lt(get("hello"), 1).toArray(); + assertTrue("expression should match", Arrays.deepEquals(expected, actual)); + } + @Test public void testGte() throws Exception { Object[] expected = new Object[] {">=", 1f, 1f}; @@ -194,6 +220,13 @@ public class ExpressionTest { assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } + @Test + public void testGteExpression() throws Exception { + Object[] expected = new Object[] {">=", new Object[] {"get", "hello"}, 1f}; + Object[] actual = gte(get("hello"), 1).toArray(); + assertTrue("expression should match", Arrays.deepEquals(expected, actual)); + } + @Test public void testLte() throws Exception { Object[] expected = new Object[] {"<=", 1f, 1f}; @@ -201,6 +234,13 @@ public class ExpressionTest { assertTrue("expression should match", Arrays.deepEquals(expected, actual)); } + @Test + public void testLteExpression() throws Exception { + Object[] expected = new Object[] {"<=", new Object[] {"get", "hello"}, 1f}; + Object[] actual = lte(get("hello"), 1).toArray(); + assertTrue("expression should match", Arrays.deepEquals(expected, actual)); + } + @Test public void testLteLiteral() throws Exception { Object[] expected = new Object[] {"<=", 1f, 1f}; -- cgit v1.2.1