21 #include "Lexicon.hpp"
22 #include "TestUtils.hpp"
23 #include "TestUtilsUTF8.hpp"
24 #include "TextDict.hpp"
32 TextDictPtr CreateTextDictForText()
const {
33 LexiconPtr lexicon(
new Lexicon);
34 lexicon->Add(DictEntryFactory::New(
"BYVoid",
"byv"));
35 lexicon->Add(DictEntryFactory::New(
"zigzagzig",
"zag"));
36 lexicon->Add(DictEntryFactory::New(utf8(
"積羽沉舟"), utf8(
"羣輕折軸")));
37 lexicon->Add(DictEntryFactory::New(utf8(
"清"),
"Tsing"));
38 lexicon->Add(DictEntryFactory::New(utf8(
"清華"),
"Tsinghua"));
39 lexicon->Add(DictEntryFactory::New(utf8(
"清華大學"),
"TsinghuaUniversity"));
41 return TextDictPtr(
new TextDict(lexicon));
44 DictPtr CreateDictForCharacters()
const {
45 LexiconPtr lexicon(
new Lexicon);
46 lexicon->Add(DictEntryFactory::New(utf8(
"后"),
47 vector<string>{utf8(
"后"), utf8(
"後")}));
48 lexicon->Add(DictEntryFactory::New(utf8(
"发"),
49 vector<string>{utf8(
"發"), utf8(
"髮")}));
50 lexicon->Add(DictEntryFactory::New(
51 utf8(
"干"), vector<string>{utf8(
"幹"), utf8(
"乾"), utf8(
"干")}));
52 lexicon->Add(DictEntryFactory::New(utf8(
"里"),
53 vector<string>{utf8(
"裏"), utf8(
"里")}));
55 return TextDictPtr(
new TextDict(lexicon));
58 DictPtr CreateDictForPhrases()
const {
59 LexiconPtr lexicon(
new Lexicon);
60 lexicon->Add(DictEntryFactory::New(utf8(
"太后"), utf8(
"太后")));
61 lexicon->Add(DictEntryFactory::New(utf8(
"头发"), utf8(
"頭髮")));
62 lexicon->Add(DictEntryFactory::New(utf8(
"干燥"), utf8(
"乾燥")));
63 lexicon->Add(DictEntryFactory::New(utf8(
"鼠标"), utf8(
"鼠標")));
65 return TextDictPtr(
new TextDict(lexicon));
68 DictPtr CreateDictForTaiwanVariants()
const {
69 LexiconPtr lexicon(
new Lexicon);
70 lexicon->Add(DictEntryFactory::New(utf8(
"裏"), utf8(
"裡")));
71 TextDictPtr textDict(
new TextDict(lexicon));
75 DictPtr CreateTaiwanPhraseDict()
const {
76 LexiconPtr lexicon(
new Lexicon);
77 lexicon->Add(DictEntryFactory::New(utf8(
"鼠标"), utf8(
"滑鼠")));
78 lexicon->Add(DictEntryFactory::New(utf8(
"服务器"), utf8(
"伺服器")));
79 lexicon->Add(DictEntryFactory::New(utf8(
"克罗地亚"), utf8(
"克羅埃西亞")));
81 return TextDictPtr(
new TextDict(lexicon));
84 void TestDict(
const DictPtr dict)
const {
86 TestMatchPrefix(dict);
87 TestMatchAllPrefixes(dict);
90 void TestMatch(
const DictPtr& dict)
const {
92 entry = dict->Match(
"BYVoid");
93 EXPECT_TRUE(!entry.
IsNull());
94 EXPECT_EQ(utf8(
"BYVoid"), entry.
Get()->Key());
95 EXPECT_EQ(utf8(
"byv"), entry.
Get()->GetDefault());
97 entry = dict->Match(
"");
98 EXPECT_TRUE(entry.
IsNull());
100 entry = dict->Match(
"xxx");
101 EXPECT_TRUE(entry.
IsNull());
104 void TestMatchPrefix(
const DictPtr& dict)
const {
106 entry = dict->MatchPrefix(
"BYVoid");
107 EXPECT_TRUE(!entry.
IsNull());
108 EXPECT_EQ(utf8(
"BYVoid"), entry.
Get()->Key());
109 EXPECT_EQ(utf8(
"byv"), entry.
Get()->GetDefault());
111 entry = dict->MatchPrefix(
"清華大學");
112 EXPECT_TRUE(!entry.
IsNull());
113 EXPECT_EQ(utf8(
"清華大學"), entry.
Get()->Key());
114 EXPECT_EQ(utf8(
"TsinghuaUniversity"), entry.
Get()->GetDefault());
116 entry = dict->MatchPrefix(
"BYVoid123");
117 EXPECT_TRUE(!entry.
IsNull());
118 EXPECT_EQ(utf8(
"BYVoid"), entry.
Get()->Key());
119 EXPECT_EQ(utf8(
"byv"), entry.
Get()->GetDefault());
121 entry = dict->MatchPrefix(utf8(
"積羽沉舟"));
122 EXPECT_TRUE(!entry.
IsNull());
123 EXPECT_EQ(utf8(
"積羽沉舟"), entry.
Get()->Key());
124 EXPECT_EQ(utf8(
"羣輕折軸"), entry.
Get()->GetDefault());
126 entry = dict->MatchPrefix(
"Unknown");
127 EXPECT_TRUE(entry.
IsNull());
129 entry = dict->MatchPrefix(
"");
130 EXPECT_TRUE(entry.
IsNull());
133 void TestMatchAllPrefixes(
const DictPtr& dict)
const {
134 const vector<const DictEntry*> matches =
135 dict->MatchAllPrefixes(utf8(
"清華大學計算機系"));
136 EXPECT_EQ(3, matches.size());
137 EXPECT_EQ(utf8(
"清華大學"), matches.at(0)->Key());
138 EXPECT_EQ(utf8(
"TsinghuaUniversity"), matches.at(0)->GetDefault());
139 EXPECT_EQ(utf8(
"清華"), matches.at(1)->Key());
140 EXPECT_EQ(utf8(
"Tsinghua"), matches.at(1)->GetDefault());
141 EXPECT_EQ(utf8(
"清"), matches.at(2)->Key());
142 EXPECT_EQ(utf8(
"Tsing"), matches.at(2)->GetDefault());
145 const TextDictPtr textDict;