| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/gfx/render_text.h" | 5 #include "ui/gfx/render_text.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "ui/base/l10n/l10n_util.h" | 10 #include "ui/base/l10n/l10n_util.h" |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); | 300 EXPECT_EQ(ui::Range(0, 3), render_text->style_ranges()[0].range); |
| 301 | 301 |
| 302 SetTextWith2ExtraStyles(render_text.get()); | 302 SetTextWith2ExtraStyles(render_text.get()); |
| 303 EXPECT_EQ(3U, render_text->style_ranges().size()); | 303 EXPECT_EQ(3U, render_text->style_ranges().size()); |
| 304 | 304 |
| 305 render_text->SetText(ASCIIToUTF16("a")); | 305 render_text->SetText(ASCIIToUTF16("a")); |
| 306 EXPECT_EQ(1U, render_text->style_ranges().size()); | 306 EXPECT_EQ(1U, render_text->style_ranges().size()); |
| 307 EXPECT_EQ(ui::Range(0, 1), render_text->style_ranges()[0].range); | 307 EXPECT_EQ(ui::Range(0, 1), render_text->style_ranges()[0].range); |
| 308 } | 308 } |
| 309 | 309 |
| 310 // TODO(asvitkine): Cursor movements tests disabled on Mac because RenderTextMac |
| 311 // does not implement this yet. http://crbug.com/131618 |
| 312 #if !defined(OS_MACOSX) |
| 310 void TestVisualCursorMotionInObscuredField(RenderText* render_text, | 313 void TestVisualCursorMotionInObscuredField(RenderText* render_text, |
| 311 const string16& text, | 314 const string16& text, |
| 312 bool select) { | 315 bool select) { |
| 313 render_text->SetText(text); | 316 render_text->SetText(text); |
| 314 int len = text.length(); | 317 int len = text.length(); |
| 315 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, select); | 318 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, select); |
| 316 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : len, len), CURSOR_FORWARD), | 319 EXPECT_EQ(SelectionModel(ui::Range(select ? 0 : len, len), CURSOR_FORWARD), |
| 317 render_text->selection_model()); | 320 render_text->selection_model()); |
| 318 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, select); | 321 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, select); |
| 319 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 322 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 790 EXPECT_EQ(ui::Range(5), render_text->selection()); | 793 EXPECT_EQ(ui::Range(5), render_text->selection()); |
| 791 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); | 794 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); |
| 792 EXPECT_EQ(ui::Range(4), render_text->selection()); | 795 EXPECT_EQ(ui::Range(4), render_text->selection()); |
| 793 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, true); | 796 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, true); |
| 794 EXPECT_EQ(ui::Range(4, 5), render_text->selection()); | 797 EXPECT_EQ(ui::Range(4, 5), render_text->selection()); |
| 795 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, true); | 798 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, true); |
| 796 EXPECT_EQ(ui::Range(4, 6), render_text->selection()); | 799 EXPECT_EQ(ui::Range(4, 6), render_text->selection()); |
| 797 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); | 800 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); |
| 798 EXPECT_EQ(ui::Range(4), render_text->selection()); | 801 EXPECT_EQ(ui::Range(4), render_text->selection()); |
| 799 } | 802 } |
| 803 #endif // !defined(OS_MACOSX) |
| 800 | 804 |
| 801 // TODO(xji): Make these work on Windows. | 805 // TODO(xji): Make these work on Windows. |
| 802 #if defined(OS_LINUX) | 806 #if defined(OS_LINUX) |
| 803 void MoveLeftRightByWordVerifier(RenderText* render_text, | 807 void MoveLeftRightByWordVerifier(RenderText* render_text, |
| 804 const wchar_t* str) { | 808 const wchar_t* str) { |
| 805 render_text->SetText(WideToUTF16(str)); | 809 render_text->SetText(WideToUTF16(str)); |
| 806 | 810 |
| 807 // Test moving by word from left ro right. | 811 // Test moving by word from left ro right. |
| 808 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); | 812 render_text->MoveCursor(LINE_BREAK, CURSOR_LEFT, false); |
| 809 bool first_word = true; | 813 bool first_word = true; |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 961 #endif | 965 #endif |
| 962 | 966 |
| 963 TEST_F(RenderTextTest, StringSizeSanity) { | 967 TEST_F(RenderTextTest, StringSizeSanity) { |
| 964 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 968 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 965 render_text->SetText(UTF8ToUTF16("Hello World")); | 969 render_text->SetText(UTF8ToUTF16("Hello World")); |
| 966 const Size string_size = render_text->GetStringSize(); | 970 const Size string_size = render_text->GetStringSize(); |
| 967 EXPECT_GT(string_size.width(), 0); | 971 EXPECT_GT(string_size.width(), 0); |
| 968 EXPECT_GT(string_size.height(), 0); | 972 EXPECT_GT(string_size.height(), 0); |
| 969 } | 973 } |
| 970 | 974 |
| 975 // TODO(asvitkine): This test fails because PlatformFontMac uses point font |
| 976 // sizes instead of pixel sizes like other implementations. |
| 977 #if !defined(OS_MACOSX) |
| 971 TEST_F(RenderTextTest, StringSizeEmptyString) { | 978 TEST_F(RenderTextTest, StringSizeEmptyString) { |
| 972 const Font font; | 979 const Font font; |
| 973 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 980 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 974 render_text->SetFontList(FontList(font)); | 981 render_text->SetFontList(FontList(font)); |
| 975 | 982 |
| 976 render_text->SetText(string16()); | 983 render_text->SetText(string16()); |
| 977 EXPECT_EQ(font.GetHeight(), render_text->GetStringSize().height()); | 984 EXPECT_EQ(font.GetHeight(), render_text->GetStringSize().height()); |
| 978 EXPECT_EQ(0, render_text->GetStringSize().width()); | 985 EXPECT_EQ(0, render_text->GetStringSize().width()); |
| 979 | 986 |
| 980 render_text->SetText(UTF8ToUTF16(" ")); | 987 render_text->SetText(UTF8ToUTF16(" ")); |
| 981 EXPECT_EQ(font.GetHeight(), render_text->GetStringSize().height()); | 988 EXPECT_EQ(font.GetHeight(), render_text->GetStringSize().height()); |
| 982 } | 989 } |
| 990 #endif // !defined(OS_MACOSX) |
| 983 | 991 |
| 984 TEST_F(RenderTextTest, StringSizeBoldWidth) { | 992 TEST_F(RenderTextTest, StringSizeBoldWidth) { |
| 985 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 993 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 986 render_text->SetText(UTF8ToUTF16("Hello World")); | 994 render_text->SetText(UTF8ToUTF16("Hello World")); |
| 987 | 995 |
| 988 const int plain_width = render_text->GetStringSize().width(); | 996 const int plain_width = render_text->GetStringSize().width(); |
| 989 EXPECT_GT(plain_width, 0); | 997 EXPECT_GT(plain_width, 0); |
| 990 | 998 |
| 991 // Apply a bold style and check that the new width is greater. | 999 // Apply a bold style and check that the new width is greater. |
| 992 StyleRange bold; | 1000 StyleRange bold; |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1148 | 1156 |
| 1149 const Font& start_font = spans[start_paren_span_index].first; | 1157 const Font& start_font = spans[start_paren_span_index].first; |
| 1150 const Font& end_font = spans[end_paren_span_index].first; | 1158 const Font& end_font = spans[end_paren_span_index].first; |
| 1151 EXPECT_EQ(start_font.GetFontName(), end_font.GetFontName()); | 1159 EXPECT_EQ(start_font.GetFontName(), end_font.GetFontName()); |
| 1152 EXPECT_EQ(start_font.GetFontSize(), end_font.GetFontSize()); | 1160 EXPECT_EQ(start_font.GetFontSize(), end_font.GetFontSize()); |
| 1153 EXPECT_EQ(start_font.GetStyle(), end_font.GetStyle()); | 1161 EXPECT_EQ(start_font.GetStyle(), end_font.GetStyle()); |
| 1154 } | 1162 } |
| 1155 } | 1163 } |
| 1156 } | 1164 } |
| 1157 | 1165 |
| 1166 // TODO(asvitkine): Cursor movements tests disabled on Mac because RenderTextMac |
| 1167 // does not implement this yet. http://crbug.com/131618 |
| 1168 #if !defined(OS_MACOSX) |
| 1158 TEST_F(RenderTextTest, DisplayRectShowsCursorLTR) { | 1169 TEST_F(RenderTextTest, DisplayRectShowsCursorLTR) { |
| 1159 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); | 1170 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
| 1160 render_text->SetText(WideToUTF16(L"abcdefghijklmnopqrstuvwxzyabcdefg")); | 1171 render_text->SetText(WideToUTF16(L"abcdefghijklmnopqrstuvwxzyabcdefg")); |
| 1161 render_text->MoveCursorTo(SelectionModel(render_text->text().length(), | 1172 render_text->MoveCursorTo(SelectionModel(render_text->text().length(), |
| 1162 CURSOR_FORWARD)); | 1173 CURSOR_FORWARD)); |
| 1163 int width = render_text->GetStringSize().width(); | 1174 int width = render_text->GetStringSize().width(); |
| 1164 ASSERT_GT(width, 10); | 1175 ASSERT_GT(width, 10); |
| 1165 | 1176 |
| 1166 // Ensure that the cursor is placed at the width of its preceding text. | 1177 // Ensure that the cursor is placed at the width of its preceding text. |
| 1167 render_text->SetDisplayRect(Rect(width + 10, 1)); | 1178 render_text->SetDisplayRect(Rect(width + 10, 1)); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1259 | 1270 |
| 1260 // Ensure that a sufficiently large display rectangle shows all the text. | 1271 // Ensure that a sufficiently large display rectangle shows all the text. |
| 1261 render_text->SetDisplayRect(Rect(width + 10, 1)); | 1272 render_text->SetDisplayRect(Rect(width + 10, 1)); |
| 1262 EXPECT_EQ(render_text->display_rect().width() - width - 1, | 1273 EXPECT_EQ(render_text->display_rect().width() - width - 1, |
| 1263 render_text->GetUpdatedCursorBounds().x()); | 1274 render_text->GetUpdatedCursorBounds().x()); |
| 1264 | 1275 |
| 1265 // Reset the application default text direction to LTR. | 1276 // Reset the application default text direction to LTR. |
| 1266 SetRTL(was_rtl); | 1277 SetRTL(was_rtl); |
| 1267 EXPECT_EQ(was_rtl, base::i18n::IsRTL()); | 1278 EXPECT_EQ(was_rtl, base::i18n::IsRTL()); |
| 1268 } | 1279 } |
| 1280 #endif // !defined(OS_MACOSX) |
| 1269 | 1281 |
| 1270 } // namespace gfx | 1282 } // namespace gfx |
| OLD | NEW |