OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "ui/gfx/render_text.h" |
| 6 |
| 7 #include "base/utf_string_conversions.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 |
| 10 namespace gfx { |
| 11 |
| 12 class RenderTextTest : public testing::Test { |
| 13 }; |
| 14 |
| 15 TEST_F(RenderTextTest, DefaultStyle) { |
| 16 // Defaults to empty text with no styles. |
| 17 gfx::RenderText* render_text = gfx::RenderText::CreateRenderText(); |
| 18 EXPECT_TRUE(render_text->text().empty()); |
| 19 EXPECT_TRUE(render_text->style_ranges().empty()); |
| 20 |
| 21 // Test that the built-in default style is applied for new text. |
| 22 render_text->SetText(ASCIIToUTF16("abc")); |
| 23 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 24 gfx::StyleRange style; |
| 25 EXPECT_EQ(style.font.GetFontName(), |
| 26 render_text->style_ranges()[0].font.GetFontName()); |
| 27 EXPECT_EQ(style.foreground, render_text->style_ranges()[0].foreground); |
| 28 EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); |
| 29 EXPECT_EQ(style.strike, render_text->style_ranges()[0].strike); |
| 30 EXPECT_EQ(style.underline, render_text->style_ranges()[0].underline); |
| 31 |
| 32 // Test that clearing the text also clears the styles. |
| 33 render_text->SetText(string16()); |
| 34 EXPECT_TRUE(render_text->text().empty()); |
| 35 EXPECT_TRUE(render_text->style_ranges().empty()); |
| 36 } |
| 37 |
| 38 TEST_F(RenderTextTest, CustomDefaultStyle) { |
| 39 // Test a custom default style. |
| 40 gfx::RenderText* render_text = gfx::RenderText::CreateRenderText(); |
| 41 gfx::StyleRange color; |
| 42 color.foreground = SK_ColorRED; |
| 43 render_text->set_default_style(color); |
| 44 render_text->SetText(ASCIIToUTF16("abc")); |
| 45 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 46 EXPECT_EQ(color.foreground, render_text->style_ranges()[0].foreground); |
| 47 |
| 48 // Test that the custom default style persists across clearing text. |
| 49 render_text->SetText(string16()); |
| 50 EXPECT_TRUE(render_text->style_ranges().empty()); |
| 51 render_text->SetText(ASCIIToUTF16("abc")); |
| 52 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 53 EXPECT_EQ(color.foreground, render_text->style_ranges()[0].foreground); |
| 54 |
| 55 // Test ApplyDefaultStyle after setting a new default. |
| 56 gfx::StyleRange strike; |
| 57 strike.strike = true; |
| 58 render_text->set_default_style(strike); |
| 59 render_text->ApplyDefaultStyle(); |
| 60 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 61 EXPECT_EQ(true, render_text->style_ranges()[0].strike); |
| 62 EXPECT_EQ(strike.foreground, render_text->style_ranges()[0].foreground); |
| 63 } |
| 64 |
| 65 TEST_F(RenderTextTest, ApplyStyleRange) { |
| 66 gfx::RenderText* render_text = gfx::RenderText::CreateRenderText(); |
| 67 render_text->SetText(ASCIIToUTF16("01234")); |
| 68 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 69 |
| 70 // Test ApplyStyleRange (no-op on empty range). |
| 71 gfx::StyleRange empty; |
| 72 empty.range = ui::Range(1, 1); |
| 73 render_text->ApplyStyleRange(empty); |
| 74 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 75 |
| 76 // Test ApplyStyleRange (no-op on invalid range). |
| 77 gfx::StyleRange invalid; |
| 78 invalid.range = ui::Range::InvalidRange(); |
| 79 render_text->ApplyStyleRange(invalid); |
| 80 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 81 |
| 82 // Apply a style with a range contained by an existing range. |
| 83 gfx::StyleRange underline; |
| 84 underline.underline = true; |
| 85 underline.range = ui::Range(2, 3); |
| 86 render_text->ApplyStyleRange(underline); |
| 87 EXPECT_EQ(3U, render_text->style_ranges().size()); |
| 88 EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
| 89 EXPECT_FALSE(render_text->style_ranges()[0].underline); |
| 90 EXPECT_EQ(ui::Range(2, 3), render_text->style_ranges()[1].range); |
| 91 EXPECT_TRUE(render_text->style_ranges()[1].underline); |
| 92 EXPECT_EQ(ui::Range(3, 5), render_text->style_ranges()[2].range); |
| 93 EXPECT_FALSE(render_text->style_ranges()[2].underline); |
| 94 |
| 95 // Apply a style with a range equal to another range. |
| 96 gfx::StyleRange color; |
| 97 color.foreground = SK_ColorWHITE; |
| 98 color.range = ui::Range(2, 3); |
| 99 render_text->ApplyStyleRange(color); |
| 100 EXPECT_EQ(3U, render_text->style_ranges().size()); |
| 101 EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
| 102 EXPECT_NE(SK_ColorWHITE, render_text->style_ranges()[0].foreground); |
| 103 EXPECT_FALSE(render_text->style_ranges()[0].underline); |
| 104 EXPECT_EQ(ui::Range(2, 3), render_text->style_ranges()[1].range); |
| 105 EXPECT_EQ(SK_ColorWHITE, render_text->style_ranges()[1].foreground); |
| 106 EXPECT_FALSE(render_text->style_ranges()[1].underline); |
| 107 EXPECT_EQ(ui::Range(3, 5), render_text->style_ranges()[2].range); |
| 108 EXPECT_NE(SK_ColorWHITE, render_text->style_ranges()[2].foreground); |
| 109 EXPECT_FALSE(render_text->style_ranges()[2].underline); |
| 110 |
| 111 // Apply a style with a range containing an existing range. |
| 112 // This new style also overlaps portions of neighboring ranges. |
| 113 gfx::StyleRange strike; |
| 114 strike.strike = true; |
| 115 strike.range = ui::Range(1, 4); |
| 116 render_text->ApplyStyleRange(strike); |
| 117 EXPECT_EQ(3U, render_text->style_ranges().size()); |
| 118 EXPECT_EQ(ui::Range(0, 1), render_text->style_ranges()[0].range); |
| 119 EXPECT_FALSE(render_text->style_ranges()[0].strike); |
| 120 EXPECT_EQ(ui::Range(1, 4), render_text->style_ranges()[1].range); |
| 121 EXPECT_TRUE(render_text->style_ranges()[1].strike); |
| 122 EXPECT_EQ(ui::Range(4, 5), render_text->style_ranges()[2].range); |
| 123 EXPECT_FALSE(render_text->style_ranges()[2].strike); |
| 124 |
| 125 // Apply a style overlapping all ranges. |
| 126 gfx::StyleRange strike_underline; |
| 127 strike_underline.strike = true; |
| 128 strike_underline.underline = true; |
| 129 strike_underline.range = ui::Range(0, render_text->text().length()); |
| 130 render_text->ApplyStyleRange(strike_underline); |
| 131 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 132 EXPECT_EQ(ui::Range(0, 5), render_text->style_ranges()[0].range); |
| 133 EXPECT_TRUE(render_text->style_ranges()[0].underline); |
| 134 EXPECT_TRUE(render_text->style_ranges()[0].strike); |
| 135 |
| 136 // Apply the default style. |
| 137 render_text->ApplyDefaultStyle(); |
| 138 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 139 EXPECT_EQ(ui::Range(0, 5), render_text->style_ranges()[0].range); |
| 140 EXPECT_FALSE(render_text->style_ranges()[0].underline); |
| 141 EXPECT_FALSE(render_text->style_ranges()[0].strike); |
| 142 } |
| 143 |
| 144 TEST_F(RenderTextTest, StyleRangesAdjust) { |
| 145 // Test that style ranges adjust to the text size. |
| 146 gfx::RenderText* render_text = gfx::RenderText::CreateRenderText(); |
| 147 render_text->SetText(ASCIIToUTF16("abcdef")); |
| 148 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 149 EXPECT_EQ(ui::Range(0, 6), render_text->style_ranges()[0].range); |
| 150 |
| 151 // Test that the range is clipped to the length of shorter text. |
| 152 render_text->SetText(ASCIIToUTF16("abc")); |
| 153 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 154 EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); |
| 155 |
| 156 // Test that the last range extends to the length of longer text. |
| 157 gfx::StyleRange strike; |
| 158 strike.strike = true; |
| 159 strike.range = ui::Range(2, 3); |
| 160 render_text->ApplyStyleRange(strike); |
| 161 render_text->SetText(ASCIIToUTF16("abcdefghi")); |
| 162 EXPECT_EQ(2U, render_text->style_ranges().size()); |
| 163 EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
| 164 EXPECT_EQ(ui::Range(2, 9), render_text->style_ranges()[1].range); |
| 165 EXPECT_TRUE(render_text->style_ranges()[1].strike); |
| 166 |
| 167 // Test that ranges are removed if they're outside the range of shorter text. |
| 168 render_text->SetText(ASCIIToUTF16("ab")); |
| 169 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 170 EXPECT_EQ(ui::Range(0, 2), render_text->style_ranges()[0].range); |
| 171 EXPECT_FALSE(render_text->style_ranges()[0].strike); |
| 172 |
| 173 // Test that previously removed ranges don't return. |
| 174 render_text->SetText(ASCIIToUTF16("abcdef")); |
| 175 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 176 EXPECT_EQ(ui::Range(0, 6), render_text->style_ranges()[0].range); |
| 177 EXPECT_FALSE(render_text->style_ranges()[0].strike); |
| 178 } |
| 179 |
| 180 } // namespace gfx |
OLD | NEW |