| 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 |