Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Unified Diff: ui/gfx/render_text_unittest.cc

Issue 11535014: Replace StyleRange with BreakList; update RenderText, etc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Simplify OmniboxResultView; Rename StyleBreak; cleanup. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698