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

Side by Side Diff: ui/gfx/render_text_unittest.cc

Issue 419753002: Prepare to enable RenderTextHarfBuzz by default (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: enable/disable flags Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 EXPECT_EQ(4U, render_text->cursor_position()); 817 EXPECT_EQ(4U, render_text->cursor_position());
818 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); 818 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false);
819 EXPECT_EQ(2U, render_text->cursor_position()); 819 EXPECT_EQ(2U, render_text->cursor_position());
820 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); 820 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false);
821 EXPECT_EQ(0U, render_text->cursor_position()); 821 EXPECT_EQ(0U, render_text->cursor_position());
822 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false); 822 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_LEFT, false);
823 EXPECT_EQ(0U, render_text->cursor_position()); 823 EXPECT_EQ(0U, render_text->cursor_position());
824 } 824 }
825 #endif 825 #endif
826 826
827 // TODO(ckocagil): Enable for RenderTextHarfBuzz. http://crbug.com/383265
827 TEST_F(RenderTextTest, MoveCursorLeftRight_MeiryoUILigatures) { 828 TEST_F(RenderTextTest, MoveCursorLeftRight_MeiryoUILigatures) {
828 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); 829 scoped_ptr<RenderText> render_text(RenderText::CreateNativeInstance());
829 // Meiryo UI uses single-glyph ligatures for 'ff' and 'ffi', but each letter 830 // Meiryo UI uses single-glyph ligatures for 'ff' and 'ffi', but each letter
830 // (code point) has unique bounds, so mid-glyph cursoring should be possible. 831 // (code point) has unique bounds, so mid-glyph cursoring should be possible.
831 render_text->SetFontList(FontList("Meiryo UI, 12px")); 832 render_text->SetFontList(FontList("Meiryo UI, 12px"));
832 render_text->SetText(WideToUTF16(L"ff ffi")); 833 render_text->SetText(WideToUTF16(L"ff ffi"));
833 EXPECT_EQ(0U, render_text->cursor_position()); 834 EXPECT_EQ(0U, render_text->cursor_position());
834 for (size_t i = 0; i < render_text->text().length(); ++i) { 835 for (size_t i = 0; i < render_text->text().length(); ++i) {
835 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false); 836 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, false);
836 EXPECT_EQ(i + 1, render_text->cursor_position()); 837 EXPECT_EQ(i + 1, render_text->cursor_position());
837 } 838 }
838 EXPECT_EQ(6U, render_text->cursor_position()); 839 EXPECT_EQ(6U, render_text->cursor_position());
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
1236 EXPECT_EQ(3U, render_text->cursor_position()); 1237 EXPECT_EQ(3U, render_text->cursor_position());
1237 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); 1238 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false);
1238 EXPECT_EQ(5U, render_text->cursor_position()); 1239 EXPECT_EQ(5U, render_text->cursor_position());
1239 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); 1240 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false);
1240 EXPECT_EQ(6U, render_text->cursor_position()); 1241 EXPECT_EQ(6U, render_text->cursor_position());
1241 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false); 1242 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, false);
1242 EXPECT_EQ(6U, render_text->cursor_position()); 1243 EXPECT_EQ(6U, render_text->cursor_position());
1243 } 1244 }
1244 #endif 1245 #endif
1245 1246
1247 // TODO(ckocagil): Remove when RenderTextWin goes away.
1246 #if defined(OS_WIN) 1248 #if defined(OS_WIN)
1247 TEST_F(RenderTextTest, Win_LogicalClusters) { 1249 TEST_F(RenderTextTest, Win_LogicalClusters) {
1248 scoped_ptr<RenderTextWin> render_text( 1250 scoped_ptr<RenderTextWin> render_text(
1249 static_cast<RenderTextWin*>(RenderText::CreateInstance())); 1251 static_cast<RenderTextWin*>(RenderText::CreateNativeInstance()));
1250 1252
1251 const base::string16 test_string = 1253 const base::string16 test_string =
1252 WideToUTF16(L"\x0930\x0930\x0930\x0930\x0930"); 1254 WideToUTF16(L"\x0930\x0930\x0930\x0930\x0930");
1253 render_text->SetText(test_string); 1255 render_text->SetText(test_string);
1254 render_text->EnsureLayout(); 1256 render_text->EnsureLayout();
1255 ASSERT_EQ(1U, render_text->runs_.size()); 1257 ASSERT_EQ(1U, render_text->runs_.size());
1256 WORD* logical_clusters = render_text->runs_[0]->logical_clusters.get(); 1258 WORD* logical_clusters = render_text->runs_[0]->logical_clusters.get();
1257 for (size_t i = 0; i < test_string.length(); ++i) 1259 for (size_t i = 0; i < test_string.length(); ++i)
1258 EXPECT_EQ(i, logical_clusters[i]); 1260 EXPECT_EQ(i, logical_clusters[i]);
1259 } 1261 }
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 }; 1569 };
1568 1570
1569 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(large_content_cases); i++) { 1571 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(large_content_cases); i++) {
1570 render_text->SetHorizontalAlignment(large_content_cases[i].alignment); 1572 render_text->SetHorizontalAlignment(large_content_cases[i].alignment);
1571 render_text->SetDisplayOffset(large_content_cases[i].offset); 1573 render_text->SetDisplayOffset(large_content_cases[i].offset);
1572 EXPECT_EQ(large_content_cases[i].expected_offset, 1574 EXPECT_EQ(large_content_cases[i].expected_offset,
1573 render_text->GetUpdatedDisplayOffset().x()); 1575 render_text->GetUpdatedDisplayOffset().x());
1574 } 1576 }
1575 } 1577 }
1576 1578
1579 // TODO(ckocagil): Enable for RenderTextHarfBuzz. http://crbug.com/396776
1577 TEST_F(RenderTextTest, SameFontForParentheses) { 1580 TEST_F(RenderTextTest, SameFontForParentheses) {
1578 struct { 1581 struct {
1579 const base::char16 left_char; 1582 const base::char16 left_char;
1580 const base::char16 right_char; 1583 const base::char16 right_char;
1581 } punctuation_pairs[] = { 1584 } punctuation_pairs[] = {
1582 { '(', ')' }, 1585 { '(', ')' },
1583 { '{', '}' }, 1586 { '{', '}' },
1584 { '<', '>' }, 1587 { '<', '>' },
1585 }; 1588 };
1586 struct { 1589 struct {
(...skipping 19 matching lines...) Expand all
1606 { WideToUTF16(L"Hello World(\x0915\x093f)Hello World") }, 1609 { WideToUTF16(L"Hello World(\x0915\x093f)Hello World") },
1607 1610
1608 // Hebrew(English) 1611 // Hebrew(English)
1609 { WideToUTF16(L"\x05e0\x05b8(a)") }, 1612 { WideToUTF16(L"\x05e0\x05b8(a)") },
1610 // Hebrew(English)Hebrew 1613 // Hebrew(English)Hebrew
1611 { WideToUTF16(L"\x05e0\x05b8(a)\x05e0\x05b8") }, 1614 { WideToUTF16(L"\x05e0\x05b8(a)\x05e0\x05b8") },
1612 // English(Hebrew)English 1615 // English(Hebrew)English
1613 { WideToUTF16(L"Hello World(\x05e0\x05b8)Hello World") }, 1616 { WideToUTF16(L"Hello World(\x05e0\x05b8)Hello World") },
1614 }; 1617 };
1615 1618
1616 scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); 1619 scoped_ptr<RenderText> render_text(RenderText::CreateNativeInstance());
1617 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) { 1620 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
1618 base::string16 text = cases[i].text; 1621 base::string16 text = cases[i].text;
1619 const size_t start_paren_char_index = text.find('('); 1622 const size_t start_paren_char_index = text.find('(');
1620 ASSERT_NE(base::string16::npos, start_paren_char_index); 1623 ASSERT_NE(base::string16::npos, start_paren_char_index);
1621 const size_t end_paren_char_index = text.find(')'); 1624 const size_t end_paren_char_index = text.find(')');
1622 ASSERT_NE(base::string16::npos, end_paren_char_index); 1625 ASSERT_NE(base::string16::npos, end_paren_char_index);
1623 1626
1624 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(punctuation_pairs); ++j) { 1627 for (size_t j = 0; j < ARRAYSIZE_UNSAFE(punctuation_pairs); ++j) {
1625 text[start_paren_char_index] = punctuation_pairs[j].left_char; 1628 text[start_paren_char_index] = punctuation_pairs[j].left_char;
1626 text[end_paren_char_index] = punctuation_pairs[j].right_char; 1629 text[end_paren_char_index] = punctuation_pairs[j].right_char;
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
1864 const int expected_width = render_text->GetStringSize().width(); 1867 const int expected_width = render_text->GetStringSize().width();
1865 render_text->MoveCursorTo(SelectionModel(Range(0, 1), CURSOR_FORWARD)); 1868 render_text->MoveCursorTo(SelectionModel(Range(0, 1), CURSOR_FORWARD));
1866 EXPECT_EQ(expected_width, render_text->GetStringSize().width()); 1869 EXPECT_EQ(expected_width, render_text->GetStringSize().width());
1867 // Drawing the text should not DCHECK or crash; see http://crbug.com/262119 1870 // Drawing the text should not DCHECK or crash; see http://crbug.com/262119
1868 render_text->Draw(&canvas); 1871 render_text->Draw(&canvas);
1869 render_text->MoveCursorTo(SelectionModel(0, CURSOR_FORWARD)); 1872 render_text->MoveCursorTo(SelectionModel(0, CURSOR_FORWARD));
1870 } 1873 }
1871 } 1874 }
1872 1875
1873 #if defined(OS_WIN) 1876 #if defined(OS_WIN)
1877 // TODO(ckocagil): Enable for RenderTextHarfBuzz after implementing multiline.
1874 // Ensure strings wrap onto multiple lines for a small available width. 1878 // Ensure strings wrap onto multiple lines for a small available width.
1875 TEST_F(RenderTextTest, Multiline_MinWidth) { 1879 TEST_F(RenderTextTest, Multiline_MinWidth) {
1876 const wchar_t* kTestStrings[] = { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl, 1880 const wchar_t* kTestStrings[] = { kWeak, kLtr, kLtrRtl, kLtrRtlLtr, kRtl,
1877 kRtlLtr, kRtlLtrRtl }; 1881 kRtlLtr, kRtlLtrRtl };
1878 1882
1879 scoped_ptr<RenderTextWin> render_text( 1883 scoped_ptr<RenderTextWin> render_text(
1880 static_cast<RenderTextWin*>(RenderText::CreateInstance())); 1884 static_cast<RenderTextWin*>(RenderText::CreateNativeInstance()));
1881 render_text->SetDisplayRect(Rect(1, 1000)); 1885 render_text->SetDisplayRect(Rect(1, 1000));
1882 render_text->SetMultiline(true); 1886 render_text->SetMultiline(true);
1883 Canvas canvas; 1887 Canvas canvas;
1884 1888
1885 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { 1889 for (size_t i = 0; i < arraysize(kTestStrings); ++i) {
1886 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); 1890 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i));
1887 render_text->SetText(WideToUTF16(kTestStrings[i])); 1891 render_text->SetText(WideToUTF16(kTestStrings[i]));
1888 render_text->Draw(&canvas); 1892 render_text->Draw(&canvas);
1889 EXPECT_GT(render_text->lines_.size(), 1U); 1893 EXPECT_GT(render_text->lines_.size(), 1U);
1890 } 1894 }
1891 } 1895 }
1892 1896
1897 // TODO(ckocagil): Enable for RenderTextHarfBuzz after implementing multiline.
1893 // Ensure strings wrap onto multiple lines for a normal available width. 1898 // Ensure strings wrap onto multiple lines for a normal available width.
1894 TEST_F(RenderTextTest, Multiline_NormalWidth) { 1899 TEST_F(RenderTextTest, Multiline_NormalWidth) {
1895 const struct { 1900 const struct {
1896 const wchar_t* const text; 1901 const wchar_t* const text;
1897 const Range first_line_char_range; 1902 const Range first_line_char_range;
1898 const Range second_line_char_range; 1903 const Range second_line_char_range;
1899 } kTestStrings[] = { 1904 } kTestStrings[] = {
1900 { L"abc defg hijkl", Range(0, 9), Range(9, 14) }, 1905 { L"abc defg hijkl", Range(0, 9), Range(9, 14) },
1901 { L"qwertyzxcvbn", Range(0, 8), Range(8, 12) }, 1906 { L"qwertyzxcvbn", Range(0, 8), Range(8, 12) },
1902 { L"\x062A\x0641\x0627\x062D\x05EA\x05E4\x05D5\x05D6\x05D9\x05DD", 1907 { L"\x062A\x0641\x0627\x062D\x05EA\x05E4\x05D5\x05D6\x05D9\x05DD",
1903 Range(4, 10), Range(0, 4) } 1908 Range(4, 10), Range(0, 4) }
1904 }; 1909 };
1905 1910
1906 scoped_ptr<RenderTextWin> render_text( 1911 scoped_ptr<RenderTextWin> render_text(
1907 static_cast<RenderTextWin*>(RenderText::CreateInstance())); 1912 static_cast<RenderTextWin*>(RenderText::CreateNativeInstance()));
1908 render_text->SetDisplayRect(Rect(50, 1000)); 1913 render_text->SetDisplayRect(Rect(50, 1000));
1909 render_text->SetMultiline(true); 1914 render_text->SetMultiline(true);
1910 Canvas canvas; 1915 Canvas canvas;
1911 1916
1912 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestStrings); ++i) { 1917 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestStrings); ++i) {
1913 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); 1918 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i));
1914 render_text->SetText(WideToUTF16(kTestStrings[i].text)); 1919 render_text->SetText(WideToUTF16(kTestStrings[i].text));
1915 render_text->Draw(&canvas); 1920 render_text->Draw(&canvas);
1916 ASSERT_EQ(2U, render_text->lines_.size()); 1921 ASSERT_EQ(2U, render_text->lines_.size());
1917 ASSERT_EQ(1U, render_text->lines_[0].segments.size()); 1922 ASSERT_EQ(1U, render_text->lines_[0].segments.size());
1918 EXPECT_EQ(kTestStrings[i].first_line_char_range, 1923 EXPECT_EQ(kTestStrings[i].first_line_char_range,
1919 render_text->lines_[0].segments[0].char_range); 1924 render_text->lines_[0].segments[0].char_range);
1920 ASSERT_EQ(1U, render_text->lines_[1].segments.size()); 1925 ASSERT_EQ(1U, render_text->lines_[1].segments.size());
1921 EXPECT_EQ(kTestStrings[i].second_line_char_range, 1926 EXPECT_EQ(kTestStrings[i].second_line_char_range,
1922 render_text->lines_[1].segments[0].char_range); 1927 render_text->lines_[1].segments[0].char_range);
1923 } 1928 }
1924 } 1929 }
1925 1930
1931 // TODO(ckocagil): Enable for RenderTextHarfBuzz after implementing multiline.
1926 // Ensure strings don't wrap onto multiple lines for a sufficient available 1932 // Ensure strings don't wrap onto multiple lines for a sufficient available
1927 // width. 1933 // width.
1928 TEST_F(RenderTextTest, Multiline_SufficientWidth) { 1934 TEST_F(RenderTextTest, Multiline_SufficientWidth) {
1929 const wchar_t* kTestStrings[] = { L"", L" ", L".", L" . ", L"abc", L"a b c", 1935 const wchar_t* kTestStrings[] = { L"", L" ", L".", L" . ", L"abc", L"a b c",
1930 L"\x62E\x628\x632", L"\x62E \x628 \x632" }; 1936 L"\x62E\x628\x632", L"\x62E \x628 \x632" };
1931 1937
1932 scoped_ptr<RenderTextWin> render_text( 1938 scoped_ptr<RenderTextWin> render_text(
1933 static_cast<RenderTextWin*>(RenderText::CreateInstance())); 1939 static_cast<RenderTextWin*>(RenderText::CreateNativeInstance()));
1934 render_text->SetDisplayRect(Rect(30, 1000)); 1940 render_text->SetDisplayRect(Rect(30, 1000));
1935 render_text->SetMultiline(true); 1941 render_text->SetMultiline(true);
1936 Canvas canvas; 1942 Canvas canvas;
1937 1943
1938 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { 1944 for (size_t i = 0; i < arraysize(kTestStrings); ++i) {
1939 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); 1945 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i));
1940 render_text->SetText(WideToUTF16(kTestStrings[i])); 1946 render_text->SetText(WideToUTF16(kTestStrings[i]));
1941 render_text->Draw(&canvas); 1947 render_text->Draw(&canvas);
1942 EXPECT_EQ(1U, render_text->lines_.size()); 1948 EXPECT_EQ(1U, render_text->lines_.size());
1943 } 1949 }
1944 } 1950 }
1945 1951
1952 // TODO(ckocagil): Enable for RenderTextHarfBuzz after implementing multiline.
1946 TEST_F(RenderTextTest, Multiline_Newline) { 1953 TEST_F(RenderTextTest, Multiline_Newline) {
1947 const struct { 1954 const struct {
1948 const wchar_t* const text; 1955 const wchar_t* const text;
1949 // Ranges of the characters on each line preceding the newline. 1956 // Ranges of the characters on each line preceding the newline.
1950 const Range first_line_char_range; 1957 const Range first_line_char_range;
1951 const Range second_line_char_range; 1958 const Range second_line_char_range;
1952 } kTestStrings[] = { 1959 } kTestStrings[] = {
1953 { L"abc\ndef", Range(0, 3), Range(4, 7) }, 1960 { L"abc\ndef", Range(0, 3), Range(4, 7) },
1954 { L"a \n b ", Range(0, 2), Range(3, 6) }, 1961 { L"a \n b ", Range(0, 2), Range(3, 6) },
1955 { L"\n" , Range::InvalidRange(), Range::InvalidRange() } 1962 { L"\n" , Range::InvalidRange(), Range::InvalidRange() }
1956 }; 1963 };
1957 1964
1958 scoped_ptr<RenderTextWin> render_text( 1965 scoped_ptr<RenderTextWin> render_text(
1959 static_cast<RenderTextWin*>(RenderText::CreateInstance())); 1966 static_cast<RenderTextWin*>(RenderText::CreateNativeInstance()));
1960 render_text->SetDisplayRect(Rect(200, 1000)); 1967 render_text->SetDisplayRect(Rect(200, 1000));
1961 render_text->SetMultiline(true); 1968 render_text->SetMultiline(true);
1962 Canvas canvas; 1969 Canvas canvas;
1963 1970
1964 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestStrings); ++i) { 1971 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestStrings); ++i) {
1965 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i)); 1972 SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i));
1966 render_text->SetText(WideToUTF16(kTestStrings[i].text)); 1973 render_text->SetText(WideToUTF16(kTestStrings[i].text));
1967 render_text->Draw(&canvas); 1974 render_text->Draw(&canvas);
1968 1975
1969 ASSERT_EQ(2U, render_text->lines_.size()); 1976 ASSERT_EQ(2U, render_text->lines_.size());
(...skipping 12 matching lines...) Expand all
1982 1989
1983 const Range second_expected_range = kTestStrings[i].second_line_char_range; 1990 const Range second_expected_range = kTestStrings[i].second_line_char_range;
1984 ASSERT_EQ(second_expected_range.IsValid() ? 1U : 0U, 1991 ASSERT_EQ(second_expected_range.IsValid() ? 1U : 0U,
1985 render_text->lines_[1].segments.size()); 1992 render_text->lines_[1].segments.size());
1986 if (second_expected_range.IsValid()) 1993 if (second_expected_range.IsValid())
1987 EXPECT_EQ(second_expected_range, 1994 EXPECT_EQ(second_expected_range,
1988 render_text->lines_[1].segments[0].char_range); 1995 render_text->lines_[1].segments[0].char_range);
1989 } 1996 }
1990 } 1997 }
1991 1998
1992 TEST_F(RenderTextTest, Win_BreakRunsByUnicodeBlocks) { 1999 // TODO(ckocagil): Remove when RenderTextWin goes away.
2000 TEST_F(RenderTextTest, BreakRunsByUnicodeBlocks) {
1993 scoped_ptr<RenderTextWin> render_text( 2001 scoped_ptr<RenderTextWin> render_text(
1994 static_cast<RenderTextWin*>(RenderText::CreateInstance())); 2002 static_cast<RenderTextWin*>(RenderText::CreateNativeInstance()));
1995 2003
1996 // The '\x25B6' "play character" should break runs. http://crbug.com/278913 2004 // The '\x25B6' "play character" should break runs. http://crbug.com/278913
1997 render_text->SetText(WideToUTF16(L"x\x25B6y")); 2005 render_text->SetText(WideToUTF16(L"x\x25B6y"));
1998 render_text->EnsureLayout(); 2006 render_text->EnsureLayout();
1999 ASSERT_EQ(3U, render_text->runs_.size()); 2007 ASSERT_EQ(3U, render_text->runs_.size());
2000 EXPECT_EQ(Range(0, 1), render_text->runs_[0]->range); 2008 EXPECT_EQ(Range(0, 1), render_text->runs_[0]->range);
2001 EXPECT_EQ(Range(1, 2), render_text->runs_[1]->range); 2009 EXPECT_EQ(Range(1, 2), render_text->runs_[1]->range);
2002 EXPECT_EQ(Range(2, 3), render_text->runs_[2]->range); 2010 EXPECT_EQ(Range(2, 3), render_text->runs_[2]->range);
2003 2011
2004 render_text->SetText(WideToUTF16(L"x \x25B6 y")); 2012 render_text->SetText(WideToUTF16(L"x \x25B6 y"));
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
2120 for (size_t i = 0; i < arraysize(kTestStrings); ++i) { 2128 for (size_t i = 0; i < arraysize(kTestStrings); ++i) {
2121 render_text->SetText(WideToUTF16(kTestStrings[i])); 2129 render_text->SetText(WideToUTF16(kTestStrings[i]));
2122 render_text->EnsureLayout(); 2130 render_text->EnsureLayout();
2123 2131
2124 for (size_t j = 0; j < render_text->text().length(); ++j) 2132 for (size_t j = 0; j < render_text->text().length(); ++j)
2125 EXPECT_FALSE(render_text->GetGlyphBounds(j).is_empty()); 2133 EXPECT_FALSE(render_text->GetGlyphBounds(j).is_empty());
2126 } 2134 }
2127 } 2135 }
2128 2136
2129 } // namespace gfx 2137 } // namespace gfx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698