From b32257f833dc6a351342a8022449406d3a1e9064 Mon Sep 17 00:00:00 2001 From: Takuro Ashie Date: Wed, 11 Sep 2024 21:14:36 +0900 Subject: [PATCH] Add more tests for Config --- UnitTest/UnitTest.cpp | 191 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 189 insertions(+), 2 deletions(-) diff --git a/UnitTest/UnitTest.cpp b/UnitTest/UnitTest.cpp index b9ec9d8..7d33c4f 100644 --- a/UnitTest/UnitTest.cpp +++ b/UnitTest/UnitTest.cpp @@ -1,6 +1,7 @@ #include "pch.h" #include "CppUnitTest.h" #include "../BrowserSelector/BrowserSelectorCommon.h" +#include "fstream" #define TO_WIDE(str) L##str #define MACRO_TO_WIDE(macro) TO_WIDE(macro) @@ -8,7 +9,7 @@ using namespace std; using namespace Microsoft::VisualStudio::CppUnitTestFramework; -namespace UnitTest +namespace TestMatching { TEST_CLASS(MatchSimpleWildCard) { @@ -76,8 +77,11 @@ namespace UnitTest Assert::IsTrue(app.matchSimpleWildCard(url, pattern)); } }; +} - TEST_CLASS(Config) +namespace TestConfig +{ + TEST_CLASS(TestBaseConfig) { public: TEST_METHOD(DumpAsJson) @@ -89,6 +93,139 @@ namespace UnitTest L"{\"DefaultBrowser\":\"ie\",\"SecondBrowser\":\"\",\"FirefoxCommand\":\"\",\"CloseEmptyTab\":1,\"OnlyOnAnchorClick\":0,\"UseRegex\":0,\"URLPatterns\":[],\"HostNamePatterns\":[],\"ZonePatterns\":[]}", buf.c_str()); } + TEST_METHOD(DontMergeDebug) + { + Config config1, config2; + config1.m_debug = 1; + Assert::AreEqual(-1, config2.m_debug); + std::vector configs({ &config2 }); + config1.merge(configs); + Assert::AreEqual(1, config1.m_debug); + } + TEST_METHOD(MergeDebug) + { + Config config1, config2; + config1.m_debug = 1; + config2.m_debug = 0; + std::vector configs({&config2}); + config1.merge(configs); + Assert::AreEqual(0, config1.m_debug); + } + TEST_METHOD(DontMergeCloseEmptyTab) + { + Config config1, config2; + config1.m_closeEmptyTab = 1; + Assert::AreEqual(-1, config2.m_closeEmptyTab); + std::vector configs({ &config2 }); + config1.merge(configs); + Assert::AreEqual(1, config1.m_closeEmptyTab); + } + TEST_METHOD(MergeCloseEmptyTab) + { + Config config1, config2; + config1.m_closeEmptyTab = 1; + config2.m_closeEmptyTab = 0; + std::vector configs({ &config2 }); + config1.merge(configs); + Assert::AreEqual(0, config1.m_closeEmptyTab); + } + TEST_METHOD(MergeUrlPatterms) + { + Config config1, config2, config3; + config1.m_urlPatterns = { {L"https://mozilla.org/*", L"firefox"} }; + config2.m_urlPatterns = { {L"https://google.com/*", L"chrome"} }; + config3.m_urlPatterns = { {L"https://microsoft.com/*", L"edge"} }; + std::vector configs({ &config2, &config3 }); + config1.merge(configs); + Assert::AreEqual(L"https://microsoft.com/*", config1.m_urlPatterns[0].first.c_str()); + Assert::AreEqual(L"edge", config1.m_urlPatterns[0].second.c_str()); + Assert::AreEqual(L"https://google.com/*", config1.m_urlPatterns[1].first.c_str()); + Assert::AreEqual(L"chrome", config1.m_urlPatterns[1].second.c_str()); + Assert::AreEqual(L"https://mozilla.org/*", config1.m_urlPatterns[2].first.c_str()); + Assert::AreEqual(L"firefox", config1.m_urlPatterns[2].second.c_str()); + } + TEST_METHOD(MergeHostNamePatterms) + { + Config config1, config2, config3; + config1.m_urlPatterns = { {L"*.mozilla.org", L"firefox"} }; + config2.m_urlPatterns = { {L"*.google.com", L"chrome"} }; + config3.m_urlPatterns = { {L"*.microsoft.com", L"edge"} }; + std::vector configs({ &config2, &config3 }); + config1.merge(configs); + Assert::AreEqual(L"*.microsoft.com", config1.m_urlPatterns[0].first.c_str()); + Assert::AreEqual(L"edge", config1.m_urlPatterns[0].second.c_str()); + Assert::AreEqual(L"*.google.com", config1.m_urlPatterns[1].first.c_str()); + Assert::AreEqual(L"chrome", config1.m_urlPatterns[1].second.c_str()); + Assert::AreEqual(L"*.mozilla.org", config1.m_urlPatterns[2].first.c_str()); + Assert::AreEqual(L"firefox", config1.m_urlPatterns[2].second.c_str()); + } + }; + + TEST_CLASS(TestDefaultConfig) + { + public: + DefaultConfig config; + TEST_METHOD(DefaultDebug) + { + Assert::AreEqual(0, config.m_debug); + } + TEST_METHOD(DefaultChromeDebug) + { + Assert::AreEqual(0, config.m_chromeDebug); + } + TEST_METHOD(DefaultChromeDebugVerbose) + { + Assert::AreEqual(0, config.m_chromeDebugVerbose); + } + TEST_METHOD(DefaultEdgeDebug) + { + Assert::AreEqual(0, config.m_edgeDebug); + } + TEST_METHOD(DefaultEdgeDebugVerbose) + { + Assert::AreEqual(0, config.m_edgeDebugVerbose); + } + TEST_METHOD(DefaultEdgeDefaultBrowser) + { + Assert::AreEqual(L"ie", config.m_defaultBrowser.c_str()); + } + TEST_METHOD(DefaultEdgeSecondBrowser) + { + Assert::IsTrue(config.m_secondBrowser.empty()); + } + TEST_METHOD(DefaultFirefoxCommand) + { + Assert::IsTrue(config.m_firefoxCommand.empty()); + } + TEST_METHOD(DefaultCloseEmptyTab) + { + Assert::AreEqual(1, config.m_closeEmptyTab); + } + TEST_METHOD(DefaultOnlyOnAnchorClick) + { + Assert::AreEqual(0, config.m_onlyOnAnchorClick); + } + TEST_METHOD(DefaultUseRegex) + { + Assert::AreEqual(0, config.m_useRegex); + } + TEST_METHOD(DefaultUrlPatterns) + { + Assert::IsTrue(config.m_urlPatterns.empty()); + } + TEST_METHOD(DefaultHostNamePatterns) + { + Assert::IsTrue(config.m_hostNamePatterns.empty()); + } + TEST_METHOD(DefaultZonePatterns) + { + Assert::IsTrue(config.m_zonePatterns.empty()); + } + }; + + TEST_CLASS(TestINIFileConfig) + { + public: TEST_METHOD(CopyToTempFile_tmpPath) { std::wstring srcPath(MACRO_TO_WIDE(__FILE__)); @@ -110,5 +247,55 @@ namespace UnitTest Assert::IsTrue(std::regex_search(tmpFilename2, wmatch, std::wregex(pattern)), (std::wstring(L"\"") + tmpFilename2 + L"\" does not match with \"" + pattern + L"\"").c_str()); } + const std::wstring GetExampleConfigPathW() + { + std::wstring path(MACRO_TO_WIDE(__FILE__)); + path.resize(path.rfind('\\') + 1); + path += L"..\\sample\\BrowserSelectorExample.ini"; + return path; + } + const std::string GetExampleConfigPathA() + { + std::string path((__FILE__)); + path.resize(path.rfind('\\') + 1); + path += "..\\sample\\BrowserSelectorExample.ini"; + return path; + } + void AssertExampleConfig(Config& config) + { + Assert::AreEqual(L"firefox", config.m_defaultBrowser.c_str()); + Assert::AreEqual(1, config.m_closeEmptyTab); + Assert::AreEqual(L"http*://example.com", config.m_urlPatterns[0].first.c_str()); + Assert::AreEqual(L"ie", config.m_urlPatterns[0].second.c_str()); + Assert::AreEqual(L"http*://example.com/*", config.m_urlPatterns[1].first.c_str()); + Assert::AreEqual(L"ie", config.m_urlPatterns[1].second.c_str()); + Assert::AreEqual(L"http*://*.example.com", config.m_urlPatterns[2].first.c_str()); + Assert::AreEqual(L"ie", config.m_urlPatterns[2].second.c_str()); + Assert::AreEqual(L"http*://*.example.com/*", config.m_urlPatterns[3].first.c_str()); + Assert::AreEqual(L"ie", config.m_urlPatterns[3].second.c_str()); + Assert::AreEqual(L"example.org", config.m_hostNamePatterns[0].first.c_str()); + Assert::AreEqual(L"ie", config.m_urlPatterns[0].second.c_str()); + Assert::AreEqual(L"*.example.org", config.m_hostNamePatterns[1].first.c_str()); + Assert::AreEqual(L"ie", config.m_urlPatterns[0].second.c_str()); + Assert::AreEqual(L"local", config.m_zonePatterns[0].first.c_str()); + Assert::AreEqual(L"ie", config.m_zonePatterns[1].second.c_str()); + Assert::AreEqual(L"trusted", config.m_zonePatterns[1].first.c_str()); + Assert::AreEqual(L"ie", config.m_zonePatterns[1].second.c_str()); + } + TEST_METHOD(load) + { + AssertExampleConfig(INIFileConfig(GetExampleConfigPathW())); + } + TEST_METHOD(Include) + { + std:wstring parentIniPath(L".\\tmp.ini"); + std::ofstream file; + file.open(parentIniPath, std::ios::out); + file << "[common]\r\n" << "Include=" << GetExampleConfigPathA().c_str(); + file.close(); + INIFileConfig config(parentIniPath); + DeleteFileW(parentIniPath.c_str()); + AssertExampleConfig(config); + } }; } \ No newline at end of file