Chromium Code Reviews| Index: ui/gfx/render_text_unittest.cc |
| diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc |
| index 263ef92d8159c7088650ddd538457e49061d7ea0..776e44602b5ec76166ec9a85728e877d5ca5a923 100644 |
| --- a/ui/gfx/render_text_unittest.cc |
| +++ b/ui/gfx/render_text_unittest.cc |
| @@ -78,6 +78,37 @@ void RunMoveCursorLeftRightTest(RenderText* render_text, |
| render_text->MoveCursor(LINE_BREAK, direction, false); |
| EXPECT_EQ(expected.back(), render_text->selection_model()); |
| } |
| + |
| +#if defined(OS_WIN) |
| +bool CheckLineIntegrity(const std::vector<internal::Line>& lines, |
| + const ScopedVector<internal::TextRun>& runs) { |
| + size_t previous_segment_line = 0; |
| + const internal::LineSegment* previous_segment = NULL; |
| + |
| + for (size_t i = 0; i < lines.size(); ++i) |
| + for (size_t j = 0; j < lines[i].segments.size(); ++j) { |
| + const internal::LineSegment* const segment = &lines[i].segments[j]; |
| + internal::TextRun* const run = runs[segment->run]; |
| + |
| + if (!previous_segment || runs[previous_segment->run] != run) { |
| + previous_segment = 0; |
| + } else { |
| + if (!run->script_analysis.fRTL) { |
| + if (previous_segment->x_pos.end() != segment->x_pos.start()) |
| + return false; |
| + } else if (i != previous_segment_line) { |
| + if (segment->x_pos.end() != previous_segment->x_pos.start()) |
| + return false; |
| + } |
| + |
| + previous_segment = segment; |
| + previous_segment_line = i; |
| + } |
| + } |
| + |
| + return true; |
| +} |
| +#endif // defined(OS_WIN) |
| } // namespace |
| @@ -1294,7 +1325,7 @@ TEST_F(RenderTextTest, GetTextOffset) { |
| Rect display_rect(font_size); |
| render_text->SetDisplayRect(display_rect); |
| - Vector2d offset = render_text->GetTextOffset(); |
| + Vector2d offset = render_text->GetLineOffset(0); |
| EXPECT_TRUE(offset.IsZero()); |
| // Set display area's size greater than font size. |
| @@ -1303,30 +1334,30 @@ TEST_F(RenderTextTest, GetTextOffset) { |
| render_text->SetDisplayRect(display_rect); |
| // Check the default horizontal and vertical alignment. |
| - offset = render_text->GetTextOffset(); |
| + offset = render_text->GetLineOffset(0); |
| EXPECT_EQ(kEnlargement / 2, offset.y()); |
| EXPECT_EQ(0, offset.x()); |
| // Check explicitly setting the horizontal alignment. |
| render_text->SetHorizontalAlignment(ALIGN_LEFT); |
| - offset = render_text->GetTextOffset(); |
| + offset = render_text->GetLineOffset(0); |
| EXPECT_EQ(0, offset.x()); |
| render_text->SetHorizontalAlignment(ALIGN_CENTER); |
| - offset = render_text->GetTextOffset(); |
| + offset = render_text->GetLineOffset(0); |
| EXPECT_EQ(kEnlargement / 2, offset.x()); |
| render_text->SetHorizontalAlignment(ALIGN_RIGHT); |
| - offset = render_text->GetTextOffset(); |
| + offset = render_text->GetLineOffset(0); |
| EXPECT_EQ(kEnlargement, offset.x()); |
| // Check explicitly setting the vertical alignment. |
| render_text->SetVerticalAlignment(ALIGN_TOP); |
| - offset = render_text->GetTextOffset(); |
| + offset = render_text->GetLineOffset(0); |
| EXPECT_EQ(0, offset.y()); |
| render_text->SetVerticalAlignment(ALIGN_VCENTER); |
| - offset = render_text->GetTextOffset(); |
| + offset = render_text->GetLineOffset(0); |
| EXPECT_EQ(kEnlargement / 2, offset.y()); |
| render_text->SetVerticalAlignment(ALIGN_BOTTOM); |
| - offset = render_text->GetTextOffset(); |
| + offset = render_text->GetLineOffset(0); |
| EXPECT_EQ(kEnlargement, offset.y()); |
| SetRTL(was_rtl); |
| @@ -1334,7 +1365,7 @@ TEST_F(RenderTextTest, GetTextOffset) { |
| TEST_F(RenderTextTest, GetTextOffsetHorizontalDefaultInRTL) { |
| // This only checks the default horizontal alignment in RTL mode; all other |
| - // GetTextOffset() attributes are checked by the test above. |
| + // GetLineOffset(0) attributes are checked by the test above. |
| const bool was_rtl = base::i18n::IsRTL(); |
| SetRTL(true); |
| scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| @@ -1345,7 +1376,7 @@ TEST_F(RenderTextTest, GetTextOffsetHorizontalDefaultInRTL) { |
| render_text->GetStringSize().height()); |
| Rect display_rect(font_size); |
| render_text->SetDisplayRect(display_rect); |
| - Vector2d offset = render_text->GetTextOffset(); |
| + Vector2d offset = render_text->GetLineOffset(0); |
| EXPECT_EQ(kEnlargement, offset.x()); |
| SetRTL(was_rtl); |
| } |
| @@ -1650,5 +1681,25 @@ TEST_F(RenderTextTest, SelectionKeepsLigatures) { |
| render_text->MoveCursorTo(SelectionModel(0, CURSOR_FORWARD)); |
| } |
| } |
| + |
| +#if defined(OS_WIN) |
| +TEST_F(RenderTextTest, Multiline) { |
| + const wchar_t* kTestStrings[] = { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, |
| + kRtlLtr, kRtlLtrRtl }; |
|
Alexei Svitkine (slow)
2013/08/16 18:32:34
Nit: Align with previous line.
ckocagil
2013/08/20 00:09:06
Done.
|
| + |
| + scoped_ptr<RenderTextWin> render_text( |
| + static_cast<RenderTextWin*>(RenderText::CreateInstance())); |
| + render_text->SetDisplayRect(Rect()); |
| + render_text->SetMultiline(true); |
| + Canvas canvas; |
| + |
| + for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
| + render_text->SetText(WideToUTF16(kTestStrings[i])); |
| + render_text->Draw(&canvas); |
| + EXPECT_TRUE(CheckLineIntegrity(render_text->lines_, render_text->runs_)) << |
| + "For kTestStrings[" << i << "]"; |
| + } |
| +} |
| +#endif // defined(OS_WIN) |
| } // namespace gfx |