15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/i18n/break_iterator.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_piece.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace i18n { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakWordEmpty) { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 empty; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(empty, BreakIterator::BREAK_WORD); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakWord) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 space(UTF8ToUTF16(" ")); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 str(UTF8ToUTF16(" foo bar! \npouet boom")); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_WORD); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(space, iter.GetString()); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.IsWord()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("foo"), iter.GetString()); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(space, iter.GetString()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.IsWord()); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("bar"), iter.GetString()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("!"), iter.GetString()); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(space, iter.GetString()); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("\n"), iter.GetString()); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.IsWord()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("pouet"), iter.GetString()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(space, iter.GetString()); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.IsWord()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("boom"), iter.GetString()); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakWide16) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Two greek words separated by space. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 str(WideToUTF16( 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x03a0\x03b1\x03b3\x03ba\x03cc\x03c3\x03bc\x03b9" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x03bf\x03c2\x0020\x0399\x03c3\x03c4\x03cc\x03c2")); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 word1(str.substr(0, 10)); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 word2(str.substr(11, 5)); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_WORD); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.IsWord()); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(word1, iter.GetString()); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16(" "), iter.GetString()); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.IsWord()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(word2, iter.GetString()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakWide32) { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // U+1D49C MATHEMATICAL SCRIPT CAPITAL A 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* very_wide_char = "\xF0\x9D\x92\x9C"; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 str( 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UTF8ToUTF16(base::StringPrintf("%s a", very_wide_char))); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 very_wide_word(str.substr(0, 2)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_WORD); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.IsWord()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(very_wide_word, iter.GetString()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16(" "), iter.GetString()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.IsWord()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("a"), iter.GetString()); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakSpaceEmpty) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 empty; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(empty, BreakIterator::BREAK_SPACE); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakSpace) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 str(UTF8ToUTF16(" foo bar! \npouet boom")); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_SPACE); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16(" "), iter.GetString()); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("foo "), iter.GetString()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("bar! \n"), iter.GetString()); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("pouet "), iter.GetString()); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("boom"), iter.GetString()); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakSpaceSP) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 str(UTF8ToUTF16(" foo bar! \npouet boom ")); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_SPACE); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16(" "), iter.GetString()); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("foo "), iter.GetString()); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("bar! \n"), iter.GetString()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("pouet "), iter.GetString()); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("boom "), iter.GetString()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakSpacekWide16) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Two Greek words. 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 str(WideToUTF16( 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x03a0\x03b1\x03b3\x03ba\x03cc\x03c3\x03bc\x03b9" 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x03bf\x03c2\x0020\x0399\x03c3\x03c4\x03cc\x03c2")); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 word1(str.substr(0, 11)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 word2(str.substr(11, 5)); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_SPACE); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(word1, iter.GetString()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(word2, iter.GetString()); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakSpaceWide32) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // U+1D49C MATHEMATICAL SCRIPT CAPITAL A 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* very_wide_char = "\xF0\x9D\x92\x9C"; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 str( 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UTF8ToUTF16(base::StringPrintf("%s a", very_wide_char))); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 very_wide_word(str.substr(0, 3)); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_SPACE); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(very_wide_word, iter.GetString()); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("a"), iter.GetString()); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakLineEmpty) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 empty; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(empty, BreakIterator::BREAK_NEWLINE); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakLine) { 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 nl(UTF8ToUTF16("\n")); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 str(UTF8ToUTF16("\nfoo bar!\n\npouet boom")); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_NEWLINE); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(nl, iter.GetString()); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("foo bar!\n"), iter.GetString()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(nl, iter.GetString()); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("pouet boom"), iter.GetString()); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakLineNL) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 nl(UTF8ToUTF16("\n")); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 str(UTF8ToUTF16("\nfoo bar!\n\npouet boom\n")); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_NEWLINE); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(nl, iter.GetString()); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("foo bar!\n"), iter.GetString()); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(nl, iter.GetString()); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("pouet boom\n"), iter.GetString()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakLineWide16) { 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Two Greek words separated by newline. 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 str(WideToUTF16( 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x03a0\x03b1\x03b3\x03ba\x03cc\x03c3\x03bc\x03b9" 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x03bf\x03c2\x000a\x0399\x03c3\x03c4\x03cc\x03c2")); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 line1(str.substr(0, 11)); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 line2(str.substr(11, 5)); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_NEWLINE); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(line1, iter.GetString()); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(line2, iter.GetString()); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakLineWide32) { 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // U+1D49C MATHEMATICAL SCRIPT CAPITAL A 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* very_wide_char = "\xF0\x9D\x92\x9C"; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 str( 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UTF8ToUTF16(base::StringPrintf("%s\na", very_wide_char))); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16 very_wide_line(str.substr(0, 3)); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(str, BreakIterator::BREAK_NEWLINE); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(very_wide_line, iter.GetString()); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("a"), iter.GetString()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.Advance()); // Test unexpected advance after end. 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(iter.IsWord()); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(BreakIteratorTest, BreakCharacter) { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const wchar_t* kCharacters[] = { 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An English word consisting of four ASCII characters. 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"w", L"o", L"r", L"d", L" ", 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A Hindi word (which means "Hindi") consisting of three Devanagari 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // characters. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x0939\x093F", L"\x0928\x094D", L"\x0926\x0940", L" ", 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A Thai word (which means "feel") consisting of three Thai characters. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\x0E23\x0E39\x0E49", L"\x0E2A\x0E36", L"\x0E01", L" ", 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<string16> characters; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 text; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kCharacters); ++i) { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) characters.push_back(WideToUTF16(kCharacters[i])); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text.append(characters.back()); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BreakIterator iter(text, BreakIterator::BREAK_CHARACTER); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(iter.Init()); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kCharacters); ++i) { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(iter.Advance()); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(characters[i], iter.GetString()); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace i18n 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 339