From 2911bc21a9639d707a9eddf7ecdfcc9e90acbdb7 Mon Sep 17 00:00:00 2001 From: igor korkin Date: Sun, 26 Jul 2026 23:48:15 +0300 Subject: [PATCH 1/3] add CodeCoverage --- CodeCoverage.runsettings | 32 ++++++++++++++++ .../desktop.ranger.core.vcxproj | 1 + .../desktop_name_generator.cpp | 12 +++--- desktop.ranger.core/desktop_name_generator.h | 13 +++---- .../desktop.ranger.tests.vcxproj | 3 ++ .../desktop_name_generator_test.cpp | 38 +++++++++++++------ desktop.ranger/advanced_secure_desktop.cpp | 20 +--------- 7 files changed, 75 insertions(+), 44 deletions(-) create mode 100644 CodeCoverage.runsettings diff --git a/CodeCoverage.runsettings b/CodeCoverage.runsettings new file mode 100644 index 0000000..22cd9cd --- /dev/null +++ b/CodeCoverage.runsettings @@ -0,0 +1,32 @@ + + + + + + + + True + + + + + .*\\desktop\.ranger\.core\\.* + + + + + True + + + + False + + + + + + + + \ No newline at end of file diff --git a/desktop.ranger.core/desktop.ranger.core.vcxproj b/desktop.ranger.core/desktop.ranger.core.vcxproj index 9722642..32c9a02 100644 --- a/desktop.ranger.core/desktop.ranger.core.vcxproj +++ b/desktop.ranger.core/desktop.ranger.core.vcxproj @@ -85,6 +85,7 @@ + EditAndContinue diff --git a/desktop.ranger.core/desktop_name_generator.cpp b/desktop.ranger.core/desktop_name_generator.cpp index 35b6dc4..a2c0ed4 100644 --- a/desktop.ranger.core/desktop_name_generator.cpp +++ b/desktop.ranger.core/desktop_name_generator.cpp @@ -1,10 +1,10 @@ #include "desktop_name_generator.h" -#include #include +#include #include -namespace DR +namespace DesktopRanger::DesktopName { namespace { @@ -19,7 +19,7 @@ namespace DR return kDesktopNameAlphabet.find(character) != std::wstring_view::npos; } - std::wstring GenerateDesktopName(std::mt19937 &generator, std::size_t length) + std::wstring Generate(std::mt19937 &generator, std::size_t length) { std::uniform_int_distribution Distribution( 0, kDesktopNameAlphabet.size() - 1); @@ -34,10 +34,10 @@ namespace DR return Result; } - std::wstring GenerateDesktopName() + std::wstring Generate() { thread_local std::mt19937 Generator{ std::random_device{}() }; - return GenerateDesktopName(Generator); + return Generate(Generator); } -} // namespace DR \ No newline at end of file +} // namespace DesktopRanger::DesktopName \ No newline at end of file diff --git a/desktop.ranger.core/desktop_name_generator.h b/desktop.ranger.core/desktop_name_generator.h index 82ef033..38f9deb 100644 --- a/desktop.ranger.core/desktop_name_generator.h +++ b/desktop.ranger.core/desktop_name_generator.h @@ -4,16 +4,15 @@ #include #include -namespace DR +namespace DesktopRanger::DesktopName { + inline constexpr auto kDesktopNameLength = 255; - inline constexpr std::size_t kDesktopNameLength = 255; + std::wstring Generate(); - std::wstring GenerateDesktopName(); - - std::wstring GenerateDesktopName(std::mt19937 &generator, - std::size_t length = kDesktopNameLength); + std::wstring Generate(std::mt19937 &generator, + std::size_t length = kDesktopNameLength); bool IsValidDesktopNameCharacter(wchar_t character) noexcept; -} // namespace DR \ No newline at end of file +} // namespace DesktopRanger::DesktopName \ No newline at end of file diff --git a/desktop.ranger.tests/desktop.ranger.tests.vcxproj b/desktop.ranger.tests/desktop.ranger.tests.vcxproj index 3f46ddf..3dbf614 100644 --- a/desktop.ranger.tests/desktop.ranger.tests.vcxproj +++ b/desktop.ranger.tests/desktop.ranger.tests.vcxproj @@ -45,10 +45,12 @@ EnableFastChecks MultiThreadedDebugDLL Level3 + EditAndContinue true Console + true @@ -68,6 +70,7 @@ Console true true + false diff --git a/desktop.ranger.tests/desktop_name_generator_test.cpp b/desktop.ranger.tests/desktop_name_generator_test.cpp index b2e8cbb..638b6e5 100644 --- a/desktop.ranger.tests/desktop_name_generator_test.cpp +++ b/desktop.ranger.tests/desktop_name_generator_test.cpp @@ -7,14 +7,14 @@ #include "desktop_name_generator.h" -namespace DR::Tests +namespace DesktopRanger::DesktopName::Tests { TEST(DesktopNameGenerator, GeneratesDefaultLengthName) { std::mt19937 generator{ 12345 }; - const std::wstring name = GenerateDesktopName(generator); + const std::wstring name = Generate(generator); EXPECT_EQ(name.size(), kDesktopNameLength); } @@ -23,7 +23,7 @@ namespace DR::Tests { std::mt19937 generator{ 12345 }; - const std::wstring name = GenerateDesktopName(generator, 32); + const std::wstring name = Generate(generator, 32); EXPECT_EQ(name.size(), 32U); } @@ -32,7 +32,7 @@ namespace DR::Tests { std::mt19937 generator{ 12345 }; - const std::wstring name = GenerateDesktopName(generator, 0); + const std::wstring name = Generate(generator, 0); EXPECT_TRUE(name.empty()); } @@ -41,7 +41,7 @@ namespace DR::Tests { std::mt19937 generator{ 12345 }; - const std::wstring name = GenerateDesktopName(generator, 4096); + const std::wstring name = Generate(generator, 4096); const bool allCharactersAreValid = std::ranges::all_of(name, IsValidDesktopNameCharacter); @@ -53,7 +53,7 @@ namespace DR::Tests { std::mt19937 generator{ 12345 }; - const std::wstring name = GenerateDesktopName(generator); + const std::wstring name = Generate(generator); EXPECT_EQ(name.find(L'\0'), std::wstring::npos); } @@ -63,9 +63,9 @@ namespace DR::Tests std::mt19937 firstGenerator{ 12345 }; std::mt19937 secondGenerator{ 12345 }; - const std::wstring firstName = GenerateDesktopName(firstGenerator); + const std::wstring firstName = Generate(firstGenerator); - const std::wstring secondName = GenerateDesktopName(secondGenerator); + const std::wstring secondName = Generate(secondGenerator); EXPECT_EQ(firstName, secondName); } @@ -74,9 +74,9 @@ namespace DR::Tests { std::mt19937 generator{ 12345 }; - const std::wstring firstName = GenerateDesktopName(generator); + const std::wstring firstName = Generate(generator); - const std::wstring secondName = GenerateDesktopName(generator); + const std::wstring secondName = Generate(generator); EXPECT_NE(firstName, secondName); } @@ -90,10 +90,24 @@ namespace DR::Tests names.reserve(sampleSize); for (std::size_t index = 0; index < sampleSize; ++index) { - names.insert(GenerateDesktopName(generator)); + names.insert(Generate(generator)); } EXPECT_EQ(names.size(), sampleSize); } -} // namespace DR::Tests \ No newline at end of file + TEST(DesktopNameGenerator, RejectsDisallowedCharacters) + { + EXPECT_FALSE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'/')); + EXPECT_FALSE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'\\')); + EXPECT_FALSE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'\0')); + } + + TEST(DesktopNameGenerator, AcceptsAllowedCharacters) + { + EXPECT_TRUE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'a')); + EXPECT_TRUE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'7')); + EXPECT_TRUE(DesktopRanger::DesktopName::IsValidDesktopNameCharacter(L'_')); + } + +} // namespace DesktopRanger::DesktopName::Tests \ No newline at end of file diff --git a/desktop.ranger/advanced_secure_desktop.cpp b/desktop.ranger/advanced_secure_desktop.cpp index 4047dc1..ec6f5bb 100644 --- a/desktop.ranger/advanced_secure_desktop.cpp +++ b/desktop.ranger/advanced_secure_desktop.cpp @@ -43,25 +43,7 @@ namespace AdvancedSecureDesktop std::wstring GetRandomDesktopName() { - return DR::GenerateDesktopName(); - - // static constexpr wchar_t alphabet[] = L"abcdefghijklmnopqrstuvwxyz" // 26 - // "0123456789" // 10 - // "_-.,;:@#$%&'()[]{}+=~`!^"; // 25 - // - // static constexpr auto alphabetSize = - // std::size(alphabet) - 1; // without null terminator - // - // static thread_local std::mt19937 generate(std::random_device{}()); - // - // static constexpr auto length = 255; - // std::wstring result(length, L'\0'); - // - // for (wchar_t &c : result) { - // c = alphabet[generate() % alphabetSize]; - // } - // - // return result; + return DesktopRanger::DesktopName::Generate(); } bool CreateNewDesktop(IN std::wstring DesktopName, OUT HDESK &DefaultDesktopHandle, From 45f8bde153a7a3cf50acf4d23d9db44e6ec093db Mon Sep 17 00:00:00 2001 From: igor korkin Date: Sun, 26 Jul 2026 23:53:58 +0300 Subject: [PATCH 2/3] fix CodeCoverage --- desktop.ranger.core/desktop.ranger.core.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop.ranger.core/desktop.ranger.core.vcxproj b/desktop.ranger.core/desktop.ranger.core.vcxproj index 32c9a02..b69d1f1 100644 --- a/desktop.ranger.core/desktop.ranger.core.vcxproj +++ b/desktop.ranger.core/desktop.ranger.core.vcxproj @@ -85,7 +85,7 @@ - EditAndContinue + ProgramDatabase From 55740f46302aa722350ae5cb82686749c10b5352 Mon Sep 17 00:00:00 2001 From: Igor Korkin Date: Mon, 27 Jul 2026 00:01:15 +0300 Subject: [PATCH 3/3] Update desktop.ranger.tests/desktop.ranger.tests.vcxproj Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> --- desktop.ranger.tests/desktop.ranger.tests.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop.ranger.tests/desktop.ranger.tests.vcxproj b/desktop.ranger.tests/desktop.ranger.tests.vcxproj index 3dbf614..9d417e3 100644 --- a/desktop.ranger.tests/desktop.ranger.tests.vcxproj +++ b/desktop.ranger.tests/desktop.ranger.tests.vcxproj @@ -45,7 +45,7 @@ EnableFastChecks MultiThreadedDebugDLL Level3 - EditAndContinue + ProgramDatabase true