#include #include #include #include #include "dto/DatasetChartDto.hpp" using namespace geopro::data::dto; static QJsonObject obj(const char* json) { return QJsonDocument::fromJson(json).object(); } TEST(DatasetChartDto, ParsesInversionGrid) { auto d = obj(R"({"x":[0,1],"y":[0,1,2],"v":[[1,2],[3,4],[5,6]],"vmin":1,"vmax":6})"); auto g = parseInversionGrid(d); EXPECT_EQ(g.nx(), 2); EXPECT_EQ(g.ny(), 3); EXPECT_DOUBLE_EQ(g.valueAt(1, 2), 6.0); EXPECT_DOUBLE_EQ(g.vmax, 6.0); } TEST(DatasetChartDto, ParsesColorBar) { // Use "json" delimiter to avoid raw-string termination by ")" inside rgba() const char* colorBarJson = "{\"properties\":{\"colorBar\":[[\"10\",\"rgba(0,0,255,255)\"],[\"20\",\"rgba(255,0,0,255)\"]]}}"; auto d = obj(colorBarJson); auto cs = parseColorBar(d); auto stops = cs.stopValues(); ASSERT_EQ(stops.size(), 2u); EXPECT_DOUBLE_EQ(stops[0], 10.0); auto c = cs.colorAt(12.0); // [10,20) -> blue EXPECT_GT(c.b, c.r); } TEST(DatasetChartDto, ParsesAnomalyPolyline) { auto arr = QJsonDocument::fromJson( R"([{"exceptionName":"A1","exceptionTypeName":"AnomalyZone","exceptionMarkType":2, "legend":{"polylineColor":"#0D0101","polylineWidth":4,"polylineShape":"dash"}, "location":{"coordinate":[{"x":1,"y":2},{"x":3,"y":4}]}}])").array(); auto v = parseDatasetAnomalies(arr); ASSERT_EQ(v.size(), 1u); EXPECT_EQ(v[0].name, "A1"); EXPECT_EQ(static_cast(v[0].markType), 2); ASSERT_EQ(v[0].localPts.size(), 2u); EXPECT_DOUBLE_EQ(v[0].localPts[1].x, 3.0); EXPECT_TRUE(v[0].dashed); }