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 <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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |