#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) { // Real API colorBar format: MIXED hex (#RRGGBB) and CSS rgba() with alpha in 0–1 scale // (verified live: lvl/colorGradation/getDetail returns e.g. ["1.51","rgba(0, 0, 170, 1)"]). // Every stop must render OPAQUE (alpha=255); the rgba a=1 must map to 255, not 1. const char* colorBarJson = "{\"properties\":{\"colorBar\":[" "[\"0.00\",\"#00008B\"]," "[\"1.51\",\"rgba(0, 0, 170, 1)\"]," "[\"60.77\",\"#FFFF00\"]," "[\"138.20\",\"rgba(255, 128, 0, 1)\"]]}}"; auto d = obj(colorBarJson); auto cs = parseColorBar(d); auto stops = cs.stops(); ASSERT_EQ(stops.size(), 4u); EXPECT_DOUBLE_EQ(stops[0].first, 0.0); EXPECT_DOUBLE_EQ(stops[1].first, 1.51); // hex stop → exact rgb, opaque EXPECT_EQ(stops[0].second.r, 0); EXPECT_EQ(stops[0].second.g, 0); EXPECT_EQ(stops[0].second.b, 0x8B); EXPECT_EQ(stops[0].second.a, 255); // rgba(a=1) stop → exact rgb, OPAQUE (regression: was alpha=1 under Bit255 → near-transparent) EXPECT_EQ(stops[1].second.r, 0); EXPECT_EQ(stops[1].second.g, 0); EXPECT_EQ(stops[1].second.b, 170); EXPECT_EQ(stops[1].second.a, 255); EXPECT_EQ(stops[3].second.r, 255); EXPECT_EQ(stops[3].second.g, 128); EXPECT_EQ(stops[3].second.b, 0); EXPECT_EQ(stops[3].second.a, 255); // every stop opaque for (const auto& s : stops) EXPECT_EQ(s.second.a, 255) << "value=" << s.first; } 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); }