char_iterator_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/i18n/char_iterator.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/utf_string_conversions.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace i18n { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CharIteratorsTest, TestUTF8) { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string empty; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UTF8CharIterator empty_iter(&empty); 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(empty_iter.end()); 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0, empty_iter.array_pos()); 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0, empty_iter.char_pos()); 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(empty_iter.Advance()); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string str("s\303\273r"); // [u with circumflex] 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UTF8CharIterator iter(&str); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(iter.end()); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0, iter.array_pos()); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0, iter.char_pos()); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ('s', iter.get()); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(iter.Advance()); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(iter.end()); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, iter.array_pos()); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, iter.char_pos()); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(251, iter.get()); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(iter.Advance()); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(iter.end()); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(3, iter.array_pos()); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2, iter.char_pos()); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ('r', iter.get()); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(iter.Advance()); 40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(iter.end()); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(4, iter.array_pos()); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(3, iter.char_pos()); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Don't care what it returns, but this shouldn't crash 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter.get(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(iter.Advance()); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(CharIteratorsTest, TestUTF16) { 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch string16 empty = UTF8ToUTF16(""); 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UTF16CharIterator empty_iter(&empty); 54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(empty_iter.end()); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0, empty_iter.array_pos()); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0, empty_iter.char_pos()); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(empty_iter.Advance()); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This test string contains 4 characters: 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // x 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // u with circumflex - 2 bytes in UTF8, 1 codeword in UTF16 62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // math double-struck A - 4 bytes in UTF8, 2 codewords in UTF16 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // z 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 str = UTF8ToUTF16("x\303\273\360\235\224\270z"); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UTF16CharIterator iter(&str); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(iter.end()); 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(0, iter.array_pos()); 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(0, iter.char_pos()); 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ('x', iter.get()); 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(iter.Advance()); 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_FALSE(iter.end()); 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(1, iter.array_pos()); 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(1, iter.char_pos()); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(251, iter.get()); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(iter.Advance()); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(iter.end()); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2, iter.array_pos()); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2, iter.char_pos()); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(120120, iter.get()); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(iter.Advance()); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(iter.end()); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(4, iter.array_pos()); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(3, iter.char_pos()); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ('z', iter.get()); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(iter.Advance()); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(iter.end()); 91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(5, iter.array_pos()); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(4, iter.char_pos()); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Don't care what it returns, but this shouldn't crash 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter.get(); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(iter.Advance()); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace i18n 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace base 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)