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 |
53 // Offset overflow. | 54 // Offset overflow. |
54 { "One Two Three", | 55 { "One Two Three", |
55 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, | 56 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, |
56 { PANGO_ATTR_BACKGROUND, 0, 4, 7 }, | 57 { PANGO_ATTR_BACKGROUND, 0, 4, 7 }, |
57 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 20 }, | 58 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 20 }, |
58 { 0, 0, 0, 0 } }, | 59 { 0, 0, 0, 0 } }, |
59 { { 0, 3, SK_ColorBLACK, false }, | 60 { { 0, 3, SK_ColorBLACK, false, SK_ColorTRANSPARENT }, |
60 { 4, 7, SK_ColorBLACK, true }, | 61 { 4, 7, SK_ColorBLACK, true, SK_ColorTRANSPARENT }, |
61 { 8, 13, SK_ColorBLACK, false }, | 62 { 8, 13, SK_ColorBLACK, false, SK_ColorTRANSPARENT }, |
62 { 0, 0, 0, false} } | 63 { 0, 0, 0, false, SK_ColorTRANSPARENT} } |
63 }, | 64 }, |
64 | 65 |
65 // Error underline. | 66 // Error underline. |
66 { "One Two Three", | 67 { "One Two Three", |
67 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, | 68 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, |
68 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_ERROR, 4, 7 }, | 69 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_ERROR, 4, 7 }, |
69 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 13 }, | 70 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 8, 13 }, |
70 { 0, 0, 0, 0 } }, | 71 { 0, 0, 0, 0 } }, |
71 { { 0, 3, SK_ColorBLACK, false }, | 72 { { 0, 3, SK_ColorBLACK, false, SK_ColorTRANSPARENT }, |
72 { 4, 7, SK_ColorRED, false }, | 73 { 4, 7, SK_ColorRED, false, SK_ColorTRANSPARENT }, |
73 { 8, 13, SK_ColorBLACK, false }, | 74 { 8, 13, SK_ColorBLACK, false, SK_ColorTRANSPARENT }, |
74 { 0, 0, 0, false} } | 75 { 0, 0, 0, false, SK_ColorTRANSPARENT} } |
75 }, | 76 }, |
76 | 77 |
77 // Default underline. | 78 // Default underline. |
78 { "One Two Three", | 79 { "One Two Three", |
79 { { 0, 0, 0, 0 } }, | 80 { { 0, 0, 0, 0 } }, |
80 { { 0, 13, SK_ColorBLACK, false }, | 81 { { 0, 13, SK_ColorBLACK, false, SK_ColorTRANSPARENT }, |
81 { 0, 0, 0, false } } | 82 { 0, 0, 0, false, SK_ColorTRANSPARENT } } |
82 }, | 83 }, |
83 | 84 |
84 // Unicode, including non-BMP characters: "123你好𠀀𠀁一丁 456" | 85 // 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" | 86 { "123\xE4\xBD\xA0\xE5\xA5\xBD\xF0\xA0\x80\x80\xF0\xA0\x80\x81\xE4\xB8\x80" |
86 "\xE4\xB8\x81 456", | 87 "\xE4\xB8\x81 456", |
87 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, | 88 { { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 0, 3 }, |
88 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 3, 5 }, | 89 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 3, 5 }, |
89 { PANGO_ATTR_BACKGROUND, 0, 5, 7 }, | 90 { PANGO_ATTR_BACKGROUND, 0, 5, 7 }, |
90 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 7, 13 }, | 91 { PANGO_ATTR_UNDERLINE, PANGO_UNDERLINE_SINGLE, 7, 13 }, |
91 { 0, 0, 0, 0 } }, | 92 { 0, 0, 0, 0 } }, |
92 { { 0, 3, SK_ColorBLACK, false }, | 93 { { 0, 3, SK_ColorBLACK, false, SK_ColorTRANSPARENT }, |
93 { 3, 5, SK_ColorBLACK, false }, | 94 { 3, 5, SK_ColorBLACK, false, SK_ColorTRANSPARENT }, |
94 { 5, 9, SK_ColorBLACK, true }, | 95 { 5, 9, SK_ColorBLACK, true, SK_ColorTRANSPARENT }, |
95 { 9, 15, SK_ColorBLACK, false }, | 96 { 9, 15, SK_ColorBLACK, false, SK_ColorTRANSPARENT }, |
96 { 0, 0, 0, false } } | 97 { 0, 0, 0, false, SK_ColorTRANSPARENT } } |
97 }, | 98 }, |
98 }; | 99 }; |
99 | 100 |
100 void CompareUnderline(const Underline& a, | 101 void CompareUnderline(const Underline& a, |
101 const ui::CompositionUnderline& b) { | 102 const ui::CompositionUnderline& b) { |
102 EXPECT_EQ(a.start_offset, b.start_offset); | 103 EXPECT_EQ(a.start_offset, b.start_offset); |
103 EXPECT_EQ(a.end_offset, b.end_offset); | 104 EXPECT_EQ(a.end_offset, b.end_offset); |
104 EXPECT_EQ(a.color, b.color); | 105 EXPECT_EQ(a.color, b.color); |
105 EXPECT_EQ(a.thick, b.thick); | 106 EXPECT_EQ(a.thick, b.thick); |
| 107 EXPECT_EQ(a.background_color, b.background_color); |
106 } | 108 } |
107 | 109 |
108 TEST(CompositionTextUtilPangoTest, ExtractCompositionText) { | 110 TEST(CompositionTextUtilPangoTest, ExtractCompositionText) { |
109 for (size_t i = 0; i < arraysize(kTestData); ++i) { | 111 for (size_t i = 0; i < arraysize(kTestData); ++i) { |
110 const char* text = kTestData[i].text; | 112 const char* text = kTestData[i].text; |
111 const AttributeInfo* attrs = kTestData[i].attrs; | 113 const AttributeInfo* attrs = kTestData[i].attrs; |
112 SCOPED_TRACE(testing::Message() << "Testing:" << i | 114 SCOPED_TRACE(testing::Message() << "Testing:" << i |
113 << " text:" << text); | 115 << " text:" << text); |
114 | 116 |
115 PangoAttrList* pango_attrs = pango_attr_list_new(); | 117 PangoAttrList* pango_attrs = pango_attr_list_new(); |
(...skipping 25 matching lines...) Expand all Loading... |
141 u < result.underlines.size(); ++u) { | 143 u < result.underlines.size(); ++u) { |
142 SCOPED_TRACE(testing::Message() << "Underline:" << u); | 144 SCOPED_TRACE(testing::Message() << "Underline:" << u); |
143 CompareUnderline(underlines[u], result.underlines[u]); | 145 CompareUnderline(underlines[u], result.underlines[u]); |
144 } | 146 } |
145 | 147 |
146 pango_attr_list_unref(pango_attrs); | 148 pango_attr_list_unref(pango_attrs); |
147 } | 149 } |
148 } | 150 } |
149 | 151 |
150 } // namespace | 152 } // namespace |
OLD | NEW |