public static int CountTextUnit(TextUnit tu, TextPatternRange rangeToCount) { ValidateArgumentNonNull(rangeToCount, "rangeToCount argument cannot be null"); // Sanity check TextPatternRange clone = rangeToCount.Clone(); int count = clone.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, tu, Int32.MaxValue); // Provider / Text Unit specific offsets switch (typeOfProvider) { case "win32": case "winform": { // This is to correct the fact that our line count will skip the last line if it // DOES NOT have a trailing \r, \n or \r\n if (tu == TextUnit.Line) { string text = rangeToCount.GetText(-1); AutomationElement element = rangeToCount.GetEnclosingElement(); if (IsTrailingCRLF(element, text) == 0) { count++; } } } break; case "wpf": break; } return(count); }
public void DocumentNormalize() { string text = "gomez thing\r\nmorticia\twednesday"; SetText(text); Thread.Sleep(500); TextPattern textPattern = (TextPattern)textbox3Element.GetCurrentPattern(TextPattern.Pattern); TextPatternRange range = textPattern.DocumentRange.Clone(); int moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Character, -18); Assert.AreEqual(-18, moved_units); Assert.AreEqual("gomez thing\r\n", range.GetText(-1)); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Character, 2); Assert.AreEqual(2, moved_units); Assert.AreEqual("mez thing\r\n", range.GetText(-1)); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Character, -4); Assert.AreEqual(-4, moved_units); Assert.AreEqual("mez thi", range.GetText(-1)); range.ExpandToEnclosingUnit(TextUnit.Document); Assert.AreEqual("gomez thing\r\nmorticia\twednesday", range.GetText(-1)); }
public void CanGetDocumentRangeText() { using (CmdApp app = new CmdApp(CreateType.ProcessOnly, TestContext)) { // get the text from uia api AutomationElement textAreaUiaElement = GetTextAreaUiaElement(app); TextPattern textPattern = textAreaUiaElement.GetCurrentPattern(TextPattern.Pattern) as TextPattern; TextPatternRange documentRange = textPattern.DocumentRange; string allText = documentRange.GetText(-1); // get text from console api IntPtr hConsole = app.GetStdOutHandle(); using (ViewportArea area = new ViewportArea(app)) { WinCon.CONSOLE_SCREEN_BUFFER_INFO_EX screenInfo = app.GetScreenBufferInfo(); Rectangle rect = new Rectangle(0, 0, screenInfo.dwSize.X, screenInfo.dwSize.Y); IEnumerable <string> viewportText = area.GetLinesInRectangle(hConsole, rect); // the uia api does not return spaces beyond the last // non -whitespace character so we need to trim those from // the viewportText. The uia api also inserts \r\n to indicate // a new linen so we need to add those back in after trimming. string consoleText = ""; for (int i = 0; i < viewportText.Count(); ++i) { consoleText += viewportText.ElementAt(i).Trim() + "\r\n"; } consoleText = consoleText.Trim(); allText = allText.Trim(); // compare Verify.IsTrue(consoleText.Equals(allText)); } } }
/// <summary> /// Highlights text in the text control corresponding to the text range Start and End endpoints /// </summary> /// <param name="control">The UI Automation element</param> /// <param name="targetRange">The text range to select.</param> internal static void Select(AutomationElement control, TextPatternRange targetRange) { CommonUIAPatternHelpers.CheckPatternSupport(TextPattern.Pattern, control); targetRange.Select(); targetRange.ScrollIntoView(true); }
public void CharacterNormalize() { string text = "gomez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing"; SetText(text); Thread.Sleep(500); TextPattern textPattern = (TextPattern)textbox3Element.GetCurrentPattern(TextPattern.Pattern); TextPatternRange range = textPattern.DocumentRange.Clone(); // NOTE: These all pass successfully on Windows Vista, so // think twice before you change anything. range.ExpandToEnclosingUnit(TextUnit.Character); Assert.AreEqual(text, range.GetText(-1)); int moved_units; moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Character, 2); Assert.AreEqual(2, moved_units); Assert.AreEqual("mez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing", range.GetText(-1)); range.ExpandToEnclosingUnit(TextUnit.Character); Assert.AreEqual("mez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing", range.GetText(-1)); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Character, -2); Assert.AreEqual(-2, moved_units); Assert.AreEqual("mez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthi", range.GetText(-1)); range.ExpandToEnclosingUnit(TextUnit.Character); Assert.AreEqual("mez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthi", range.GetText(-1)); }
public void CanExpandToEnclosingUnitTextRangeProvider() { using (CmdApp app = new CmdApp(CreateType.ProcessOnly, TestContext)) { AutomationElement textAreaUiaElement = GetTextAreaUiaElement(app); TextPattern textPattern = textAreaUiaElement.GetCurrentPattern(TextPattern.Pattern) as TextPattern; TextPatternRange[] visibleRanges = textPattern.GetVisibleRanges(); TextPatternRange testRange = visibleRanges.First().Clone(); // change testRange to a degenerate range and then expand to a line testRange.MoveEndpointByRange(TextPatternRangeEndpoint.End, testRange, TextPatternRangeEndpoint.Start); Verify.AreEqual(0, testRange.CompareEndpoints(TextPatternRangeEndpoint.Start, testRange, TextPatternRangeEndpoint.End)); testRange.ExpandToEnclosingUnit(TextUnit.Line); Verify.IsTrue(testRange.Compare(visibleRanges[0])); // expand to document size testRange.ExpandToEnclosingUnit(TextUnit.Document); Verify.IsTrue(testRange.Compare(textPattern.DocumentRange)); // shrink back to a line testRange.ExpandToEnclosingUnit(TextUnit.Line); Verify.IsTrue(testRange.Compare(visibleRanges[0])); // make the text buffer start to cycle its buffer _FillOutputBufferWithData(app); // expand to document range again testRange.ExpandToEnclosingUnit(TextUnit.Document); Verify.IsTrue(testRange.Compare(textPattern.DocumentRange)); } }
protected string get_text(AutomationElement root) { AutomationElement active_element = AutomationElement.FocusedElement; TextPattern pattern; try { // AutomationPattern[] patterns = active_element.GetSupportedPatterns(); pattern = active_element.GetCurrentPattern(TextPattern.Pattern) as TextPattern; } catch { //Feedback.print("Error."); //string if current_text = DateTime.Now.ToShortTimeString() + " - none."; return(null); } TextPatternRange range = pattern.DocumentRange; TextPatternRange[] selection = pattern.GetSelection(); string temp = selection[0].GetText(20); selection[0].MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Character, -temp.Length); selection[0].MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Character, -20); string result = selection[0].GetText(20); if (result == "") { return(null); } //Feedback.print(amount + " - " + result + "\r\n"); return(result); }
public static void TrimRangeCRLF(AutomationElement autoElement, TextPatternRange callingRange) { Library.ValidateArgumentNonNull(autoElement, "AutomationElement cannot be null"); Library.ValidateArgumentNonNull(autoElement, "callingRange cannot be null"); if (IsRichEdit(autoElement) == true) { int actualOffset = 0; // Actual offset of \r, \n or \r\n int expectedOffset = 0; // Expected offset of \r, \n or \r\n string text = callingRange.GetText(-1); expectedOffset = GetTrailingCRLFOffset(text); // Now... move the endpoint actualOffset = callingRange.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Character, expectedOffset); if (actualOffset != expectedOffset) { throw new InvalidOperationException("Unable to move endpoint back by " + expectedOffset + " characters. Actual = " + actualOffset); } else { /* changing to new flexible logging */ //Logger.LogComment("Adjusted size of range for RichEdit control by omitting last " + expectedOffset + " characters"); UIVerifyLogger.LogComment("Adjusted size of range for RichEdit control by omitting last " + expectedOffset + " characters"); } } }
public void WordNormalize() { string text = "gomez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing"; SetText(text); Thread.Sleep(500); TextPattern textPattern = (TextPattern)textbox3Element.GetCurrentPattern(TextPattern.Pattern); TextPatternRange range = textPattern.DocumentRange.Clone(); // NOTE: These all pass successfully on Windows Vista, so // think twice before you change anything. int moved_units; moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Character, 2); Assert.AreEqual(2, moved_units); Assert.AreEqual("mez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing", range.GetText(-1)); range.ExpandToEnclosingUnit(TextUnit.Word); Assert.AreEqual("gomez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing", range.GetText(-1), "Text incorrect when expanding after first +2 character move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Character, -2); Assert.AreEqual(-2, moved_units); Assert.AreEqual("gomez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthi", range.GetText(-1)); range.ExpandToEnclosingUnit(TextUnit.Word); Assert.AreEqual("gomez\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing", range.GetText(-1), "Text incorrect when expanding after -2 character move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Character, 5); Assert.AreEqual(5, moved_units); Assert.AreEqual("\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing", range.GetText(-1)); range.ExpandToEnclosingUnit(TextUnit.Word); Assert.AreEqual("\rmorticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing", range.GetText(-1), "Text incorrect when expanding after +5 character move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Character, 2); Assert.AreEqual(2, moved_units); Assert.AreEqual("orticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing", range.GetText(-1)); range.ExpandToEnclosingUnit(TextUnit.Word); Assert.AreEqual("morticia\npugsley\r\nwednesday\r\rfester\n\nlurch\r\n\r\nthing", range.GetText(-1), "Text incorrect when expanding after second +2 character move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Character, -10); Assert.AreEqual(-10, moved_units); Assert.AreEqual("morticia\npugsley\r\nwednesday\r\rfester\n\nlurc", range.GetText(-1)); range.ExpandToEnclosingUnit(TextUnit.Word); Assert.AreEqual("morticia\npugsley\r\nwednesday\r\rfester\n\nlurch", range.GetText(-1), "Text incorrect when expanding after -10 character move"); }
public void CanMoveEndpointByUnitNearTopBoundary() { using (CmdApp app = new CmdApp(CreateType.ProcessOnly, TestContext)) { AutomationElement textAreaUiaElement = GetTextAreaUiaElement(app); TextPattern textPattern = textAreaUiaElement.GetCurrentPattern(TextPattern.Pattern) as TextPattern; TextPatternRange[] visibleRanges = textPattern.GetVisibleRanges(); TextPatternRange testRange = visibleRanges.First().Clone(); // assumes that range is a line range at the top of the screen buffer Action <TextPatternRange> testTopBoundary = delegate(TextPatternRange range) { // the first visible range is at the top of the screen // buffer, we shouldn't be able to move the starting endpoint up int moveAmount = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Line, -1); Verify.AreEqual(0, moveAmount); // we should be able to move the ending endpoint back, creating a degenerate range moveAmount = range.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Line, -1); Verify.AreEqual(-1, moveAmount); // the range should now be degenerate and the ending // endpoint should not be able to be moved back again string rangeText = range.GetText(-1); Verify.AreEqual("", rangeText); moveAmount = range.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Line, -1); Verify.AreEqual(-1, moveAmount); }; testTopBoundary(testRange); // we want to test that the boundaries are still observed // when the screen buffer index and text buffer index don't align. // write a bunch of text to the screen to fill up the text // buffer and make it start to reuse its buffer _FillOutputBufferWithData(app); Globals.WaitForTimeout(); // move all the way to the bottom visibleRanges = textPattern.GetVisibleRanges(); testRange = visibleRanges.Last().Clone(); while (true) { int moved = testRange.Move(TextUnit.Line, 1); if (moved == 0) { break; } } // we're at the bottom of the screen buffer, so move back to the top // so we can test int rowsToMove = -1 * (_GetTotalRows(app) - 1); int moveCount = testRange.Move(TextUnit.Line, rowsToMove); Verify.AreEqual(rowsToMove, moveCount); testRange.ScrollIntoView(true); testTopBoundary(testRange); } }
public void MoveEndpointByWord() { string text = "The quick\tbrown (fox] \"jumps\"\rover:\nthe lazy, dog."; SetText(text); Thread.Sleep(500); TextPattern textPattern = (TextPattern)textbox3Element.GetCurrentPattern(TextPattern.Pattern); TextPatternRange range = textPattern.DocumentRange.Clone(); // NOTE: These all pass successfully on Windows Vista, so // think twice before you change anything. int moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Word, 0); Assert.AreEqual(0, moved_units, "Moved units are incorrect in 0 word move"); Assert.AreEqual("The quick\tbrown (fox] \"jumps\"\rover:\nthe lazy, dog.", range.GetText(-1), "Text is incorrect in 0 word move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Word, 1); Assert.AreEqual(1, moved_units, "Moved units are incorrect in 1 word move"); Assert.AreEqual(" quick\tbrown (fox] \"jumps\"\rover:\nthe lazy, dog.", range.GetText(-1), "Text is incorrect in first +1 word move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Word, -3); Assert.AreEqual(-1, moved_units, "Moved units are incorrect in -3 word move"); Assert.AreEqual("The quick\tbrown (fox] \"jumps\"\rover:\nthe lazy, dog.", range.GetText(-1), "Text is incorrect in -3 word move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Word, 2); Assert.AreEqual(2, moved_units, "Moved units are incorrect in 2 word move"); Assert.AreEqual("quick\tbrown (fox] \"jumps\"\rover:\nthe lazy, dog.", range.GetText(-1), "Text is incorrect in +2 word move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Word, 1); Assert.AreEqual(1, moved_units, "Moved units are incorrect in 1 word move"); Assert.AreEqual("\tbrown (fox] \"jumps\"\rover:\nthe lazy, dog.", range.GetText(-1), "Text is incorrect in second +1 word move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Word, 1); Assert.AreEqual(1, moved_units, "Moved units are incorrect in 1 word move"); Assert.AreEqual("brown (fox] \"jumps\"\rover:\nthe lazy, dog.", range.GetText(-1), "Text is incorrect in third +1 word move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Word, 3); Assert.AreEqual(3, moved_units, "Moved units are incorrect in 3 word move"); Assert.AreEqual("fox] \"jumps\"\rover:\nthe lazy, dog.", range.GetText(-1), "Text is incorrect in +3 word move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Word, 4); Assert.AreEqual(4, moved_units, "Moved units are incorrect in 4 word move"); Assert.AreEqual("jumps\"\rover:\nthe lazy, dog.", range.GetText(-1), "Text is incorrect in +4 word move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Word, -2); Assert.AreEqual(-2, moved_units, "Moved units are incorrect in -2 word move"); Assert.AreEqual(" \"jumps\"\rover:\nthe lazy, dog.", range.GetText(-1), "Text is incorrect in -2 word move"); }
TextPatternRange [] RangeArray(ITextPatternRange [] source) { TextPatternRange [] ret = new TextPatternRange [source.Length]; for (int i = 0; i < source.Length; i++) { ret [i] = new TextPatternRange(this, source [i]); } return(ret); }
/// <summary> /// Retrieves the range of a child object. /// </summary> /// <param name="childElement">The child element. If the element is not /// a child of the text container then an InvalidOperation exception is /// thrown.</param> /// <returns>A range that spans the child element.</returns> public TextPatternRange RangeFromChild(AutomationElement childElement) { if (childElement == null) { throw new ArgumentNullException("childElement"); } SafeTextRangeHandle hTextRange = UiaCoreApi.TextPattern_RangeFromChild(_hPattern, childElement.RawNode); return(TextPatternRange.Wrap(hTextRange, this)); }
internal static int Win32CountTextUnit(TextUnit textUnit, TextPatternRange rangeToCount) { AutomationElement element = null; string actualText = ""; ValidateArgumentNonNull(rangeToCount, "rangeToCount argument cannot be null"); // Sanity check // Get text try { actualText = rangeToCount.GetText(-1); element = rangeToCount.GetEnclosingElement(); if (element == null) { throw new InvalidOperationException("Null automation element incorrectly returned by TextPatternRange.GetEnclosingElement() in Win32CountTextUnit()"); } } catch (Exception exception) { if (IsCriticalException(exception)) { throw; } throw new InvalidOperationException("Unable to call TextPatternRange.GetText() in Win32CountTextUnit()", exception); } // Count text units and assign to array element switch (textUnit) { case TextUnit.Character: return(actualText.Length); case TextUnit.Format: return(CountTextUnit(TextUnit.Format, rangeToCount)); case TextUnit.Word: return(CountTextUnit(TextUnit.Word, rangeToCount)); case TextUnit.Line: return(Win32CountLines(element)); case TextUnit.Paragraph: return(CountParagraphs(actualText)); case TextUnit.Page: return(1); case TextUnit.Document: return(1); default: throw new ArgumentException("CountTextUnits() does not support " + textUnit.ToString()); } }
private void MoveEndpointByParagraphSimple(string newline) { //In case you were wondering, the topic is: things that are awesome string text = String.Format("bear{0}{0}shark{0}laser{0}{0}volcano", newline); SetText(text); Thread.Sleep(500); TextPattern textPattern = (TextPattern)textbox3Element.GetCurrentPattern(TextPattern.Pattern); TextPatternRange range = textPattern.DocumentRange.Clone(); // NOTE: These all pass successfully on Windows Vista, so // think twice before you change anything. int moved_units; moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Paragraph, 0); Assert.AreEqual(0, moved_units, "Moved units are incorrect in 0 paragraph move"); Assert.AreEqual(String.Format("bear{0}{0}shark{0}laser{0}{0}volcano", newline), range.GetText(-1), "Text is incorrect in 0 paragraph move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Paragraph, -1); Assert.AreEqual(0, moved_units, "Moved units are incorrect in -1 paragraph move"); Assert.AreEqual(String.Format("bear{0}{0}shark{0}laser{0}{0}volcano", newline), range.GetText(-1), "Text is incorrect in -1 paragraph move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Paragraph, 1); Assert.AreEqual(1, moved_units, "Moved units are incorrect in first +1 paragraph move"); Assert.AreEqual(String.Format("{0}shark{0}laser{0}{0}volcano", newline), range.GetText(-1), "Text is incorrect in first +1 paragraph move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Paragraph, 1); Assert.AreEqual(1, moved_units, "Moved units are incorrect in second +1 paragraph move"); Assert.AreEqual(String.Format("shark{0}laser{0}{0}volcano", newline), range.GetText(-1), "Moved units are incorrect in second +1 paragraph move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Paragraph, 1); Assert.AreEqual(1, moved_units, "Moved units are incorrect in third +1 paragraph move"); Assert.AreEqual(String.Format("laser{0}{0}volcano", newline), range.GetText(-1), "Text is incorrect in third +1 paragraph move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Paragraph, -1); Assert.AreEqual(-1, moved_units, "Moved units are incorrect in first -1 paragraph move"); Assert.AreEqual(String.Format("shark{0}laser{0}{0}volcano", newline), range.GetText(-1), "Text is incorrect in first -1 paragraph move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Paragraph, -1); Assert.AreEqual(-1, moved_units, "Moved units are incorrect in second -1 paragraph move"); Assert.AreEqual(String.Format("{0}shark{0}laser{0}{0}volcano", newline), range.GetText(-1), "Text is incorrect in second -1 paragraph move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Paragraph, -1); Assert.AreEqual(-1, moved_units, "Moved units are incorrect in third -1 paragraph move"); Assert.AreEqual(String.Format("bear{0}{0}shark{0}laser{0}{0}volcano", newline), range.GetText(-1), "Text is incorrect in third -1 paragraph move"); }
public TextPatternRange[] GetVisibleRanges() { var visibleRanges = this._textPattern.GetVisibleRanges(); var textPatternRangeArray = new TextPatternRange[visibleRanges.Length]; for (var index = 0; index < visibleRanges.Length; ++index) { textPatternRangeArray[index] = new TextPatternRange(textPatternRange: visibleRanges.GetElement(index: index)); } return(textPatternRangeArray); }
public TextPatternRange[] GetSelection() { var selection = this._textPattern.GetSelection(); var textPatternRangeArray = new TextPatternRange[selection.Length]; for (var index = 0; index < selection.Length; ++index) { textPatternRangeArray[index] = new TextPatternRange(textPatternRange: selection.GetElement(index: index)); } return(textPatternRangeArray); }
public void TextPatternTest() { System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); // Fragile -- I'm open to a better way of doing this. using (AppHost host = new AppHost("xpsrchvw.exe", "..\\..\\..\\UiaComWrapperTests\\bin\\debug\\test.xps")) { AutomationElement mainContent = host.Element.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.IsTextPatternAvailableProperty, true)); TextPattern text = (TextPattern)mainContent.GetCurrentPattern(TextPattern.Pattern); Assert.AreEqual(text.SupportedTextSelection, SupportedTextSelection.Single); TextPatternRange range1 = text.DocumentRange; Assert.IsNotNull(range1); Assert.AreEqual(text, range1.TextPattern); TextPatternRange range2 = range1.Clone(); Assert.IsNotNull(range2); Assert.IsTrue(range1.Compare(range2)); Assert.IsTrue(0 == range1.CompareEndpoints(TextPatternRangeEndpoint.Start, range2, TextPatternRangeEndpoint.Start)); Assert.IsTrue(0 == range1.CompareEndpoints(TextPatternRangeEndpoint.End, range2, TextPatternRangeEndpoint.End)); string keyString = "Constitution of the United States"; TextPatternRange range3 = range1.FindText(keyString, false, true); Assert.IsNotNull(range3); string foundString = range3.GetText(-1); Assert.AreEqual(keyString, foundString); range3.Select(); TextPatternRange[] selectedRanges = text.GetSelection(); Assert.AreEqual(1, selectedRanges.Length); TextPatternRange selectedRange = selectedRanges[0]; Assert.IsTrue(range3.Compare(selectedRange)); // Test attributes. Casts will fail if types are wrong System.Globalization.CultureInfo culture = (System.Globalization.CultureInfo)range3.GetAttributeValue(TextPattern.CultureAttribute); string fontName = (string)range3.GetAttributeValue(TextPattern.FontNameAttribute); bool hiddenValue = (bool)range3.GetAttributeValue(TextPattern.IsItalicAttribute); Assert.AreEqual(AutomationElement.NotSupported, range3.GetAttributeValue(TextPattern.IsHiddenAttribute)); TextPatternRange range5 = range1.FindAttribute(TextPattern.IsItalicAttribute, true, false /* backward */); Assert.IsNotNull(range5); Assert.AreEqual("Note", range5.GetText(-1)); range5.ExpandToEnclosingUnit(TextUnit.Line); string line5 = range5.GetText(-1); Assert.AreEqual("Preamble Note ", line5); System.Windows.Rect[] rects = range3.GetBoundingRectangles(); Assert.AreEqual(rects.Length, 1); Assert.IsTrue(rects[0].Width > 0); Assert.IsTrue(rects[0].Height > 0); } }
/// <summary> /// Searches for, then highlights text in the text control corresponding to the text range Start and End endpoints. /// </summary> /// <param name="control">The UI Automation element</param> /// <param name="find">The string to find.</param> /// <param name="ignoreCase">if set to <c>true</c> ignores case.</param> internal static void Select(AutomationElement control, string find, bool ignoreCase) { CommonUIAPatternHelpers.CheckPatternSupport(TextPattern.Pattern, control); TextPatternRange range = FindText(control, find, false, ignoreCase); if (range == null) { return; } range.Select(); range.ScrollIntoView(true); }
/// <summary> /// Finds the range nearest to a screen coordinate. /// If the coordinate is within the bounding rectangle of a character then the /// range will contain that character. Otherwise, it will be a degenerate /// range near the point, chosen in an implementation-dependent manner. /// An InvalidOperation exception is thrown if the point is outside of the /// client area of the text container. /// </summary> /// <param name="screenLocation">The location in screen coordinates.</param> /// <returns>A degenerate range nearest the specified location.</returns> public TextPatternRange RangeFromPoint(Point screenLocation) { //If we are not within the client area throw an exception Rect rect = (Rect)_element.GetCurrentPropertyValue(AutomationElement.BoundingRectangleProperty); if (screenLocation.X < rect.Left || screenLocation.X >= rect.Right || screenLocation.Y < rect.Top || screenLocation.Y >= rect.Bottom) { throw new ArgumentException(SR.Get(SRID.ScreenCoordinatesOutsideBoundingRect)); } SafeTextRangeHandle hTextRange = UiaCoreApi.TextPattern_RangeFromPoint(_hPattern, screenLocation); return(TextPatternRange.Wrap(hTextRange, this)); }
public void MoveEndpointByPage() { string text = String.Format("apples\r\n\npears\r\r\npeaches\nbananas"); SetText(text); Thread.Sleep(500); TextPattern textPattern = (TextPattern)textbox3Element.GetCurrentPattern(TextPattern.Pattern); TextPatternRange range = textPattern.DocumentRange.Clone(); // NOTE: These all pass successfully on Windows Vista, so // think twice before you change anything. int moved_units; moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Page, 0); Assert.AreEqual(0, moved_units, "Moved units are incorrect in 0 page move"); Assert.AreEqual("apples\r\n\npears\r\r\npeaches\nbananas", range.GetText(-1), "Text is incorrect in 0 page move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Character, 1); Assert.AreEqual(1, moved_units, "Moved units are incorrect in +1 character move"); Assert.AreEqual("pples\r\n\npears\r\r\npeaches\nbananas", range.GetText(-1), "Text is incorrect in first +1 character move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Page, -1); Assert.AreEqual(-1, moved_units, "Moved units are incorrect in first -1 page move"); Assert.AreEqual("apples\r\n\npears\r\r\npeaches\nbananas", range.GetText(-1), "Text is incorrect in first -1 page move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Page, 1); Assert.AreEqual(1, moved_units, "Moved units are incorrect in first +1 page move"); Assert.AreEqual(String.Empty, range.GetText(-1), "Text is incorrect in first +1 page move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Character, -1); Assert.AreEqual(-1, moved_units, "Moved units are incorrect in -1 character move"); Assert.AreEqual("s", range.GetText(-1), "Text is incorrect in -1 character move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Page, -1); Assert.AreEqual(-1, moved_units, "Moved units are incorrect in second -1 page move"); Assert.AreEqual(String.Empty, range.GetText(-1), "Text is incorrect in second -1 page move"); moved_units = range.MoveEndpointByUnit(TextPatternRangeEndpoint.End, TextUnit.Page, 1); Assert.AreEqual(1, moved_units, "Moved units are incorrect in second +1 page move"); Assert.AreEqual("apples\r\n\npears\r\r\npeaches\nbananas", range.GetText(-1), "Text is incorrect in second +1 page move"); }
public void CanCloneTextRangeProvider() { using (CmdApp app = new CmdApp(CreateType.ProcessOnly, TestContext)) { AutomationElement textAreaUiaElement = GetTextAreaUiaElement(app); TextPattern textPattern = textAreaUiaElement.GetCurrentPattern(TextPattern.Pattern) as TextPattern; TextPatternRange textPatternRange = textPattern.DocumentRange; // clone it TextPatternRange copyRange = textPatternRange.Clone(); Verify.IsTrue(copyRange.Compare(textPatternRange)); // change the copy and make sure the compare fails copyRange.MoveEndpointByRange(TextPatternRangeEndpoint.End, copyRange, TextPatternRangeEndpoint.Start); Verify.IsFalse(copyRange.Compare(textPatternRange)); } }
public static int CountTrailingCRLF(AutomationElement autoElement, TextPatternRange callingRange) { // Bug: 1134056: Resolve RichEdit control inconsistencies / unexpected behavior int offset = 0; Library.ValidateArgumentNonNull(autoElement, "AutomationElement cannot be null"); Library.ValidateArgumentNonNull(callingRange, "callingRange cannot be null"); if (IsRichEdit(autoElement) == true) { string text = callingRange.GetText(-1); offset = GetTrailingCRLFOffset(text); } return(offset); }
private void EmptyTextFromChild(AutomationElement element) { if (element.GetSupportedPatterns().Contains(ValuePattern.Pattern)) { ((ValuePattern)element.GetCurrentPattern(ValuePattern.Pattern)).SetValue(string.Empty); } else if (element.GetSupportedPatterns().Contains(TextPattern.Pattern)) { TextPatternRange document = ((TextPattern)Element.GetCurrentPattern(TextPattern.Pattern)).DocumentRange; AutomationElement[] children = document.GetChildren(); foreach (var child in children) { EmptyTextFromChild(child); } } }
public TextPatternRange[] GetVisibleRanges() { try { return(TextPatternRange.Wrap(this._pattern.GetVisibleRanges(), this)); } catch (System.Runtime.InteropServices.COMException e) { Exception newEx; if (Utility.ConvertException(e, out newEx)) { throw newEx; } else { throw; } } }
public TextPatternRange RangeFromPoint(Point screenLocation) { try { return(TextPatternRange.Wrap(this._pattern.RangeFromPoint(Utility.PointManagedToNative(screenLocation)), this)); } catch (System.Runtime.InteropServices.COMException e) { Exception newEx; if (Utility.ConvertException(e, out newEx)) { throw newEx; } else { throw; } } }
public void CanGetBoundingRectangles() { using (CmdApp app = new CmdApp(CreateType.ProcessOnly, TestContext)) { AutomationElement textAreaUiaElement = GetTextAreaUiaElement(app); TextPattern textPattern = textAreaUiaElement.GetCurrentPattern(TextPattern.Pattern) as TextPattern; TextPatternRange[] visibleRanges = textPattern.GetVisibleRanges(); // copy the first range TextPatternRange firstRange = visibleRanges[0].Clone(); // only one bounding rect should be returned for the one line Rect[] boundingRects = firstRange.GetBoundingRectangles(); Verify.AreEqual(1, boundingRects.GetLength(0)); // expand to two lines, verify we get a bounding rect per line firstRange.MoveEndpointByRange(TextPatternRangeEndpoint.End, visibleRanges[1], TextPatternRangeEndpoint.End); boundingRects = firstRange.GetBoundingRectangles(); Verify.AreEqual(2, boundingRects.GetLength(0)); } }
public TextPatternRange RangeFromChild(AutomationElement childElement) { Utility.ValidateArgumentNonNull(childElement, "childElement"); try { return(TextPatternRange.Wrap(this._pattern.RangeFromChild(childElement.NativeElement), this)); } catch (System.Runtime.InteropServices.COMException e) { Exception newEx; if (Utility.ConvertException(e, out newEx)) { throw newEx; } else { throw; } } }
public void FindText() { SetText("gomez thing\r\nmorticia\twednesday ing"); Thread.Sleep(500); TextPatternRange range1, range2; TextPattern textPattern = (TextPattern)textbox3Element.GetCurrentPattern(TextPattern.Pattern); int moved_units; TextPatternRange range = textPattern.DocumentRange.Clone(); range1 = range.FindText("mort", false, false); Assert.AreEqual("mort", range1.GetText(-1)); range2 = range1.FindText("mort", false, false); Assert.AreEqual("mort", range2.GetText(-1)); range2 = range1.FindText("gomez", false, false); Assert.IsNull(range2); range2 = range1.FindText("thing", true, false); Assert.IsNull(range2); range1 = range.FindText("\t", false, false); Assert.AreEqual("\t", range1.GetText(-1)); range1 = range.FindText("dayz", false, false); Assert.IsNull(range1); range1 = range.FindText("HING\r", false, true); Assert.AreEqual("hing\r", range1.GetText(-1)); range1 = range.FindText("HING\r", false, false); Assert.IsNull(range1); range1 = range.FindText("ing", true, false); Assert.AreEqual("ing", range1.GetText(-1)); moved_units = range1.MoveEndpointByUnit(TextPatternRangeEndpoint.Start, TextUnit.Character, -2); Assert.AreEqual(-2, moved_units); Assert.AreEqual("y ing", range1.GetText(-1)); }
private string RetrieveTextFrom(AutomationElement element) { string text = string.Empty; if (element.GetSupportedPatterns().Contains(ValuePattern.Pattern)) { text = text + new ValuePatternWrapper(element).Value; } else if (element.GetSupportedPatterns().Contains(TextPattern.Pattern)) { TextPatternRange document = ((TextPattern)Element.GetCurrentPattern(TextPattern.Pattern)).DocumentRange; AutomationElement[] children = document.GetChildren(); foreach (var child in children) { text = text + RetrieveTextFrom(child); } } return(text); }