geopro/tests/app/test_chart_strategy_registr...

110 lines
4.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <gtest/gtest.h>
#include "DatasetDetailTab.hpp"
#include "IDatasetChartStrategy.hpp" // geopro::controller控制器层
#include "panels/chart/MeasurementStrategy.hpp"
#include "panels/chart/GrMeasurementStrategy.hpp"
#include "panels/chart/TrajectoryStrategy.hpp"
#include "panels/chart/GridStrategy.hpp"
using namespace geopro::controller;
namespace {
struct Fake : IDatasetChartStrategy {
std::string ddCode() const override { return "dd_inversion_data"; }
std::vector<TabSpec> tabs() const override {
return {
{QStringLiteral("原数据"), ViewKind::Scatter,
QStringLiteral("inversion.scatter"), /*lazy*/ false, /*paginated*/ false},
{QStringLiteral("网格数据"), ViewKind::FilledContour,
QStringLiteral("inversion.grid"), /*lazy*/ true, /*paginated*/ false},
};
}
};
}
TEST(ChartStrategyRegistry, FindsRegisteredAndDegradesUnknown) {
ChartStrategyRegistry reg;
reg.add(std::make_unique<Fake>());
EXPECT_TRUE(reg.supports("dd_inversion_data"));
EXPECT_NE(reg.find("dd_inversion_data"), nullptr);
EXPECT_FALSE(reg.supports("dd_unknown"));
EXPECT_EQ(reg.find("dd_unknown"), nullptr);
}
TEST(ChartStrategyRegistry, ExposesTabSpecsFromStrategy) {
ChartStrategyRegistry reg;
reg.add(std::make_unique<Fake>());
auto* s = reg.find("dd_inversion_data");
ASSERT_NE(s, nullptr);
const auto tabs = s->tabs();
ASSERT_EQ(tabs.size(), 2u);
EXPECT_FALSE(tabs[0].lazy); // 原数据非 lazy
EXPECT_TRUE(tabs[1].lazy); // 网格数据 lazy
EXPECT_EQ(tabs[1].kind, ViewKind::FilledContour);
}
TEST(MeasurementStrategy, DrivesTwoTabsScatterAndTable) {
geopro::app::MeasurementStrategy s;
EXPECT_EQ(s.ddCode(), "dd_ert_measurement_data");
const auto tabs = s.tabs();
ASSERT_EQ(tabs.size(), 2u);
// 散点图Scatter非 lazy。
EXPECT_EQ(tabs[0].title.toStdString(), std::string("散点图"));
EXPECT_EQ(tabs[0].kind, ViewKind::Scatter);
EXPECT_FALSE(tabs[0].lazy);
EXPECT_EQ(tabs[0].loaderKey.toStdString(), "ert_measurement.scatter");
// 数据列表Tablelazy。
EXPECT_EQ(tabs[1].title.toStdString(), std::string("数据列表"));
EXPECT_EQ(tabs[1].kind, ViewKind::Table);
EXPECT_TRUE(tabs[1].lazy);
EXPECT_EQ(tabs[1].loaderKey.toStdString(), "ert_measurement.rows");
}
TEST(GrMeasurementStrategy, DrivesBarAndTableTabs) {
geopro::app::GrMeasurementStrategy s;
EXPECT_EQ(s.ddCode(), "dd_ert_measurement_gr_data");
const auto tabs = s.tabs();
ASSERT_EQ(tabs.size(), 2u);
// 柱状图Bar非 lazy。
EXPECT_EQ(tabs[0].title.toStdString(), std::string("柱状图"));
EXPECT_EQ(tabs[0].kind, ViewKind::Bar);
EXPECT_FALSE(tabs[0].lazy);
EXPECT_EQ(tabs[0].loaderKey.toStdString(), "gr.bar");
// 列表Tablelazy。
EXPECT_EQ(tabs[1].title.toStdString(), std::string("列表"));
EXPECT_EQ(tabs[1].kind, ViewKind::Table);
EXPECT_TRUE(tabs[1].lazy);
EXPECT_EQ(tabs[1].loaderKey.toStdString(), "gr.rows");
}
TEST(TrajectoryStrategy, DrivesMapTableElevationTabs) {
geopro::app::TrajectoryStrategy s;
EXPECT_EQ(s.ddCode(), "dd_trajectory_data");
const auto tabs = s.tabs();
ASSERT_EQ(tabs.size(), 3u);
// 地图WebMap首位/非 lazy默认页loaderKey traj.map → MapPayload端点 trajectory/line
EXPECT_EQ(tabs[0].title.toStdString(), std::string("地图"));
EXPECT_EQ(tabs[0].kind, ViewKind::WebMap);
EXPECT_FALSE(tabs[0].lazy);
EXPECT_EQ(tabs[0].loaderKey.toStdString(), "traj.map");
// 列表Tablelazy。
EXPECT_EQ(tabs[1].title.toStdString(), std::string("列表"));
EXPECT_EQ(tabs[1].kind, ViewKind::Table);
EXPECT_TRUE(tabs[1].lazy);
EXPECT_EQ(tabs[1].loaderKey.toStdString(), "traj.rows");
// 高程LineProfile非 lazy。
EXPECT_EQ(tabs[2].title.toStdString(), std::string("高程"));
EXPECT_EQ(tabs[2].kind, ViewKind::LineProfile);
EXPECT_FALSE(tabs[2].lazy);
EXPECT_EQ(tabs[2].loaderKey.toStdString(), "traj.elev");
}
TEST(GridStrategy, DrivesSinglePaginatedListTab) {
geopro::app::GridStrategy s;
EXPECT_EQ(s.ddCode(), "dd_grid");
const auto tabs = s.tabs();
ASSERT_EQ(tabs.size(), 1u);
// 列表Table非 lazy分页paginated。loaderKey grid.rows → TablePayload。
EXPECT_EQ(tabs[0].title.toStdString(), std::string("列表"));
EXPECT_EQ(tabs[0].kind, ViewKind::Table);
EXPECT_FALSE(tabs[0].lazy);
EXPECT_TRUE(tabs[0].paginated);
EXPECT_EQ(tabs[0].loaderKey.toStdString(), "grid.rows");
}