| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 UChar midway[1]; | 40 UChar midway[1]; |
| 41 UChar end[1]; | 41 UChar end[1]; |
| 42 UChar above[1]; | 42 UChar above[1]; |
| 43 | 43 |
| 44 below[0] = rangeStart - 1; | 44 below[0] = rangeStart - 1; |
| 45 start[0] = rangeStart; | 45 start[0] = rangeStart; |
| 46 midway[0] = ((int)rangeStart + (int)rangeEnd) / 2; | 46 midway[0] = ((int)rangeStart + (int)rangeEnd) / 2; |
| 47 end[0] = rangeEnd; | 47 end[0] = rangeEnd; |
| 48 above[0] = rangeEnd + 1; | 48 above[0] = rangeEnd + 1; |
| 49 | 49 |
| 50 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(below, 1)); | 50 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(below, 1)); |
| 51 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(start, 1)); | 51 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(start, 1)); |
| 52 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(midway, 1)); | 52 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(midway, 1)); |
| 53 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(end, 1)); | 53 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(end, 1)); |
| 54 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(above, 1)); | 54 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(above, 1)); |
| 55 } | 55 } |
| 56 | 56 |
| 57 TEST(FontTest, TestCharacterRangeCodePath) | 57 TEST(FontTest, TestCharacterRangeCodePath) |
| 58 { | 58 { |
| 59 static UChar c1[] = { 0x0 }; | 59 static UChar c1[] = { 0x0 }; |
| 60 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c1, 1)); | 60 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c1, 1)); |
| 61 | 61 |
| 62 TestSpecificUCharRange(0x2E5, 0x2E9); | 62 TestSpecificUCharRange(0x2E5, 0x2E9); |
| 63 TestSpecificUCharRange(0x300, 0x36F); | 63 TestSpecificUCharRange(0x300, 0x36F); |
| 64 TestSpecificUCharRange(0x0591, 0x05BD); | 64 TestSpecificUCharRange(0x0591, 0x05BD); |
| 65 TestSpecificUCharRange(0x05BF, 0x05CF); | 65 TestSpecificUCharRange(0x05BF, 0x05CF); |
| 66 TestSpecificUCharRange(0x0600, 0x109F); | 66 TestSpecificUCharRange(0x0600, 0x109F); |
| 67 TestSpecificUCharRange(0x1100, 0x11FF); | 67 TestSpecificUCharRange(0x1100, 0x11FF); |
| 68 TestSpecificUCharRange(0x135D, 0x135F); | 68 TestSpecificUCharRange(0x135D, 0x135F); |
| 69 TestSpecificUCharRange(0x1700, 0x18AF); | 69 TestSpecificUCharRange(0x1700, 0x18AF); |
| 70 TestSpecificUCharRange(0x1900, 0x194F); | 70 TestSpecificUCharRange(0x1900, 0x194F); |
| 71 TestSpecificUCharRange(0x1980, 0x19DF); | 71 TestSpecificUCharRange(0x1980, 0x19DF); |
| 72 TestSpecificUCharRange(0x1A00, 0x1CFF); | 72 TestSpecificUCharRange(0x1A00, 0x1CFF); |
| 73 | 73 |
| 74 static UChar c2[] = { 0x1DBF }; | 74 static UChar c2[] = { 0x1DBF }; |
| 75 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c2, 1)); | 75 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c2, 1)); |
| 76 static UChar c3[] = { 0x1DC0 }; | 76 static UChar c3[] = { 0x1DC0 }; |
| 77 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c3, 1)); | 77 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c3, 1)); |
| 78 static UChar c4[] = { 0x1DD0 }; | 78 static UChar c4[] = { 0x1DD0 }; |
| 79 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c4, 1)); | 79 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c4, 1)); |
| 80 static UChar c5[] = { 0x1DFF }; | 80 static UChar c5[] = { 0x1DFF }; |
| 81 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c5, 1)); | 81 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c5, 1)); |
| 82 static UChar c6[] = { 0x1E00 }; | 82 static UChar c6[] = { 0x1E00 }; |
| 83 EXPECT_EQ(Font::SimpleWithGlyphOverflow, Font::characterRangeCodePath(c6, 1)
); | 83 EXPECT_EQ(SimpleWithGlyphOverflowPath, Font::characterRangeCodePath(c6, 1)); |
| 84 static UChar c7[] = { 0x2000 }; | 84 static UChar c7[] = { 0x2000 }; |
| 85 EXPECT_EQ(Font::SimpleWithGlyphOverflow, Font::characterRangeCodePath(c7, 1)
); | 85 EXPECT_EQ(SimpleWithGlyphOverflowPath, Font::characterRangeCodePath(c7, 1)); |
| 86 static UChar c8[] = { 0x2001 }; | 86 static UChar c8[] = { 0x2001 }; |
| 87 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c8, 1)); | 87 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c8, 1)); |
| 88 | 88 |
| 89 TestSpecificUCharRange(0x20D0, 0x20FF); | 89 TestSpecificUCharRange(0x20D0, 0x20FF); |
| 90 TestSpecificUCharRange(0x2CEF, 0x2CF1); | 90 TestSpecificUCharRange(0x2CEF, 0x2CF1); |
| 91 TestSpecificUCharRange(0x302A, 0x302F); | 91 TestSpecificUCharRange(0x302A, 0x302F); |
| 92 | 92 |
| 93 TestSpecificUCharRange(0xA67C, 0xA67D); | 93 TestSpecificUCharRange(0xA67C, 0xA67D); |
| 94 TestSpecificUCharRange(0xA6F0, 0xA6F1); | 94 TestSpecificUCharRange(0xA6F0, 0xA6F1); |
| 95 TestSpecificUCharRange(0xA800, 0xABFF); | 95 TestSpecificUCharRange(0xA800, 0xABFF); |
| 96 | 96 |
| 97 TestSpecificUCharRange(0xD7B0, 0xD7FF); | 97 TestSpecificUCharRange(0xD7B0, 0xD7FF); |
| 98 TestSpecificUCharRange(0xFE00, 0xFE0F); | 98 TestSpecificUCharRange(0xFE00, 0xFE0F); |
| 99 TestSpecificUCharRange(0xFE20, 0xFE2F); | 99 TestSpecificUCharRange(0xFE20, 0xFE2F); |
| 100 } | 100 } |
| 101 | 101 |
| 102 TEST(FontTest, TestCharacterRangeCodePathSurrogate1) | 102 TEST(FontTest, TestCharacterRangeCodePathSurrogate1) |
| 103 { | 103 { |
| 104 /* To be surrogate ... */ | 104 /* To be surrogate ... */ |
| 105 /* 1st character must be 0xD800 .. 0xDBFF */ | 105 /* 1st character must be 0xD800 .. 0xDBFF */ |
| 106 /* 2nd character must be 0xdc00 .. 0xdfff */ | 106 /* 2nd character must be 0xdc00 .. 0xdfff */ |
| 107 | 107 |
| 108 /* The following 5 should all be Simple because they are not surrogate. */ | 108 /* The following 5 should all be Simple because they are not surrogate. */ |
| 109 static UChar c1[] = { 0xD800, 0xDBFE }; | 109 static UChar c1[] = { 0xD800, 0xDBFE }; |
| 110 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c1, 2)); | 110 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c1, 2)); |
| 111 static UChar c2[] = { 0xD800, 0xE000 }; | 111 static UChar c2[] = { 0xD800, 0xE000 }; |
| 112 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c2, 2)); | 112 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c2, 2)); |
| 113 static UChar c3[] = { 0xDBFF, 0xDBFE }; | 113 static UChar c3[] = { 0xDBFF, 0xDBFE }; |
| 114 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c3, 2)); | 114 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c3, 2)); |
| 115 static UChar c4[] = { 0xDBFF, 0xE000 }; | 115 static UChar c4[] = { 0xDBFF, 0xE000 }; |
| 116 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c4, 2)); | 116 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c4, 2)); |
| 117 static UChar c5[] = { 0xDC00, 0xDBFF }; | 117 static UChar c5[] = { 0xDC00, 0xDBFF }; |
| 118 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c5, 2)); | 118 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c5, 2)); |
| 119 | 119 |
| 120 /* To be Complex, the Supplementary Character must be in either */ | 120 /* To be Complex, the Supplementary Character must be in either */ |
| 121 /* U+1F1E6 through U+1F1FF or U+E0100 through U+E01EF. */ | 121 /* U+1F1E6 through U+1F1FF or U+E0100 through U+E01EF. */ |
| 122 /* That is, a lead of 0xD83C with trail 0xDDE6 .. 0xDDFF or */ | 122 /* That is, a lead of 0xD83C with trail 0xDDE6 .. 0xDDFF or */ |
| 123 /* a lead of 0xDB40 with trail 0xDD00 .. 0xDDEF. */ | 123 /* a lead of 0xDB40 with trail 0xDD00 .. 0xDDEF. */ |
| 124 static UChar c6[] = { 0xD83C, 0xDDE5 }; | 124 static UChar c6[] = { 0xD83C, 0xDDE5 }; |
| 125 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c6, 2)); | 125 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c6, 2)); |
| 126 static UChar c7[] = { 0xD83C, 0xDDE6 }; | 126 static UChar c7[] = { 0xD83C, 0xDDE6 }; |
| 127 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c7, 2)); | 127 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c7, 2)); |
| 128 static UChar c8[] = { 0xD83C, 0xDDF0 }; | 128 static UChar c8[] = { 0xD83C, 0xDDF0 }; |
| 129 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c8, 2)); | 129 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c8, 2)); |
| 130 static UChar c9[] = { 0xD83C, 0xDDFF }; | 130 static UChar c9[] = { 0xD83C, 0xDDFF }; |
| 131 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c9, 2)); | 131 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c9, 2)); |
| 132 static UChar c10[] = { 0xD83C, 0xDE00 }; | 132 static UChar c10[] = { 0xD83C, 0xDE00 }; |
| 133 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c10, 2)); | 133 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c10, 2)); |
| 134 | 134 |
| 135 static UChar c11[] = { 0xDB40, 0xDCFF }; | 135 static UChar c11[] = { 0xDB40, 0xDCFF }; |
| 136 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c11, 2)); | 136 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c11, 2)); |
| 137 static UChar c12[] = { 0xDB40, 0xDD00 }; | 137 static UChar c12[] = { 0xDB40, 0xDD00 }; |
| 138 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c12, 2)); | 138 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c12, 2)); |
| 139 static UChar c13[] = { 0xDB40, 0xDDED }; | 139 static UChar c13[] = { 0xDB40, 0xDDED }; |
| 140 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c13, 2)); | 140 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c13, 2)); |
| 141 static UChar c14[] = { 0xDB40, 0xDDEF }; | 141 static UChar c14[] = { 0xDB40, 0xDDEF }; |
| 142 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c14, 2)); | 142 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c14, 2)); |
| 143 static UChar c15[] = { 0xDB40, 0xDDF0 }; | 143 static UChar c15[] = { 0xDB40, 0xDDF0 }; |
| 144 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c15, 2)); | 144 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c15, 2)); |
| 145 } | 145 } |
| 146 | 146 |
| 147 TEST(FontTest, TestCharacterRangeCodePathString) | 147 TEST(FontTest, TestCharacterRangeCodePathString) |
| 148 { | 148 { |
| 149 // Simple-Simple is still simple | 149 // Simple-Simple is still simple |
| 150 static UChar c1[] = { 0x2FF, 0x2FF }; | 150 static UChar c1[] = { 0x2FF, 0x2FF }; |
| 151 EXPECT_EQ(Font::Simple, Font::characterRangeCodePath(c1, 2)); | 151 EXPECT_EQ(SimplePath, Font::characterRangeCodePath(c1, 2)); |
| 152 // Complex-Simple is Complex | 152 // Complex-Simple is Complex |
| 153 static UChar c2[] = { 0x300, 0x2FF }; | 153 static UChar c2[] = { 0x300, 0x2FF }; |
| 154 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c2, 2)); | 154 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c2, 2)); |
| 155 // Simple-Complex is Complex | 155 // Simple-Complex is Complex |
| 156 static UChar c3[] = { 0x2FF, 0x330 }; | 156 static UChar c3[] = { 0x2FF, 0x330 }; |
| 157 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c3, 2)); | 157 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c3, 2)); |
| 158 // Complex-Complex is Complex | 158 // Complex-Complex is Complex |
| 159 static UChar c4[] = { 0x36F, 0x330 }; | 159 static UChar c4[] = { 0x36F, 0x330 }; |
| 160 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c4, 2)); | 160 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c4, 2)); |
| 161 // SimpleWithGlyphOverflow-Simple is SimpleWithGlyphOverflow | 161 // SimpleWithGlyphOverflow-Simple is SimpleWithGlyphOverflow |
| 162 static UChar c5[] = { 0x1E00, 0x2FF }; | 162 static UChar c5[] = { 0x1E00, 0x2FF }; |
| 163 EXPECT_EQ(Font::SimpleWithGlyphOverflow, Font::characterRangeCodePath(c5, 2)
); | 163 EXPECT_EQ(SimpleWithGlyphOverflowPath, Font::characterRangeCodePath(c5, 2)); |
| 164 // Simple-SimpleWithGlyphOverflow is SimpleWithGlyphOverflow | 164 // Simple-SimpleWithGlyphOverflow is SimpleWithGlyphOverflow |
| 165 static UChar c6[] = { 0x2FF, 0x2000 }; | 165 static UChar c6[] = { 0x2FF, 0x2000 }; |
| 166 EXPECT_EQ(Font::SimpleWithGlyphOverflow, Font::characterRangeCodePath(c6, 2)
); | 166 EXPECT_EQ(SimpleWithGlyphOverflowPath, Font::characterRangeCodePath(c6, 2)); |
| 167 // SimpleWithGlyphOverflow-Complex is Complex | 167 // SimpleWithGlyphOverflow-Complex is Complex |
| 168 static UChar c7[] = { 0x1E00, 0x330 }; | 168 static UChar c7[] = { 0x1E00, 0x330 }; |
| 169 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c7, 2)); | 169 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c7, 2)); |
| 170 // Complex-SimpleWithGlyphOverflow is Complex | 170 // Complex-SimpleWithGlyphOverflow is Complex |
| 171 static UChar c8[] = { 0x330, 0x2000 }; | 171 static UChar c8[] = { 0x330, 0x2000 }; |
| 172 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c8, 2)); | 172 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c8, 2)); |
| 173 // Surrogate-Complex is Complex | 173 // Surrogate-Complex is Complex |
| 174 static UChar c9[] = { 0xD83C, 0xDDE5, 0x330 }; | 174 static UChar c9[] = { 0xD83C, 0xDDE5, 0x330 }; |
| 175 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c9, 3)); | 175 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c9, 3)); |
| 176 // Complex-Surrogate is Complex | 176 // Complex-Surrogate is Complex |
| 177 static UChar c10[] = { 0x330, 0xD83C, 0xDDE5 }; | 177 static UChar c10[] = { 0x330, 0xD83C, 0xDDE5 }; |
| 178 EXPECT_EQ(Font::Complex, Font::characterRangeCodePath(c10, 3)); | 178 EXPECT_EQ(ComplexPath, Font::characterRangeCodePath(c10, 3)); |
| 179 } | 179 } |
| 180 | 180 |
| 181 static void TestSpecificUChar32RangeIdeograph(UChar32 rangeStart, UChar32 rangeE
nd) | 181 static void TestSpecificUChar32RangeIdeograph(UChar32 rangeStart, UChar32 rangeE
nd) |
| 182 { | 182 { |
| 183 EXPECT_FALSE(Font::isCJKIdeograph(rangeStart - 1)); | 183 EXPECT_FALSE(Font::isCJKIdeograph(rangeStart - 1)); |
| 184 EXPECT_TRUE(Font::isCJKIdeograph(rangeStart)); | 184 EXPECT_TRUE(Font::isCJKIdeograph(rangeStart)); |
| 185 EXPECT_TRUE(Font::isCJKIdeograph((UChar32)((uint64_t)rangeStart + (uint64_t)
rangeEnd) / 2)); | 185 EXPECT_TRUE(Font::isCJKIdeograph((UChar32)((uint64_t)rangeStart + (uint64_t)
rangeEnd) / 2)); |
| 186 EXPECT_TRUE(Font::isCJKIdeograph(rangeEnd)); | 186 EXPECT_TRUE(Font::isCJKIdeograph(rangeEnd)); |
| 187 EXPECT_FALSE(Font::isCJKIdeograph(rangeEnd + 1)); | 187 EXPECT_FALSE(Font::isCJKIdeograph(rangeEnd + 1)); |
| 188 } | 188 } |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 | 356 |
| 357 TestSpecificUChar32RangeIdeographSymbol(0x1F110, 0x1F129); | 357 TestSpecificUChar32RangeIdeographSymbol(0x1F110, 0x1F129); |
| 358 TestSpecificUChar32RangeIdeographSymbol(0x1F130, 0x1F149); | 358 TestSpecificUChar32RangeIdeographSymbol(0x1F130, 0x1F149); |
| 359 TestSpecificUChar32RangeIdeographSymbol(0x1F150, 0x1F169); | 359 TestSpecificUChar32RangeIdeographSymbol(0x1F150, 0x1F169); |
| 360 TestSpecificUChar32RangeIdeographSymbol(0x1F170, 0x1F189); | 360 TestSpecificUChar32RangeIdeographSymbol(0x1F170, 0x1F189); |
| 361 TestSpecificUChar32RangeIdeographSymbol(0x1F200, 0x1F6FF); | 361 TestSpecificUChar32RangeIdeographSymbol(0x1F200, 0x1F6FF); |
| 362 } | 362 } |
| 363 | 363 |
| 364 } // namespace WebCore | 364 } // namespace WebCore |
| 365 | 365 |
| OLD | NEW |