geopro/tests/app/test_chart_strategy_registr...

134 lines
6.0 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/ErtInversionStrategy.hpp"
#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);
}
// T4 双击详情联动 gate 契约决策6DatasetDetailController::supports() 直接委托本注册表的 supports()。
// 三维体dd_voxel/dd_radar_3d等无详情页策略 → supports()=false → 双击只适配、静默不开面板;
// 5 种已注册类型 supports()=true → 双击联动打开中下方详情页。此测锁定这条 gate 的真实注册集行为。
TEST(ChartStrategyRegistry, T4GateSilentForVolumeTypesSupportsRegistered) {
ChartStrategyRegistry reg;
reg.add(std::make_unique<geopro::app::ErtInversionStrategy>());
reg.add(std::make_unique<geopro::app::MeasurementStrategy>());
reg.add(std::make_unique<geopro::app::GrMeasurementStrategy>());
reg.add(std::make_unique<geopro::app::TrajectoryStrategy>());
reg.add(std::make_unique<geopro::app::GridStrategy>());
// 有详情页 → 双击联动打开中下方详情面板。
EXPECT_TRUE(reg.supports("dd_inversion_data"));
EXPECT_TRUE(reg.supports("dd_ert_measurement_data"));
EXPECT_TRUE(reg.supports("dd_ert_measurement_gr_data"));
EXPECT_TRUE(reg.supports("dd_trajectory_data"));
EXPECT_TRUE(reg.supports("dd_grid"));
// 无详情页(三维体/切片/异常)→ 静默:双击只适配、不开面板、不弹状态栏。
EXPECT_FALSE(reg.supports("dd_voxel"));
EXPECT_FALSE(reg.supports("dd_radar_3d"));
EXPECT_FALSE(reg.supports("dd_slice"));
EXPECT_FALSE(reg.supports("dd_anomaly"));
}
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");
}