Fixed one-off error when finding line boundaries.
BUG=343578
R=dmazzoni
Review URL: https://codereview.chromium.org/755223004
Cr-Commit-Position: refs/heads/master@{#311129}
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn
index 296af4f..ac5f2aaf 100644
--- a/ui/accessibility/BUILD.gn
+++ b/ui/accessibility/BUILD.gn
@@ -56,6 +56,7 @@
test("accessibility_unittests") {
sources = [
"ax_generated_tree_unittest.cc",
+ "ax_text_utils_unittest.cc",
"ax_tree_serializer_unittest.cc",
"ax_tree_unittest.cc",
]
diff --git a/ui/accessibility/accessibility.gyp b/ui/accessibility/accessibility.gyp
index 702deb6..ca174fd 100644
--- a/ui/accessibility/accessibility.gyp
+++ b/ui/accessibility/accessibility.gyp
@@ -79,6 +79,7 @@
],
'sources': [
'ax_generated_tree_unittest.cc',
+ 'ax_text_utils_unittest.cc',
'ax_tree_serializer_unittest.cc',
'ax_tree_unittest.cc',
]
diff --git a/ui/accessibility/ax_text_utils.cc b/ui/accessibility/ax_text_utils.cc
index 08cd562..cac5aee5 100644
--- a/ui/accessibility/ax_text_utils.cc
+++ b/ui/accessibility/ax_text_utils.cc
@@ -33,7 +33,7 @@
} else {
for (size_t j = line_breaks.size(); j != 0; --j) {
size_t line_break = line_breaks[j - 1] >= 0 ? line_breaks[j - 1] : 0;
- if (line_break <= start_offset)
+ if (line_break < start_offset)
return line_break;
}
return 0;
diff --git a/ui/accessibility/ax_text_utils_unittest.cc b/ui/accessibility/ax_text_utils_unittest.cc
new file mode 100644
index 0000000..7163ef84
--- /dev/null
+++ b/ui/accessibility/ax_text_utils_unittest.cc
@@ -0,0 +1,63 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/strings/utf_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/accessibility/ax_text_utils.h"
+
+namespace ui {
+
+TEST(AXTextUtils, FindAccessibleTextBoundaryLine) {
+ const base::string16 text = base::UTF8ToUTF16("Line 1.\nLine 2\n");
+ const size_t text_length = text.length();
+ std::vector<int> line_breaks;
+ line_breaks.push_back(7);
+ line_breaks.push_back(14);
+ size_t result;
+
+
+ // Basic cases.
+ result = FindAccessibleTextBoundary(text, line_breaks, LINE_BOUNDARY, 5,
+ FORWARDS_DIRECTION);
+ EXPECT_EQ(7UL, result);
+ result = FindAccessibleTextBoundary(text, line_breaks, LINE_BOUNDARY, 9,
+ BACKWARDS_DIRECTION);
+ EXPECT_EQ(7UL, result);
+ result = FindAccessibleTextBoundary(text, line_breaks, LINE_BOUNDARY, 10,
+ FORWARDS_DIRECTION);
+ EXPECT_EQ(14UL, result);
+
+
+ // Edge cases.
+
+ result = FindAccessibleTextBoundary(text, line_breaks, LINE_BOUNDARY,
+ text_length, BACKWARDS_DIRECTION);
+ EXPECT_EQ(14UL, result);
+
+ // When the start_offset is on a line break and we are searching backwards,
+ // it should return the previous line break.
+ result = FindAccessibleTextBoundary(text, line_breaks, LINE_BOUNDARY, 14,
+ BACKWARDS_DIRECTION);
+ EXPECT_EQ(7UL, result);
+
+ // When the start_offset is on a line break and we are searching forwards,
+ // it should return the next line break.
+ result = FindAccessibleTextBoundary(text, line_breaks, LINE_BOUNDARY, 7,
+ FORWARDS_DIRECTION);
+ EXPECT_EQ(14UL, result);
+
+ // When there is no previous line break and we are searching backwards,
+ // it should return 0.
+ result = FindAccessibleTextBoundary(text, line_breaks, LINE_BOUNDARY, 4,
+ BACKWARDS_DIRECTION);
+ EXPECT_EQ(0UL, result);
+
+ // When we are on the last line break and we are searching forwards.
+ // it should return the text length.
+ result = FindAccessibleTextBoundary(text, line_breaks, LINE_BOUNDARY, 14,
+ FORWARDS_DIRECTION);
+ EXPECT_EQ(text_length, result);
+}
+
+} // Namespace ui.