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