Skip to content

Commit

Permalink
Workaround for removed margin API in screen buffer tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
j4james committed Feb 21, 2023
1 parent 90bd976 commit d7b3e49
Showing 1 changed file with 30 additions and 8 deletions.
38 changes: 30 additions & 8 deletions src/host/ut_host/ScreenBufferTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1226,6 +1226,28 @@ void ScreenBufferTests::VtResizeComprehensive()
VERIFY_ARE_EQUAL(expectedViewHeight, newViewHeight);
}

til::rect _GetRelativeScrollMargins()
{
auto& gci = ServiceLocator::LocateGlobals().getConsoleInformation();
auto& si = gci.GetActiveOutputBuffer().GetActiveBuffer();
auto& stateMachine = si.GetStateMachine();
const auto viewport = si.GetViewport();
auto& cursor = si.GetTextBuffer().GetCursor();
const auto savePos = cursor.GetPosition();

// We can't access the AdaptDispatch internals where the margins are stored,
// but we calculate their boundaries by using VT sequences to move down and
// up as far as possible, and read the cursor positions at the two limits.
stateMachine.ProcessString(L"\033[H\033[9999B");
const auto bottom = cursor.GetPosition().y - viewport.Top();
stateMachine.ProcessString(L"\033[9999A");
const auto top = cursor.GetPosition().y - viewport.Top();

cursor.SetPosition(savePos);
const auto noMargins = (top == 0 && bottom == viewport.Height() - 1);
return noMargins ? til::rect{} : til::rect{ 0, top, 0, bottom };
}

void ScreenBufferTests::VtResizeDECCOLM()
{
// Run this test in isolation - for one reason or another, this breaks other tests.
Expand All @@ -1249,13 +1271,13 @@ void ScreenBufferTests::VtResizeDECCOLM()
return si.GetTextBuffer().GetCursor().GetPosition() - si.GetViewport().Origin();
};
auto areMarginsSet = [&]() {
const auto margins = si.GetRelativeScrollMargins();
return margins.BottomInclusive() > margins.Top();
const auto margins = _GetRelativeScrollMargins();
return margins.bottom > margins.top;
};

stateMachine.ProcessString(setInitialMargins);
stateMachine.ProcessString(setInitialCursor);
auto initialMargins = si.GetRelativeScrollMargins();
auto initialMargins = _GetRelativeScrollMargins();
auto initialCursorPosition = getRelativeCursorPosition();

auto initialSbHeight = si.GetBufferSize().Height();
Expand All @@ -1272,7 +1294,7 @@ void ScreenBufferTests::VtResizeDECCOLM()
auto newViewWidth = si.GetViewport().Width();

VERIFY_IS_TRUE(areMarginsSet());
VERIFY_ARE_EQUAL(initialMargins, si.GetRelativeScrollMargins());
VERIFY_ARE_EQUAL(initialMargins, _GetRelativeScrollMargins());
VERIFY_ARE_EQUAL(initialCursorPosition, getRelativeCursorPosition());
VERIFY_ARE_EQUAL(initialSbHeight, newSbHeight);
VERIFY_ARE_EQUAL(initialViewHeight, newViewHeight);
Expand Down Expand Up @@ -1308,7 +1330,7 @@ void ScreenBufferTests::VtResizeDECCOLM()

stateMachine.ProcessString(setInitialMargins);
stateMachine.ProcessString(setInitialCursor);
initialMargins = si.GetRelativeScrollMargins();
initialMargins = _GetRelativeScrollMargins();
initialCursorPosition = getRelativeCursorPosition();

initialSbHeight = newSbHeight;
Expand All @@ -1326,7 +1348,7 @@ void ScreenBufferTests::VtResizeDECCOLM()
newViewWidth = si.GetViewport().Width();

VERIFY_IS_TRUE(areMarginsSet());
VERIFY_ARE_EQUAL(initialMargins, si.GetRelativeScrollMargins());
VERIFY_ARE_EQUAL(initialMargins, _GetRelativeScrollMargins());
VERIFY_ARE_EQUAL(initialCursorPosition, getRelativeCursorPosition());
VERIFY_ARE_EQUAL(initialSbHeight, newSbHeight);
VERIFY_ARE_EQUAL(initialViewHeight, newViewHeight);
Expand Down Expand Up @@ -6370,8 +6392,8 @@ void ScreenBufferTests::ScreenAlignmentPattern()
WI_SetFlag(si.OutputMode, ENABLE_VIRTUAL_TERMINAL_PROCESSING);

auto areMarginsSet = [&]() {
const auto margins = si.GetRelativeScrollMargins();
return margins.BottomInclusive() > margins.Top();
const auto margins = _GetRelativeScrollMargins();
return margins.bottom > margins.top;
};

Log::Comment(L"Set the initial buffer state.");
Expand Down

0 comments on commit d7b3e49

Please sign in to comment.