geopro/tests/app/test_object_tree_selection.cpp

38 lines
1.5 KiB
C++

#include <gtest/gtest.h>
#include "panels/ObjectTreeSelection.hpp"
using namespace geopro::app;
using geopro::data::DataSource;
TEST(AggregateGsState, AllOnIsChecked) {
EXPECT_EQ(aggregateGsState(true, 3, 3), GsCheck::Checked);
}
TEST(AggregateGsState, AllOffIsUnchecked) {
EXPECT_EQ(aggregateGsState(false, 0, 3), GsCheck::Unchecked);
}
TEST(AggregateGsState, DsOnTmNoneIsPartial) {
EXPECT_EQ(aggregateGsState(true, 0, 3), GsCheck::Partial); // 只 GS 自身 ds
}
TEST(AggregateGsState, DsOffSomeTmIsPartial) {
EXPECT_EQ(aggregateGsState(false, 1, 3), GsCheck::Partial); // 部分子 TM
}
TEST(AggregateGsState, DsOnSomeTmIsPartial) {
EXPECT_EQ(aggregateGsState(true, 2, 3), GsCheck::Partial); // ds 开但 TM 未满
}
TEST(AggregateGsState, NoTmFallsBackToDsOnly) {
EXPECT_EQ(aggregateGsState(true, 0, 0), GsCheck::Checked); // 无子 TM → 仅看 ds 开关
EXPECT_EQ(aggregateGsState(false, 0, 0), GsCheck::Unchecked);
}
TEST(DedupeSources, RemovesDuplicateByIdAndConfType) {
std::vector<DataSource> in = {{"t1", 2}, {"g1", 1}, {"t1", 2}, {"g1", 1}, {"t2", 2}};
const auto out = dedupeSources(in);
ASSERT_EQ(out.size(), 3u);
EXPECT_EQ(out[0].id, "t1"); EXPECT_EQ(out[0].confType, 2);
EXPECT_EQ(out[1].id, "g1"); EXPECT_EQ(out[1].confType, 1);
EXPECT_EQ(out[2].id, "t2");
}
TEST(DedupeSources, SameIdDifferentConfTypeKept) {
std::vector<DataSource> in = {{"x", 1}, {"x", 2}};
EXPECT_EQ(dedupeSources(in).size(), 2u);
}