From 19c0eaa7b93ab9e0b0c4509292005b7bd8124715 Mon Sep 17 00:00:00 2001 From: codereader Date: Sat, 25 Sep 2021 21:22:04 +0200 Subject: [PATCH] #5746: More Grid unit tests. Only fire the grid changed signal if the size actually changed. --- radiantcore/grid/GridManager.cpp | 8 ++++-- test/Grid.cpp | 47 ++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/radiantcore/grid/GridManager.cpp b/radiantcore/grid/GridManager.cpp index f071131f1e..2802e86c93 100644 --- a/radiantcore/grid/GridManager.cpp +++ b/radiantcore/grid/GridManager.cpp @@ -220,9 +220,11 @@ void GridManager::gridUp() void GridManager::setGridSize(GridSize gridSize) { - _activeGridSize = gridSize; - - gridChangeNotify(); + if (_activeGridSize != gridSize) + { + _activeGridSize = gridSize; + gridChangeNotify(); + } } float GridManager::getGridSize(grid::Space space) const diff --git a/test/Grid.cpp b/test/Grid.cpp index 5cbc9b18ca..61e76a6a9c 100644 --- a/test/Grid.cpp +++ b/test/Grid.cpp @@ -1,6 +1,8 @@ #include "RadiantTest.h" #include "igrid.h" +#include "icommandsystem.h" +#include namespace test { @@ -89,4 +91,49 @@ TEST_F(GridTest, TextureGridPower) checkGridPower(GRID_256, grid::Space::Texture, 0); } +TEST_F(GridTest, ChangedSignal) +{ + // Set to the default + GlobalGrid().setGridSize(GRID_1); + + bool signalFired = false; + sigc::connection conn = GlobalGrid().signal_gridChanged().connect([&]() + { + signalFired = true; + }); + + GlobalGrid().setGridSize(GRID_64); + EXPECT_TRUE(signalFired) << "Signal didn't fire after changing grid size"; + + signalFired = false; + + // Set the same grid size again, the signal shouldn't fire since we don't change anything + GlobalGrid().setGridSize(GRID_64); + EXPECT_FALSE(signalFired) << "Signal fired even when grid size didn't change"; + + conn.disconnect(); +} + +inline void checkGridSizeByCmd(const std::string& size, grid::Space space, float expectedSize) +{ + GlobalCommandSystem().executeCommand("SetGrid", size); + EXPECT_EQ(GlobalGrid().getGridSize(space), expectedSize); +} + +TEST_F(GridTest, SetGridSizeByCmd) +{ + checkGridSizeByCmd(grid::getStringForSize(GRID_0125), grid::Space::World, 0.125f); + checkGridSizeByCmd(grid::getStringForSize(GRID_025), grid::Space::World, 0.25f); + checkGridSizeByCmd(grid::getStringForSize(GRID_05), grid::Space::World, 0.5f); + checkGridSizeByCmd(grid::getStringForSize(GRID_1), grid::Space::World, 1.0f); + checkGridSizeByCmd(grid::getStringForSize(GRID_2), grid::Space::World, 2.0f); + checkGridSizeByCmd(grid::getStringForSize(GRID_4), grid::Space::World, 4.0f); + checkGridSizeByCmd(grid::getStringForSize(GRID_8), grid::Space::World, 8.0f); + checkGridSizeByCmd(grid::getStringForSize(GRID_16), grid::Space::World, 16.0f); + checkGridSizeByCmd(grid::getStringForSize(GRID_32), grid::Space::World, 32.0f); + checkGridSizeByCmd(grid::getStringForSize(GRID_64), grid::Space::World, 64.0f); + checkGridSizeByCmd(grid::getStringForSize(GRID_128), grid::Space::World, 128.0f); + checkGridSizeByCmd(grid::getStringForSize(GRID_256), grid::Space::World, 256.0f); +} + }