Index: ui/gfx/render_text_unittest.cc |
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc |
index 9f884c73cc58ba6cc748c012f2d415dc068841a9..7002801a3bd467ca0bd2aa27ac93708935fbb3d0 100644 |
--- a/ui/gfx/render_text_unittest.cc |
+++ b/ui/gfx/render_text_unittest.cc |
@@ -3998,9 +3998,84 @@ TEST_P(RenderTextTest, SubpixelRenderingSuppressed) { |
EXPECT_FALSE(GetRendererPaint().isLCDRenderText()); |
} |
-// Verify GetDecoratedWordAtPoint returns the correct baseline point and |
-// decorated word for an LTR string. |
-TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_LTR) { |
+// Verify GetDecoratedTextAndBaselineForRange returns the correct baseline |
+// point and decorated word. |
+TEST_P(RenderTextHarfBuzzTest, GetDecoratedTextAndBaselineForRange) { |
+ const base::string16 text = ASCIIToUTF16("yellow boxfish"); |
+ const Range kWordOneRange = Range(0, 6); |
+ const Range kWordTwoRange = Range(7, 14); |
+ const Range kTextRange = Range(0, 14); |
+ |
+ RenderText* render_text = GetRenderText(); |
+ render_text->SetDisplayRect(Rect(100, 30)); |
+ render_text->SetText(text); |
+ render_text->ApplyWeight(Font::Weight::NORMAL, kWordOneRange); |
+ render_text->ApplyWeight(Font::Weight::SEMIBOLD, kWordTwoRange); |
+ render_text->ApplyStyle(UNDERLINE, true, kWordOneRange); |
+ render_text->ApplyStyle(STRIKE, true, Range(6, 7)); |
+ render_text->ApplyStyle(ITALIC, true, kWordTwoRange); |
+ |
+ const std::vector<RenderText::FontSpan> font_spans = |
+ render_text->GetFontSpansForTesting(); |
+ DecoratedText decorated_text; |
+ Point baseline_point; |
+ |
+ // Tests the range of the first word. |
+ DecoratedText expected_text_1; |
+ expected_text_1.text = ASCIIToUTF16("yellow"); |
+ for (size_t i = 0; i < expected_text_1.text.length(); i++) { |
+ expected_text_1.attributes.push_back(CreateRangedAttribute( |
+ font_spans, i, i, Font::Weight::NORMAL, UNDERLINE_MASK)); |
+ } |
+ |
+ const Rect left_glyph_1 = |
+ render_text->GetCursorBounds(SelectionModel(0, CURSOR_FORWARD), false); |
+ |
+ EXPECT_TRUE(render_text->GetDecoratedTextAndBaselineForRange( |
+ kWordOneRange, &decorated_text, &baseline_point)); |
+ VerifyDecoratedWordsAreEqual(expected_text_1, decorated_text); |
+ EXPECT_TRUE(left_glyph_1.Contains(baseline_point)); |
+ |
+ // Tests the range of the second word. |
+ DecoratedText expected_text_2; |
+ expected_text_2.text = ASCIIToUTF16("boxfish"); |
+ for (size_t i = 0; i < expected_text_2.text.length(); i++) { |
+ expected_text_2.attributes.push_back(CreateRangedAttribute( |
+ font_spans, i, i, Font::Weight::SEMIBOLD, ITALIC_MASK)); |
+ } |
+ |
+ const Rect left_glyph_2 = render_text->GetCursorBounds( |
+ SelectionModel(kWordTwoRange.start(), CURSOR_FORWARD), false); |
+ |
+ EXPECT_TRUE(render_text->GetDecoratedTextAndBaselineForRange( |
+ kWordTwoRange, &decorated_text, &baseline_point)); |
+ VerifyDecoratedWordsAreEqual(expected_text_2, decorated_text); |
+ EXPECT_TRUE(left_glyph_2.Contains(baseline_point)); |
+ |
+ // Tests the range of the entire text. |
+ DecoratedText expected_text_3; |
+ expected_text_3.text = ASCIIToUTF16("yellow boxfish"); |
+ expected_text_3.attributes.insert(expected_text_3.attributes.begin(), |
+ expected_text_1.attributes.begin(), |
+ expected_text_1.attributes.end()); |
+ |
+ expected_text_3.attributes.push_back(CreateRangedAttribute( |
+ font_spans, 6, 6, Font::Weight::NORMAL, STRIKE_MASK)); |
+ |
+ for (size_t i = kWordTwoRange.start(); i < kWordTwoRange.end(); i++) { |
+ expected_text_3.attributes.push_back(CreateRangedAttribute( |
+ font_spans, i, i, Font::Weight::SEMIBOLD, ITALIC_MASK)); |
+ } |
+ |
+ EXPECT_TRUE(render_text->GetDecoratedTextAndBaselineForRange( |
+ kTextRange, &decorated_text, &baseline_point)); |
+ VerifyDecoratedWordsAreEqual(expected_text_3, decorated_text); |
+ EXPECT_TRUE(left_glyph_1.Contains(baseline_point)); |
+} |
+ |
+// Verify GetDecoratedWordAndBaselineAtPoint returns the correct baseline point |
+// and decorated word for an LTR string. |
+TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAndBaselineAtPoint_LTR) { |
const base::string16 ltr = ASCIIToUTF16(" ab c "); |
const int kWordOneStartIndex = 2; |
const int kWordTwoStartIndex = 6; |
@@ -4046,14 +4121,14 @@ TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_LTR) { |
{ |
SCOPED_TRACE(base::StringPrintf("Query to the left of text bounds")); |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint( |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
Point(-5, cursor_y), &decorated_word, &baseline_point)); |
VerifyDecoratedWordsAreEqual(expected_word_1, decorated_word); |
EXPECT_TRUE(left_glyph_word_1.Contains(baseline_point)); |
} |
{ |
SCOPED_TRACE(base::StringPrintf("Query to the right of text bounds")); |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint( |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
Point(105, cursor_y), &decorated_word, &baseline_point)); |
VerifyDecoratedWordsAreEqual(expected_word_2, decorated_word); |
EXPECT_TRUE(left_glyph_word_2.Contains(baseline_point)); |
@@ -4066,8 +4141,8 @@ TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_LTR) { |
render_text->GetCursorBounds(SelectionModel(i, CURSOR_FORWARD), false) |
.origin(); |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint(query, &decorated_word, |
- &baseline_point)); |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
+ query, &decorated_word, &baseline_point)); |
if (i < kWordTwoStartIndex) { |
VerifyDecoratedWordsAreEqual(expected_word_1, decorated_word); |
@@ -4079,9 +4154,10 @@ TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_LTR) { |
} |
} |
-// Verify GetDecoratedWordAtPoint returns the correct baseline point and |
+// Verify GetDecoratedWordAndBaselineAtPoint returns the correct baseline point |
+// and |
// decorated word for an RTL string. |
-TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_RTL) { |
+TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAndBaselineAtPoint_RTL) { |
const base::string16 rtl = WideToUTF16( |
L" " |
L"\x0634\x0632" |
@@ -4130,14 +4206,14 @@ TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_RTL) { |
{ |
SCOPED_TRACE(base::StringPrintf("Query to the left of text bounds")); |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint( |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
Point(-5, cursor_y), &decorated_word, &baseline_point)); |
VerifyDecoratedWordsAreEqual(expected_word_2, decorated_word); |
EXPECT_TRUE(left_glyph_word_2.Contains(baseline_point)); |
} |
{ |
SCOPED_TRACE(base::StringPrintf("Query to the right of text bounds")); |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint( |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
Point(105, cursor_y), &decorated_word, &baseline_point)); |
VerifyDecoratedWordsAreEqual(expected_word_1, decorated_word); |
EXPECT_TRUE(left_glyph_word_1.Contains(baseline_point)); |
@@ -4152,8 +4228,8 @@ TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_RTL) { |
render_text->GetCursorBounds(SelectionModel(i, CURSOR_FORWARD), false) |
.top_right(); |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint(query, &decorated_word, |
- &baseline_point)); |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
+ query, &decorated_word, &baseline_point)); |
if (i < kWordTwoStartIndex) { |
VerifyDecoratedWordsAreEqual(expected_word_1, decorated_word); |
EXPECT_TRUE(left_glyph_word_1.Contains(baseline_point)); |
@@ -4164,8 +4240,9 @@ TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_RTL) { |
} |
} |
-// Test that GetDecoratedWordAtPoint behaves correctly for multiline text. |
-TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_Multiline) { |
+// Test that GetDecoratedWordAndBaselineAtPoint behaves correctly for multiline |
+// text. |
+TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAndBaselineAtPoint_Multiline) { |
const base::string16 text = ASCIIToUTF16("a b\n..\ncd."); |
const size_t kWordOneIndex = 0; // Index of character 'a'. |
const size_t kWordTwoIndex = 2; // Index of character 'b'. |
@@ -4215,36 +4292,36 @@ TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_Multiline) { |
Point baseline_point; |
{ |
// Query to the left of the first line. |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint( |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
Point(-5, GetCursorYForTesting(0)), &decorated_word, &baseline_point)); |
VerifyDecoratedWordsAreEqual(expected_word_1, decorated_word); |
EXPECT_TRUE(left_glyph_word_1.Contains(baseline_point)); |
} |
{ |
// Query on the second line. |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint( |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
Point(5, GetCursorYForTesting(1)), &decorated_word, &baseline_point)); |
VerifyDecoratedWordsAreEqual(expected_word_2, decorated_word); |
EXPECT_TRUE(left_glyph_word_2.Contains(baseline_point)); |
} |
{ |
// Query at the center point of the character 'c'. |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint( |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
left_glyph_word_3.CenterPoint(), &decorated_word, &baseline_point)); |
VerifyDecoratedWordsAreEqual(expected_word_3, decorated_word); |
EXPECT_TRUE(left_glyph_word_3.Contains(baseline_point)); |
} |
{ |
// Query to the right of the third line. |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint( |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
Point(505, GetCursorYForTesting(2)), &decorated_word, &baseline_point)); |
VerifyDecoratedWordsAreEqual(expected_word_3, decorated_word); |
EXPECT_TRUE(left_glyph_word_3.Contains(baseline_point)); |
} |
} |
-// Verify the boolean return value of GetDecoratedWordAtPoint. |
-TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_Return) { |
+// Verify the boolean return value of GetDecoratedWordAndBaselineAtPoint. |
+TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAndBaselineAtPoint_Return) { |
RenderText* render_text = GetRenderText(); |
render_text->SetText(ASCIIToUTF16("...")); |
@@ -4255,21 +4332,21 @@ TEST_P(RenderTextHarfBuzzTest, GetDecoratedWordAtPoint_Return) { |
Point query = |
render_text->GetCursorBounds(SelectionModel(0, CURSOR_FORWARD), false) |
.origin(); |
- EXPECT_FALSE(render_text->GetDecoratedWordAtPoint(query, &decorated_word, |
- &baseline_point)); |
+ EXPECT_FALSE(render_text->GetDecoratedWordAndBaselineAtPoint( |
+ query, &decorated_word, &baseline_point)); |
render_text->SetText(ASCIIToUTF16("abc")); |
query = render_text->GetCursorBounds(SelectionModel(0, CURSOR_FORWARD), false) |
.origin(); |
- EXPECT_TRUE(render_text->GetDecoratedWordAtPoint(query, &decorated_word, |
- &baseline_point)); |
+ EXPECT_TRUE(render_text->GetDecoratedWordAndBaselineAtPoint( |
+ query, &decorated_word, &baseline_point)); |
// False should be returned for obscured text. |
render_text->SetObscured(true); |
query = render_text->GetCursorBounds(SelectionModel(0, CURSOR_FORWARD), false) |
.origin(); |
- EXPECT_FALSE(render_text->GetDecoratedWordAtPoint(query, &decorated_word, |
- &baseline_point)); |
+ EXPECT_FALSE(render_text->GetDecoratedWordAndBaselineAtPoint( |
+ query, &decorated_word, &baseline_point)); |
} |
// Tests text selection made at end points of individual lines of multiline |