OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/base/ime/composition_text_util_pango.h" | 5 #include "ui/base/ime/composition_text_util_pango.h" |
6 | 6 |
7 #include <pango/pango-attributes.h> | 7 #include <pango/pango-attributes.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 10 matching lines...) Expand all Loading... |
21 int value; | 21 int value; |
22 int start_offset; | 22 int start_offset; |
23 int end_offset; | 23 int end_offset; |
24 }; | 24 }; |
25 | 25 |
26 struct Underline { | 26 struct Underline { |
27 unsigned start_offset; | 27 unsigned start_offset; |
28 unsigned end_offset; | 28 unsigned end_offset; |
29 uint32 color; | 29 uint32 color; |
30 bool thick; | 30 bool thick; |
| 31 uint32 background_color; |
31 }; | 32 }; |
32 | 33 |
33 struct TestData { | 34 struct TestData { |
34 const char* text; | 35 const char* text; |
35 const AttributeInfo attrs[10]; | 36 const AttributeInfo attrs[10]; |
36 const Underline underlines[10]; | 37 const Underline underlines[10]; |
37 }; | 38 }; |
38 | 39 |
39 const TestData kTestData[] = { | 40 const TestData kTestData[] = { |
40 // Normal case | 41 // Normal case |
41 { "One Two Three", | 42 {"One Two Three", |
42 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, | 43 {{PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3}, |
43 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_DOUBLE, 4, 7 }, | 44 {PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_DOUBLE, 4, 7}, |
44 { PANGO_ATTR_BACKGROUND, 0, 4, 7 }, | 45 {PANGO_ATTR_BACKGROUND, 0, 4, 7}, |
45 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 13 }, | 46 {PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 13}, |
46 { 0, 0, 0, 0 } }, | 47 {0, 0, 0, 0}}, |
47 { { 0, 3, SK_ColorBLACK, false }, | 48 {{0, 3, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
48 { 4, 7, SK_ColorBLACK, true }, | 49 {4, 7, SK_ColorBLACK, true, SK_ColorTRANSPARENT}, |
49 { 8, 13, SK_ColorBLACK, false }, | 50 {8, 13, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
50 { 0, 0, 0, false } } | 51 {0, 0, 0, false, SK_ColorTRANSPARENT}}}, |
51 }, | |
52 | 52 |
53 // Offset overflow. | 53 // Offset overflow. |
54 { "One Two Three", | 54 {"One Two Three", |
55 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, | 55 {{PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3}, |
56 { PANGO_ATTR_BACKGROUND, 0, 4, 7 }, | 56 {PANGO_ATTR_BACKGROUND, 0, 4, 7}, |
57 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 20 }, | 57 {PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 20}, |
58 { 0, 0, 0, 0 } }, | 58 {0, 0, 0, 0}}, |
59 { { 0, 3, SK_ColorBLACK, false }, | 59 {{0, 3, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
60 { 4, 7, SK_ColorBLACK, true }, | 60 {4, 7, SK_ColorBLACK, true, SK_ColorTRANSPARENT}, |
61 { 8, 13, SK_ColorBLACK, false }, | 61 {8, 13, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
62 { 0, 0, 0, false} } | 62 {0, 0, 0, false, SK_ColorTRANSPARENT}}}, |
63 }, | |
64 | 63 |
65 // Error underline. | 64 // Error underline. |
66 { "One Two Three", | 65 {"One Two Three", |
67 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, | 66 {{PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3}, |
68 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_ERROR, 4, 7 }, | 67 {PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_ERROR, 4, 7}, |
69 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 13 }, | 68 {PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 13}, |
70 { 0, 0, 0, 0 } }, | 69 {0, 0, 0, 0}}, |
71 { { 0, 3, SK_ColorBLACK, false }, | 70 {{0, 3, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
72 { 4, 7, SK_ColorRED, false }, | 71 {4, 7, SK_ColorRED, false, SK_ColorTRANSPARENT}, |
73 { 8, 13, SK_ColorBLACK, false }, | 72 {8, 13, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
74 { 0, 0, 0, false} } | 73 {0, 0, 0, false, SK_ColorTRANSPARENT}}}, |
75 }, | |
76 | 74 |
77 // Default underline. | 75 // Default underline. |
78 { "One Two Three", | 76 {"One Two Three", |
79 { { 0, 0, 0, 0 } }, | 77 {{0, 0, 0, 0}}, |
80 { { 0, 13, SK_ColorBLACK, false }, | 78 {{0, 13, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
81 { 0, 0, 0, false } } | 79 {0, 0, 0, false, SK_ColorTRANSPARENT}}}, |
82 }, | |
83 | 80 |
84 // Unicode, including non-BMP characters: "123你好𠀀𠀁一丁 456" | 81 // Unicode, including non-BMP characters: "123你好𠀀𠀁一丁 456" |
85 { "123\xE4\xBD\xA0\xE5\xA5\xBD\xF0\xA0\x80\x80\xF0\xA0\x80\x81\xE4\xB8\x80" | 82 {"123\xE4\xBD\xA0\xE5\xA5\xBD\xF0\xA0\x80\x80\xF0\xA0\x80\x81\xE4\xB8\x80" |
86 "\xE4\xB8\x81 456", | 83 "\xE4\xB8\x81 456", |
87 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, | 84 {{PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3}, |
88 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 3, 5 }, | 85 {PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 3, 5}, |
89 { PANGO_ATTR_BACKGROUND, 0, 5, 7 }, | 86 {PANGO_ATTR_BACKGROUND, 0, 5, 7}, |
90 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 7, 13 }, | 87 {PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 7, 13}, |
91 { 0, 0, 0, 0 } }, | 88 {0, 0, 0, 0}}, |
92 { { 0, 3, SK_ColorBLACK, false }, | 89 {{0, 3, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
93 { 3, 5, SK_ColorBLACK, false }, | 90 {3, 5, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
94 { 5, 9, SK_ColorBLACK, true }, | 91 {5, 9, SK_ColorBLACK, true, SK_ColorTRANSPARENT}, |
95 { 9, 15, SK_ColorBLACK, false }, | 92 {9, 15, SK_ColorBLACK, false, SK_ColorTRANSPARENT}, |
96 { 0, 0, 0, false } } | 93 {0, 0, 0, false, SK_ColorTRANSPARENT}}}, |
97 }, | |
98 }; | 94 }; |
99 | 95 |
100 void CompareUnderline(const Underline& a, | 96 void CompareUnderline(const Underline& a, |
101 const ui::CompositionUnderline& b) { | 97 const ui::CompositionUnderline& b) { |
102 EXPECT_EQ(a.start_offset, b.start_offset); | 98 EXPECT_EQ(a.start_offset, b.start_offset); |
103 EXPECT_EQ(a.end_offset, b.end_offset); | 99 EXPECT_EQ(a.end_offset, b.end_offset); |
104 EXPECT_EQ(a.color, b.color); | 100 EXPECT_EQ(a.color, b.color); |
105 EXPECT_EQ(a.thick, b.thick); | 101 EXPECT_EQ(a.thick, b.thick); |
| 102 EXPECT_EQ(a.background_color, b.background_color); |
106 } | 103 } |
107 | 104 |
108 TEST(CompositionTextUtilPangoTest, ExtractCompositionText) { | 105 TEST(CompositionTextUtilPangoTest, ExtractCompositionText) { |
109 for (size_t i = 0; i < arraysize(kTestData); ++i) { | 106 for (size_t i = 0; i < arraysize(kTestData); ++i) { |
110 const char* text = kTestData[i].text; | 107 const char* text = kTestData[i].text; |
111 const AttributeInfo* attrs = kTestData[i].attrs; | 108 const AttributeInfo* attrs = kTestData[i].attrs; |
112 SCOPED_TRACE(testing::Message() << "Testing:" << i | 109 SCOPED_TRACE(testing::Message() << "Testing:" << i |
113 << " text:" << text); | 110 << " text:" << text); |
114 | 111 |
115 PangoAttrList* pango_attrs = pango_attr_list_new(); | 112 PangoAttrList* pango_attrs = pango_attr_list_new(); |
(...skipping 25 matching lines...) Expand all Loading... |
141 u < result.underlines.size(); ++u) { | 138 u < result.underlines.size(); ++u) { |
142 SCOPED_TRACE(testing::Message() << "Underline:" << u); | 139 SCOPED_TRACE(testing::Message() << "Underline:" << u); |
143 CompareUnderline(underlines[u], result.underlines[u]); | 140 CompareUnderline(underlines[u], result.underlines[u]); |
144 } | 141 } |
145 | 142 |
146 pango_attr_list_unref(pango_attrs); | 143 pango_attr_list_unref(pango_attrs); |
147 } | 144 } |
148 } | 145 } |
149 | 146 |
150 } // namespace | 147 } // namespace |
OLD | NEW |