Skip to content

Commit

Permalink
Support device names with underscores (such as 'Default_Monitor') in …
Browse files Browse the repository at this point in the history
…JSONHelpers.isValidDeviceId (#1826)

* #1821 Support device names with underscores (such as 'Default_Monitor') in JSONHelpers.isValidDeviceId

* Make support for '#' in device names optional

* Add more unit tests for isValidDeviceId
  • Loading branch information
GeertvanHorrik committed Apr 2, 2020
1 parent cf26a5d commit 96fbc96
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/modules/fancyzones/lib/JsonHelpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,34 @@ namespace JSONHelpers

bool isValidDeviceId(const std::wstring& str)
{
std::wstring monitorName;
std::wstring temp;
std::vector<std::wstring> parts;
std::wstringstream wss(str);

/*
Important fix for device info that contains a '_' in the name:
1. first search for '#'
2. Then split the remaining string by '_'
*/

// Step 1: parse the name until the #, then to the '_'
if (str.find(L'#') != std::string::npos)
{
std::getline(wss, temp, L'#');

monitorName = temp;

if (!std::getline(wss, temp, L'_'))
{
return false;
}

monitorName += L"#" + temp;
parts.push_back(monitorName);
}

// Step 2: parse the rest of the id
while (std::getline(wss, temp, L'_'))
{
parts.push_back(temp);
Expand Down
18 changes: 18 additions & 0 deletions src/modules/fancyzones/tests/UnitTests/JsonHelpers.Tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,24 @@ namespace FancyZonesUnitTests
Assert::IsTrue(isValidDeviceId(deviceId));
}

TEST_METHOD (DeviceIdWithoutHashInName)
{
const auto deviceId = L"LOCALDISPLAY_5120_1440_{00000000-0000-0000-0000-000000000000}";
Assert::IsTrue(isValidDeviceId(deviceId));
}

TEST_METHOD (DeviceIdWithoutHashInNameButWithUnderscores)
{
const auto deviceId = L"LOCAL_DISPLAY_5120_1440_{00000000-0000-0000-0000-000000000000}";
Assert::IsFalse(isValidDeviceId(deviceId));
}

TEST_METHOD (DeviceIdWithUnderscoresInName)
{
const auto deviceId = L"Default_Monitor#1&1f0c3c2f&0&UID256_5120_1440_{00000000-0000-0000-0000-000000000000}";
Assert::IsTrue(isValidDeviceId(deviceId));
}

TEST_METHOD (DeviceIdInvalidFormat)
{
const auto deviceId = L"_1920_1200_{39B25DD2-130D-4B5D-8851-4791D66B1539}";
Expand Down

0 comments on commit 96fbc96

Please sign in to comment.