59 lines
2.6 KiB
C++
59 lines
2.6 KiB
C++
#include <gtest/gtest.h>
|
||
#include <QJsonDocument>
|
||
#include <QJsonObject>
|
||
#include <QJsonArray>
|
||
#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<int>(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);
|
||
}
|