コード例 #1
0
ファイル: TextLibraryCount.cs プロジェクト: shazha/UIAVerify
        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);
        }
コード例 #2
0
ファイル: TextPatternTest.cs プロジェクト: ABEMBARKA/monoUI
        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));
        }
コード例 #3
0
        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));
                }
            }
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
ファイル: TextPatternTest.cs プロジェクト: ABEMBARKA/monoUI
        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));
        }
コード例 #6
0
        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));
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: TextLibrary.cs プロジェクト: shazha/UIAVerify
        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");
                }
            }
        }
コード例 #9
0
ファイル: TextPatternTest.cs プロジェクト: ABEMBARKA/monoUI
        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");
        }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
ファイル: TextPatternTest.cs プロジェクト: ABEMBARKA/monoUI
        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");
        }
コード例 #12
0
 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);
 }
コード例 #13
0
        /// <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));
        }
コード例 #14
0
ファイル: TextLibraryCount.cs プロジェクト: shazha/UIAVerify
        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());
            }
        }
コード例 #15
0
ファイル: TextPatternTest.cs プロジェクト: ABEMBARKA/monoUI
        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");
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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);
            }
        }
コード例 #19
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);
        }
コード例 #20
0
        /// <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));
        }
コード例 #21
0
ファイル: TextPatternTest.cs プロジェクト: ABEMBARKA/monoUI
        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");
        }
コード例 #22
0
 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));
     }
 }
コード例 #23
0
ファイル: TextLibrary.cs プロジェクト: shazha/UIAVerify
        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);
        }
コード例 #24
0
ファイル: RichTextBox.cs プロジェクト: pako4u2k/wipflash
 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);
         }
     }
 }
コード例 #25
0
 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;
         }
     }
 }
コード例 #26
0
 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;
         }
     }
 }
コード例 #27
0
 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));
     }
 }
コード例 #28
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;
         }
     }
 }
コード例 #29
0
ファイル: TextPatternTest.cs プロジェクト: ABEMBARKA/monoUI
        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));
        }
コード例 #30
0
ファイル: RichTextBox.cs プロジェクト: pako4u2k/wipflash
        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);
        }