1// Copyright 2013 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 "chrome/browser/ui/app_list/search/term_break_iterator.h"
6
7#include "base/strings/utf_string_conversions.h"
8#include "testing/gtest/include/gtest/gtest.h"
9
10namespace app_list {
11namespace test {
12
13TEST(TermBreakIteratorTest, EmptyWord) {
14  string16 empty;
15  TermBreakIterator iter(empty);
16  EXPECT_FALSE(iter.Advance());
17}
18
19TEST(TermBreakIteratorTest, Simple) {
20  string16 word(UTF8ToUTF16("simple"));
21  TermBreakIterator iter(word);
22  EXPECT_TRUE(iter.Advance());
23  EXPECT_EQ(UTF8ToUTF16("simple"), iter.GetCurrentTerm());
24  EXPECT_FALSE(iter.Advance());  // Test unexpected advance after end.
25}
26
27TEST(TermBreakIteratorTest, CamelCase) {
28  string16 word(UTF8ToUTF16("CamelCase"));
29  TermBreakIterator iter(word);
30  EXPECT_TRUE(iter.Advance());
31  EXPECT_EQ(UTF8ToUTF16("Camel"), iter.GetCurrentTerm());
32  EXPECT_TRUE(iter.Advance());
33  EXPECT_EQ(UTF8ToUTF16("Case"), iter.GetCurrentTerm());
34  EXPECT_FALSE(iter.Advance());  // Test unexpected advance after end.
35}
36
37TEST(TermBreakIteratorTest, LowerToUpper) {
38  string16 word(UTF8ToUTF16("lowerToUpper"));
39  TermBreakIterator iter(word);
40  EXPECT_TRUE(iter.Advance());
41  EXPECT_EQ(UTF8ToUTF16("lower"), iter.GetCurrentTerm());
42  EXPECT_TRUE(iter.Advance());
43  EXPECT_EQ(UTF8ToUTF16("To"), iter.GetCurrentTerm());
44  EXPECT_TRUE(iter.Advance());
45  EXPECT_EQ(UTF8ToUTF16("Upper"), iter.GetCurrentTerm());
46  EXPECT_FALSE(iter.Advance());  // Test unexpected advance after end.
47}
48
49TEST(TermBreakIteratorTest, AlphaNumber) {
50  string16 word(UTF8ToUTF16("Chromium26.0.0.0"));
51  TermBreakIterator iter(word);
52  EXPECT_TRUE(iter.Advance());
53  EXPECT_EQ(UTF8ToUTF16("Chromium"), iter.GetCurrentTerm());
54  EXPECT_TRUE(iter.Advance());
55  EXPECT_EQ(UTF8ToUTF16("26.0.0.0"), iter.GetCurrentTerm());
56  EXPECT_FALSE(iter.Advance());  // Test unexpected advance after end.
57}
58
59TEST(TermBreakIteratorTest, StartsWithNumber) {
60  string16 word(UTF8ToUTF16("123startWithNumber"));
61  TermBreakIterator iter(word);
62  EXPECT_TRUE(iter.Advance());
63  EXPECT_EQ(UTF8ToUTF16("123"), iter.GetCurrentTerm());
64  EXPECT_TRUE(iter.Advance());
65  EXPECT_EQ(UTF8ToUTF16("start"), iter.GetCurrentTerm());
66  EXPECT_TRUE(iter.Advance());
67  EXPECT_EQ(UTF8ToUTF16("With"), iter.GetCurrentTerm());
68  EXPECT_TRUE(iter.Advance());
69  EXPECT_EQ(UTF8ToUTF16("Number"), iter.GetCurrentTerm());
70  EXPECT_FALSE(iter.Advance());  // Test unexpected advance after end.
71}
72
73TEST(TermBreakIteratorTest, CaseAndNoCase) {
74  // "English" + two Chinese chars U+4E2D U+6587 + "Word"
75  string16 word(UTF8ToUTF16("English\xe4\xb8\xad\xe6\x96\x87Word"));
76  TermBreakIterator iter(word);
77  EXPECT_TRUE(iter.Advance());
78  EXPECT_EQ(UTF8ToUTF16("English"), iter.GetCurrentTerm());
79  EXPECT_TRUE(iter.Advance());
80  EXPECT_EQ(UTF8ToUTF16("\xe4\xb8\xad\xe6\x96\x87"), iter.GetCurrentTerm());
81  EXPECT_TRUE(iter.Advance());
82  EXPECT_EQ(UTF8ToUTF16("Word"), iter.GetCurrentTerm());
83  EXPECT_FALSE(iter.Advance());  // Test unexpected advance after end.
84}
85
86}  // namespace test
87}  // namespace app_list
88