From fb7bcd57cd3a848339992f75a4cda616799939c3 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Fri, 23 Feb 2024 23:13:29 +0100 Subject: [PATCH] Add more tests --- lib/utils/utility.cpp | 1 + tests/CMakeLists.txt | 39 +++++++++++--- tests/mocks/path-helpers.cpp | 15 ++++++ tests/mocks/utility.cpp | 81 ----------------------------- tests/{json.cpp => test-json.cpp} | 0 tests/{main.cpp => test-main.cpp} | 0 tests/{math.cpp => test-math.cpp} | 49 +++++++++++++++++ tests/{regex.cpp => test-regex.cpp} | 0 tests/test-utility.cpp | 63 ++++++++++++++++++++++ tests/test-variable.cpp | 38 ++++++++++++++ 10 files changed, 198 insertions(+), 88 deletions(-) create mode 100644 tests/mocks/path-helpers.cpp delete mode 100644 tests/mocks/utility.cpp rename tests/{json.cpp => test-json.cpp} (100%) rename tests/{main.cpp => test-main.cpp} (100%) rename tests/{math.cpp => test-math.cpp} (69%) rename tests/{regex.cpp => test-regex.cpp} (100%) create mode 100644 tests/test-utility.cpp create mode 100644 tests/test-variable.cpp diff --git a/lib/utils/utility.cpp b/lib/utils/utility.cpp index 9896723e..1f6bf6e5 100644 --- a/lib/utils/utility.cpp +++ b/lib/utils/utility.cpp @@ -1,6 +1,7 @@ #include "utility.hpp" #include +#include #include namespace advss { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 35aa8bdd..1da4cdc8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -6,11 +6,13 @@ add_executable(${PROJECT_NAME}) target_compile_definitions(${PROJECT_NAME} PRIVATE UNIT_TEST) target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17) -target_sources(${PROJECT_NAME} PRIVATE main.cpp mocks/obs-data.cpp - mocks/ui-helpers.cpp mocks/utility.cpp) +target_sources( + ${PROJECT_NAME} PRIVATE test-main.cpp mocks/obs-data.cpp + mocks/path-helpers.cpp mocks/ui-helpers.cpp) target_include_directories( - ${PROJECT_NAME} PRIVATE mocks ${ADVSS_SOURCE_DIR}/lib/utils - ${ADVSS_SOURCE_DIR}/plugins/base/utils) + ${PROJECT_NAME} + PRIVATE mocks ${ADVSS_SOURCE_DIR}/lib/utils ${ADVSS_SOURCE_DIR}/lib/variables + ${ADVSS_SOURCE_DIR}/plugins/base/utils) # --- Qt --- # @@ -50,13 +52,13 @@ set_target_properties( target_sources( ${PROJECT_NAME} - PRIVATE json.cpp ${ADVSS_SOURCE_DIR}/plugins/base/utils/json-helpers.cpp) + PRIVATE test-json.cpp ${ADVSS_SOURCE_DIR}/plugins/base/utils/json-helpers.cpp) # --- math --- # target_sources( ${PROJECT_NAME} - PRIVATE math.cpp ${ADVSS_SOURCE_DIR}/lib/utils/math-helpers.cpp + PRIVATE test-math.cpp ${ADVSS_SOURCE_DIR}/lib/utils/math-helpers.cpp ${ADVSS_SOURCE_DIR}/lib/utils/obs-module-helper.cpp) target_include_directories(${PROJECT_NAME} PRIVATE ${ADVSS_SOURCE_DIR}/deps/exprtk) @@ -74,9 +76,32 @@ endif() target_sources( ${PROJECT_NAME} - PRIVATE regex.cpp ${ADVSS_SOURCE_DIR}/lib/utils/regex-config.cpp + PRIVATE test-regex.cpp ${ADVSS_SOURCE_DIR}/lib/utils/regex-config.cpp ${ADVSS_SOURCE_DIR}/plugins/base/utils/text-helpers.cpp) +# --- utility --- # + +target_link_libraries(${PROJECT_NAME} PUBLIC nlohmann_json::nlohmann_json) + +target_sources( + ${PROJECT_NAME} PRIVATE test-utility.cpp + ${ADVSS_SOURCE_DIR}/lib/utils/utility.cpp) + +# --- variable --- # + +if(NOT OS_WINDOWS) + target_compile_options(${PROJECT_NAME} PUBLIC -Wno-error=shadow) +endif() + +target_sources( + ${PROJECT_NAME} + PRIVATE test-variable.cpp + ${ADVSS_SOURCE_DIR}/lib/utils/filter-combo-box.cpp + ${ADVSS_SOURCE_DIR}/lib/utils/item-selection-helpers.cpp + ${ADVSS_SOURCE_DIR}/lib/utils/name-dialog.cpp + ${ADVSS_SOURCE_DIR}/lib/utils/resizing-text-edit.cpp + ${ADVSS_SOURCE_DIR}/lib/variables/variable.cpp) + # --- # enable_testing() diff --git a/tests/mocks/path-helpers.cpp b/tests/mocks/path-helpers.cpp new file mode 100644 index 00000000..d011d0d1 --- /dev/null +++ b/tests/mocks/path-helpers.cpp @@ -0,0 +1,15 @@ +#include "path-helpers.hpp" + +namespace advss { + +std::string GetDataFilePath(const std::string &file) +{ + return ""; +} + +QString GetDefaultSettingsSaveLocation() +{ + return ""; +} + +} // namespace advss diff --git a/tests/mocks/utility.cpp b/tests/mocks/utility.cpp deleted file mode 100644 index cf7009e6..00000000 --- a/tests/mocks/utility.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include "utility.hpp" - -#include - -namespace advss { - -std::pair GetCursorPos() -{ - return {0, 0}; -} - -bool ReplaceAll(std::string &str, const std::string &from, - const std::string &to) -{ - if (from.empty()) { - return false; - } - size_t start_pos = 0; - bool somethingWasReplaced = false; - while ((start_pos = str.find(from, start_pos)) != std::string::npos) { - str.replace(start_pos, from.length(), to); - start_pos += to.length(); - somethingWasReplaced = true; - } - return somethingWasReplaced; -} - -std::optional GetJsonField(const std::string &jsonStr, - const std::string &fieldToExtract) -{ - return {}; -} - -bool CompareIgnoringLineEnding(QString &s1, QString &s2) -{ - // Let QT deal with different types of lineendings - QTextStream s1stream(&s1); - QTextStream s2stream(&s2); - - while (!s1stream.atEnd() || !s2stream.atEnd()) { - QString s1s = s1stream.readLine(); - QString s2s = s2stream.readLine(); - if (s1s != s2s) { - return false; - } - } - - if (!s1stream.atEnd() && !s2stream.atEnd()) { - return false; - } - - return true; -} - -std::string GetDataFilePath(const std::string &file) -{ - return ""; -} - -QString GetDefaultSettingsSaveLocation() -{ - return ""; -} - -void listAddClicked(QListWidget *list, QWidget *newWidget, - QPushButton *addButton, - QMetaObject::Connection *addHighlight) -{ -} - -bool listMoveUp(QListWidget *list) -{ - return false; -} - -bool listMoveDown(QListWidget *list) -{ - return false; -} - -} // namespace advss diff --git a/tests/json.cpp b/tests/test-json.cpp similarity index 100% rename from tests/json.cpp rename to tests/test-json.cpp diff --git a/tests/main.cpp b/tests/test-main.cpp similarity index 100% rename from tests/main.cpp rename to tests/test-main.cpp diff --git a/tests/math.cpp b/tests/test-math.cpp similarity index 69% rename from tests/math.cpp rename to tests/test-math.cpp index cd082a55..0fca46b6 100644 --- a/tests/math.cpp +++ b/tests/test-math.cpp @@ -93,3 +93,52 @@ TEST_CASE("Invalid expressions are not evaluated", "[math-helpers]") REQUIRE(doubleValuePtr == nullptr); } + +TEST_CASE("IsValidNumber", "[math-helpers]") +{ + REQUIRE(advss::IsValidNumber("1")); + REQUIRE(advss::IsValidNumber("-1")); + REQUIRE(advss::IsValidNumber("1.0")); + REQUIRE(advss::IsValidNumber("-1.0")); + + REQUIRE_FALSE(advss::IsValidNumber("")); + REQUIRE_FALSE(advss::IsValidNumber("abc")); + REQUIRE_FALSE(advss::IsValidNumber("abc123def")); +} + +TEST_CASE("GetInt", "[math-helpers]") +{ + auto result = advss::GetInt("1"); + REQUIRE(*result == 1); + + result = advss::GetInt("-1"); + REQUIRE(*result == -1); + + REQUIRE_FALSE(advss::GetInt("").has_value()); + REQUIRE_FALSE(advss::GetInt("abc123def").has_value()); + REQUIRE_FALSE(advss::GetInt("1.0").has_value()); +} + +TEST_CASE("GetDouble", "[math-helpers]") +{ + auto result = advss::GetDouble("1"); + REQUIRE(*result == 1.0); + + result = advss::GetDouble("1.0"); + REQUIRE(*result == 1.0); + + result = advss::GetDouble("-1.0"); + REQUIRE(*result == -1.0); + + REQUIRE_FALSE(advss::GetDouble("")); + REQUIRE_FALSE(advss::GetDouble("abc123def")); +} + +TEST_CASE("DoubleEquals", "[math-helpers]") +{ + REQUIRE(advss::DoubleEquals(1.0, 1.0, 0.1)); + REQUIRE(advss::DoubleEquals(10.0, 11.0, 2.0)); + REQUIRE_FALSE(advss::DoubleEquals(10.0, 1.0, 0.1)); + REQUIRE_FALSE(advss::DoubleEquals(1.0, 2.0, 0.5)); + REQUIRE_FALSE(advss::DoubleEquals(1.0, 1.0, 0.0)); +} diff --git a/tests/regex.cpp b/tests/test-regex.cpp similarity index 100% rename from tests/regex.cpp rename to tests/test-regex.cpp diff --git a/tests/test-utility.cpp b/tests/test-utility.cpp new file mode 100644 index 00000000..f5a6bb2c --- /dev/null +++ b/tests/test-utility.cpp @@ -0,0 +1,63 @@ +#include "catch.hpp" + +#include + +TEST_CASE("ReplaceAll", "[utility]") +{ + std::string input; + auto result = advss::ReplaceAll(input, "", ""); + REQUIRE_FALSE(result); + REQUIRE(input == ""); + + input = "testing"; + result = advss::ReplaceAll(input, "not there", "sleep"); + REQUIRE_FALSE(result); + REQUIRE(input == "testing"); + + input = "testing"; + result = advss::ReplaceAll(input, "test", "sleep"); + REQUIRE(result); + REQUIRE(input == "sleeping"); +} + +TEST_CASE("GetJsonField", "[utility]") +{ + auto result = advss::GetJsonField("{}", ""); + REQUIRE_FALSE(result); + + result = advss::GetJsonField("{}", "not there"); + REQUIRE_FALSE(result); + + result = advss::GetJsonField("invalid json", "not there"); + REQUIRE_FALSE(result); + + result = advss::GetJsonField("{ \"test\": 1 }", "test"); + REQUIRE(*result == "1"); +} + +TEST_CASE("CompareIgnoringLineEnding", "[utility]") +{ + QString s1; + QString s2; + REQUIRE(advss::CompareIgnoringLineEnding(s1, s2)); + + s1 = "test"; + s2 = "test"; + REQUIRE(advss::CompareIgnoringLineEnding(s1, s2)); + + s1 = "test"; + s2 = "something else"; + REQUIRE_FALSE(advss::CompareIgnoringLineEnding(s1, s2)); + + s1 = "test\r\nwith line ending"; + s2 = "test\nwith line ending"; + REQUIRE(advss::CompareIgnoringLineEnding(s1, s2)); +} + +TEST_CASE("ToString", "[utility]") +{ + REQUIRE(advss::ToString(1.0) == "1"); + REQUIRE(advss::ToString(-1.0) == "-1"); + REQUIRE(advss::ToString(-1.0) == "-1"); + REQUIRE(advss::ToString(-1.23) == "-1.23"); +} diff --git a/tests/test-variable.cpp b/tests/test-variable.cpp new file mode 100644 index 00000000..371ae354 --- /dev/null +++ b/tests/test-variable.cpp @@ -0,0 +1,38 @@ +#include "catch.hpp" + +#include +#include + +TEST_CASE("Variable", "[variable]") +{ + advss::Variable variable; + REQUIRE_FALSE(variable.SecondsSinceLastUse()); + + REQUIRE(variable.Value() == ""); + REQUIRE(variable.GetDefaultValue() == ""); + REQUIRE(variable.GetSaveAction() == + advss::Variable::SaveAction::DONT_SAVE); + + variable.SetValue("testing"); + REQUIRE(variable.Value() == "testing"); + + variable.SetValue(123); + REQUIRE(variable.Value() == "123"); + + variable.SetValue(123.0); + REQUIRE(variable.Value() == "123"); + + variable.SetValue(123.123); + REQUIRE(variable.Value() == "123.123"); + + REQUIRE(*variable.SecondsSinceLastUse() == 0); + + std::this_thread::sleep_for(std::chrono::seconds(2)); + REQUIRE(*variable.SecondsSinceLastUse() > 1); + + variable.Value(false); + REQUIRE(*variable.SecondsSinceLastUse() > 1); + + variable.UpdateLastUsed(); + REQUIRE(*variable.SecondsSinceLastUse() == 0); +}