OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/strings/string_piece.h" | 8 #include "base/strings/string_piece.h" |
9 #include "base/strings/utf_offset_string_conversions.h" | 9 #include "base/strings/utf_offset_string_conversions.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 size_t expected_3[] = { | 155 size_t expected_3[] = { |
156 0, kNpos, kNpos, 0, 1, kNpos, kNpos, kNpos, 5, 6, 7, 8, kNpos, kNpos, 11, | 156 0, kNpos, kNpos, 0, 1, kNpos, kNpos, kNpos, 5, 6, 7, 8, kNpos, kNpos, 11, |
157 12, kNpos, 12 | 157 12, kNpos, 12 |
158 }; | 158 }; |
159 EXPECT_EQ(offsets.size(), arraysize(expected_3)); | 159 EXPECT_EQ(offsets.size(), arraysize(expected_3)); |
160 for (size_t i = 0; i < arraysize(expected_3); ++i) | 160 for (size_t i = 0; i < arraysize(expected_3); ++i) |
161 EXPECT_EQ(expected_3[i], offsets[i]); | 161 EXPECT_EQ(expected_3[i], offsets[i]); |
162 } | 162 } |
163 } | 163 } |
164 | 164 |
| 165 TEST(UTFOffsetStringConversionsTest, UnadjustOffsets) { |
| 166 // Imagine we have strings as shown in the following cases where the |
| 167 // X's represent encoded characters. |
| 168 // 1: abcXXXdef ==> abcXdef |
| 169 { |
| 170 std::vector<size_t> offsets; |
| 171 for (size_t t = 0; t <= 7; ++t) |
| 172 offsets.push_back(t); |
| 173 OffsetAdjuster::Adjustments adjustments; |
| 174 adjustments.push_back(OffsetAdjuster::Adjustment(3, 3, 1)); |
| 175 OffsetAdjuster::UnadjustOffsets(adjustments, &offsets); |
| 176 size_t expected_1[] = {0, 1, 2, 3, 6, 7, 8, 9}; |
| 177 EXPECT_EQ(offsets.size(), arraysize(expected_1)); |
| 178 for (size_t i = 0; i < arraysize(expected_1); ++i) |
| 179 EXPECT_EQ(expected_1[i], offsets[i]); |
| 180 } |
| 181 |
| 182 // 2: XXXaXXXXbcXXXXXXXdefXXX ==> XaXXbcXXXXdefX |
| 183 { |
| 184 std::vector<size_t> offsets; |
| 185 for (size_t t = 0; t <= 14; ++t) |
| 186 offsets.push_back(t); |
| 187 OffsetAdjuster::Adjustments adjustments; |
| 188 adjustments.push_back(OffsetAdjuster::Adjustment(0, 3, 1)); |
| 189 adjustments.push_back(OffsetAdjuster::Adjustment(4, 4, 2)); |
| 190 adjustments.push_back(OffsetAdjuster::Adjustment(10, 7, 4)); |
| 191 adjustments.push_back(OffsetAdjuster::Adjustment(20, 3, 1)); |
| 192 OffsetAdjuster::UnadjustOffsets(adjustments, &offsets); |
| 193 size_t expected_2[] = { |
| 194 0, 3, 4, kNpos, 8, 9, 10, kNpos, kNpos, kNpos, 17, 18, 19, 20, 23 |
| 195 }; |
| 196 EXPECT_EQ(offsets.size(), arraysize(expected_2)); |
| 197 for (size_t i = 0; i < arraysize(expected_2); ++i) |
| 198 EXPECT_EQ(expected_2[i], offsets[i]); |
| 199 } |
| 200 |
| 201 // 3: XXXaXXXXbcdXXXeXX ==> aXXXXbcdXXXe |
| 202 { |
| 203 std::vector<size_t> offsets; |
| 204 for (size_t t = 0; t <= 12; ++t) |
| 205 offsets.push_back(t); |
| 206 OffsetAdjuster::Adjustments adjustments; |
| 207 adjustments.push_back(OffsetAdjuster::Adjustment(0, 3, 0)); |
| 208 adjustments.push_back(OffsetAdjuster::Adjustment(4, 4, 4)); |
| 209 adjustments.push_back(OffsetAdjuster::Adjustment(11, 3, 3)); |
| 210 adjustments.push_back(OffsetAdjuster::Adjustment(15, 2, 0)); |
| 211 OffsetAdjuster::UnadjustOffsets(adjustments, &offsets); |
| 212 size_t expected_3[] = { |
| 213 0, // this could just as easily be 3 |
| 214 4, kNpos, kNpos, kNpos, 8, 9, 10, 11, kNpos, kNpos, 14, |
| 215 15 // this could just as easily be 17 |
| 216 }; |
| 217 EXPECT_EQ(offsets.size(), arraysize(expected_3)); |
| 218 for (size_t i = 0; i < arraysize(expected_3); ++i) |
| 219 EXPECT_EQ(expected_3[i], offsets[i]); |
| 220 } |
| 221 } |
| 222 |
165 // MergeSequentialAdjustments is used by net/base/escape.{h,cc} and | 223 // MergeSequentialAdjustments is used by net/base/escape.{h,cc} and |
166 // net/base/net_util.{h,cc}. The two tests EscapeTest.AdjustOffset and | 224 // net/base/net_util.{h,cc}. The two tests EscapeTest.AdjustOffset and |
167 // NetUtilTest.FormatUrlWithOffsets test its behavior extensively. This | 225 // NetUtilTest.FormatUrlWithOffsets test its behavior extensively. This |
168 // is simply a short, additional test. | 226 // is simply a short, additional test. |
169 TEST(UTFOffsetStringConversionsTest, MergeSequentialAdjustments) { | 227 TEST(UTFOffsetStringConversionsTest, MergeSequentialAdjustments) { |
170 // Pretend the input string is "abcdefghijklmnopqrstuvwxyz". | 228 // Pretend the input string is "abcdefghijklmnopqrstuvwxyz". |
171 | 229 |
172 // Set up |first_adjustments| to | 230 // Set up |first_adjustments| to |
173 // - remove the leading "a" | 231 // - remove the leading "a" |
174 // - combine the "bc" into one character (call it ".") | 232 // - combine the "bc" into one character (call it ".") |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 EXPECT_EQ(1u, adjustments_on_adjusted_string[3].output_length); | 287 EXPECT_EQ(1u, adjustments_on_adjusted_string[3].output_length); |
230 EXPECT_EQ(19u, adjustments_on_adjusted_string[4].original_offset); | 288 EXPECT_EQ(19u, adjustments_on_adjusted_string[4].original_offset); |
231 EXPECT_EQ(3u, adjustments_on_adjusted_string[4].original_length); | 289 EXPECT_EQ(3u, adjustments_on_adjusted_string[4].original_length); |
232 EXPECT_EQ(0u, adjustments_on_adjusted_string[4].output_length); | 290 EXPECT_EQ(0u, adjustments_on_adjusted_string[4].output_length); |
233 EXPECT_EQ(25u, adjustments_on_adjusted_string[5].original_offset); | 291 EXPECT_EQ(25u, adjustments_on_adjusted_string[5].original_offset); |
234 EXPECT_EQ(1u, adjustments_on_adjusted_string[5].original_length); | 292 EXPECT_EQ(1u, adjustments_on_adjusted_string[5].original_length); |
235 EXPECT_EQ(2u, adjustments_on_adjusted_string[5].output_length); | 293 EXPECT_EQ(2u, adjustments_on_adjusted_string[5].output_length); |
236 } | 294 } |
237 | 295 |
238 } // namaspace base | 296 } // namaspace base |
OLD | NEW |