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."); }