From c00b86d07e37101556edc8cdb97280c695079409 Mon Sep 17 00:00:00 2001 From: Tushar Singh Date: Thu, 17 Aug 2023 14:56:37 +0530 Subject: [PATCH 1/3] add a util to generate subparams and ranges from a list of lists of subparams --- .../adapter/ut_adapter/adapterTest.cpp | 62 +++++++++---------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/src/terminal/adapter/ut_adapter/adapterTest.cpp b/src/terminal/adapter/ut_adapter/adapterTest.cpp index 4661c4b7ecf..632b81520ac 100644 --- a/src/terminal/adapter/ut_adapter/adapterTest.cpp +++ b/src/terminal/adapter/ut_adapter/adapterTest.cpp @@ -332,6 +332,24 @@ class TestGetSet final : public ITerminalApi _expectedCursorPos = cursorPos; } + static void MakeSubParamsAndRanges(std::initializer_list> subParamList, _Out_ std::vector& subParams, _Out_ std::vector>& subParamRanges) + { + // Args are a list of lists of VTParameters: + // { {P1S1, P1S2, P1S3, ... }, { P2S1, P2S2, P2S3, ... } ... } + // + // P1 and P2 denotes the parameters, while S1, S2, S3 denotes the + // subparameters of the corresponding parameter. + size_t totalSubParams = 0; + subParams.clear(); + subParamRanges.clear(); + for (const auto& it : subParamList) + { + subParams.insert(subParams.end(), it.begin(), it.end()); + subParamRanges.push_back({ gsl::narrow_cast(totalSubParams), gsl::narrow_cast(it.size() + totalSubParams) }); + totalSubParams += it.size(); + } + } + void ValidateExpectedCursorPos() { VERIFY_ARE_EQUAL(_expectedCursorPos, _textBuffer->GetCursor().GetPosition()); @@ -2502,62 +2520,45 @@ class AdapterTest _testGetSet->PrepData(); // default color from here is gray on black, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED VTParameter rgOptions[1]; - VTParameter rgSubParamOpts[16]; - std::pair subParamRanges[1]; + std::vector rgSubParamOpts; + std::vector> subParamRanges; _testGetSet->_expectedAttribute = _testGetSet->_textBuffer->GetCurrentAttributes(); Log::Comment(L"Test 1: Change Indexed Foreground with missing index sub parameter"); rgOptions[0] = DispatchTypes::GraphicsOptions::ForegroundExtended; - rgSubParamOpts[0] = DispatchTypes::GraphicsOptions::BlinkOrXterm256Index; - subParamRanges[0] = { (BYTE)0, (BYTE)1 }; + _testGetSet->MakeSubParamsAndRanges({ { 5 } }, rgSubParamOpts, subParamRanges); _testGetSet->_expectedAttribute.SetIndexedForeground256(TextColor::DARK_BLACK); VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ rgOptions, rgSubParamOpts, subParamRanges })); Log::Comment(L"Test 2: Change Indexed Background with default index sub parameter"); rgOptions[0] = DispatchTypes::GraphicsOptions::BackgroundExtended; - rgSubParamOpts[0] = DispatchTypes::GraphicsOptions::BlinkOrXterm256Index; - rgSubParamOpts[1] = {}; - subParamRanges[0] = { (BYTE)0, (BYTE)2 }; + _testGetSet->MakeSubParamsAndRanges({ { 5, {} } }, rgSubParamOpts, subParamRanges); _testGetSet->_expectedAttribute.SetIndexedBackground256(TextColor::DARK_BLACK); VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ rgOptions, rgSubParamOpts, subParamRanges })); Log::Comment(L"Test 3: Change RGB Foreground with all RGB sub parameters missing"); rgOptions[0] = DispatchTypes::GraphicsOptions::ForegroundExtended; - rgSubParamOpts[0] = DispatchTypes::GraphicsOptions::RGBColorOrFaint; - subParamRanges[0] = { (BYTE)0, (BYTE)1 }; + _testGetSet->MakeSubParamsAndRanges({ { 2 } }, rgSubParamOpts, subParamRanges); _testGetSet->_expectedAttribute.SetForeground(RGB(0, 0, 0)); VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ rgOptions, rgSubParamOpts, subParamRanges })); Log::Comment(L"Test 4: Change RGB Background with some missing RGB sub parameters"); rgOptions[0] = DispatchTypes::GraphicsOptions::BackgroundExtended; - rgSubParamOpts[0] = DispatchTypes::GraphicsOptions::RGBColorOrFaint; - rgSubParamOpts[1] = {}; // color-space-id - rgSubParamOpts[2] = 123; - subParamRanges[0] = { (BYTE)0, (BYTE)3 }; + _testGetSet->MakeSubParamsAndRanges({ { 2, {}, 123 } }, rgSubParamOpts, subParamRanges); _testGetSet->_expectedAttribute.SetBackground(RGB(123, 0, 0)); VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ rgOptions, rgSubParamOpts, subParamRanges })); Log::Comment(L"Test 5: Change RGB Foreground with some default RGB sub parameters"); rgOptions[0] = DispatchTypes::GraphicsOptions::ForegroundExtended; - rgSubParamOpts[0] = DispatchTypes::GraphicsOptions::RGBColorOrFaint; - rgSubParamOpts[1] = {}; // color-space-id - rgSubParamOpts[2] = {}; - rgSubParamOpts[3] = {}; - rgSubParamOpts[4] = 123; - subParamRanges[0] = { (BYTE)0, (BYTE)5 }; + _testGetSet->MakeSubParamsAndRanges({ { 2, {}, {}, {}, 123 } }, rgSubParamOpts, subParamRanges); _testGetSet->_expectedAttribute.SetForeground(RGB(0, 0, 123)); VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ rgOptions, rgSubParamOpts, subParamRanges })); Log::Comment(L"Test 6: Ignore color when ColorSpaceID is not empty"); _testGetSet->PrepData(); // default color from here is gray on black, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED rgOptions[0] = DispatchTypes::GraphicsOptions::ForegroundExtended; - rgSubParamOpts[0] = DispatchTypes::GraphicsOptions::RGBColorOrFaint; - rgSubParamOpts[1] = 7; // color-space-id - rgSubParamOpts[2] = 182; - rgSubParamOpts[3] = 182; - rgSubParamOpts[4] = 123; - subParamRanges[0] = { (BYTE)0, (BYTE)5 }; + _testGetSet->MakeSubParamsAndRanges({ { 2, 7, 182, 182, 123 } }, rgSubParamOpts, subParamRanges); // expect no change _testGetSet->_expectedAttribute = TextAttribute{ FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED }; VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ rgOptions, rgSubParamOpts, subParamRanges })); @@ -2565,14 +2566,9 @@ class AdapterTest Log::Comment(L"Test 7: Ignore Rgb color when R, G or B is out of range (>255)"); _testGetSet->PrepData(); // default color from here is gray on black, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED rgOptions[0] = DispatchTypes::GraphicsOptions::BackgroundExtended; - rgSubParamOpts[0] = DispatchTypes::GraphicsOptions::RGBColorOrFaint; - rgSubParamOpts[1] = {}; // color-space-id // Ensure r, g and b set a color that is different from current color. // Otherwise, the test will pass even if the color is not ignored. - rgSubParamOpts[2] = 128; - rgSubParamOpts[3] = 283; - rgSubParamOpts[4] = 155; - subParamRanges[0] = { (BYTE)0, (BYTE)5 }; + _testGetSet->MakeSubParamsAndRanges({ { 2, {}, 128, 283, 155 } }, rgSubParamOpts, subParamRanges); // expect no change _testGetSet->_expectedAttribute = TextAttribute{ FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED }; VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ rgOptions, rgSubParamOpts, subParamRanges })); @@ -2580,9 +2576,7 @@ class AdapterTest Log::Comment(L"Test 8: Ignore indexed color when index is out of range (>255)"); _testGetSet->PrepData(); // default color from here is gray on black, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED rgOptions[0] = DispatchTypes::GraphicsOptions::ForegroundExtended; - rgSubParamOpts[0] = DispatchTypes::GraphicsOptions::BlinkOrXterm256Index; - rgSubParamOpts[1] = 283; - subParamRanges[0] = { (BYTE)0, (BYTE)2 }; + _testGetSet->MakeSubParamsAndRanges({ { 5, 283 } }, rgSubParamOpts, subParamRanges); // expect no change _testGetSet->_expectedAttribute = TextAttribute{ FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED }; VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ rgOptions, rgSubParamOpts, subParamRanges })); From d82cfa67c5965c84bd303ead5627ed26fc4d4b08 Mon Sep 17 00:00:00 2001 From: Tushar Singh Date: Fri, 18 Aug 2023 15:44:28 +0530 Subject: [PATCH 2/3] add a test for ITU colors that uses the util --- .../adapter/ut_adapter/adapterTest.cpp | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/terminal/adapter/ut_adapter/adapterTest.cpp b/src/terminal/adapter/ut_adapter/adapterTest.cpp index 632b81520ac..0799acd9b5b 100644 --- a/src/terminal/adapter/ut_adapter/adapterTest.cpp +++ b/src/terminal/adapter/ut_adapter/adapterTest.cpp @@ -1133,6 +1133,52 @@ class AdapterTest VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ rgOptions, cOptions })); } + TEST_METHOD(GraphicsSingleWithSubParamTests) + { + BEGIN_TEST_METHOD_PROPERTIES() + TEST_METHOD_PROPERTY(L"Data:uiGraphicsOptions", L"{38, 48}") // corresponds to options in DispatchTypes::GraphicsOptions + END_TEST_METHOD_PROPERTIES() + + Log::Comment(L"Starting test..."); + _testGetSet->PrepData(); + + // Modify variables based on type of this test + DispatchTypes::GraphicsOptions graphicsOption; + std::vector subParams; + std::vector> subParamRanges; + size_t uiGraphicsOption; + VERIFY_SUCCEEDED_RETURN(TestData::TryGetValue(L"uiGraphicsOptions", uiGraphicsOption)); + graphicsOption = (DispatchTypes::GraphicsOptions)uiGraphicsOption; + + VTParameter rgOptions[16]; + size_t cOptions = 1; + rgOptions[0] = graphicsOption; + + TextAttribute startingAttribute; + switch (graphicsOption) + { + case DispatchTypes::GraphicsOptions::ForegroundExtended: + Log::Comment(L"Testing graphics 'ForegroundExtended'."); + _testGetSet->MakeSubParamsAndRanges({ { DispatchTypes::GraphicsOptions::BlinkOrXterm256Index, TextColor::DARK_RED } }, subParams, subParamRanges); + startingAttribute = TextAttribute{ 0 }; + _testGetSet->_expectedAttribute = TextAttribute{ 0 }; + _testGetSet->_expectedAttribute.SetIndexedForeground256(TextColor::DARK_RED); + break; + case DispatchTypes::GraphicsOptions::BackgroundExtended: + Log::Comment(L"Testing graphics 'BackgroundExtended'"); + _testGetSet->MakeSubParamsAndRanges({ { DispatchTypes::GraphicsOptions::BlinkOrXterm256Index, TextColor::BRIGHT_WHITE } }, subParams, subParamRanges); + startingAttribute = TextAttribute{ 0 }; + _testGetSet->_expectedAttribute = TextAttribute{ 0 }; + _testGetSet->_expectedAttribute.SetIndexedBackground256(TextColor::BRIGHT_WHITE); + break; + default: + VERIFY_FAIL(L"Test not implemented yet!"); + break; + } + _testGetSet->_textBuffer->SetCurrentAttributes(startingAttribute); + VERIFY_IS_TRUE(_pDispatch->SetGraphicsRendition({ std::span{ rgOptions, cOptions }, subParams, subParamRanges })); + } + TEST_METHOD(GraphicsPushPopTests) { Log::Comment(L"Starting test..."); From b757ffea248b31666993b0fedae83c5259de9fc9 Mon Sep 17 00:00:00 2001 From: Tushar Singh Date: Sun, 20 Aug 2023 19:41:39 +0530 Subject: [PATCH 3/3] remove an extra '.' --- src/terminal/adapter/ut_adapter/adapterTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/terminal/adapter/ut_adapter/adapterTest.cpp b/src/terminal/adapter/ut_adapter/adapterTest.cpp index 0799acd9b5b..2b29d78bf49 100644 --- a/src/terminal/adapter/ut_adapter/adapterTest.cpp +++ b/src/terminal/adapter/ut_adapter/adapterTest.cpp @@ -1158,7 +1158,7 @@ class AdapterTest switch (graphicsOption) { case DispatchTypes::GraphicsOptions::ForegroundExtended: - Log::Comment(L"Testing graphics 'ForegroundExtended'."); + Log::Comment(L"Testing graphics 'ForegroundExtended'"); _testGetSet->MakeSubParamsAndRanges({ { DispatchTypes::GraphicsOptions::BlinkOrXterm256Index, TextColor::DARK_RED } }, subParams, subParamRanges); startingAttribute = TextAttribute{ 0 }; _testGetSet->_expectedAttribute = TextAttribute{ 0 };