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 f947d754d385a0436167d5b8f8f6a4c83bb4b60e..bad3241dfe4be3e558b54fc5474d040416c0e384 100644 |
| --- a/ui/gfx/render_text_unittest.cc |
| +++ b/ui/gfx/render_text_unittest.cc |
| @@ -1863,80 +1863,82 @@ TEST_F(RenderTextTest, SelectionKeepsLigatures) { |
| } |
| } |
| -// TODO(ckocagil): Enable for RenderTextHarfBuzz after implementing multiline. |
| // Ensure strings wrap onto multiple lines for a small available width. |
| -TEST_F(RenderTextTest, DISABLED_Multiline_MinWidth) { |
| +TEST_F(RenderTextTest, Multiline_MinWidth) { |
| const wchar_t* kTestStrings[] = { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, |
| kRtlLtr, kRtlLtrRtl }; |
| - scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| - render_text->SetDisplayRect(Rect(1, 1000)); |
| - render_text->SetMultiline(true); |
| + RenderTextHarfBuzz render_text; |
| + render_text.SetDisplayRect(Rect(1, 1000)); |
| + render_text.SetMultiline(true); |
| Canvas canvas; |
| for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
| SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); |
| - render_text->SetText(WideToUTF16(kTestStrings[i])); |
| - render_text->Draw(&canvas); |
| - EXPECT_GT(render_text->lines_.size(), 1U); |
| + render_text.SetText(WideToUTF16(kTestStrings[i])); |
| + render_text.Draw(&canvas); |
| + EXPECT_GT(render_text.lines_.size(), 1U); |
| } |
| } |
| -// TODO(ckocagil): Enable for RenderTextHarfBuzz after implementing multiline. |
| // Ensure strings wrap onto multiple lines for a normal available width. |
| -TEST_F(RenderTextTest, DISABLED_Multiline_NormalWidth) { |
| +TEST_F(RenderTextTest, Multiline_NormalWidth) { |
| const struct { |
| const wchar_t* const text; |
| const Range first_line_char_range; |
| const Range second_line_char_range; |
| } kTestStrings[] = { |
| { L"abc defg hijkl", Range(0, 9), Range(9, 14) }, |
| - { L"qwertyzxcvbn", Range(0, 8), Range(8, 12) }, |
| - { L"\x062A\x0641\x0627\x062D\x05EA\x05E4\x05D5\x05D6\x05D9\x05DD", |
| - Range(4, 10), Range(0, 4) } |
| + { L"qwertyzxcvbn", Range(0, 10), Range(10, 12) }, |
| + { L"\x062A\x0641\x0627\x062D\x05EA\x05E4\x05D5\x05D6\x05D9" |
| + L"\x05DA\x05DB\x05DD", |
| + Range(4, 12), Range(0, 4) } |
| }; |
| - scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| - render_text->SetDisplayRect(Rect(50, 1000)); |
| - render_text->SetMultiline(true); |
| + // Specify the fixed width for characters to suppress the possible variations |
| + // of linebreak results. |
| + RenderTextHarfBuzz::SetGlyphWidthForTest(5); |
| + RenderTextHarfBuzz render_text; |
| + render_text.SetDisplayRect(Rect(50, 1000)); |
| + render_text.SetMultiline(true); |
| Canvas canvas; |
| for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
| SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); |
| - render_text->SetText(WideToUTF16(kTestStrings[i].text)); |
| - render_text->Draw(&canvas); |
| - ASSERT_EQ(2U, render_text->lines_.size()); |
| - ASSERT_EQ(1U, render_text->lines_[0].segments.size()); |
| + render_text.SetText(WideToUTF16(kTestStrings[i].text)); |
| + render_text.Draw(&canvas); |
| + ASSERT_EQ(2U, render_text.lines_.size()); |
| + ASSERT_EQ(1U, render_text.lines_[0].segments.size()); |
| EXPECT_EQ(kTestStrings[i].first_line_char_range, |
| - render_text->lines_[0].segments[0].char_range); |
| - ASSERT_EQ(1U, render_text->lines_[1].segments.size()); |
| + render_text.lines_[0].segments[0].char_range); |
| + ASSERT_EQ(1U, render_text.lines_[1].segments.size()); |
| EXPECT_EQ(kTestStrings[i].second_line_char_range, |
| - render_text->lines_[1].segments[0].char_range); |
| + render_text.lines_[1].segments[0].char_range); |
| } |
| + |
| + RenderTextHarfBuzz::SetGlyphWidthForTest(0); |
| } |
| -// TODO(ckocagil): Enable for RenderTextHarfBuzz after implementing multiline. |
| // Ensure strings don't wrap onto multiple lines for a sufficient available |
| // width. |
| -TEST_F(RenderTextTest, DISABLED_Multiline_SufficientWidth) { |
| +TEST_F(RenderTextTest, Multiline_SufficientWidth) { |
| const wchar_t* kTestStrings[] = { L"", L" ", L".", L" . ", L"abc", L"a b c", |
| L"\x62E\x628\x632", L"\x62E \x628 \x632" }; |
| - scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| - render_text->SetDisplayRect(Rect(30, 1000)); |
| - render_text->SetMultiline(true); |
| + RenderTextHarfBuzz render_text; |
| + render_text.SetDisplayRect(Rect(1000, 1000)); |
| + render_text.SetMultiline(true); |
| Canvas canvas; |
| for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
| SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); |
| - render_text->SetText(WideToUTF16(kTestStrings[i])); |
| - render_text->Draw(&canvas); |
| - EXPECT_EQ(1U, render_text->lines_.size()); |
| + render_text.SetText(WideToUTF16(kTestStrings[i])); |
| + render_text.Draw(&canvas); |
| + EXPECT_EQ(1U, render_text.lines_.size()); |
| } |
| } |
| -// TODO(ckocagil): Enable for RenderTextHarfBuzz after implementing multiline. |
| -TEST_F(RenderTextTest, DISABLED_Multiline_Newline) { |
| +TEST_F(RenderTextTest, Multiline_Newline) { |
|
msw
2015/02/05 01:09:16
nit: add a test [case] of consecutive newline char
Jun Mukai
2015/02/05 19:48:32
Done.
|
| const struct { |
| const wchar_t* const text; |
| // Ranges of the characters on each line preceding the newline. |
| @@ -1945,39 +1947,56 @@ TEST_F(RenderTextTest, DISABLED_Multiline_Newline) { |
| } kTestStrings[] = { |
| { L"abc\ndef", Range(0, 3), Range(4, 7) }, |
| { L"a \n b ", Range(0, 2), Range(3, 6) }, |
| + { L"ab\n", Range(0, 2), Range::InvalidRange() }, |
|
msw
2015/02/05 01:09:16
Why doesn't the second line have char Range(2, 3)?
Jun Mukai
2015/02/05 19:48:32
The invalid range means the empty line, as you see
|
| + { L"\nab", Range::InvalidRange(), Range(1, 3) }, |
| { L"\n" , Range::InvalidRange(), Range::InvalidRange() } |
| }; |
| - scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| - render_text->SetDisplayRect(Rect(200, 1000)); |
| - render_text->SetMultiline(true); |
| + RenderTextHarfBuzz render_text; |
| + render_text.SetDisplayRect(Rect(200, 1000)); |
| + render_text.SetMultiline(true); |
| Canvas canvas; |
| for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
| SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); |
| - render_text->SetText(WideToUTF16(kTestStrings[i].text)); |
| - render_text->Draw(&canvas); |
| + render_text.SetText(WideToUTF16(kTestStrings[i].text)); |
| + render_text.Draw(&canvas); |
| - ASSERT_EQ(2U, render_text->lines_.size()); |
| + ASSERT_EQ(2U, render_text.lines_.size()); |
| const Range first_expected_range = kTestStrings[i].first_line_char_range; |
| - ASSERT_EQ(first_expected_range.IsValid() ? 2U : 1U, |
| - render_text->lines_[0].segments.size()); |
| - if (first_expected_range.IsValid()) |
| + ASSERT_EQ(first_expected_range.IsValid() ? 1U : 0U, |
| + render_text.lines_[0].segments.size()); |
| + if (first_expected_range.IsValid()) { |
| EXPECT_EQ(first_expected_range, |
| - render_text->lines_[0].segments[0].char_range); |
| - |
| - const internal::LineSegment& newline_segment = |
| - render_text->lines_[0].segments[first_expected_range.IsValid() ? 1 : 0]; |
| - ASSERT_EQ(1U, newline_segment.char_range.length()); |
| - EXPECT_EQ(L'\n', kTestStrings[i].text[newline_segment.char_range.start()]); |
| + render_text.lines_[0].segments[0].char_range); |
| + } |
| const Range second_expected_range = kTestStrings[i].second_line_char_range; |
| ASSERT_EQ(second_expected_range.IsValid() ? 1U : 0U, |
| - render_text->lines_[1].segments.size()); |
| - if (second_expected_range.IsValid()) |
| + render_text.lines_[1].segments.size()); |
| + if (second_expected_range.IsValid()) { |
| EXPECT_EQ(second_expected_range, |
| - render_text->lines_[1].segments[0].char_range); |
| + render_text.lines_[1].segments[0].char_range); |
| + } |
| + } |
| +} |
| + |
| +TEST_F(RenderTextTest, Multiline_NewlineWithoutMultilineFlag) { |
|
msw
2015/02/05 01:09:16
nit: I think you can drop the "Multiline_" test fi
Jun Mukai
2015/02/05 19:48:32
Done.
|
| + const wchar_t* kTestStrings[] = { |
| + L"abc\ndef", L"a \n b ", L"ab\n", L"\nab", L"\n", |
| + }; |
| + |
| + RenderTextHarfBuzz render_text; |
| + render_text.SetDisplayRect(Rect(200, 1000)); |
| + Canvas canvas; |
| + |
| + for (size_t i = 0; i < arraysize(kTestStrings); ++i) { |
| + SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); |
| + render_text.SetText(WideToUTF16(kTestStrings[i])); |
| + render_text.Draw(&canvas); |
| + |
| + EXPECT_EQ(1U, render_text.lines_.size()); |
| } |
| } |