diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index d111d37..334aaae 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -93,3 +93,31 @@ if (LT_WINDOWS) endif() set_code_analysis(lt_module_app ${LT_ENABLE_CODE_ANALYSIS}) + +if (LT_ENABLE_TEST AND BUILD_TESTING) + add_executable(test_friendly_error_code + ${CMAKE_CURRENT_SOURCE_DIR}/views/friendly_error_code_tests.cpp + ) + target_link_libraries(test_friendly_error_code + GTest::gtest + GTest::gtest_main + lt_module_app + ltproto + protobuf::libprotobuf-lite + Qt6::Widgets + Qt6::Gui + ) + add_test(NAME test_friendly_error_code COMMAND test_friendly_error_code) + + add_executable(test_access_token_validator + ${CMAKE_CURRENT_SOURCE_DIR}/views/components/access_token_validator_tests.cpp + ) + target_link_libraries(test_access_token_validator + GTest::gtest + GTest::gtest_main + lt_module_app + Qt6::Widgets + Qt6::Gui + ) + add_test(NAME test_access_token_validator COMMAND test_access_token_validator) +endif() diff --git a/src/app/views/components/access_token_validator_tests.cpp b/src/app/views/components/access_token_validator_tests.cpp new file mode 100644 index 0000000..8db61b3 --- /dev/null +++ b/src/app/views/components/access_token_validator_tests.cpp @@ -0,0 +1,50 @@ +#include + +#include + +namespace { + +TEST(AccessTokenValidatorTest, ValidateTrimsTruncatesAndLowercases) { + AccesstokenValidator validator(nullptr); + QString input = QStringLiteral(" AbC1239 "); + int pos = 10; + + const auto state = validator.validate(input, pos); + + EXPECT_EQ(state, QValidator::State::Acceptable); + EXPECT_EQ(input, QStringLiteral("abc123")); + EXPECT_EQ(pos, 6); +} + +TEST(AccessTokenValidatorTest, ValidateReturnsInvalidForIllegalCharacter) { + AccesstokenValidator validator(nullptr); + QString input = QStringLiteral("ab-12"); + int pos = 0; + + const auto state = validator.validate(input, pos); + + EXPECT_EQ(state, QValidator::State::Invalid); + EXPECT_EQ(input, QStringLiteral("ab-12")); +} + +TEST(AccessTokenValidatorTest, ValidateAllowsEmptyInputAfterTrim) { + AccesstokenValidator validator(nullptr); + QString input = QStringLiteral(" "); + int pos = 3; + + const auto state = validator.validate(input, pos); + + EXPECT_EQ(state, QValidator::State::Acceptable); + EXPECT_TRUE(input.isEmpty()); +} + +TEST(AccessTokenValidatorTest, FixupUppercasesInput) { + AccesstokenValidator validator(nullptr); + QString input = QStringLiteral("ab12cd"); + + validator.fixup(input); + + EXPECT_EQ(input, QStringLiteral("AB12CD")); +} + +} // namespace diff --git a/src/app/views/friendly_error_code_tests.cpp b/src/app/views/friendly_error_code_tests.cpp new file mode 100644 index 0000000..c794005 --- /dev/null +++ b/src/app/views/friendly_error_code_tests.cpp @@ -0,0 +1,35 @@ +#include + +#include + +#include + +namespace { + +QString friendlySuffix(const QString& message) { + constexpr auto kSeparator = "\n "; + const int idx = message.indexOf(kSeparator); + if (idx < 0) { + return message; + } + + return message.mid(idx + 5); +} + +TEST(FriendlyErrorCodeTest, KnownErrorCodeHasSpecificFriendlySuffix) { + const auto message = errorCode2FriendlyMessage(ltproto::ErrorCode::InvalidParameter); + + EXPECT_TRUE(message.startsWith(QString("Error code: %1").arg(ltproto::ErrorCode::InvalidParameter))); + EXPECT_EQ(friendlySuffix(message), QStringLiteral("Invalid parameters")); +} + +TEST(FriendlyErrorCodeTest, UnknownCodeFallsBackToUnknownMessage) { + constexpr int32_t kUnknownCode = 123456789; + const auto unknown_baseline = errorCode2FriendlyMessage(ltproto::ErrorCode::Unknown); + const auto message = errorCode2FriendlyMessage(kUnknownCode); + + EXPECT_TRUE(message.startsWith(QString("Error code: %1").arg(kUnknownCode))); + EXPECT_EQ(friendlySuffix(message), friendlySuffix(unknown_baseline)); +} + +} // namespace diff --git a/src/audio/CMakeLists.txt b/src/audio/CMakeLists.txt index ec689bb..62d634d 100644 --- a/src/audio/CMakeLists.txt +++ b/src/audio/CMakeLists.txt @@ -40,3 +40,18 @@ target_link_libraries(lt_module_audio ) set_code_analysis(lt_module_audio ${LT_ENABLE_CODE_ANALYSIS}) + +if (LT_ENABLE_TEST AND BUILD_TESTING) + add_executable(test_fake_audio_capturer + ${CMAKE_CURRENT_SOURCE_DIR}/capturer/fake_audio_capturer_tests.cpp + ) + target_link_libraries(test_fake_audio_capturer + GTest::gtest + GTest::gtest_main + protobuf::libprotobuf-lite + transport_api + lt_module_ltlib + lt_module_audio + ) + add_test(NAME test_fake_audio_capturer COMMAND test_fake_audio_capturer) +endif() diff --git a/src/audio/capturer/fake_audio_capturer_tests.cpp b/src/audio/capturer/fake_audio_capturer_tests.cpp new file mode 100644 index 0000000..4390972 --- /dev/null +++ b/src/audio/capturer/fake_audio_capturer_tests.cpp @@ -0,0 +1,31 @@ +#include + +#include