blob: 0f1ad1de714bbe932520410da678329ac7beddb6 [file] [log] [blame]
nektar22e0015b2015-01-12 22:25:061// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
avi9c81217b2015-12-24 23:40:055#include <stddef.h>
6
nektar22e0015b2015-01-12 22:25:067#include "base/strings/utf_string_conversions.h"
8#include "testing/gtest/include/gtest/gtest.h"
dmazzoni25a949f2016-08-01 17:20:449#include "ui/accessibility/ax_enums.h"
nektar22e0015b2015-01-12 22:25:0610#include "ui/accessibility/ax_text_utils.h"
11
12namespace ui {
13
nektar2a0540402016-03-10 00:09:0714TEST(AXTextUtils, FindAccessibleTextBoundaryWord) {
15 const base::string16 text =
16 base::UTF8ToUTF16("Hello there.This/is\ntesting.");
17 const size_t text_length = text.length();
18 std::vector<int> line_start_offsets;
19 line_start_offsets.push_back(19);
20 size_t result;
21
22 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4423 0, FORWARDS_DIRECTION,
24 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0725 EXPECT_EQ(6UL, result);
26 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4427 5, BACKWARDS_DIRECTION,
28 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0729 EXPECT_EQ(0UL, result);
30 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4431 6, FORWARDS_DIRECTION,
32 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0733 EXPECT_EQ(12UL, result);
34 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4435 11, BACKWARDS_DIRECTION,
36 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0737 EXPECT_EQ(6UL, result);
38 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4439 12, BACKWARDS_DIRECTION,
40 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0741 EXPECT_EQ(12UL, result);
42 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4443 15, FORWARDS_DIRECTION,
44 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0745 EXPECT_EQ(17UL, result);
46 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4447 15, BACKWARDS_DIRECTION,
48 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0749 EXPECT_EQ(12UL, result);
50 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4451 16, FORWARDS_DIRECTION,
52 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0753 EXPECT_EQ(17UL, result);
54 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4455 17, FORWARDS_DIRECTION,
56 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0757 EXPECT_EQ(20UL, result);
58 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4459 20, FORWARDS_DIRECTION,
60 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0761 EXPECT_EQ(text_length, result);
62 result = FindAccessibleTextBoundary(text, line_start_offsets, WORD_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4463 text_length, BACKWARDS_DIRECTION,
64 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar2a0540402016-03-10 00:09:0765 EXPECT_EQ(20UL, result);
66}
67
nektar22e0015b2015-01-12 22:25:0668TEST(AXTextUtils, FindAccessibleTextBoundaryLine) {
nektar28f5f642015-04-30 00:31:1469 const base::string16 text = base::UTF8ToUTF16("Line 1.\nLine 2\n\t");
nektar22e0015b2015-01-12 22:25:0670 const size_t text_length = text.length();
nektar28f5f642015-04-30 00:31:1471 std::vector<int> line_start_offsets;
72 line_start_offsets.push_back(8);
73 line_start_offsets.push_back(15);
nektar22e0015b2015-01-12 22:25:0674 size_t result;
75
nektar22e0015b2015-01-12 22:25:0676 // Basic cases.
nektar28f5f642015-04-30 00:31:1477 result = FindAccessibleTextBoundary(text, line_start_offsets, LINE_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4478 5, FORWARDS_DIRECTION,
79 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar28f5f642015-04-30 00:31:1480 EXPECT_EQ(8UL, result);
81 result = FindAccessibleTextBoundary(text, line_start_offsets, LINE_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4482 9, BACKWARDS_DIRECTION,
83 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar28f5f642015-04-30 00:31:1484 EXPECT_EQ(8UL, result);
85 result = FindAccessibleTextBoundary(text, line_start_offsets, LINE_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4486 10, FORWARDS_DIRECTION,
87 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar28f5f642015-04-30 00:31:1488 EXPECT_EQ(15UL, result);
nektar22e0015b2015-01-12 22:25:0689
nektar22e0015b2015-01-12 22:25:0690 // Edge cases.
nektar28f5f642015-04-30 00:31:1491 result = FindAccessibleTextBoundary(text, line_start_offsets, LINE_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4492 text_length, BACKWARDS_DIRECTION,
93 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar28f5f642015-04-30 00:31:1494 EXPECT_EQ(15UL, result);
nektar22e0015b2015-01-12 22:25:0695
nektar28f5f642015-04-30 00:31:1496 // When the start_offset is at the start of the next line and we are searching
97 // backwards, it should not move.
98 result = FindAccessibleTextBoundary(text, line_start_offsets, LINE_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:4499 15, BACKWARDS_DIRECTION,
100 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar28f5f642015-04-30 00:31:14101 EXPECT_EQ(15UL, result);
nektar22e0015b2015-01-12 22:25:06102
nektar28f5f642015-04-30 00:31:14103 // When the start_offset is at a hard line break and we are searching
104 // backwards, it should return the start of the previous line.
105 result = FindAccessibleTextBoundary(text, line_start_offsets, LINE_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:44106 14, BACKWARDS_DIRECTION,
107 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar28f5f642015-04-30 00:31:14108 EXPECT_EQ(8UL, result);
109
110 // When the start_offset is at the start of a line and we are searching
111 // forwards, it should return the start of the next line.
112 result = FindAccessibleTextBoundary(text, line_start_offsets, LINE_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:44113 8, FORWARDS_DIRECTION,
114 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar28f5f642015-04-30 00:31:14115 EXPECT_EQ(15UL, result);
nektar22e0015b2015-01-12 22:25:06116
117 // When there is no previous line break and we are searching backwards,
118 // it should return 0.
nektar28f5f642015-04-30 00:31:14119 result = FindAccessibleTextBoundary(text, line_start_offsets, LINE_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:44120 4, BACKWARDS_DIRECTION,
121 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar22e0015b2015-01-12 22:25:06122 EXPECT_EQ(0UL, result);
123
nektar28f5f642015-04-30 00:31:14124 // When we are at the start of the last line and we are searching forwards.
nektar22e0015b2015-01-12 22:25:06125 // it should return the text length.
nektar28f5f642015-04-30 00:31:14126 result = FindAccessibleTextBoundary(text, line_start_offsets, LINE_BOUNDARY,
dmazzoni25a949f2016-08-01 17:20:44127 15, FORWARDS_DIRECTION,
128 AX_TEXT_AFFINITY_DOWNSTREAM);
nektar22e0015b2015-01-12 22:25:06129 EXPECT_EQ(text_length, result);
130}
131
nektar2a0540402016-03-10 00:09:07132} // namespace ui