From e5fefa57ac2062bef722851c6a5df2c6bd091716 Mon Sep 17 00:00:00 2001 From: Sander Speetjens Date: Sun, 19 Oct 2025 20:57:38 +0200 Subject: [PATCH] Tests for UI tabe Adds functionality to retrieve an item from the UI table. Also adds tests for the UI table functionality, including serialization, label setting, item insertion, and item clearing. --- UI/ui_table.cpp | 11 +++++++++ UI/ui_table.hpp | 1 + tests/UI_table.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 tests/UI_table.cpp diff --git a/UI/ui_table.cpp b/UI/ui_table.cpp index e8bd0a5..cd73716 100644 --- a/UI/ui_table.cpp +++ b/UI/ui_table.cpp @@ -120,6 +120,17 @@ void UI_table::insert_item(size_t row, size_t column, std::string text) emit ui_changed(); } +std::string UI_table::item(size_t row, size_t column) const +{ + if (m_column_count <= column || m_row_count <= row) + { + return ""; + } + size_t index = row * m_column_count + column; + + return m_table.at(index); +} + void UI_table::empty_item(size_t row, size_t column) { size_t index = row * m_column_count + column; diff --git a/UI/ui_table.hpp b/UI/ui_table.hpp index 4995eb0..6e98082 100644 --- a/UI/ui_table.hpp +++ b/UI/ui_table.hpp @@ -22,6 +22,7 @@ class UI_table : public UI_item std::string column_label(size_t index) const; void insert_item(size_t row, size_t column, std::string text); + std::string item(size_t row, size_t column) const; /** * @brief empty_item This function clears the item and makes it invalid diff --git a/tests/UI_table.cpp b/tests/UI_table.cpp new file mode 100644 index 0000000..9ab05af --- /dev/null +++ b/tests/UI_table.cpp @@ -0,0 +1,61 @@ +#include "ui_table.hpp" +#include +#include + +TEST(UI_table, to_from_json) +{ + UI_table table(3, 3, {"R1", "R2", "R3"}, {"C1", "C2", "C3"}); + json j = table.to_json(0); + UI_table table2; + table2.from_json(j); + EXPECT_EQ(table2.row_count(), 3); + EXPECT_EQ(table2.column_count(), 3); + EXPECT_EQ(table2.row_label(0), "R1"); + EXPECT_EQ(table2.row_label(1), "R2"); + EXPECT_EQ(table2.row_label(2), "R3"); + EXPECT_EQ(table2.column_label(0), "C1"); + EXPECT_EQ(table2.column_label(1), "C2"); + EXPECT_EQ(table2.column_label(2), "C3"); +} + +TEST(UI_table, set_row_column_labels) +{ + UI_table table(2, 2, {"R1", "R2"}, {"C1", "C2"}); + QSignalSpy spy_ui(&table, &UI_table::ui_changed); + table.set_row_label(0, "New R1"); + EXPECT_EQ(table.row_label(0), "New R1"); + table.set_row_label(1, "New R2"); + EXPECT_EQ(table.row_label(1), "New R2"); + table.set_column_label(0, "New C1"); + EXPECT_EQ(table.column_label(0), "New C1"); + table.set_column_label(1, "New C2"); + EXPECT_EQ(table.column_label(1), "New C2"); + EXPECT_EQ(spy_ui.count(), 4); +} + +TEST(UI_table, insert_item) +{ + UI_table table(3, 3, {"R1", "R2", "R3"}, {"C1", "C2", "C3"}); + QSignalSpy spy_ui(&table, &UI_table::ui_changed); + table.insert_item(0, 0, "Item 1"); + table.insert_item(1, 1, "Item 2"); + table.insert_item(2, 2, "Item 3"); + EXPECT_EQ(spy_ui.count(), 3); + EXPECT_EQ(table.item(0, 0), "Item 1"); + EXPECT_EQ(table.item(1, 1), "Item 2"); + EXPECT_EQ(table.item(2, 2), "Item 3"); +} + +TEST(UI_table, empty_item) +{ + UI_table table(2, 2, {"R1", "R2"}, {"C1", "C2"}); + QSignalSpy spy_ui(&table, &UI_table::ui_changed); + table.insert_item(0, 0, "Item 1"); + table.insert_item(1, 1, "Item 2"); + EXPECT_EQ(spy_ui.count(), 2); + table.empty_item(0, 0); + EXPECT_EQ(table.item(0, 0), ""); + table.empty_item(1, 1); + EXPECT_EQ(table.item(1, 1), ""); + EXPECT_EQ(spy_ui.count(), 4); +}