// Adapted from .NET source code... // See: http://referencesource.microsoft.com/#mscorlib/system/console.cs,fcb364a853d81c57 private static void SetWindowPosition(int left, int top) { AutoHelpers.LogInvariant("Attempt to set console viewport buffer to Left: {0} and Top: {1}", left, top); IntPtr hConsole = WinCon.GetStdHandle(WinCon.CONSOLE_STD_HANDLE.STD_OUTPUT_HANDLE); // Get the size of the current console window WinCon.CONSOLE_SCREEN_BUFFER_INFO csbi = new WinCon.CONSOLE_SCREEN_BUFFER_INFO(); NativeMethods.Win32BoolHelper(WinCon.GetConsoleScreenBufferInfo(hConsole, out csbi), "Get console screen buffer for viewport size information."); WinCon.SMALL_RECT srWindow = csbi.srWindow; AutoHelpers.LogInvariant("Initial viewport position: {0}", srWindow); // Check for arithmetic underflows & overflows. int newRight = left + srWindow.Right - srWindow.Left + 1; if (left < 0 || newRight > csbi.dwSize.X || newRight < 0) { throw new ArgumentOutOfRangeException("left"); } int newBottom = top + srWindow.Bottom - srWindow.Top + 1; if (top < 0 || newBottom > csbi.dwSize.Y || newBottom < 0) { throw new ArgumentOutOfRangeException("top"); } // Preserve the size, but move the position. srWindow.Bottom -= (short)(srWindow.Top - top); srWindow.Right -= (short)(srWindow.Left - left); srWindow.Left = (short)left; srWindow.Top = (short)top; NativeMethods.Win32BoolHelper(WinCon.SetConsoleWindowInfo(hConsole, true, ref srWindow), string.Format("Attempt to update viewport position to {0}.", srWindow)); }
private void VerifyBoxes(TabBase tab, RegistryHelper reg, bool inverse, OpenTarget target, Tabs.GlobalState consoleVersion) { // get the key for the current target RegistryKey consoleKey = reg.GetMatchingKey(target); // hold the parent console key in case we need to look things up for specifics. RegistryKey parentConsoleKey = reg.GetMatchingKey(OpenTarget.Defaults); // include the global checkbox in the set for verification purposes IEnumerable <CheckBoxMeta> boxes = tab.GetCheckboxesForVerification(); AutoHelpers.LogInvariant("Testing target: {0} in inverse {1} mode", target.ToString(), inverse.ToString()); // If we're opened as specifics, remove all global only boxes from the test set if (target == OpenTarget.Specifics) { AutoHelpers.LogInvariant("Reducing"); boxes = boxes.Where(box => !box.IsGlobalOnly); } foreach (CheckBoxMeta meta in boxes) { int?storedValue = consoleKey.GetValue(meta.ValueName) as int?; string boxName = AutoHelpers.FormatInvariant("Box: {0}", meta.ValueName); // if we're in specifics mode, we might have a null and if so, we check the parent value if (target == OpenTarget.Specifics) { if (storedValue == null) { AutoHelpers.LogInvariant("Specific setting missing. Checking defaults."); storedValue = parentConsoleKey.GetValue(meta.ValueName) as int?; } } else { Verify.IsNotNull(storedValue, boxName); } if (consoleVersion == Tabs.GlobalState.ConsoleV1 && meta.IsV2Property) { AutoHelpers.LogInvariant("Skipping validation of v2 property {0} after switching to v1 console.", meta.ValueName); } else { // A box can be inverse if checking it means false in the registry. // This method can be inverse if we're turning off the boxes and expecting it to be on. // Therefore, a box will be false if it's checked and supposed to be off. Or if it's unchecked and supposed to be on. if ((meta.IsInverse && !inverse) || (!meta.IsInverse && inverse)) { Verify.IsFalse(storedValue.Value.DwordToBool(), boxName); } else { Verify.IsTrue(storedValue.Value.DwordToBool(), boxName); } } } }
[TestProperty("Ignore", "True")] // GH#7282 - investigate and reenable public void CheckExperimentalDisableState() { using (RegistryHelper reg = new RegistryHelper()) { reg.BackupRegistry(); // manipulating the global v1/v2 state can affect the registry so back it up. using (CmdApp app = new CmdApp(CreateType.ProcessOnly, TestContext)) { using (PropertiesDialog properties = new PropertiesDialog(app)) { properties.Open(OpenTarget.Defaults); using (Tabs tabs = new Tabs(properties)) { // check everything stays enabled when global is on. AutoHelpers.LogInvariant("Check that items are all enabled when global is enabled."); tabs.SetGlobalState(Tabs.GlobalState.ConsoleV2); // iterate through each tab AutoHelpers.LogInvariant("Checking elements on all tabs."); foreach (TabBase tab in tabs.AllTabs) { tab.NavigateToTab(); IEnumerable <AppiumWebElement> itemsUnaffected = tab.GetObjectsUnaffectedByV1V2Switch(); IEnumerable <AppiumWebElement> itemsThatDisable = tab.GetObjectsDisabledForV1Console(); foreach (AppiumWebElement obj in itemsThatDisable.Concat(itemsUnaffected)) { Verify.IsTrue(obj.Enabled, AutoHelpers.FormatInvariant("Option: {0}", obj.Text)); } } // check that relevant boxes are disabled when global is off. AutoHelpers.LogInvariant("Check that necessary items are disabled when global is disabled."); tabs.SetGlobalState(Tabs.GlobalState.ConsoleV1); foreach (TabBase tab in tabs.AllTabs) { tab.NavigateToTab(); IEnumerable <AppiumWebElement> itemsUnaffected = tab.GetObjectsUnaffectedByV1V2Switch(); IEnumerable <AppiumWebElement> itemsThatDisable = tab.GetObjectsDisabledForV1Console(); foreach (AppiumWebElement obj in itemsThatDisable) { Verify.IsFalse(obj.Enabled, AutoHelpers.FormatInvariant("Option: {0}", obj.Text)); } foreach (AppiumWebElement obj in itemsUnaffected) { Verify.IsTrue(obj.Enabled, AutoHelpers.FormatInvariant("Option: {0}", obj.Text)); } } } } } } }
public void NavigateToTab() { AutoHelpers.LogInvariant("Navigating to '{0}'", this.tabName); var tab = this.propDialog.Tabs.FindElementByName(this.tabName); tab.Click(); Globals.WaitForTimeout(); this.PopulateItemsOnNavigate(this.propDialog.PropWindow); }
private void VerifySliders(TabBase tab, RegistryHelper reg, SliderMeta.ExpectedPosition expected, OpenTarget target, Tabs.GlobalState consoleVersion) { // get the key for the current target RegistryKey consoleKey = reg.GetMatchingKey(target); // hold the parent console key in case we need to look things up for specifics. RegistryKey parentConsoleKey = reg.GetMatchingKey(OpenTarget.Defaults); IEnumerable <SliderMeta> sliders = tab.GetSlidersForVerification(); foreach (SliderMeta meta in sliders) { int?storedValue = consoleKey.GetValue(meta.ValueName) as int?; string sliderName = AutoHelpers.FormatInvariant("Slider: {0}", meta.ValueName); if (target == OpenTarget.Specifics) { if (storedValue == null) { AutoHelpers.LogInvariant("Specific setting missing. Checking defaults."); storedValue = parentConsoleKey.GetValue(meta.ValueName) as int?; } } else { Verify.IsNotNull(storedValue, sliderName); } int transparency = 0; switch (expected) { case SliderMeta.ExpectedPosition.Maximum: transparency = meta.GetMaximum(); break; case SliderMeta.ExpectedPosition.Minimum: transparency = meta.GetMinimum(); break; default: throw new NotImplementedException(); } if (consoleVersion == Tabs.GlobalState.ConsoleV1 && meta.IsV2Property) { AutoHelpers.LogInvariant("Skipping validation of v2 property {0} after switching to v1 console.", meta.ValueName); } else { Verify.AreEqual(storedValue.Value, RescaleSlider(transparency), sliderName); } } }
private void InitializeFont() { AutoHelpers.LogInvariant("Initializing font data for viewport area..."); this.sizeFont = new Size(); IntPtr hCon = app.GetStdOutHandle(); Verify.IsNotNull(hCon, "Check that we obtained the console output handle."); WinCon.CONSOLE_FONT_INFO cfi = new WinCon.CONSOLE_FONT_INFO(); NativeMethods.Win32BoolHelper(WinCon.GetCurrentConsoleFont(hCon, false, out cfi), "Attempt to get current console font."); this.sizeFont.Width = cfi.dwFontSize.X; this.sizeFont.Height = cfi.dwFontSize.Y; AutoHelpers.LogInvariant("Font size is X:{0} Y:{1}", this.sizeFont.Width, this.sizeFont.Height); }
public void SetWrapState(bool isWrapOn) { AutoHelpers.LogInvariant("Updating wrap state to '{0}'", isWrapOn.ToString()); LayoutTab tabWithWrap = this.tabs.Single(tab => typeof(LayoutTab) == tab.GetType()) as LayoutTab; tabWithWrap.NavigateToTab(); if (isWrapOn) { tabWithWrap.WrapTextCheckBox.Check(); } else { tabWithWrap.WrapTextCheckBox.Uncheck(); } }
private void VerifySliders(TabBase tab, ShortcutHelper shortcut, SliderMeta.ExpectedPosition expected, Tabs.GlobalState consoleVersion) { IEnumerable <SliderMeta> sliders = tab.GetSlidersForVerification(); // collect up properties that we need to retrieve keys for IEnumerable <SliderMeta> propSliders = sliders.Where(slider => slider.PropKey != null); IEnumerable <Wtypes.PROPERTYKEY> keys = propSliders.Select(slider => slider.PropKey).Cast <Wtypes.PROPERTYKEY>(); // fetch data for keys IDictionary <Wtypes.PROPERTYKEY, object> propertyData = shortcut.GetFromPropertyStore(keys); // enumerate each slider and validate data foreach (SliderMeta meta in sliders) { string sliderName = AutoHelpers.FormatInvariant("Slider: {0}", meta.ValueName); Wtypes.PROPERTYKEY key = (Wtypes.PROPERTYKEY)meta.PropKey; short value = (short)propertyData[key]; int transparency = 0; switch (expected) { case SliderMeta.ExpectedPosition.Maximum: transparency = meta.GetMaximum(); break; case SliderMeta.ExpectedPosition.Minimum: transparency = meta.GetMinimum(); break; default: throw new NotImplementedException(); } if (consoleVersion == Tabs.GlobalState.ConsoleV1 && meta.IsV2Property) { AutoHelpers.LogInvariant("Skipping validation of v2 property {0} after switching to v1 console.", meta.ValueName); } else { Verify.AreEqual(value, RescaleSlider(transparency), sliderName); } } }
private void InitializeWindow() { AutoHelpers.LogInvariant("Initializing window data for viewport area..."); IntPtr hWnd = app.GetWindowHandle(); User32.RECT lpRect; User32.GetClientRect(hWnd, out lpRect); int style = User32.GetWindowLong(hWnd, User32.GWL_STYLE); int exStyle = User32.GetWindowLong(hWnd, User32.GWL_EXSTYLE); Verify.IsTrue(User32.AdjustWindowRectEx(ref lpRect, style, false, exStyle)); this.clientTopLeft = new Point(); this.clientTopLeft.X = Math.Abs(lpRect.left); this.clientTopLeft.Y = Math.Abs(lpRect.top); AutoHelpers.LogInvariant("Top left corner of client area is at X:{0} Y:{1}", this.clientTopLeft.X, this.clientTopLeft.Y); }
private void VerifyBoxes(TabBase tab, ShortcutHelper shortcut, bool inverse, Tabs.GlobalState consoleVersion) { IEnumerable <CheckBoxMeta> boxes = tab.GetCheckboxesForVerification(); // collect up properties that we need to retrieve keys for IEnumerable <CheckBoxMeta> propBoxes = boxes.Where(box => box.PropKey != null); IEnumerable <Wtypes.PROPERTYKEY> keys = propBoxes.Select(box => box.PropKey).Cast <Wtypes.PROPERTYKEY>(); // fetch data for keys IDictionary <Wtypes.PROPERTYKEY, object> propertyData = shortcut.GetFromPropertyStore(keys); // enumerate each box and validate the data foreach (CheckBoxMeta meta in propBoxes) { string boxName = AutoHelpers.FormatInvariant("Box: {0}", meta.ValueName); Wtypes.PROPERTYKEY key = (Wtypes.PROPERTYKEY)meta.PropKey; bool?value = (bool?)propertyData[key]; Verify.IsNotNull(value, boxName); if (consoleVersion == Tabs.GlobalState.ConsoleV1 && meta.IsV2Property) { AutoHelpers.LogInvariant("Skipping validation of v2 property {0} after switching to v1 console.", meta.ValueName); } else { // A box can be inverse if checking it means false in the registry. // This method can be inverse if we're turning off the boxes and expecting it to be on. // Therefore, a box will be false if it's checked and supposed to be off. Or if it's unchecked and supposed to be on. if ((meta.IsInverse && !inverse) || (!meta.IsInverse && inverse)) { Verify.IsFalse(value.Value, boxName); } else { Verify.IsTrue(value.Value, boxName); } } } }
public void SetGlobalState(GlobalState state) { AutoHelpers.LogInvariant("Updating global state to '{0}'", state.ToString()); OptionsTab tabWithGlobal = this.tabs.Single(tab => typeof(OptionsTab) == tab.GetType()) as OptionsTab; tabWithGlobal.NavigateToTab(); switch (state) { case GlobalState.ConsoleV1: tabWithGlobal.GlobalV1V2Box.Check(); break; case GlobalState.ConsoleV2: tabWithGlobal.GlobalV1V2Box.Uncheck(); break; default: throw new NotImplementedException(); } }
private void CheckWritebacks(RegistryHelper reg, ShortcutHelper shortcut, CmdApp app, OpenTarget target) { // either registry or shortcut are null if ((reg == null && shortcut == null) || (reg != null && shortcut != null)) { throw new NotSupportedException("Must leave either registry or shortcut null. And must supply one of the two."); } bool isRegMode = reg != null; // true is reg mode, false is shortcut mode string modeName = isRegMode ? "registry" : "shortcut"; AutoHelpers.LogInvariant("Beginning {0} writeback tests for {1}", modeName, target.ToString()); using (PropertiesDialog props = new PropertiesDialog(app)) { // STEP 1: VERIFY EVERYTHING SAVES IN AN ON/MAX STATE AutoHelpers.LogInvariant("Open dialog and check boxes."); props.Open(target); using (Tabs tabs = new Tabs(props)) { // Set V2 on. tabs.SetGlobalState(Tabs.GlobalState.ConsoleV2); AutoHelpers.LogInvariant("Toggling elements on all tabs."); foreach (TabBase tab in tabs.AllTabs) { tab.NavigateToTab(); foreach (CheckBoxMeta obj in tab.GetCheckboxesForVerification()) { obj.Check(); } foreach (SliderMeta obj in tab.GetSlidersForVerification()) { // adjust slider to the maximum obj.SetToMaximum(); } } AutoHelpers.LogInvariant("Hit OK to save."); props.Close(PropertiesDialog.CloseAction.OK); AutoHelpers.LogInvariant("Verify values changed as appropriate."); CheckWritebacksVerifyValues(isRegMode, reg, shortcut, target, tabs, SliderMeta.ExpectedPosition.Maximum, false, Tabs.GlobalState.ConsoleV2); } // STEP 2: VERIFY EVERYTHING SAVES IN AN OFF/MIN STATE AutoHelpers.LogInvariant("Open dialog and uncheck boxes."); props.Open(target); using (Tabs tabs = new Tabs(props)) { AutoHelpers.LogInvariant("Toggling elements on all tabs."); foreach (TabBase tab in tabs.AllTabs) { tab.NavigateToTab(); foreach (SliderMeta slider in tab.GetSlidersForVerification()) { // adjust slider to the minimum slider.SetToMinimum(); } foreach (CheckBoxMeta obj in tab.GetCheckboxesForVerification()) { obj.Uncheck(); } } tabs.SetGlobalState(Tabs.GlobalState.ConsoleV1); AutoHelpers.LogInvariant("Hit OK to save."); props.Close(PropertiesDialog.CloseAction.OK); AutoHelpers.LogInvariant("Verify values changed as appropriate."); CheckWritebacksVerifyValues(isRegMode, reg, shortcut, target, tabs, SliderMeta.ExpectedPosition.Minimum, true, Tabs.GlobalState.ConsoleV1); } // STEP 3: VERIFY CANCEL DOES NOT SAVE AutoHelpers.LogInvariant("Open dialog and check boxes."); props.Open(target); using (Tabs tabs = new Tabs(props)) { tabs.SetGlobalState(Tabs.GlobalState.ConsoleV2); AutoHelpers.LogInvariant("Toggling elements on all tabs."); foreach (TabBase tab in tabs.AllTabs) { tab.NavigateToTab(); foreach (CheckBoxMeta obj in tab.GetCheckboxesForVerification()) { obj.Check(); } foreach (SliderMeta obj in tab.GetSlidersForVerification()) { // adjust slider to the maximum obj.SetToMaximum(); } } AutoHelpers.LogInvariant("Hit cancel to not save."); props.Close(PropertiesDialog.CloseAction.Cancel); AutoHelpers.LogInvariant("Verify values did not change."); CheckWritebacksVerifyValues(isRegMode, reg, shortcut, target, tabs, SliderMeta.ExpectedPosition.Minimum, true, Tabs.GlobalState.ConsoleV1); } } }