Chromium Code Reviews| 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 <limits.h> | 7 #include <limits.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 276 EXPECT_EQ(expected_attr->diagonal_strike, actual_attr->diagonal_strike); | 276 EXPECT_EQ(expected_attr->diagonal_strike, actual_attr->diagonal_strike); |
| 277 EXPECT_EQ(expected_attr->font.GetFontName(), | 277 EXPECT_EQ(expected_attr->font.GetFontName(), |
| 278 actual_attr->font.GetFontName()); | 278 actual_attr->font.GetFontName()); |
| 279 EXPECT_EQ(expected_attr->font.GetFontSize(), | 279 EXPECT_EQ(expected_attr->font.GetFontSize(), |
| 280 actual_attr->font.GetFontSize()); | 280 actual_attr->font.GetFontSize()); |
| 281 EXPECT_EQ(expected_attr->font.GetWeight(), actual_attr->font.GetWeight()); | 281 EXPECT_EQ(expected_attr->font.GetWeight(), actual_attr->font.GetWeight()); |
| 282 EXPECT_EQ(expected_attr->font.GetStyle(), actual_attr->font.GetStyle()); | 282 EXPECT_EQ(expected_attr->font.GetStyle(), actual_attr->font.GetStyle()); |
| 283 } | 283 } |
| 284 } | 284 } |
| 285 | 285 |
| 286 // Helper method to return an obscured string of the given |length|, with the | |
| 287 // |reveal_index| filled with |reveal_char|. | |
| 288 base::string16 GetObscuredString(size_t length, | |
| 289 int reveal_index, | |
|
sky
2016/10/24 16:13:25
If length is going to be size_t, than make real_in
karandeepb
2016/10/25 03:31:03
Done.
| |
| 290 base::char16 reveal_char) { | |
| 291 std::vector<base::char16> arr(length, RenderText::kPasswordReplacementChar); | |
| 292 arr[reveal_index] = reveal_char; | |
| 293 return base::string16(arr.begin(), arr.end()); | |
| 294 } | |
| 295 | |
| 296 // Helper method to return an obscured string of the given |length|. | |
| 297 base::string16 GetObscuredString(size_t length) { | |
| 298 return base::string16(length, RenderText::kPasswordReplacementChar); | |
| 299 } | |
| 300 | |
| 286 // The class which records the drawing operations so that the test case can | 301 // The class which records the drawing operations so that the test case can |
| 287 // verify where exactly the glyphs are drawn. | 302 // verify where exactly the glyphs are drawn. |
| 288 class TestSkiaTextRenderer : public internal::SkiaTextRenderer { | 303 class TestSkiaTextRenderer : public internal::SkiaTextRenderer { |
| 289 public: | 304 public: |
| 290 struct TextLog { | 305 struct TextLog { |
| 291 TextLog() : glyph_count(0u), color(SK_ColorTRANSPARENT) {} | 306 TextLog() : glyph_count(0u), color(SK_ColorTRANSPARENT) {} |
| 292 PointF origin; | 307 PointF origin; |
| 293 size_t glyph_count; | 308 size_t glyph_count; |
| 294 SkColor color; | 309 SkColor color; |
| 295 }; | 310 }; |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 728 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, selection_behavior); | 743 render_text->MoveCursor(WORD_BREAK, CURSOR_RIGHT, selection_behavior); |
| 729 EXPECT_EQ(SelectionModel(Range(select ? 0 : len, len), CURSOR_FORWARD), | 744 EXPECT_EQ(SelectionModel(Range(select ? 0 : len, len), CURSOR_FORWARD), |
| 730 render_text->selection_model()); | 745 render_text->selection_model()); |
| 731 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, selection_behavior); | 746 render_text->MoveCursor(WORD_BREAK, CURSOR_LEFT, selection_behavior); |
| 732 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 747 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
| 733 } | 748 } |
| 734 | 749 |
| 735 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 | 750 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 |
| 736 TEST_P(RenderTextHarfBuzzTest, ObscuredText) { | 751 TEST_P(RenderTextHarfBuzzTest, ObscuredText) { |
| 737 const base::string16 seuss = ASCIIToUTF16("hop on pop"); | 752 const base::string16 seuss = ASCIIToUTF16("hop on pop"); |
| 738 const base::string16 no_seuss = ASCIIToUTF16("**********"); | 753 const base::string16 no_seuss = GetObscuredString(seuss.length()); |
| 739 RenderText* render_text = GetRenderText(); | 754 RenderText* render_text = GetRenderText(); |
| 740 | 755 |
| 741 // GetLayoutText() returns asterisks when the obscured bit is set. | 756 // GetDisplayText() returns a string filled with |
| 757 // RenderText::kPasswordReplacementChar when the obscured bit is set. | |
| 742 render_text->SetText(seuss); | 758 render_text->SetText(seuss); |
| 743 render_text->SetObscured(true); | 759 render_text->SetObscured(true); |
| 744 EXPECT_EQ(seuss, render_text->text()); | 760 EXPECT_EQ(seuss, render_text->text()); |
| 745 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); | 761 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); |
| 746 render_text->SetObscured(false); | 762 render_text->SetObscured(false); |
| 747 EXPECT_EQ(seuss, render_text->text()); | 763 EXPECT_EQ(seuss, render_text->text()); |
| 748 EXPECT_EQ(seuss, render_text->GetDisplayText()); | 764 EXPECT_EQ(seuss, render_text->GetDisplayText()); |
| 749 | 765 |
| 750 render_text->SetObscured(true); | 766 render_text->SetObscured(true); |
| 751 | 767 |
| 752 // Surrogate pairs are counted as one code point. | 768 // Surrogate pairs are counted as one code point. |
| 753 const base::char16 invalid_surrogates[] = {0xDC00, 0xD800, 0}; | 769 const base::char16 invalid_surrogates[] = {0xDC00, 0xD800, 0}; |
| 754 render_text->SetText(invalid_surrogates); | 770 render_text->SetText(invalid_surrogates); |
| 755 EXPECT_EQ(ASCIIToUTF16("**"), render_text->GetDisplayText()); | 771 EXPECT_EQ(GetObscuredString(2), render_text->GetDisplayText()); |
| 756 const base::char16 valid_surrogates[] = {0xD800, 0xDC00, 0}; | 772 const base::char16 valid_surrogates[] = {0xD800, 0xDC00, 0}; |
| 757 render_text->SetText(valid_surrogates); | 773 render_text->SetText(valid_surrogates); |
| 758 EXPECT_EQ(ASCIIToUTF16("*"), render_text->GetDisplayText()); | 774 EXPECT_EQ(GetObscuredString(1), render_text->GetDisplayText()); |
| 759 EXPECT_EQ(0U, render_text->cursor_position()); | 775 EXPECT_EQ(0U, render_text->cursor_position()); |
| 760 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, SELECTION_NONE); | 776 render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, SELECTION_NONE); |
| 761 EXPECT_EQ(2U, render_text->cursor_position()); | 777 EXPECT_EQ(2U, render_text->cursor_position()); |
| 762 | 778 |
| 763 // Test index conversion and cursor validity with a valid surrogate pair. | 779 // Test index conversion and cursor validity with a valid surrogate pair. |
| 764 EXPECT_EQ(0U, test_api()->TextIndexToDisplayIndex(0U)); | 780 EXPECT_EQ(0U, test_api()->TextIndexToDisplayIndex(0U)); |
| 765 EXPECT_EQ(1U, test_api()->TextIndexToDisplayIndex(1U)); | 781 EXPECT_EQ(1U, test_api()->TextIndexToDisplayIndex(1U)); |
| 766 EXPECT_EQ(1U, test_api()->TextIndexToDisplayIndex(2U)); | 782 EXPECT_EQ(1U, test_api()->TextIndexToDisplayIndex(2U)); |
| 767 EXPECT_EQ(0U, test_api()->DisplayIndexToTextIndex(0U)); | 783 EXPECT_EQ(0U, test_api()->DisplayIndexToTextIndex(0U)); |
| 768 EXPECT_EQ(2U, test_api()->DisplayIndexToTextIndex(1U)); | 784 EXPECT_EQ(2U, test_api()->DisplayIndexToTextIndex(1U)); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 791 }; | 807 }; |
| 792 for (size_t i = 0; i < arraysize(texts); ++i) { | 808 for (size_t i = 0; i < arraysize(texts); ++i) { |
| 793 base::string16 text = WideToUTF16(texts[i]); | 809 base::string16 text = WideToUTF16(texts[i]); |
| 794 TestVisualCursorMotionInObscuredField(render_text, text, SELECTION_NONE); | 810 TestVisualCursorMotionInObscuredField(render_text, text, SELECTION_NONE); |
| 795 TestVisualCursorMotionInObscuredField(render_text, text, SELECTION_RETAIN); | 811 TestVisualCursorMotionInObscuredField(render_text, text, SELECTION_RETAIN); |
| 796 } | 812 } |
| 797 } | 813 } |
| 798 | 814 |
| 799 TEST_P(RenderTextTest, RevealObscuredText) { | 815 TEST_P(RenderTextTest, RevealObscuredText) { |
| 800 const base::string16 seuss = ASCIIToUTF16("hop on pop"); | 816 const base::string16 seuss = ASCIIToUTF16("hop on pop"); |
| 801 const base::string16 no_seuss = ASCIIToUTF16("**********"); | 817 const base::string16 no_seuss = GetObscuredString(seuss.length()); |
| 802 RenderText* render_text = GetRenderText(); | 818 RenderText* render_text = GetRenderText(); |
| 803 | 819 |
| 804 render_text->SetText(seuss); | 820 render_text->SetText(seuss); |
| 805 render_text->SetObscured(true); | 821 render_text->SetObscured(true); |
| 806 EXPECT_EQ(seuss, render_text->text()); | 822 EXPECT_EQ(seuss, render_text->text()); |
| 807 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); | 823 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); |
| 808 | 824 |
| 809 // Valid reveal index and new revealed index clears previous one. | 825 // Valid reveal index and new revealed index clears previous one. |
| 810 render_text->RenderText::SetObscuredRevealIndex(0); | 826 render_text->RenderText::SetObscuredRevealIndex(0); |
| 811 EXPECT_EQ(ASCIIToUTF16("h*********"), render_text->GetDisplayText()); | 827 EXPECT_EQ(GetObscuredString(seuss.length(), 0, 'h'), |
| 828 render_text->GetDisplayText()); | |
| 812 render_text->RenderText::SetObscuredRevealIndex(1); | 829 render_text->RenderText::SetObscuredRevealIndex(1); |
| 813 EXPECT_EQ(ASCIIToUTF16("*o********"), render_text->GetDisplayText()); | 830 EXPECT_EQ(GetObscuredString(seuss.length(), 1, 'o'), |
| 831 render_text->GetDisplayText()); | |
| 814 render_text->RenderText::SetObscuredRevealIndex(2); | 832 render_text->RenderText::SetObscuredRevealIndex(2); |
| 815 EXPECT_EQ(ASCIIToUTF16("**p*******"), render_text->GetDisplayText()); | 833 EXPECT_EQ(GetObscuredString(seuss.length(), 2, 'p'), |
| 834 render_text->GetDisplayText()); | |
| 816 | 835 |
| 817 // Invalid reveal index. | 836 // Invalid reveal index. |
| 818 render_text->RenderText::SetObscuredRevealIndex(-1); | 837 render_text->RenderText::SetObscuredRevealIndex(-1); |
| 819 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); | 838 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); |
| 820 render_text->RenderText::SetObscuredRevealIndex(seuss.length() + 1); | 839 render_text->RenderText::SetObscuredRevealIndex(seuss.length() + 1); |
| 821 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); | 840 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); |
| 822 | 841 |
| 823 // SetObscured clears the revealed index. | 842 // SetObscured clears the revealed index. |
| 824 render_text->RenderText::SetObscuredRevealIndex(0); | 843 render_text->RenderText::SetObscuredRevealIndex(0); |
| 825 EXPECT_EQ(ASCIIToUTF16("h*********"), render_text->GetDisplayText()); | 844 EXPECT_EQ(GetObscuredString(seuss.length(), 0, 'h'), |
| 845 render_text->GetDisplayText()); | |
| 826 render_text->SetObscured(false); | 846 render_text->SetObscured(false); |
| 827 EXPECT_EQ(seuss, render_text->GetDisplayText()); | 847 EXPECT_EQ(seuss, render_text->GetDisplayText()); |
| 828 render_text->SetObscured(true); | 848 render_text->SetObscured(true); |
| 829 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); | 849 EXPECT_EQ(no_seuss, render_text->GetDisplayText()); |
| 830 | 850 |
| 831 // SetText clears the revealed index. | 851 // SetText clears the revealed index. |
| 832 render_text->SetText(ASCIIToUTF16("new")); | 852 render_text->SetText(ASCIIToUTF16("new")); |
| 833 EXPECT_EQ(ASCIIToUTF16("***"), render_text->GetDisplayText()); | 853 EXPECT_EQ(GetObscuredString(3), render_text->GetDisplayText()); |
| 834 render_text->RenderText::SetObscuredRevealIndex(2); | 854 render_text->RenderText::SetObscuredRevealIndex(2); |
| 835 EXPECT_EQ(ASCIIToUTF16("**w"), render_text->GetDisplayText()); | 855 EXPECT_EQ(GetObscuredString(3, 2, 'w'), render_text->GetDisplayText()); |
| 836 render_text->SetText(ASCIIToUTF16("new longer")); | 856 render_text->SetText(ASCIIToUTF16("new longer")); |
| 837 EXPECT_EQ(ASCIIToUTF16("**********"), render_text->GetDisplayText()); | 857 EXPECT_EQ(GetObscuredString(10), render_text->GetDisplayText()); |
| 838 | 858 |
| 839 // Text with invalid surrogates. | 859 // Text with invalid surrogates. |
| 840 const base::char16 invalid_surrogates[] = {0xDC00, 0xD800, 'h', 'o', 'p', 0}; | 860 const base::char16 invalid_surrogates[] = {0xDC00, 0xD800, 'h', 'o', 'p', 0}; |
| 841 render_text->SetText(invalid_surrogates); | 861 render_text->SetText(invalid_surrogates); |
| 842 EXPECT_EQ(ASCIIToUTF16("*****"), render_text->GetDisplayText()); | 862 EXPECT_EQ(GetObscuredString(5), render_text->GetDisplayText()); |
| 843 render_text->RenderText::SetObscuredRevealIndex(0); | 863 render_text->RenderText::SetObscuredRevealIndex(0); |
| 844 const base::char16 invalid_expect_0[] = {0xDC00, '*', '*', '*', '*', 0}; | 864 EXPECT_EQ(GetObscuredString(5, 0, 0xDC00), render_text->GetDisplayText()); |
| 845 EXPECT_EQ(invalid_expect_0, render_text->GetDisplayText()); | |
| 846 render_text->RenderText::SetObscuredRevealIndex(1); | 865 render_text->RenderText::SetObscuredRevealIndex(1); |
| 847 const base::char16 invalid_expect_1[] = {'*', 0xD800, '*', '*', '*', 0}; | 866 EXPECT_EQ(GetObscuredString(5, 1, 0xD800), render_text->GetDisplayText()); |
| 848 EXPECT_EQ(invalid_expect_1, render_text->GetDisplayText()); | |
| 849 render_text->RenderText::SetObscuredRevealIndex(2); | 867 render_text->RenderText::SetObscuredRevealIndex(2); |
| 850 EXPECT_EQ(ASCIIToUTF16("**h**"), render_text->GetDisplayText()); | 868 EXPECT_EQ(GetObscuredString(5, 2, 'h'), render_text->GetDisplayText()); |
| 851 | 869 |
| 852 // Text with valid surrogates before and after the reveal index. | 870 // Text with valid surrogates before and after the reveal index. |
| 853 const base::char16 valid_surrogates[] = | 871 const base::char16 valid_surrogates[] = |
| 854 {0xD800, 0xDC00, 'h', 'o', 'p', 0xD800, 0xDC00, 0}; | 872 {0xD800, 0xDC00, 'h', 'o', 'p', 0xD800, 0xDC00, 0}; |
| 855 render_text->SetText(valid_surrogates); | 873 render_text->SetText(valid_surrogates); |
| 856 EXPECT_EQ(ASCIIToUTF16("*****"), render_text->GetDisplayText()); | 874 EXPECT_EQ(GetObscuredString(5), render_text->GetDisplayText()); |
| 857 render_text->RenderText::SetObscuredRevealIndex(0); | 875 render_text->RenderText::SetObscuredRevealIndex(0); |
| 858 const base::char16 valid_expect_0_and_1[] = | 876 const base::char16 valid_expect_0_and_1[] = { |
| 859 {0xD800, 0xDC00, '*', '*', '*', '*', 0}; | 877 0xD800, |
| 878 0xDC00, | |
| 879 RenderText::kPasswordReplacementChar, | |
| 880 RenderText::kPasswordReplacementChar, | |
| 881 RenderText::kPasswordReplacementChar, | |
| 882 RenderText::kPasswordReplacementChar, | |
| 883 0}; | |
| 860 EXPECT_EQ(valid_expect_0_and_1, render_text->GetDisplayText()); | 884 EXPECT_EQ(valid_expect_0_and_1, render_text->GetDisplayText()); |
| 861 render_text->RenderText::SetObscuredRevealIndex(1); | 885 render_text->RenderText::SetObscuredRevealIndex(1); |
| 862 EXPECT_EQ(valid_expect_0_and_1, render_text->GetDisplayText()); | 886 EXPECT_EQ(valid_expect_0_and_1, render_text->GetDisplayText()); |
| 863 render_text->RenderText::SetObscuredRevealIndex(2); | 887 render_text->RenderText::SetObscuredRevealIndex(2); |
| 864 EXPECT_EQ(ASCIIToUTF16("*h***"), render_text->GetDisplayText()); | 888 EXPECT_EQ(GetObscuredString(5, 1, 'h'), render_text->GetDisplayText()); |
| 865 render_text->RenderText::SetObscuredRevealIndex(5); | 889 render_text->RenderText::SetObscuredRevealIndex(5); |
| 866 const base::char16 valid_expect_5_and_6[] = | 890 const base::char16 valid_expect_5_and_6[] = { |
| 867 {'*', '*', '*', '*', 0xD800, 0xDC00, 0}; | 891 RenderText::kPasswordReplacementChar, |
| 892 RenderText::kPasswordReplacementChar, | |
| 893 RenderText::kPasswordReplacementChar, | |
| 894 RenderText::kPasswordReplacementChar, | |
| 895 0xD800, | |
| 896 0xDC00, | |
| 897 0}; | |
| 868 EXPECT_EQ(valid_expect_5_and_6, render_text->GetDisplayText()); | 898 EXPECT_EQ(valid_expect_5_and_6, render_text->GetDisplayText()); |
| 869 render_text->RenderText::SetObscuredRevealIndex(6); | 899 render_text->RenderText::SetObscuredRevealIndex(6); |
| 870 EXPECT_EQ(valid_expect_5_and_6, render_text->GetDisplayText()); | 900 EXPECT_EQ(valid_expect_5_and_6, render_text->GetDisplayText()); |
| 871 } | 901 } |
| 872 | 902 |
| 873 TEST_P(RenderTextTest, ObscuredEmoji) { | 903 TEST_P(RenderTextTest, ObscuredEmoji) { |
| 874 // Ensures text itemization doesn't crash on obscured multi-char glyphs. | 904 // Ensures text itemization doesn't crash on obscured multi-char glyphs. |
| 875 RenderText* render_text = GetRenderText(); | 905 RenderText* render_text = GetRenderText(); |
| 876 render_text->SetObscured(true); | 906 render_text->SetObscured(true); |
| 877 // Test the "Grinning face with smiling eyes" character followed by 'y'. | 907 // Test the "Grinning face with smiling eyes" character followed by 'y'. |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1096 << "For case " << i << ": " << cases[i].text; | 1126 << "For case " << i << ": " << cases[i].text; |
| 1097 } | 1127 } |
| 1098 } | 1128 } |
| 1099 | 1129 |
| 1100 TEST_P(RenderTextTest, TruncatedObscuredText) { | 1130 TEST_P(RenderTextTest, TruncatedObscuredText) { |
| 1101 RenderText* render_text = GetRenderText(); | 1131 RenderText* render_text = GetRenderText(); |
| 1102 render_text->set_truncate_length(3); | 1132 render_text->set_truncate_length(3); |
| 1103 render_text->SetObscured(true); | 1133 render_text->SetObscured(true); |
| 1104 render_text->SetText(WideToUTF16(L"abcdef")); | 1134 render_text->SetText(WideToUTF16(L"abcdef")); |
| 1105 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text()); | 1135 EXPECT_EQ(WideToUTF16(L"abcdef"), render_text->text()); |
| 1106 EXPECT_EQ(WideToUTF16(L"**\x2026"), render_text->GetDisplayText()); | 1136 EXPECT_EQ(GetObscuredString(3, 2, 0x2026), render_text->GetDisplayText()); |
| 1107 } | 1137 } |
| 1108 | 1138 |
| 1109 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 | 1139 // TODO(asvitkine): RenderTextMac cursor movements. http://crbug.com/131618 |
| 1110 TEST_P(RenderTextHarfBuzzTest, TruncatedCursorMovementLTR) { | 1140 TEST_P(RenderTextHarfBuzzTest, TruncatedCursorMovementLTR) { |
| 1111 RenderText* render_text = GetRenderText(); | 1141 RenderText* render_text = GetRenderText(); |
| 1112 render_text->set_truncate_length(2); | 1142 render_text->set_truncate_length(2); |
| 1113 render_text->SetText(WideToUTF16(L"abcd")); | 1143 render_text->SetText(WideToUTF16(L"abcd")); |
| 1114 | 1144 |
| 1115 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); | 1145 EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); |
| 1116 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, SELECTION_NONE); | 1146 render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, SELECTION_NONE); |
| (...skipping 2947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4064 ::testing::Values(RENDER_TEXT_HARFBUZZ), | 4094 ::testing::Values(RENDER_TEXT_HARFBUZZ), |
| 4065 PrintRenderTextBackend()); | 4095 PrintRenderTextBackend()); |
| 4066 #endif | 4096 #endif |
| 4067 | 4097 |
| 4068 INSTANTIATE_TEST_CASE_P(, | 4098 INSTANTIATE_TEST_CASE_P(, |
| 4069 RenderTextHarfBuzzTest, | 4099 RenderTextHarfBuzzTest, |
| 4070 ::testing::Values(RENDER_TEXT_HARFBUZZ), | 4100 ::testing::Values(RENDER_TEXT_HARFBUZZ), |
| 4071 PrintRenderTextBackend()); | 4101 PrintRenderTextBackend()); |
| 4072 | 4102 |
| 4073 } // namespace gfx | 4103 } // namespace gfx |
| OLD | NEW |