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(
 
   47         utf8(
"后"), std::vector<std::string>{utf8(
"后"), utf8(
"後")}));
 
   48     lexicon->Add(DictEntryFactory::New(
 
   49         utf8(
"发"), std::vector<std::string>{utf8(
"發"), utf8(
"髮")}));
 
   50     lexicon->Add(DictEntryFactory::New(
 
   52         std::vector<std::string>{utf8(
"幹"), utf8(
"乾"), utf8(
"干")}));
 
   53     lexicon->Add(DictEntryFactory::New(
 
   54         utf8(
"里"), std::vector<std::string>{utf8(
"裏"), utf8(
"里")}));
 
   56     return TextDictPtr(
new TextDict(lexicon));
 
   59   DictPtr CreateDictForPhrases()
 const {
 
   60     LexiconPtr lexicon(
new Lexicon);
 
   61     lexicon->Add(DictEntryFactory::New(utf8(
"太后"), utf8(
"太后")));
 
   62     lexicon->Add(DictEntryFactory::New(utf8(
"头发"), utf8(
"頭髮")));
 
   63     lexicon->Add(DictEntryFactory::New(utf8(
"干燥"), utf8(
"乾燥")));
 
   64     lexicon->Add(DictEntryFactory::New(utf8(
"鼠标"), utf8(
"鼠標")));
 
   66     return TextDictPtr(
new TextDict(lexicon));
 
   69   DictPtr CreateDictForTaiwanVariants()
 const {
 
   70     LexiconPtr lexicon(
new Lexicon);
 
   71     lexicon->Add(DictEntryFactory::New(utf8(
"裏"), utf8(
"裡")));
 
   72     return TextDictPtr(
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(utf8(
"清華大學"));
 
  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 std::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;