From 94ec7f90c705f48afa297a11e136ef4c7781142c Mon Sep 17 00:00:00 2001 From: Joel Bennett Date: Tue, 21 May 2019 20:27:10 -0400 Subject: [PATCH] Add Unit Tests for OSC ForegroundColor and BackgroundColor --- src/host/ut_host/ScreenBufferTests.cpp | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/host/ut_host/ScreenBufferTests.cpp b/src/host/ut_host/ScreenBufferTests.cpp index 2000595793e1..ccc015e49ffb 100644 --- a/src/host/ut_host/ScreenBufferTests.cpp +++ b/src/host/ut_host/ScreenBufferTests.cpp @@ -149,6 +149,10 @@ class ScreenBufferTests TEST_METHOD(SetColorTableThreeDigits); + TEST_METHOD(SetDefaultForegroundColor); + + TEST_METHOD(SetDefaultBackgroundColor); + TEST_METHOD(DeleteCharsNearEndOfLine); TEST_METHOD(DeleteCharsNearEndOfLineSimpleFirstCase); TEST_METHOD(DeleteCharsNearEndOfLineSimpleSecondCase); @@ -2502,6 +2506,60 @@ void ScreenBufferTests::SetColorTableThreeDigits() } + +void ScreenBufferTests::SetDefaultForegroundColor() +{ + // Setting the default foreground color should work + + CONSOLE_INFORMATION& gci = ServiceLocator::LocateGlobals().getConsoleInformation(); + gci.LockConsole(); // Lock must be taken to swap buffers. + auto unlock = wil::scope_exit([&] { gci.UnlockConsole(); }); + + SCREEN_INFORMATION& mainBuffer = gci.GetActiveOutputBuffer(); + VERIFY_IS_FALSE(mainBuffer._IsAltBuffer()); + WI_SetFlag(mainBuffer.OutputMode, ENABLE_VIRTUAL_TERMINAL_PROCESSING); + VERIFY_IS_TRUE(WI_IsFlagSet(mainBuffer.OutputMode, ENABLE_VIRTUAL_TERMINAL_PROCESSING)); + + StateMachine& stateMachine = mainBuffer.GetStateMachine(); + + const COLORREF originalColor = gci.GetDefaultForegroundColor(); + const COLORREF testColor = RGB(0x33, 0x66, 0x99); + VERIFY_ARE_NOT_EQUAL(originalColor, testColor); + + std::wstring seq = L"\x1b]10;rgb:33/66/99\x1b\\"; + stateMachine.ProcessString(seq); + + VERIFY_ARE_EQUAL(testColor, gci.GetDefaultForegroundColor()); +} + + +void ScreenBufferTests::SetDefaultBackgroundColor() +{ + // Setting the default foreground color should work + + CONSOLE_INFORMATION& gci = ServiceLocator::LocateGlobals().getConsoleInformation(); + gci.LockConsole(); // Lock must be taken to swap buffers. + auto unlock = wil::scope_exit([&] { gci.UnlockConsole(); }); + + SCREEN_INFORMATION& mainBuffer = gci.GetActiveOutputBuffer(); + VERIFY_IS_FALSE(mainBuffer._IsAltBuffer()); + WI_SetFlag(mainBuffer.OutputMode, ENABLE_VIRTUAL_TERMINAL_PROCESSING); + VERIFY_IS_TRUE(WI_IsFlagSet(mainBuffer.OutputMode, ENABLE_VIRTUAL_TERMINAL_PROCESSING)); + + StateMachine& stateMachine = mainBuffer.GetStateMachine(); + + const COLORREF originalColor = gci.GetDefaultBackgroundColor(); + const COLORREF testColor = RGB(0x33, 0x66, 0x99); + VERIFY_ARE_NOT_EQUAL(originalColor, testColor); + + std::wstring seq = L"\x1b]11;rgb:33/66/99\x1b\\"; + stateMachine.ProcessString(seq); + + VERIFY_ARE_EQUAL(testColor, gci.GetDefaultBackgroundColor()); +} + + + void ScreenBufferTests::DeleteCharsNearEndOfLine() { // Created for MSFT:19888564.