Index: ui/gfx/render_text_unittest.cc |
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e809d41d4b380cc6bcce8c591275b5a4f65ee07a |
--- /dev/null |
+++ b/ui/gfx/render_text_unittest.cc |
@@ -0,0 +1,180 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ui/gfx/render_text.h" |
+ |
+#include "base/utf_string_conversions.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace gfx { |
+ |
+class RenderTextTest : public testing::Test { |
+}; |
+ |
+TEST_F(RenderTextTest, DefaultStyle) { |
+ // Defaults to empty text with no styles. |
+ gfx::RenderText* render_text = gfx::RenderText::CreateRenderText(); |
+ 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()); |
+ gfx::StyleRange style; |
+ EXPECT_EQ(style.font.GetFontName(), |
+ render_text->style_ranges()[0].font.GetFontName()); |
+ 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()); |
+} |
+ |
+TEST_F(RenderTextTest, CustomDefaultStyle) { |
+ // Test a custom default style. |
+ gfx::RenderText* render_text = gfx::RenderText::CreateRenderText(); |
+ gfx::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. |
+ gfx::StyleRange strike; |
+ strike.strike = true; |
+ render_text->set_default_style(strike); |
+ render_text->ApplyDefaultStyle(); |
+ EXPECT_EQ(1U, render_text->style_ranges().size()); |
+ EXPECT_EQ(true, render_text->style_ranges()[0].strike); |
+ EXPECT_EQ(strike.foreground, render_text->style_ranges()[0].foreground); |
+} |
+ |
+TEST_F(RenderTextTest, ApplyStyleRange) { |
+ gfx::RenderText* render_text = gfx::RenderText::CreateRenderText(); |
+ render_text->SetText(ASCIIToUTF16("01234")); |
+ EXPECT_EQ(1U, render_text->style_ranges().size()); |
+ |
+ // Test ApplyStyleRange (no-op on empty range). |
+ gfx::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). |
+ gfx::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. |
+ gfx::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. |
+ gfx::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. |
+ gfx::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. |
+ gfx::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); |
+} |
+ |
+TEST_F(RenderTextTest, StyleRangesAdjust) { |
+ // Test that style ranges adjust to the text size. |
+ gfx::RenderText* render_text = gfx::RenderText::CreateRenderText(); |
+ 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. |
+ gfx::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); |
+} |
+ |
+} // namespace gfx |