Index: ui/gfx/render_text_unittest.cc |
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc |
index a52e043c7d2077ad2ad792ae9cde66aa9a4fa0ec..542939ea3081369af9a50fdf080f3490eaa7d3d8 100644 |
--- a/ui/gfx/render_text_unittest.cc |
+++ b/ui/gfx/render_text_unittest.cc |
@@ -163,48 +163,6 @@ |
DISALLOW_COPY_AND_ASSIGN(TestSkiaTextRenderer); |
}; |
-// Given a buffer to test against, this can be used to test various areas of the |
-// rectangular buffer against a specific color value. |
-class TestRectangleBuffer { |
- public: |
- TestRectangleBuffer(const wchar_t* string, |
- const SkColor* buffer, |
- uint32_t stride, |
- uint32_t row_count) |
- : string_(string), |
- buffer_(buffer), |
- stride_(stride), |
- row_count_(row_count) {} |
- |
- // Test if any values in the rectangular area are anything other than |color|. |
- void EnsureSolidRect(SkColor color, |
- int left, |
- int top, |
- int width, |
- int height) const { |
- ASSERT_LT(top, row_count_) << string_; |
- ASSERT_LE(top + height, row_count_) << string_; |
- ASSERT_LT(left, stride_) << string_; |
- ASSERT_LE(left + width, stride_) << string_ << ", left " << left |
- << ", width " << width << ", stride_ " |
- << stride_; |
- for (int y = top; y < top + height; ++y) { |
- for (int x = left; x < left + width; ++x) { |
- SkColor color = buffer_[x + y * stride_]; |
- EXPECT_EQ(SK_ColorWHITE, color) << string_ << " at " << x << ", " << y; |
- } |
- } |
- } |
- |
- private: |
- const wchar_t* string_; |
- const SkColor* buffer_; |
- int stride_; |
- int row_count_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestRectangleBuffer); |
-}; |
- |
} // namespace |
class RenderTextTest : public testing::Test { |
@@ -217,8 +175,6 @@ |
const wchar_t* const cases[] = { kWeak, kLtr, L"Hello", kRtl, L"", L"" }; |
for (size_t i = 0; i < arraysize(cases); ++i) { |
EXPECT_TRUE(render_text->colors().EqualsValueForTesting(SK_ColorBLACK)); |
- EXPECT_TRUE( |
- render_text->baselines().EqualsValueForTesting(NORMAL_BASELINE)); |
for (size_t style = 0; style < NUM_TEXT_STYLES; ++style) |
EXPECT_TRUE(render_text->styles()[style].EqualsValueForTesting(false)); |
render_text->SetText(WideToUTF16(cases[i])); |
@@ -230,13 +186,11 @@ |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
const SkColor color = SK_ColorRED; |
render_text->SetColor(color); |
- render_text->SetBaselineStyle(SUPERSCRIPT); |
render_text->SetStyle(BOLD, true); |
render_text->SetStyle(UNDERLINE, false); |
const wchar_t* const cases[] = { kWeak, kLtr, L"Hello", kRtl, L"", L"" }; |
for (size_t i = 0; i < arraysize(cases); ++i) { |
EXPECT_TRUE(render_text->colors().EqualsValueForTesting(color)); |
- EXPECT_TRUE(render_text->baselines().EqualsValueForTesting(SUPERSCRIPT)); |
EXPECT_TRUE(render_text->styles()[BOLD].EqualsValueForTesting(true)); |
EXPECT_TRUE(render_text->styles()[UNDERLINE].EqualsValueForTesting(false)); |
render_text->SetText(WideToUTF16(cases[i])); |
@@ -255,51 +209,32 @@ |
// Apply a ranged color and style and check the resulting breaks. |
render_text->ApplyColor(SK_ColorRED, Range(1, 4)); |
- render_text->ApplyBaselineStyle(SUPERIOR, Range(2, 4)); |
render_text->ApplyStyle(BOLD, true, Range(2, 5)); |
std::vector<std::pair<size_t, SkColor> > expected_color; |
expected_color.push_back(std::pair<size_t, SkColor>(0, SK_ColorBLACK)); |
expected_color.push_back(std::pair<size_t, SkColor>(1, SK_ColorRED)); |
expected_color.push_back(std::pair<size_t, SkColor>(4, SK_ColorBLACK)); |
EXPECT_TRUE(render_text->colors().EqualsForTesting(expected_color)); |
- std::vector<std::pair<size_t, BaselineStyle>> expected_baseline_style; |
- expected_baseline_style.push_back( |
- std::pair<size_t, BaselineStyle>(0, NORMAL_BASELINE)); |
- expected_baseline_style.push_back( |
- std::pair<size_t, BaselineStyle>(2, SUPERIOR)); |
- expected_baseline_style.push_back( |
- std::pair<size_t, BaselineStyle>(4, NORMAL_BASELINE)); |
- EXPECT_TRUE( |
- render_text->baselines().EqualsForTesting(expected_baseline_style)); |
std::vector<std::pair<size_t, bool> > expected_style; |
expected_style.push_back(std::pair<size_t, bool>(0, false)); |
expected_style.push_back(std::pair<size_t, bool>(2, true)); |
expected_style.push_back(std::pair<size_t, bool>(5, false)); |
EXPECT_TRUE(render_text->styles()[BOLD].EqualsForTesting(expected_style)); |
- // Ensure setting a color, baseline, and style overrides the ranged colors, |
- // baseline, and styles. |
+ // Ensure setting a color and style overrides the ranged colors and styles. |
render_text->SetColor(SK_ColorBLUE); |
EXPECT_TRUE(render_text->colors().EqualsValueForTesting(SK_ColorBLUE)); |
- render_text->SetBaselineStyle(SUBSCRIPT); |
- EXPECT_TRUE(render_text->baselines().EqualsValueForTesting(SUBSCRIPT)); |
render_text->SetStyle(BOLD, false); |
EXPECT_TRUE(render_text->styles()[BOLD].EqualsValueForTesting(false)); |
- // Apply a color, baseline, and style over the text end and check the |
- // resulting breaks (INT_MAX should be used instead of the text length for |
- // the range end) |
+ // Apply a color and style over the text end and check the resulting breaks. |
+ // (INT_MAX should be used instead of the text length for the range end) |
const size_t text_length = render_text->text().length(); |
render_text->ApplyColor(SK_ColorRED, Range(0, text_length)); |
- render_text->ApplyBaselineStyle(SUPERIOR, Range(0, text_length)); |
render_text->ApplyStyle(BOLD, true, Range(2, text_length)); |
std::vector<std::pair<size_t, SkColor> > expected_color_end; |
expected_color_end.push_back(std::pair<size_t, SkColor>(0, SK_ColorRED)); |
EXPECT_TRUE(render_text->colors().EqualsForTesting(expected_color_end)); |
- std::vector<std::pair<size_t, BaselineStyle>> expected_baseline_end; |
- expected_baseline_end.push_back( |
- std::pair<size_t, BaselineStyle>(0, SUPERIOR)); |
- EXPECT_TRUE(render_text->baselines().EqualsForTesting(expected_baseline_end)); |
std::vector<std::pair<size_t, bool> > expected_style_end; |
expected_style_end.push_back(std::pair<size_t, bool>(0, false)); |
expected_style_end.push_back(std::pair<size_t, bool>(2, true)); |
@@ -2635,139 +2570,41 @@ |
#endif // defined(OS_WIN) |
// Ensure that the width reported by RenderText is sufficient for drawing. Draws |
-// to a canvas and checks whether any pixel beyond the bounding rectangle is |
-// colored. |
+// to a canvas and checks whether any pixel beyond the width is colored. |
TEST_F(RenderTextTest, TextDoesntClip) { |
- const wchar_t* kTestStrings[] = { |
- L" ", |
- // TODO(mukai): Underscores draw outside GetStringSize; crbug.com/459812. |
- // L"TEST_______", |
- L"TEST some stuff", |
- L"WWWWWWWWWW", |
- L"gAXAXAXAXAXAXA", |
- // TODO(mukai): A-Ring draws outside GetStringSize; crbug.com/459812. |
- // L"g\x00C5X\x00C5X\x00C5X\x00C5X\x00C5X\x00C5X\x00C5", |
- L"\x0647\x0654\x0647\x0654\x0647\x0654\x0647\x0654\x0645\x0631\x062D" |
- L"\x0628\x0627"}; |
+ const wchar_t* kTestStrings[] = { L"Save", L"Remove", L"TEST", L"W", L"WWW" }; |
const Size kCanvasSize(300, 50); |
- const int kTestSize = 10; |
+ const int kTestWidth = 10; |
skia::RefPtr<SkSurface> surface = skia::AdoptRef( |
SkSurface::NewRasterN32Premul(kCanvasSize.width(), kCanvasSize.height())); |
scoped_ptr<Canvas> canvas( |
Canvas::CreateCanvasWithoutScaling(surface->getCanvas(), 1.0f)); |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
- render_text->SetHorizontalAlignment(ALIGN_LEFT); |
+ render_text->SetDisplayRect(Rect(kCanvasSize)); |
+ render_text->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
render_text->SetColor(SK_ColorBLACK); |
for (auto string : kTestStrings) { |
surface->getCanvas()->clear(SK_ColorWHITE); |
render_text->SetText(WideToUTF16(string)); |
- const Size string_size = render_text->GetStringSize(); |
- render_text->ApplyBaselineStyle(SUPERSCRIPT, Range(1, 2)); |
- render_text->ApplyBaselineStyle(SUPERIOR, Range(3, 4)); |
- render_text->ApplyBaselineStyle(INFERIOR, Range(5, 6)); |
- render_text->ApplyBaselineStyle(SUBSCRIPT, Range(7, 8)); |
render_text->SetStyle(BOLD, true); |
- render_text->SetDisplayRect( |
- Rect(kTestSize, kTestSize, string_size.width(), string_size.height())); |
- // Allow the RenderText to paint outside of its display rect. |
- render_text->set_clip_to_display_rect(false); |
- ASSERT_LE(string_size.width() + kTestSize * 2, kCanvasSize.width()); |
- |
render_text->Draw(canvas.get()); |
- ASSERT_LT(string_size.width() + kTestSize, kCanvasSize.width()); |
- const uint32* buffer = |
- static_cast<const uint32*>(surface->peekPixels(nullptr, nullptr)); |
+ int width = render_text->GetStringSize().width(); |
+ ASSERT_LT(width + kTestWidth, kCanvasSize.width()); |
+ const uint32* buffer = static_cast<const uint32*>( |
+ surface->peekPixels(NULL, NULL)); |
ASSERT_NE(nullptr, buffer); |
- TestRectangleBuffer rect_buffer(string, buffer, kCanvasSize.width(), |
- kCanvasSize.height()); |
- { |
- SCOPED_TRACE("TextDoesntClip Top Side"); |
- rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, 0, kCanvasSize.width(), |
- kTestSize); |
+ |
+ for (int y = 0; y < kCanvasSize.height(); ++y) { |
+ // Allow one column of anti-aliased pixels past the expected width. |
+ SkColor color = buffer[width + y * kCanvasSize.width()]; |
+ EXPECT_LT(220U, color_utils::GetLuminanceForColor(color)) << string; |
+ for (int x = 1; x < kTestWidth; ++x) { |
+ color = buffer[width + x + y * kCanvasSize.width()]; |
+ EXPECT_EQ(SK_ColorWHITE, color) << string; |
+ } |
} |
- { |
- SCOPED_TRACE("TextDoesntClip Bottom Side"); |
- rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, |
- kTestSize + string_size.height(), |
- kCanvasSize.width(), kTestSize); |
- } |
- { |
- SCOPED_TRACE("TextDoesntClip Left Side"); |
-#if defined(OS_WIN) || defined(OS_MACOSX) |
- // TODO(mukai): On Windows and Mac smoothing draws left of text. |
- rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, kTestSize, kTestSize - 1, |
- string_size.height()); |
-#else |
- rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, kTestSize, kTestSize, |
- string_size.height()); |
-#endif |
- } |
- { |
- SCOPED_TRACE("TextDoesntClip Right Side"); |
-#if !defined(OS_MACOSX) |
- // TODO(mukai): On Mac text draws to right of GetStringSize |
- rect_buffer.EnsureSolidRect(SK_ColorWHITE, |
- kTestSize + string_size.width(), kTestSize, |
- kTestSize, string_size.height()); |
-#endif |
- } |
- } |
-} |
- |
-// Ensure that the text will clip to the display rect. Draws to a canvas and |
-// checks whether any pixel beyond the bounding rectangle is colored. |
-TEST_F(RenderTextTest, TextDoesClip) { |
- const wchar_t* kTestStrings[] = {L"TEST", L"W", L"WWWW", L"gAXAXWWWW"}; |
- const Size kCanvasSize(300, 50); |
- const int kTestSize = 10; |
- |
- skia::RefPtr<SkSurface> surface = skia::AdoptRef( |
- SkSurface::NewRasterN32Premul(kCanvasSize.width(), kCanvasSize.height())); |
- scoped_ptr<Canvas> canvas( |
- Canvas::CreateCanvasWithoutScaling(surface->getCanvas(), 1.0f)); |
- scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
- render_text->SetHorizontalAlignment(ALIGN_LEFT); |
- render_text->SetColor(SK_ColorBLACK); |
- |
- for (auto string : kTestStrings) { |
- surface->getCanvas()->clear(SK_ColorWHITE); |
- render_text->SetText(WideToUTF16(string)); |
- const Size string_size = render_text->GetStringSize(); |
- int fake_width = string_size.width() / 2; |
- int fake_height = string_size.height() / 2; |
- render_text->SetDisplayRect( |
- Rect(kTestSize, kTestSize, fake_width, fake_height)); |
- render_text->set_clip_to_display_rect(true); |
- render_text->Draw(canvas.get()); |
- ASSERT_LT(string_size.width() + kTestSize, kCanvasSize.width()); |
- const uint32* buffer = |
- static_cast<const uint32*>(surface->peekPixels(nullptr, nullptr)); |
- ASSERT_NE(nullptr, buffer); |
- TestRectangleBuffer rect_buffer(string, buffer, kCanvasSize.width(), |
- kCanvasSize.height()); |
- { |
- SCOPED_TRACE("TextDoesClip Top Side"); |
- rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, 0, kCanvasSize.width(), |
- kTestSize); |
- } |
- |
- { |
- SCOPED_TRACE("TextDoesClip Bottom Side"); |
- rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, kTestSize + fake_height, |
- kCanvasSize.width(), kTestSize); |
- } |
- { |
- SCOPED_TRACE("TextDoesClip Left Side"); |
- rect_buffer.EnsureSolidRect(SK_ColorWHITE, 0, kTestSize, kTestSize, |
- fake_height); |
- } |
- { |
- SCOPED_TRACE("TextDoesClip Right Side"); |
- rect_buffer.EnsureSolidRect(SK_ColorWHITE, kTestSize + fake_width, |
- kTestSize, kTestSize, fake_height); |
- } |
} |
} |