Skip to content

Commit

Permalink
Add more tests for INIFileConfig
Browse files Browse the repository at this point in the history
  • Loading branch information
ashie committed Sep 11, 2024
1 parent 2380dbb commit cfd0474
Showing 1 changed file with 189 additions and 2 deletions.
191 changes: 189 additions & 2 deletions UnitTest/UnitTest.cpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
#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)

using namespace std;
using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest
namespace TestMatching
{
TEST_CLASS(MatchSimpleWildCard)
{
Expand Down Expand Up @@ -76,8 +77,11 @@ namespace UnitTest
Assert::IsTrue(app.matchSimpleWildCard(url, pattern));
}
};
}

TEST_CLASS(Config)
namespace TestConfig
{
TEST_CLASS(TestBaseConfig)
{
public:
TEST_METHOD(DumpAsJson)
Expand All @@ -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<Config*> 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<Config*> 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<Config*> 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<Config*> 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<Config*> 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<Config*> 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__));
Expand All @@ -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);
}
};
}

0 comments on commit cfd0474

Please sign in to comment.