private static void BufferVerificationHelper(CmdApp app, ViewportArea area, IntPtr hConsole, GetExpectedChar expectedCharAlgorithm) { WinCon.SMALL_RECT viewport = app.GetViewport(hConsole); Rectangle selectRect = new Rectangle(viewport.Left, viewport.Top, viewport.Width, viewport.Height); IEnumerable <string> scrapedText = area.GetLinesInRectangle(hConsole, selectRect); Verify.AreEqual(viewport.Height, scrapedText.Count(), "Verify the rows scraped is equal to the entire viewport height."); bool isValidState = true; string[] rows = scrapedText.ToArray(); for (int i = 0; i < rows.Length; i++) { for (int j = 0; j < viewport.Width; j++) { char actual = rows[i][j]; char expected = expectedCharAlgorithm(i, j, rows.Length, viewport.Width); isValidState = actual == expected; if (!isValidState) { Verify.Fail(string.Format("Text buffer verification failed at Row: {0} Col: {1} Expected: '{2}' Actual: '{3}'", i, j, expected, actual)); break; } } if (!isValidState) { break; } } }
private static void TestInsertDelete(CmdApp app, ViewportArea area, IntPtr hConsole) { Log.Comment("--Insert/Delete Commands"); ScreenFillHelper(app, area, hConsole); Log.Comment("Move cursor to the middle-ish"); Point cursorExpected = new Point(); // H is at 5, 1. VT coords are 1-based and buffer is 0-based so adjust. cursorExpected.Y = 5 - 1; cursorExpected.X = 1 - 1; app.UIRoot.SendKeys("H"); // Move to middle-ish from here. 10 Bs and 10 Cs should about do it. for (int i = 0; i < 10; i++) { app.UIRoot.SendKeys("BC"); cursorExpected.Y++; cursorExpected.X++; } WinCon.SMALL_RECT viewport = app.GetViewport(hConsole); // The entire buffer should be Zs except for what we're about to insert and delete. app.UIRoot.SendKeys("O"); // insert WinCon.CHAR_INFO ciCursor = area.GetCharInfoAt(hConsole, cursorExpected); Verify.AreEqual(' ', ciCursor.UnicodeChar); Point endOfCursorLine = new Point(viewport.Right, cursorExpected.Y); app.UIRoot.SendKeys("P"); // delete WinCon.CHAR_INFO ciEndOfLine = area.GetCharInfoAt(hConsole, endOfCursorLine); Verify.AreEqual(' ', ciEndOfLine.UnicodeChar); ciCursor = area.GetCharInfoAt(hConsole, cursorExpected); Verify.AreEqual('Z', ciCursor.UnicodeChar); // Move to end of line and check both insert and delete operations while (cursorExpected.X < viewport.Right) { app.UIRoot.SendKeys("C"); cursorExpected.X++; } // move up a line to get some fresh Z app.UIRoot.SendKeys("A"); cursorExpected.Y--; app.UIRoot.SendKeys("O"); // insert at end of line ciCursor = area.GetCharInfoAt(hConsole, cursorExpected); Verify.AreEqual(' ', ciCursor.UnicodeChar); // move up a line to get some fresh Z app.UIRoot.SendKeys("A"); cursorExpected.Y--; app.UIRoot.SendKeys("P"); // delete at end of line ciCursor = area.GetCharInfoAt(hConsole, cursorExpected); Verify.AreEqual(' ', ciCursor.UnicodeChar); }