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

Unified Diff: ui/gfx/render_text_unittest.cc

Issue 10693061: Fix RenderTextWin base dir and adjacent char code; remove test exceptions; etc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Revert gypi change to keep Mac working. Created 8 years, 6 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
« no previous file with comments | « ui/gfx/canvas_skia.cc ('k') | ui/gfx/render_text_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/render_text_unittest.cc
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc
index 24fbcb9683718b8ef6d598737de5c46bce5bf3e6..65a83b5a70010558a357747fc3bd0660686d37b9 100644
--- a/ui/gfx/render_text_unittest.cc
+++ b/ui/gfx/render_text_unittest.cc
@@ -13,6 +13,10 @@
#include "base/win/windows_version.h"
#endif
+#if defined(TOOLKIT_GTK)
+#include <gtk/gtk.h>
+#endif
+
namespace gfx {
namespace {
@@ -335,7 +339,6 @@ TEST_F(RenderTextTest, PasswordCensorship) {
// TODO(benrg): No Windows implementation yet.
#if !defined(OS_WIN)
-
render_text->SetObscured(true);
// Surrogate pairs are counted as one code point.
@@ -365,6 +368,51 @@ TEST_F(RenderTextTest, PasswordCensorship) {
#endif // !defined(OS_WIN)
}
+// A test utility function to set the application default text direction.
+void SetRTL(bool rtl) {
Alexei Svitkine (slow) 2012/07/04 15:05:33 Nit: Move it to the anonymous namespace already at
msw 2012/07/04 15:58:08 Done.
+ // Override the current locale/direction.
+ base::i18n::SetICUDefaultLocale(rtl ? "he" : "en");
+#if defined(TOOLKIT_GTK)
+ // Do the same for GTK, which does not rely on the ICU default locale.
+ gtk_widget_set_default_direction(rtl ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR);
+#endif
+ EXPECT_EQ(rtl, base::i18n::IsRTL());
+}
+
+TEST_F(RenderTextTest, GetTextDirection) {
+ // Ensure that text direction is set by the first strong character direction.
+ scoped_ptr<RenderText> render_text(RenderText::CreateRenderText());
+ for (size_t i = 0; i < 2; ++i) {
+ // Toggle the application default text direction (to try each direction).
+ SetRTL(!base::i18n::IsRTL());
Alexei Svitkine (slow) 2012/07/04 15:05:33 Can you check that the RTL before and after this l
msw 2012/07/04 15:58:08 Done.
+
+ // Blank strings (and those without directionality) default to LTR.
+ render_text->SetText(string16());
+ EXPECT_EQ(base::i18n::LEFT_TO_RIGHT, render_text->GetTextDirection());
+ render_text->SetText(ASCIIToUTF16(" "));
+ EXPECT_EQ(base::i18n::LEFT_TO_RIGHT, render_text->GetTextDirection());
+
+ // Pure LTR.
+ render_text->SetText(ASCIIToUTF16("abc"));
+ EXPECT_EQ(base::i18n::LEFT_TO_RIGHT, render_text->GetTextDirection());
+ // LTR-RTL
+ render_text->SetText(WideToUTF16(L"abc\x05d0\x05d1\x05d2"));
+ EXPECT_EQ(base::i18n::LEFT_TO_RIGHT, render_text->GetTextDirection());
+ // LTR-RTL-LTR.
+ render_text->SetText(WideToUTF16(L"a"L"\x05d1"L"b"));
+ EXPECT_EQ(base::i18n::LEFT_TO_RIGHT, render_text->GetTextDirection());
+ // Pure RTL.
+ render_text->SetText(WideToUTF16(L"\x05d0\x05d1\x05d2"));
+ EXPECT_EQ(base::i18n::RIGHT_TO_LEFT, render_text->GetTextDirection());
+ // RTL-LTR
+ render_text->SetText(WideToUTF16(L"\x05d0\x05d1\x05d2"L"abc"));
+ EXPECT_EQ(base::i18n::RIGHT_TO_LEFT, render_text->GetTextDirection());
+ // RTL-LTR-RTL.
+ render_text->SetText(WideToUTF16(L"\x05d0"L"a"L"\x05d1"));
+ EXPECT_EQ(base::i18n::RIGHT_TO_LEFT, render_text->GetTextDirection());
+ }
+}
+
void RunMoveCursorLeftRightTest(RenderText* render_text,
const std::vector<SelectionModel>& expected,
VisualCursorDirection direction) {
@@ -459,36 +507,20 @@ TEST_F(RenderTextTest, MoveCursorLeftRightInRtl) {
render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false);
std::vector<SelectionModel> expected;
-#if defined(OS_LINUX)
expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
-#else
- expected.push_back(SelectionModel(3, CURSOR_FORWARD));
-#endif
expected.push_back(SelectionModel(1, CURSOR_BACKWARD));
expected.push_back(SelectionModel(2, CURSOR_BACKWARD));
expected.push_back(SelectionModel(3, CURSOR_BACKWARD));
-#if defined(OS_LINUX)
expected.push_back(SelectionModel(3, CURSOR_FORWARD));
-#else
- expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
-#endif
RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT);
expected.clear();
-#if defined(OS_LINUX)
expected.push_back(SelectionModel(3, CURSOR_FORWARD));
-#else
- expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
-#endif
expected.push_back(SelectionModel(2, CURSOR_FORWARD));
expected.push_back(SelectionModel(1, CURSOR_FORWARD));
expected.push_back(SelectionModel(0, CURSOR_FORWARD));
-#if defined(OS_LINUX)
expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
-#else
- expected.push_back(SelectionModel(3, CURSOR_FORWARD));
-#endif
RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT);
}
@@ -498,7 +530,6 @@ TEST_F(RenderTextTest, MoveCursorLeftRightInRtlLtr) {
render_text->SetText(WideToUTF16(L"\x05d0\x05d1\x05d2"L"abc"));
render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false);
std::vector<SelectionModel> expected;
-#if defined(OS_LINUX)
expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
expected.push_back(SelectionModel(1, CURSOR_BACKWARD));
expected.push_back(SelectionModel(2, CURSOR_BACKWARD));
@@ -507,21 +538,9 @@ TEST_F(RenderTextTest, MoveCursorLeftRightInRtlLtr) {
expected.push_back(SelectionModel(4, CURSOR_FORWARD));
expected.push_back(SelectionModel(3, CURSOR_FORWARD));
expected.push_back(SelectionModel(6, CURSOR_FORWARD));
-#else
- expected.push_back(SelectionModel(6, CURSOR_FORWARD));
- expected.push_back(SelectionModel(5, CURSOR_FORWARD));
- expected.push_back(SelectionModel(4, CURSOR_FORWARD));
- expected.push_back(SelectionModel(3, CURSOR_FORWARD));
- expected.push_back(SelectionModel(1, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(2, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(3, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
-#endif
-
RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT);
expected.clear();
-#if defined(OS_LINUX)
expected.push_back(SelectionModel(6, CURSOR_FORWARD));
expected.push_back(SelectionModel(4, CURSOR_BACKWARD));
expected.push_back(SelectionModel(5, CURSOR_BACKWARD));
@@ -530,16 +549,6 @@ TEST_F(RenderTextTest, MoveCursorLeftRightInRtlLtr) {
expected.push_back(SelectionModel(1, CURSOR_FORWARD));
expected.push_back(SelectionModel(0, CURSOR_FORWARD));
expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
-#else
- expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(2, CURSOR_FORWARD));
- expected.push_back(SelectionModel(1, CURSOR_FORWARD));
- expected.push_back(SelectionModel(0, CURSOR_FORWARD));
- expected.push_back(SelectionModel(4, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(5, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(6, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(6, CURSOR_FORWARD));
-#endif
RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT);
}
@@ -549,35 +558,19 @@ TEST_F(RenderTextTest, MoveCursorLeftRightInRtlLtrRtl) {
render_text->SetText(WideToUTF16(L"\x05d0"L"a"L"\x05d1"));
render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, false);
std::vector<SelectionModel> expected;
-#if defined(OS_LINUX)
expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
expected.push_back(SelectionModel(1, CURSOR_BACKWARD));
expected.push_back(SelectionModel(1, CURSOR_FORWARD));
expected.push_back(SelectionModel(3, CURSOR_BACKWARD));
expected.push_back(SelectionModel(3, CURSOR_FORWARD));
-#else
- expected.push_back(SelectionModel(3, CURSOR_FORWARD));
- expected.push_back(SelectionModel(3, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(1, CURSOR_FORWARD));
- expected.push_back(SelectionModel(1, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
-#endif
RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_LEFT);
expected.clear();
-#if defined(OS_LINUX)
expected.push_back(SelectionModel(3, CURSOR_FORWARD));
expected.push_back(SelectionModel(2, CURSOR_FORWARD));
expected.push_back(SelectionModel(2, CURSOR_BACKWARD));
expected.push_back(SelectionModel(0, CURSOR_FORWARD));
expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
-#else
- expected.push_back(SelectionModel(0, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(0, CURSOR_FORWARD));
- expected.push_back(SelectionModel(2, CURSOR_BACKWARD));
- expected.push_back(SelectionModel(2, CURSOR_FORWARD));
- expected.push_back(SelectionModel(3, CURSOR_FORWARD));
-#endif
RunMoveCursorLeftRightTest(render_text.get(), expected, CURSOR_RIGHT);
}
@@ -706,14 +699,8 @@ TEST_F(RenderTextTest, EdgeSelectionModels) {
{ kLatin, base::i18n::LEFT_TO_RIGHT },
{ kLTRGrapheme, base::i18n::LEFT_TO_RIGHT },
{ kHindiLatin, base::i18n::LEFT_TO_RIGHT },
-#if defined(OS_LINUX)
- // On Linux, the whole string is displayed RTL, rather than individual runs.
{ kRTLGrapheme, base::i18n::RIGHT_TO_LEFT },
{ kHebrewLatin, base::i18n::RIGHT_TO_LEFT },
-#else
- { kRTLGrapheme, base::i18n::LEFT_TO_RIGHT },
- { kHebrewLatin, base::i18n::LEFT_TO_RIGHT },
-#endif
};
// TODO(asvitkine): Disable tests that fail on XP bots due to lack of complete
@@ -1187,12 +1174,9 @@ TEST_F(RenderTextTest, DisplayRectShowsCursorLTR) {
EXPECT_EQ(width, render_text->GetUpdatedCursorBounds().x());
}
-// TODO(asvitkine): This test fails on desktop Linux. http://crbug.com/134009
-#if !defined(OS_LINUX) || defined(OS_CHROMEOS)
TEST_F(RenderTextTest, DisplayRectShowsCursorRTL) {
- // Set the locale to Hebrew for RTL UI.
- std::string locale = l10n_util::GetApplicationLocale("");
- base::i18n::SetICUDefaultLocale("he");
+ // Set the application default text direction to RTL.
+ SetRTL(true);
scoped_ptr<RenderText> render_text(RenderText::CreateRenderText());
render_text->SetText(WideToUTF16(L"abcdefghijklmnopqrstuvwxzyabcdefg"));
@@ -1244,9 +1228,8 @@ TEST_F(RenderTextTest, DisplayRectShowsCursorRTL) {
EXPECT_EQ(render_text->display_rect().width() - width - 1,
render_text->GetUpdatedCursorBounds().x());
- // Reset locale.
- base::i18n::SetICUDefaultLocale(locale);
+ // Reset the application default text direction to LTR.
+ SetRTL(false);
Alexei Svitkine (slow) 2012/07/04 15:05:33 I don't think that's right. You want to restore to
msw 2012/07/04 15:58:08 Done.
}
-#endif // !defined(OS_LINUX) || defined(OS_CHROMEOS)
} // namespace gfx
« no previous file with comments | « ui/gfx/canvas_skia.cc ('k') | ui/gfx/render_text_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698