summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/style/expressions/ExpressionTest.java115
1 files changed, 113 insertions, 2 deletions
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 61105d89b4..3d1bbf5214 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
@@ -3,8 +3,8 @@ package com.mapbox.mapboxsdk.style.expressions;
import android.graphics.Color;
import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
-
import com.mapbox.mapboxsdk.style.layers.PropertyValue;
+
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -12,7 +12,10 @@ import org.robolectric.RobolectricTestRunner;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Locale;
+import java.util.Map;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.FormatOption.fontScale;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.FormatOption.textFont;
import static com.mapbox.mapboxsdk.style.expressions.Expression.abs;
import static com.mapbox.mapboxsdk.style.expressions.Expression.acos;
import static com.mapbox.mapboxsdk.style.expressions.Expression.all;
@@ -35,6 +38,8 @@ import static com.mapbox.mapboxsdk.style.expressions.Expression.e;
import static com.mapbox.mapboxsdk.style.expressions.Expression.eq;
import static com.mapbox.mapboxsdk.style.expressions.Expression.exponential;
import static com.mapbox.mapboxsdk.style.expressions.Expression.floor;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.format;
+import static com.mapbox.mapboxsdk.style.expressions.Expression.formatEntry;
import static com.mapbox.mapboxsdk.style.expressions.Expression.geometryType;
import static com.mapbox.mapboxsdk.style.expressions.Expression.get;
import static com.mapbox.mapboxsdk.style.expressions.Expression.gt;
@@ -1148,7 +1153,7 @@ public class ExpressionTest {
@Test
public void testLiteralArrayString() throws Exception {
Object[] array = new Object[] {1, "text"};
- String expected = "[\"literal\"], [1, \"text\"]]";
+ String expected = "[\"literal\", [1, \"text\"]]";
String actual = literal(array).toString();
assertEquals("literal array should match", expected, actual);
}
@@ -1403,4 +1408,110 @@ public class ExpressionTest {
Object[] actual = isSupportedScript(get("property_name")).toArray();
assertTrue("expression should match", Arrays.deepEquals(expected, actual));
}
+
+ @Test
+ public void testFormatSingleArgument() {
+ Object[] expected = new Object[] {"format", "test",
+ new TestableExpressionHashMap() {
+ {
+ put("font-scale", 1.5f);
+ put("text-font", new Object[] {"literal", new String[] {"awesome"}});
+ }
+ }
+ };
+ Object[] actual = format(
+ formatEntry(literal("test"), fontScale(literal(1.5)), textFont(literal(new String[] {"awesome"})))
+ ).toArray();
+ assertTrue("expression should match", Arrays.deepEquals(expected, actual));
+ }
+
+ @Test
+ public void testFormatMultipleArgument() {
+ Object[] expected = new Object[] {
+ "format",
+ "test",
+ new TestableExpressionHashMap() {
+ {
+ put("text-font", new Object[] {"literal", new String[] {"awesome"}});
+ }
+ },
+ "test2",
+ new TestableExpressionHashMap() {
+ {
+ put("font-scale", 1.5f);
+ }
+ },
+ "test3",
+ new TestableExpressionHashMap() {
+ {
+ }
+ },
+ "test4",
+ new TestableExpressionHashMap() {
+ {
+ put("font-scale", 1.5f);
+ put("text-font", new Object[] {"literal", new String[] {"awesome"}});
+ }
+ }
+ };
+ Object[] actual = format(
+ formatEntry(literal("test"), textFont(new String[] {"awesome"})),
+ formatEntry("test2", fontScale(1.5)),
+ formatEntry(literal("test3")),
+ formatEntry(literal("test4"), fontScale(literal(1.5)), textFont(new String[] {"awesome"}))
+ ).toArray();
+ assertTrue("expression should match", Arrays.deepEquals(expected, actual));
+ }
+
+ /**
+ * This class overrides {@link java.util.AbstractMap#equals(Object)}
+ * in order to correctly compare nodes values if they are arrays,
+ * which is the case for {@link Expression#format(Expression.FormatEntry...)}'s "text-format" argument.
+ */
+ private class TestableExpressionHashMap extends HashMap<String, Object> {
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+
+ if (!(o instanceof Map)) {
+ return false;
+ }
+ Map<?, ?> m = (Map<?, ?>) o;
+ if (m.size() != size()) {
+ return false;
+ }
+
+ try {
+ for (Entry<String, Object> e : entrySet()) {
+ String key = e.getKey();
+ Object value = e.getValue();
+ if (value == null) {
+ if (!(m.get(key) == null && m.containsKey(key))) {
+ return false;
+ }
+ } else {
+ if (value instanceof Object[]) {
+ // Use Arrays.deepEquals() if values are Object arrays.
+ if (!Arrays.deepEquals((Object[]) value, (Object[]) m.get(key))) {
+ return false;
+ }
+ } else {
+ if (!value.equals(m.get(key))) {
+ return false;
+ }
+ }
+ }
+ }
+ } catch (ClassCastException unused) {
+ return false;
+ } catch (NullPointerException unused) {
+ return false;
+ }
+
+ return true;
+ }
+ }
} \ No newline at end of file