#include #include #include #include #include #include #include #include #include #include using namespace mbgl; using namespace mbgl::style; using namespace mbgl::style::conversion; TEST(StyleConversion, Light) { Error error; auto parseLight = [&](const std::string& src) { JSDocument doc; doc.Parse<0>(src); return convert(doc, error); }; { auto light = parseLight("{}"); ASSERT_TRUE((bool) light); } { auto light = parseLight("{\"color\":{\"stops\":[[14,\"blue\"],[16,\"red\"]]},\"intensity\":0.3,\"position\":[3,90,90]}"); ASSERT_TRUE((bool) light); ASSERT_TRUE(light->getAnchor().isUndefined()); ASSERT_FALSE(light->getAnchor().isConstant()); ASSERT_FALSE(light->getAnchor().isCameraFunction()); ASSERT_FALSE(light->getIntensity().isUndefined()); ASSERT_TRUE(light->getIntensity().isConstant()); ASSERT_EQ(light->getIntensity().asConstant(), 0.3f); ASSERT_FALSE(light->getAnchor().isCameraFunction()); ASSERT_FALSE(light->getColor().isUndefined()); ASSERT_FALSE(light->getColor().isConstant()); ASSERT_TRUE(light->getColor().isCameraFunction()); ASSERT_FALSE(light->getPosition().isUndefined()); ASSERT_TRUE(light->getPosition().isConstant()); std::array expected{{ 3, 90, 90 }}; ASSERT_EQ(light->getPosition().asConstant(), mbgl::style::Position({ expected })); ASSERT_FALSE(light->getPosition().isCameraFunction()); } { auto light = parseLight("{\"color\":\"blue\",\"intensity\":0.3,\"color-transition\":{\"duration\":1000}}"); ASSERT_TRUE((bool) light); ASSERT_FALSE(light->getColor().isUndefined()); ASSERT_TRUE(light->getColor().isConstant()); ASSERT_FALSE(light->getColor().isCameraFunction()); ASSERT_EQ(light->getColorTransition().duration, mbgl::Duration(mbgl::Milliseconds(1000))); ASSERT_FALSE((bool) light->getColorTransition().delay); } { auto light = parseLight("{\"intensity\":false}"); ASSERT_FALSE((bool) light); ASSERT_EQ("value must be a number", error.message); } { auto light = parseLight("{\"intensity\":{\"stops\":[[15,\"red\"],[17,\"blue\"]]}}"); ASSERT_FALSE((bool) light); ASSERT_EQ("value must be a number", error.message); } { auto light = parseLight("{\"color\":5}"); ASSERT_FALSE((bool) light); ASSERT_EQ("value must be a string", error.message); } { auto light = parseLight("{\"position\":[0,5]}"); ASSERT_FALSE((bool) light); ASSERT_EQ("value must be an array of 3 numbers", error.message); } { auto light = parseLight("{\"anchor\":\"something\"}"); ASSERT_FALSE((bool) light); ASSERT_EQ("value must be a valid enumeration value", error.message); } }