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