From 83546cd20a896bdd3f9821826ad156f92d4cd955 Mon Sep 17 00:00:00 2001 From: codereader Date: Sun, 27 Dec 2020 17:51:16 +0100 Subject: [PATCH] #5127: Add unit test covering favourites persistence to user.xml --- test/Favourites.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/test/Favourites.cpp b/test/Favourites.cpp index ee0709c2e1..c5fa87f7c1 100644 --- a/test/Favourites.cpp +++ b/test/Favourites.cpp @@ -10,6 +10,9 @@ class FavouritesTest : public RadiantTest { protected: + // A function that is invoked after modules have been shut down + std::function checkAfterShutdown; + void copyUserXmlFileToSettingsPath(const std::string& userXmlFile) { fs::path sourcePath = _context.getTestResourcePath(); @@ -22,6 +25,16 @@ class FavouritesTest : fs::remove(targetPath); fs::copy(sourcePath, targetPath); } + + void TearDown() override + { + RadiantTest::TearDown(); + + if (checkAfterShutdown) + { + checkAfterShutdown(); + } + } }; class FavouritesTestWithLegacyFavourites : @@ -104,6 +117,40 @@ TEST_F(FavouritesTest, AddingEmptyPaths) EXPECT_FALSE(GlobalFavouritesManager().isFavourite(decl::Type::Material, "")); } +TEST_F(FavouritesTest, FavouritesArePersisted) +{ + EXPECT_TRUE(GlobalFavouritesManager().getFavourites(decl::Type::Material).empty()); + + // Add caulk and clip + GlobalFavouritesManager().addFavourite(decl::Type::Material, "textures/common/caulk"); + GlobalFavouritesManager().addFavourite(decl::Type::Material, "textures/common/clip"); + + EXPECT_EQ(GlobalFavouritesManager().getFavourites(decl::Type::Material).size(), 2); + EXPECT_EQ(GlobalFavouritesManager().getFavourites(decl::Type::Material).count("textures/common/caulk"), 1); + EXPECT_EQ(GlobalFavouritesManager().getFavourites(decl::Type::Material).count("textures/common/clip"), 1); + + checkAfterShutdown = [&]() + { + fs::path userXml = _context.getSettingsPath(); + userXml /= "user.xml"; + + xml::Document doc(userXml.string()); + + auto savedNodes = doc.findXPath("/user/ui/favourites/materials//favourite"); + + EXPECT_EQ(savedNodes.size(), 2); + + std::set savedFavourites; + for (const auto& node : savedNodes) + { + savedFavourites.emplace(node.getAttributeValue("value")); + } + + EXPECT_EQ(savedFavourites.count("textures/common/caulk"), 1); + EXPECT_EQ(savedFavourites.count("textures/common/clip"), 1); + }; +} + TEST_F(FavouritesTestWithLegacyFavourites, LegacyFavouritesAreImported) { // The settings in the old location in the user.xml file should have been imported