summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-01-13 16:20:57 +0100
committerKonstantin Käfer <mail@kkaefer.com>2017-01-16 10:28:21 +0100
commit3b8e50a2a941d1786da4cbacff52734f0797c936 (patch)
tree8c940c328057c4ac43bc02e4193f7d3b5274a194
parent6a7966fd36f897888bd7ad18751df72e6aa9a487 (diff)
downloadqtlocation-mapboxgl-3b8e50a2a941d1786da4cbacff52734f0797c936.tar.gz
[core] add tests for function parsing
-rw-r--r--cmake/test-files.cmake1
-rw-r--r--test/style/conversion/function.test.cpp54
2 files changed, 55 insertions, 0 deletions
diff --git a/cmake/test-files.cmake b/cmake/test-files.cmake
index cd40d177cb..32ee236994 100644
--- a/cmake/test-files.cmake
+++ b/cmake/test-files.cmake
@@ -72,6 +72,7 @@ set(MBGL_TEST_FILES
test/storage/resource.test.cpp
# style/conversion
+ test/style/conversion/function.test.cpp
test/style/conversion/geojson_options.test.cpp
test/style/conversion/stringify.test.cpp
diff --git a/test/style/conversion/function.test.cpp b/test/style/conversion/function.test.cpp
new file mode 100644
index 0000000000..e93207ea13
--- /dev/null
+++ b/test/style/conversion/function.test.cpp
@@ -0,0 +1,54 @@
+#include <mbgl/test/util.hpp>
+
+#include <mbgl/style/conversion.hpp>
+#include <mbgl/style/rapidjson_conversion.hpp>
+#include <mbgl/style/conversion/constant.hpp>
+#include <mbgl/style/conversion/function.hpp>
+#include <mbgl/util/rapidjson.hpp>
+
+using namespace mbgl;
+using namespace mbgl::style;
+using namespace mbgl::style::conversion;
+
+auto parseFunction(const std::string& src) {
+ JSDocument doc;
+ doc.Parse<0>(src);
+ return convert<Function<float>>(doc);
+}
+
+TEST(StyleConversion, Function) {
+ auto fn1 = parseFunction("{\"stops\":[]}");
+ ASSERT_FALSE(fn1);
+ ASSERT_EQ("function must have at least one stop", fn1.error().message);
+
+ auto fn2 = parseFunction("{\"stops\":[1]}");
+ ASSERT_FALSE(fn2);
+ ASSERT_EQ("function stop must be an array", fn2.error().message);
+
+ auto fn3 = parseFunction("{\"stops\":[[]]}");
+ ASSERT_FALSE(fn3);
+ ASSERT_EQ("function stop must have two elements", fn3.error().message);
+
+ auto fn4 = parseFunction("{\"stops\":[[-1,-1]]}");
+ ASSERT_TRUE(bool(fn4));
+
+ auto fn5 = parseFunction("{\"stops\":[[0,1,2]]}");
+ ASSERT_FALSE(fn5);
+ ASSERT_EQ("function stop must have two elements", fn5.error().message);
+
+ auto fn6 = parseFunction("{\"stops\":[[0,\"x\"]]}");
+ ASSERT_FALSE(fn6);
+ ASSERT_EQ("value must be a number", fn6.error().message);
+
+ auto fn7 = parseFunction("{}");
+ ASSERT_FALSE(fn7);
+ ASSERT_EQ("function value must specify stops", fn7.error().message);
+
+ auto fn8 = parseFunction("[]");
+ ASSERT_FALSE(fn8);
+ ASSERT_EQ("function must be an object", fn8.error().message);
+
+ auto fn9 = parseFunction("{\"stops\":[[0,0]],\"base\":false}");
+ ASSERT_FALSE(fn9);
+ ASSERT_EQ("function base must be a number", fn9.error().message);
+}