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); }
private static void TestGraphicsCommands(CmdApp app, ViewportArea area, IntPtr hConsole) { Log.Comment("---Graphics Commands---"); ScreenFillHelper(app, area, hConsole); WinCon.CHAR_INFO ciExpected = new WinCon.CHAR_INFO(); ciExpected.UnicodeChar = 'z'; ciExpected.Attributes = app.GetCurrentAttributes(hConsole); WinCon.CHAR_INFO ciOriginal = ciExpected; WinCon.CHAR_INFO ciActual; Point pt = new Point(); Log.Comment("Set foreground brightness (SGR.1)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("1`"); ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that foreground brightness got set."); Log.Comment("Set foreground green (SGR.32)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("2`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_GREEN; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that foreground green got set."); Log.Comment("Set foreground yellow (SGR.33)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("3`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_YELLOW; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that foreground yellow got set."); Log.Comment("Set foreground blue (SGR.34)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("4`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_BLUE; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that foreground blue got set."); Log.Comment("Set foreground magenta (SGR.35)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("5`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_MAGENTA; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that foreground magenta got set."); Log.Comment("Set foreground cyan (SGR.36)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("6`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_CYAN; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that foreground cyan got set."); Log.Comment("Set background white (SGR.47)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("W`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_COLORS; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that background white got set."); Log.Comment("Set background black (SGR.40)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("Q`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_ALL; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that background black got set."); Log.Comment("Set background red (SGR.41)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("q`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_RED; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that background red got set."); Log.Comment("Set background yellow (SGR.43)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("w`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_YELLOW; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that background yellow got set."); Log.Comment("Set foreground bright red (SGR.91)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("!`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_RED | WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that foreground bright red got set."); Log.Comment("Set foreground bright blue (SGR.94)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("@`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_BLUE | WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that foreground bright blue got set."); Log.Comment("Set foreground bright cyan (SGR.96)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("#`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_CYAN | WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that foreground bright cyan got set."); Log.Comment("Set background bright red (SGR.101)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("$`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_RED | WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that background bright red got set."); Log.Comment("Set background bright blue (SGR.104)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys(Keys.Shift + "5" + Keys.Shift + "`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_BLUE | WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that background bright blue got set."); Log.Comment("Set background bright cyan (SGR.106)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys(Keys.Shift + "6" + Keys.Shift + "`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_ALL; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_CYAN | WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that background bright cyan got set."); Log.Comment("Set underline (SGR.4)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("e`"); ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.COMMON_LVB_UNDERSCORE; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that underline got set."); Log.Comment("Clear underline (SGR.24)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("d`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.COMMON_LVB_UNDERSCORE; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that underline got cleared."); Log.Comment("Set negative image video (SGR.7)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("r`"); ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.COMMON_LVB_REVERSE_VIDEO; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that negative video got set."); Log.Comment("Set positive image video (SGR.27)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("f`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.COMMON_LVB_REVERSE_VIDEO; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that positive video got set."); Log.Comment("Set back to default (SGR.0)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("0`"); ciExpected = ciOriginal; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that we got set back to the original state."); Log.Comment("Set multiple properties in the same message (SGR.1,37,43,4)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys("9`"); ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_COLORS; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_YELLOW; ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.COMMON_LVB_UNDERSCORE; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that we set foreground bright white, background yellow, and underscore in the same SGR command."); Log.Comment("Set foreground back to original only (SGR.39)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys(Keys.Shift + "9" + Keys.Shift + "`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL; // turn off all foreground flags ciExpected.Attributes |= (ciOriginal.Attributes & WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_ALL); // turn on only the foreground part of the original attributes ciExpected.Attributes |= WinCon.CONSOLE_ATTRIBUTES.FOREGROUND_INTENSITY; ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that we set the foreground only back to the default."); Log.Comment("Set background back to original only (SGR.49)"); app.FillCursorPosition(hConsole, ref pt); app.UIRoot.SendKeys(Keys.Shift + "0" + Keys.Shift + "`"); ciExpected.Attributes &= ~WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_ALL; // turn off all foreground flags ciExpected.Attributes |= (ciOriginal.Attributes & WinCon.CONSOLE_ATTRIBUTES.BACKGROUND_ALL); // turn on only the foreground part of the original attributes ciActual = area.GetCharInfoAt(hConsole, pt); Verify.AreEqual(ciExpected, ciActual, "Verify that we set the background only back to the default."); }