110 lines
4.6 KiB
C++
110 lines
4.6 KiB
C++
#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");
|
||
// 数据列表:Table,lazy。
|
||
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");
|
||
// 列表:Table,lazy。
|
||
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");
|
||
// 列表:Table,lazy。
|
||
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");
|
||
}
|