Index: ui/gfx/render_text_unittest.cc |
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc |
index e27135eff1e5949a2575c7c3dd61e05221a4768e..fb7fc2336d6c8fc0578d7333b3b8f339433fded4 100644 |
--- a/ui/gfx/render_text_unittest.cc |
+++ b/ui/gfx/render_text_unittest.cc |
@@ -50,272 +50,236 @@ void SetRTL(bool rtl) { |
} |
#endif |
+// Return true if there is only one break, and it has the supplied |value|. |
+template<class T> |
+bool BreakEquals(const std::vector<std::pair<size_t, T> >& breaks, T value) { |
+ return breaks.size() == 1 && breaks[0] == std::pair<size_t, T>(0, value); |
+} |
+ |
+// Return true if |breaks| matches |expected|. |
+template<class T> |
+bool BreaksEqual(const std::vector<std::pair<size_t, T> >& breaks, |
+ const std::vector<std::pair<size_t, T> >& expected) { |
+ if (breaks.size() != expected.size()) |
+ return false; |
+ for (size_t i = 0; i < breaks.size(); ++i) |
+ if (breaks[i] != expected[i]) |
+ return false; |
+ return true; |
+} |
+ |
} // namespace |
class RenderTextTest : public testing::Test { |
}; |
TEST_F(RenderTextTest, DefaultStyle) { |
- // Defaults to empty text with no styles. |
+ // Check the default styles applied to new instances and adjusted text. |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
EXPECT_TRUE(render_text->text().empty()); |
- EXPECT_TRUE(render_text->style_ranges().empty()); |
- |
- // Test that the built-in default style is applied for new text. |
- render_text->SetText(ASCIIToUTF16("abc")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- StyleRange style; |
- EXPECT_EQ(style.foreground, render_text->style_ranges()[0].foreground); |
- EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); |
- EXPECT_EQ(style.strike, render_text->style_ranges()[0].strike); |
- EXPECT_EQ(style.underline, render_text->style_ranges()[0].underline); |
- |
- // Test that clearing the text also clears the styles. |
- render_text->SetText(string16()); |
- EXPECT_TRUE(render_text->text().empty()); |
- EXPECT_TRUE(render_text->style_ranges().empty()); |
+ const wchar_t* const cases[] = { kWeak, kLtr, L"Hello", kRtl, L"", L"" }; |
+ for (size_t i = 0; i < arraysize(cases); ++i) { |
+ EXPECT_TRUE(BreakEquals(render_text->colors(), SK_ColorBLACK)); |
+ for (size_t style = 0; style < NUM_TEXT_STYLES; ++style) { |
+ TextStyle value = static_cast<TextStyle>(style); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(value), false)); |
+ } |
+ render_text->SetText(WideToUTF16(cases[i])); |
+ } |
} |
-TEST_F(RenderTextTest, CustomDefaultStyle) { |
- // Test a custom default style. |
+TEST_F(RenderTextTest, SetColorAndStyle) { |
+ // Ensure custom default styles persist across setting and clearing text. |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
- StyleRange color; |
- color.foreground = SK_ColorRED; |
- render_text->set_default_style(color); |
- render_text->SetText(ASCIIToUTF16("abc")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(color.foreground, render_text->style_ranges()[0].foreground); |
- |
- // Test that the custom default style persists across clearing text. |
- render_text->SetText(string16()); |
- EXPECT_TRUE(render_text->style_ranges().empty()); |
- render_text->SetText(ASCIIToUTF16("abc")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(color.foreground, render_text->style_ranges()[0].foreground); |
- |
- // Test ApplyDefaultStyle after setting a new default. |
- StyleRange strike; |
- strike.strike = true; |
- render_text->set_default_style(strike); |
- render_text->ApplyDefaultStyle(); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_TRUE(render_text->style_ranges()[0].strike); |
- EXPECT_EQ(strike.foreground, render_text->style_ranges()[0].foreground); |
+ const SkColor color = SK_ColorRED; |
+ render_text->SetColor(color); |
+ 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(BreakEquals(render_text->colors(), color)); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(BOLD), true)); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(UNDERLINE), false)); |
+ render_text->SetText(WideToUTF16(cases[i])); |
+ |
+ // Ensure custom default styles can be applied after text has been set. |
+ if (i == 1) |
+ render_text->SetStyle(STRIKE, true); |
+ if (i >= 1) |
+ EXPECT_TRUE(BreakEquals(render_text->styles(STRIKE), true)); |
+ } |
} |
-TEST_F(RenderTextTest, ApplyStyleRange) { |
+TEST_F(RenderTextTest, ApplyInvalidOrEmptyRange) { |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
- render_text->SetText(ASCIIToUTF16("01234")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- |
- // Test ApplyStyleRange (no-op on empty range). |
- StyleRange empty; |
- empty.range = ui::Range(1, 1); |
- render_text->ApplyStyleRange(empty); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- |
- // Test ApplyStyleRange (no-op on invalid range). |
- StyleRange invalid; |
- invalid.range = ui::Range::InvalidRange(); |
- render_text->ApplyStyleRange(invalid); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- |
- // Apply a style with a range contained by an existing range. |
- StyleRange underline; |
- underline.underline = true; |
- underline.range = ui::Range(2, 3); |
- render_text->ApplyStyleRange(underline); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
- EXPECT_FALSE(render_text->style_ranges()[0].underline); |
- EXPECT_EQ(ui::Range(2, 3), render_text->style_ranges()[1].range); |
- EXPECT_TRUE(render_text->style_ranges()[1].underline); |
- EXPECT_EQ(ui::Range(3, 5), render_text->style_ranges()[2].range); |
- EXPECT_FALSE(render_text->style_ranges()[2].underline); |
- |
- // Apply a style with a range equal to another range. |
- StyleRange color; |
- color.foreground = SK_ColorWHITE; |
- color.range = ui::Range(2, 3); |
- render_text->ApplyStyleRange(color); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
- EXPECT_NE(SK_ColorWHITE, render_text->style_ranges()[0].foreground); |
- EXPECT_FALSE(render_text->style_ranges()[0].underline); |
- EXPECT_EQ(ui::Range(2, 3), render_text->style_ranges()[1].range); |
- EXPECT_EQ(SK_ColorWHITE, render_text->style_ranges()[1].foreground); |
- EXPECT_FALSE(render_text->style_ranges()[1].underline); |
- EXPECT_EQ(ui::Range(3, 5), render_text->style_ranges()[2].range); |
- EXPECT_NE(SK_ColorWHITE, render_text->style_ranges()[2].foreground); |
- EXPECT_FALSE(render_text->style_ranges()[2].underline); |
- |
- // Apply a style with a range containing an existing range. |
- // This new style also overlaps portions of neighboring ranges. |
- StyleRange strike; |
- strike.strike = true; |
- strike.range = ui::Range(1, 4); |
- render_text->ApplyStyleRange(strike); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 1), render_text->style_ranges()[0].range); |
- EXPECT_FALSE(render_text->style_ranges()[0].strike); |
- EXPECT_EQ(ui::Range(1, 4), render_text->style_ranges()[1].range); |
- EXPECT_TRUE(render_text->style_ranges()[1].strike); |
- EXPECT_EQ(ui::Range(4, 5), render_text->style_ranges()[2].range); |
- EXPECT_FALSE(render_text->style_ranges()[2].strike); |
- |
- // Apply a style overlapping all ranges. |
- StyleRange strike_underline; |
- strike_underline.strike = true; |
- strike_underline.underline = true; |
- strike_underline.range = ui::Range(0, render_text->text().length()); |
- render_text->ApplyStyleRange(strike_underline); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 5), render_text->style_ranges()[0].range); |
- EXPECT_TRUE(render_text->style_ranges()[0].underline); |
- EXPECT_TRUE(render_text->style_ranges()[0].strike); |
- |
- // Apply the default style. |
- render_text->ApplyDefaultStyle(); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 5), render_text->style_ranges()[0].range); |
- EXPECT_FALSE(render_text->style_ranges()[0].underline); |
- EXPECT_FALSE(render_text->style_ranges()[0].strike); |
- |
- // Apply new style range that contains the 2nd last old style range. |
- render_text->SetText(ASCIIToUTF16("abcdefghi")); |
- underline.range = ui::Range(0, 3); |
- render_text->ApplyStyleRange(underline); |
- color.range = ui::Range(3, 6); |
- render_text->ApplyStyleRange(color); |
- strike.range = ui::Range(6, 9); |
- render_text->ApplyStyleRange(strike); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- |
- color.foreground = SK_ColorRED; |
- color.range = ui::Range(2, 8); |
- render_text->ApplyStyleRange(color); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
- EXPECT_TRUE(render_text->style_ranges()[0].underline); |
- EXPECT_EQ(ui::Range(2, 8), render_text->style_ranges()[1].range); |
- EXPECT_EQ(SK_ColorRED, render_text->style_ranges()[1].foreground); |
- EXPECT_EQ(ui::Range(8, 9), render_text->style_ranges()[2].range); |
- EXPECT_TRUE(render_text->style_ranges()[2].strike); |
- |
- // Apply new style range that contains multiple old style ranges. |
- render_text->SetText(ASCIIToUTF16("abcdefghiopq")); |
- underline.range = ui::Range(0, 3); |
- render_text->ApplyStyleRange(underline); |
- color.range = ui::Range(3, 6); |
- render_text->ApplyStyleRange(color); |
- strike.range = ui::Range(6, 9); |
- render_text->ApplyStyleRange(strike); |
- strike_underline.range = ui::Range(9, 12); |
- render_text->ApplyStyleRange(strike_underline); |
- EXPECT_EQ(4U, render_text->style_ranges().size()); |
- |
- color.foreground = SK_ColorRED; |
- color.range = ui::Range(2, 10); |
- render_text->ApplyStyleRange(color); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
- EXPECT_TRUE(render_text->style_ranges()[0].underline); |
- EXPECT_EQ(ui::Range(2, 10), render_text->style_ranges()[1].range); |
- EXPECT_EQ(SK_ColorRED, render_text->style_ranges()[1].foreground); |
- EXPECT_EQ(ui::Range(10, 12), render_text->style_ranges()[2].range); |
- EXPECT_TRUE(render_text->style_ranges()[2].underline); |
- EXPECT_TRUE(render_text->style_ranges()[2].strike); |
+ render_text->SetText(ASCIIToUTF16("012345678")); |
+ |
+ // Ensure ApplyStyle and ApplyColor no-op on empty ranges. |
+ ui::Range empty_range = ui::Range(1, 1); |
+ const SkColor color = SK_ColorBLACK; |
+ render_text->ApplyColor(SK_ColorRED, empty_range); |
+ EXPECT_TRUE(BreakEquals(render_text->colors(), color)); |
+ render_text->ApplyStyle(BOLD, true, empty_range); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(BOLD), false)); |
+ |
+ // Ensure ApplyStyle and ApplyColor no-op on invalid ranges. |
+ ui::Range invalid_range = ui::Range::InvalidRange(); |
+ render_text->ApplyColor(SK_ColorRED, invalid_range); |
+ EXPECT_TRUE(BreakEquals(render_text->colors(), color)); |
+ render_text->ApplyStyle(BOLD, true, invalid_range); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(BOLD), false)); |
} |
-static void SetTextWith2ExtraStyles(RenderText* render_text) { |
- render_text->SetText(ASCIIToUTF16("abcdefghi")); |
+TEST_F(RenderTextTest, ApplyStyle) { |
+ scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
+ render_text->SetText(ASCIIToUTF16("012345678")); |
- StyleRange strike; |
- strike.strike = true; |
- strike.range = ui::Range(0, 3); |
- render_text->ApplyStyleRange(strike); |
+ // Apply a style to a valid range, check breaks; repeating should be no-op. |
+ StyleBreaks expected; |
+ expected.push_back(StyleBreak(0, false)); |
+ expected.push_back(StyleBreak(2, true)); |
+ expected.push_back(StyleBreak(3, false)); |
+ for (size_t i = 0; i < 2; ++i) { |
+ render_text->ApplyStyle(BOLD, true, ui::Range(2, 3)); |
+ EXPECT_TRUE(BreaksEqual(render_text->styles(BOLD), expected)); |
+ } |
- StyleRange underline; |
- underline.underline = true; |
- underline.range = ui::Range(3, 6); |
- render_text->ApplyStyleRange(underline); |
+ // Ensure setting a style overrides the ranged style. |
+ render_text->SetStyle(BOLD, false); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(BOLD), false)); |
+ |
+ // Ensure applying a style that is already applied has no effect. |
+ render_text->ApplyStyle(BOLD, false, ui::Range(0, 2)); |
+ render_text->ApplyStyle(BOLD, false, ui::Range(3, 6)); |
+ render_text->ApplyStyle(BOLD, false, ui::Range(7, 9)); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(BOLD), false)); |
+ |
+ // Ensure applying an identical neighboring style merges the ranges. |
+ render_text->ApplyStyle(BOLD, true, ui::Range(0, 3)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(3, 6)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(6, 9)); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(BOLD), true)); |
+ |
+ // Ensure applying a style with the same range overrides the ranged style. |
+ render_text->ApplyStyle(BOLD, false, ui::Range(2, 3)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(2, 3)); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(BOLD), true)); |
+ |
+ // Ensure applying a style with a containing range overrides the ranged style. |
+ render_text->ApplyStyle(BOLD, false, ui::Range(0, 1)); |
+ render_text->ApplyStyle(BOLD, false, ui::Range(2, 3)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(0, 3)); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(BOLD), true)); |
+ render_text->ApplyStyle(BOLD, false, ui::Range(4, 5)); |
+ render_text->ApplyStyle(BOLD, false, ui::Range(6, 7)); |
+ render_text->ApplyStyle(BOLD, false, ui::Range(8, 9)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(4, 9)); |
+ EXPECT_TRUE(BreakEquals(render_text->styles(BOLD), true)); |
+ |
+ // Ensure applying various overlapping styles yields the intended results. |
+ render_text->ApplyStyle(BOLD, false, ui::Range(1, 4)); |
+ render_text->ApplyStyle(BOLD, false, ui::Range(5, 8)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(0, 2)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(3, 6)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(7, 9)); |
+ StyleBreaks overlap; |
+ overlap.push_back(StyleBreak(0, true)); |
+ overlap.push_back(StyleBreak(2, false)); |
+ overlap.push_back(StyleBreak(3, true)); |
+ overlap.push_back(StyleBreak(6, false)); |
+ overlap.push_back(StyleBreak(7, true)); |
+ EXPECT_TRUE(BreaksEqual(render_text->styles(BOLD), overlap)); |
} |
-TEST_F(RenderTextTest, StyleRangesAdjust) { |
- // Test that style ranges adjust to the text size. |
+TEST_F(RenderTextTest, ResizeStyle) { |
+ // Ensure styles adjust to accomodate text length changes. |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
- render_text->SetText(ASCIIToUTF16("abcdef")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 6), render_text->style_ranges()[0].range); |
- |
- // Test that the range is clipped to the length of shorter text. |
- render_text->SetText(ASCIIToUTF16("abc")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); |
- |
- // Test that the last range extends to the length of longer text. |
- StyleRange strike; |
- strike.strike = true; |
- strike.range = ui::Range(2, 3); |
- render_text->ApplyStyleRange(strike); |
- render_text->SetText(ASCIIToUTF16("abcdefghi")); |
- EXPECT_EQ(2U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
- EXPECT_EQ(ui::Range(2, 9), render_text->style_ranges()[1].range); |
- EXPECT_TRUE(render_text->style_ranges()[1].strike); |
- |
- // Test that ranges are removed if they're outside the range of shorter text. |
- render_text->SetText(ASCIIToUTF16("ab")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
- EXPECT_FALSE(render_text->style_ranges()[0].strike); |
- |
- // Test that previously removed ranges don't return. |
- render_text->SetText(ASCIIToUTF16("abcdef")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 6), render_text->style_ranges()[0].range); |
- EXPECT_FALSE(render_text->style_ranges()[0].strike); |
- |
- // Test that ranges are removed correctly if they are outside the range of |
- // shorter text. |
- SetTextWith2ExtraStyles(render_text.get()); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- |
- render_text->SetText(ASCIIToUTF16("abcdefg")); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); |
- EXPECT_EQ(ui::Range(3, 6), render_text->style_ranges()[1].range); |
- EXPECT_EQ(ui::Range(6, 7), render_text->style_ranges()[2].range); |
- |
- SetTextWith2ExtraStyles(render_text.get()); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- |
- render_text->SetText(ASCIIToUTF16("abcdef")); |
- EXPECT_EQ(2U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); |
- EXPECT_EQ(ui::Range(3, 6), render_text->style_ranges()[1].range); |
- |
- SetTextWith2ExtraStyles(render_text.get()); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
- |
- render_text->SetText(ASCIIToUTF16("abcde")); |
- EXPECT_EQ(2U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); |
- EXPECT_EQ(ui::Range(3, 5), render_text->style_ranges()[1].range); |
- |
- SetTextWith2ExtraStyles(render_text.get()); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
+ render_text->SetText(ASCIIToUTF16("012345678")); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(0, 2)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(3, 6)); |
+ render_text->ApplyStyle(BOLD, true, ui::Range(7, 9)); |
+ |
+ StyleBreaks expected; |
+ expected.push_back(StyleBreak(0, true)); |
+ expected.push_back(StyleBreak(2, false)); |
+ expected.push_back(StyleBreak(3, true)); |
+ expected.push_back(StyleBreak(6, false)); |
+ expected.push_back(StyleBreak(7, true)); |
+ EXPECT_TRUE(BreaksEqual(render_text->styles(BOLD), expected)); |
+ |
+ // Truncating the text should trim any corresponding breaks. |
+ render_text->SetText(ASCIIToUTF16("0123456")); |
+ expected.resize(4); |
+ EXPECT_TRUE(BreaksEqual(render_text->styles(BOLD), expected)); |
+ render_text->SetText(ASCIIToUTF16("01234")); |
+ expected.resize(3); |
+ EXPECT_TRUE(BreaksEqual(render_text->styles(BOLD), expected)); |
- render_text->SetText(ASCIIToUTF16("abc")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); |
+ // Appending text should extend the terminal styles without changing breaks. |
+ render_text->SetText(ASCIIToUTF16("012345678")); |
+ EXPECT_TRUE(BreaksEqual(render_text->styles(BOLD), expected)); |
+} |
- SetTextWith2ExtraStyles(render_text.get()); |
- EXPECT_EQ(3U, render_text->style_ranges().size()); |
+TEST_F(RenderTextTest, ApplyColor) { |
+ scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
+ render_text->SetText(ASCIIToUTF16("012345678")); |
+ |
+ // Apply a color to a valid range, check breaks; repeating should be no-op. |
+ ui::Range valid_range = ui::Range(2, 3); |
+ ColorBreaks expected; |
+ expected.push_back(ColorBreak(0, SK_ColorBLACK)); |
+ expected.push_back(ColorBreak(2, SK_ColorRED)); |
+ expected.push_back(ColorBreak(3, SK_ColorBLACK)); |
+ for (size_t i = 0; i < 2; ++i) { |
+ render_text->ApplyColor(SK_ColorRED, valid_range); |
+ EXPECT_TRUE(BreaksEqual(render_text->colors(), expected)); |
+ } |
- render_text->SetText(ASCIIToUTF16("a")); |
- EXPECT_EQ(1U, render_text->style_ranges().size()); |
- EXPECT_EQ(ui::Range(0, 1), render_text->style_ranges()[0].range); |
+ // Ensure setting a color overrides the ranged color. |
+ render_text->SetColor(SK_ColorBLUE); |
+ EXPECT_TRUE(BreakEquals(render_text->colors(), SK_ColorBLUE)); |
+ |
+ // Ensure applying a color that is already applied has no effect. |
+ render_text->ApplyColor(SK_ColorBLUE, ui::Range(0, 2)); |
+ render_text->ApplyColor(SK_ColorBLUE, ui::Range(3, 6)); |
+ render_text->ApplyColor( SK_ColorBLUE, ui::Range(7, 9)); |
+ EXPECT_TRUE(BreakEquals(render_text->colors(), SK_ColorBLUE)); |
+ |
+ // Ensure applying an identical neighboring color merges the ranges. |
+ render_text->ApplyColor(SK_ColorRED, ui::Range(0, 3)); |
+ render_text->ApplyColor(SK_ColorRED, ui::Range(3, 6)); |
+ render_text->ApplyColor(SK_ColorRED, ui::Range(6, 9)); |
+ EXPECT_TRUE(BreakEquals(render_text->colors(), SK_ColorRED)); |
+ |
+ // Ensure applying a color with the same range overrides the ranged color. |
+ render_text->ApplyColor(SK_ColorGREEN, ui::Range(2, 3)); |
+ render_text->ApplyColor(SK_ColorRED, ui::Range(2, 3)); |
+ EXPECT_TRUE(BreakEquals(render_text->colors(), SK_ColorRED)); |
+ |
+ // Ensure applying a color with a containing range overrides the ranged color. |
+ render_text->ApplyColor(SK_ColorGREEN, ui::Range(0, 1)); |
+ render_text->ApplyColor(SK_ColorGREEN, ui::Range(2, 3)); |
+ render_text->ApplyColor(SK_ColorRED, ui::Range(0, 3)); |
+ EXPECT_TRUE(BreakEquals(render_text->colors(), SK_ColorRED)); |
+ render_text->ApplyColor(SK_ColorGREEN, ui::Range(4, 5)); |
+ render_text->ApplyColor(SK_ColorGREEN, ui::Range(6, 7)); |
+ render_text->ApplyColor(SK_ColorGREEN, ui::Range(8, 9)); |
+ render_text->ApplyColor(SK_ColorRED, ui::Range(4, 9)); |
+ EXPECT_TRUE(BreakEquals(render_text->colors(), SK_ColorRED)); |
+ |
+ // Ensure applying various overlapping colors yields the intended results. |
+ render_text->ApplyColor(SK_ColorGREEN, ui::Range(1, 4)); |
+ render_text->ApplyColor(SK_ColorGREEN, ui::Range(5, 8)); |
+ render_text->ApplyColor(SK_ColorBLUE, ui::Range(0, 2)); |
+ render_text->ApplyColor(SK_ColorBLUE, ui::Range(3, 6)); |
+ render_text->ApplyColor(SK_ColorBLUE, ui::Range(7, 9)); |
+ ColorBreaks overlap; |
+ overlap.push_back(ColorBreak(0, SK_ColorBLUE)); |
+ overlap.push_back(ColorBreak(2, SK_ColorGREEN)); |
+ overlap.push_back(ColorBreak(3, SK_ColorBLUE)); |
+ overlap.push_back(ColorBreak(6, SK_ColorGREEN)); |
+ overlap.push_back(ColorBreak(7, SK_ColorBLUE)); |
+ EXPECT_TRUE(BreaksEqual(render_text->colors(), overlap)); |
} |
// TODO(asvitkine): Cursor movements tests disabled on Mac because RenderTextMac |
@@ -1051,33 +1015,23 @@ TEST_F(RenderTextTest, StringSizeBoldWidth) { |
EXPECT_GT(plain_width, 0); |
// Apply a bold style and check that the new width is greater. |
- StyleRange bold; |
- bold.font_style |= Font::BOLD; |
- render_text->set_default_style(bold); |
- render_text->ApplyDefaultStyle(); |
- |
+ render_text->SetStyle(gfx::BOLD, true); |
const int bold_width = render_text->GetStringSize().width(); |
EXPECT_GT(bold_width, plain_width); |
// Now, apply a plain style over the first word only. |
- StyleRange plain; |
- plain.font_style = Font::NORMAL; |
- plain.range = ui::Range(0, 5); |
- render_text->ApplyStyleRange(plain); |
- |
+ render_text->ApplyStyle(gfx::BOLD, false, ui::Range(0, 5)); |
Alexei Svitkine (slow)
2013/01/22 19:20:21
This should be NORMAL, not BOLD.
msw
2013/01/22 22:27:24
No, BOLD is the style that being changed to false.
|
const int plain_bold_width = render_text->GetStringSize().width(); |
EXPECT_GT(plain_bold_width, plain_width); |
EXPECT_LT(plain_bold_width, bold_width); |
} |
TEST_F(RenderTextTest, StringSizeHeight) { |
- struct { |
- string16 text; |
- } cases[] = { |
- { WideToUTF16(L"Hello World!") }, // English |
- { WideToUTF16(L"\x6328\x62f6") }, // Japanese |
- { WideToUTF16(L"\x0915\x093f") }, // Hindi |
- { WideToUTF16(L"\x05e0\x05b8") }, // Hebrew |
+ string16 cases[] = { |
+ WideToUTF16(L"Hello World!"), // English |
+ WideToUTF16(L"\x6328\x62f6"), // Japanese |
+ WideToUTF16(L"\x0915\x093f"), // Hindi |
+ WideToUTF16(L"\x05e0\x05b8"), // Hebrew |
}; |
Font default_font; |
@@ -1087,7 +1041,7 @@ TEST_F(RenderTextTest, StringSizeHeight) { |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); i++) { |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
render_text->SetFont(default_font); |
- render_text->SetText(cases[i].text); |
+ render_text->SetText(cases[i]); |
const int height1 = render_text->GetStringSize().height(); |
EXPECT_GT(height1, 0); |