| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "base/i18n/char_iterator.h" | |
| 6 | |
| 7 #include "base/strings/utf_string_conversions.h" | |
| 8 #include "testing/gtest/include/gtest/gtest.h" | |
| 9 | |
| 10 namespace base { | |
| 11 namespace i18n { | |
| 12 | |
| 13 TEST(CharIteratorsTest, TestUTF8) { | |
| 14 std::string empty; | |
| 15 UTF8CharIterator empty_iter(&empty); | |
| 16 ASSERT_TRUE(empty_iter.end()); | |
| 17 ASSERT_EQ(0, empty_iter.array_pos()); | |
| 18 ASSERT_EQ(0, empty_iter.char_pos()); | |
| 19 ASSERT_FALSE(empty_iter.Advance()); | |
| 20 | |
| 21 std::string str("s\303\273r"); // [u with circumflex] | |
| 22 UTF8CharIterator iter(&str); | |
| 23 ASSERT_FALSE(iter.end()); | |
| 24 ASSERT_EQ(0, iter.array_pos()); | |
| 25 ASSERT_EQ(0, iter.char_pos()); | |
| 26 ASSERT_EQ('s', iter.get()); | |
| 27 ASSERT_TRUE(iter.Advance()); | |
| 28 | |
| 29 ASSERT_FALSE(iter.end()); | |
| 30 ASSERT_EQ(1, iter.array_pos()); | |
| 31 ASSERT_EQ(1, iter.char_pos()); | |
| 32 ASSERT_EQ(251, iter.get()); | |
| 33 ASSERT_TRUE(iter.Advance()); | |
| 34 | |
| 35 ASSERT_FALSE(iter.end()); | |
| 36 ASSERT_EQ(3, iter.array_pos()); | |
| 37 ASSERT_EQ(2, iter.char_pos()); | |
| 38 ASSERT_EQ('r', iter.get()); | |
| 39 ASSERT_TRUE(iter.Advance()); | |
| 40 | |
| 41 ASSERT_TRUE(iter.end()); | |
| 42 ASSERT_EQ(4, iter.array_pos()); | |
| 43 ASSERT_EQ(3, iter.char_pos()); | |
| 44 | |
| 45 // Don't care what it returns, but this shouldn't crash | |
| 46 iter.get(); | |
| 47 | |
| 48 ASSERT_FALSE(iter.Advance()); | |
| 49 } | |
| 50 | |
| 51 TEST(CharIteratorsTest, TestUTF16) { | |
| 52 string16 empty = UTF8ToUTF16(""); | |
| 53 UTF16CharIterator empty_iter(&empty); | |
| 54 ASSERT_TRUE(empty_iter.end()); | |
| 55 ASSERT_EQ(0, empty_iter.array_pos()); | |
| 56 ASSERT_EQ(0, empty_iter.char_pos()); | |
| 57 ASSERT_FALSE(empty_iter.Advance()); | |
| 58 | |
| 59 // This test string contains 4 characters: | |
| 60 // x | |
| 61 // u with circumflex - 2 bytes in UTF8, 1 codeword in UTF16 | |
| 62 // math double-struck A - 4 bytes in UTF8, 2 codewords in UTF16 | |
| 63 // z | |
| 64 string16 str = UTF8ToUTF16("x\303\273\360\235\224\270z"); | |
| 65 UTF16CharIterator iter(&str); | |
| 66 ASSERT_FALSE(iter.end()); | |
| 67 ASSERT_EQ(0, iter.array_pos()); | |
| 68 ASSERT_EQ(0, iter.char_pos()); | |
| 69 ASSERT_EQ('x', iter.get()); | |
| 70 ASSERT_TRUE(iter.Advance()); | |
| 71 | |
| 72 ASSERT_FALSE(iter.end()); | |
| 73 ASSERT_EQ(1, iter.array_pos()); | |
| 74 ASSERT_EQ(1, iter.char_pos()); | |
| 75 ASSERT_EQ(251, iter.get()); | |
| 76 ASSERT_TRUE(iter.Advance()); | |
| 77 | |
| 78 ASSERT_FALSE(iter.end()); | |
| 79 ASSERT_EQ(2, iter.array_pos()); | |
| 80 ASSERT_EQ(2, iter.char_pos()); | |
| 81 ASSERT_EQ(120120, iter.get()); | |
| 82 ASSERT_TRUE(iter.Advance()); | |
| 83 | |
| 84 ASSERT_FALSE(iter.end()); | |
| 85 ASSERT_EQ(4, iter.array_pos()); | |
| 86 ASSERT_EQ(3, iter.char_pos()); | |
| 87 ASSERT_EQ('z', iter.get()); | |
| 88 ASSERT_TRUE(iter.Advance()); | |
| 89 | |
| 90 ASSERT_TRUE(iter.end()); | |
| 91 ASSERT_EQ(5, iter.array_pos()); | |
| 92 ASSERT_EQ(4, iter.char_pos()); | |
| 93 | |
| 94 // Don't care what it returns, but this shouldn't crash | |
| 95 iter.get(); | |
| 96 | |
| 97 ASSERT_FALSE(iter.Advance()); | |
| 98 } | |
| 99 | |
| 100 } // namespace i18n | |
| 101 } // namespace base | |
| OLD | NEW |