blob: e13408bb8dce6c780e5706df683c1050f9c55492 [file] [log] [blame]
// Copyright 2010-2015, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "config/character_form_manager.h"
#include <string>
#include "base/system_util.h"
#include "config/config.pb.h"
#include "config/config_handler.h"
#include "testing/base/public/gunit.h"
#include "testing/base/public/googletest.h"
DECLARE_string(test_tmpdir);
namespace mozc {
namespace config {
class CharacterFormManagerTest : public testing::Test {
public:
virtual void SetUp() {
// set default user profile directory
SystemUtil::SetUserProfileDirectory(FLAGS_test_tmpdir);
config::Config config;
config::ConfigHandler::GetDefaultConfig(&config);
config::ConfigHandler::SetConfig(config);
CharacterFormManager *manager =
CharacterFormManager::GetCharacterFormManager();
manager->SetDefaultRule();
}
virtual void TearDown() {
CharacterFormManager *manager =
CharacterFormManager::GetCharacterFormManager();
manager->SetDefaultRule();
// reset config in test_tmpdir
config::Config config;
config::ConfigHandler::GetDefaultConfig(&config);
config::ConfigHandler::SetConfig(config);
}
};
TEST_F(CharacterFormManagerTest, DefaultTest) {
CharacterFormManager *manager =
CharacterFormManager::GetCharacterFormManager();
manager->ClearHistory();
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "カタカナ"
manager->GetPreeditCharacterForm("\xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab"
"\xe3\x83\x8a"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("012"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("["));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("/"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "・"
manager->GetPreeditCharacterForm("\xe3\x83\xbb"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "。"
manager->GetPreeditCharacterForm("\xe3\x80\x82"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "、"
manager->GetPreeditCharacterForm("\xe3\x80\x81"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("\\"));
EXPECT_EQ(
config::Config::NO_CONVERSION,
// "ABC012ほげ"
manager->GetConversionCharacterForm("ABC012" "\xe3\x81\xbb\xe3\x81\x92"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "カタカナ"
manager->GetConversionCharacterForm("\xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab"
"\xe3\x83\x8a"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("012"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("["));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("/"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "・"
manager->GetConversionCharacterForm("\xe3\x83\xbb"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "。"
manager->GetConversionCharacterForm("\xe3\x80\x82"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "、"
manager->GetConversionCharacterForm("\xe3\x80\x81"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("\\"));
EXPECT_EQ(
config::Config::NO_CONVERSION,
// "ABC012ほげ"
manager->GetConversionCharacterForm("\x41\x42\x43\x30\x31\x32\xe3\x81\xbb"
"\xe3\x81\x92"));
string output;
// "京都東京ABCインターネット"
manager->ConvertPreeditString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba"
"\xac\x41\x42\x43\xe3\x82\xa4\xe3\x83\xb3\xe3"
"\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3\x83\x83"
"\xe3\x83\x88", &output);
// "京都東京ABCインターネット"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "インターネット"
manager->ConvertPreeditString("\xef\xbd\xb2\xef\xbe\x9d\xef\xbe\x80\xef\xbd"
"\xb0\xef\xbe\x88\xef\xbd\xaf\xef\xbe\x84",
&output);
// "インターネット"
EXPECT_EQ("\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3"
"\x83\x83\xe3\x83\x88", output);
// "[]・。、"
manager->ConvertPreeditString("\x5b\x5d\xe3\x83\xbb\xe3\x80\x82\xe3\x80\x81",
&output);
// "[]・。、"
EXPECT_EQ("\xef\xbc\xbb\xef\xbc\xbd\xe3\x83\xbb\xe3\x80\x82\xe3\x80\x81",
output);
manager->ConvertPreeditString(".!@#$%^&", &output);
// ".!@#$%^&"
EXPECT_EQ("\xef\xbc\x8e\xef\xbc\x81\xef\xbc\xa0\xef\xbc\x83\xef\xbc\x84\xef"
"\xbc\x85\xef\xbc\xbe\xef\xbc\x86", output);
// "京都東京ABCインターネット012"
manager->ConvertPreeditString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba"
"\xac\x41\x42\x43\xef\xbd\xb2\xef\xbe\x9d\xef"
"\xbe\x80\xef\xbd\xb0\xef\xbe\x88\xef\xbd\xaf"
"\xef\xbe\x84\x30\x31\x32", &output);
// "京都東京ABCインターネット012"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xef\xbc\x90\xef\xbc\x91"
"\xef\xbc\x92", output);
// "グーグルABCインターネット012あいう"
manager->ConvertPreeditString("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83"
"\xab\x41\x42\x43\xef\xbd\xb2\xef\xbe\x9d\xef"
"\xbe\x80\xef\xbd\xb0\xef\xbe\x88\xef\xbd\xaf"
"\xef\xbe\x84\x30\x31\x32\xe3\x81\x82\xe3\x81"
"\x84\xe3\x81\x86", &output);
// "グーグルABCインターネット012あいう"
EXPECT_EQ("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xef\xbc\x90\xef\xbc\x91"
"\xef\xbc\x92\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86", output);
// "京都東京ABCインターネット"
manager->ConvertPreeditString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba"
"\xac\x41\x42\x43\xe3\x82\xa4\xe3\x83\xb3\xe3"
"\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3\x83\x83"
"\xe3\x83\x88", &output);
// "京都東京ABCインターネット"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "[京都]{東京}ABC!インターネット"
manager->ConvertPreeditString("\x5b\xe4\xba\xac\xe9\x83\xbd\x5d\x7b\xe6\x9d"
"\xb1\xe4\xba\xac\x7d\x41\x42\x43\x21\xe3\x82"
"\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3"
"\x83\x8d\xe3\x83\x83\xe3\x83\x88", &output);
// "[京都]{東京}ABC!インターネット"
EXPECT_EQ("\xef\xbc\xbb\xe4\xba\xac\xe9\x83\xbd\xef\xbc\xbd\xef\xbd\x9b\xe6"
"\x9d\xb1\xe4\xba\xac\xef\xbd\x9d\xef\xbc\xa1\xef\xbc\xa2\xef\xbc"
"\xa3\xef\xbc\x81\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc"
"\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "インターネット"
manager->ConvertConversionString("\xef\xbd\xb2\xef\xbe\x9d\xef\xbe\x80\xef"
"\xbd\xb0\xef\xbe\x88\xef\xbd\xaf\xef\xbe"
"\x84", &output);
// "インターネット"
EXPECT_EQ("\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3"
"\x83\x83\xe3\x83\x88", output);
// "[]・。、"
manager->ConvertConversionString("\x5b\x5d\xe3\x83\xbb\xe3\x80\x82\xe3\x80"
"\x81", &output);
// "[]・。、"
EXPECT_EQ("\xef\xbc\xbb\xef\xbc\xbd\xe3\x83\xbb\xe3\x80\x82\xe3\x80\x81",
output);
manager->ConvertConversionString(".!@#$%^&", &output);
// ".!@#$%^&"
EXPECT_EQ("\xef\xbc\x8e\xef\xbc\x81\xef\xbc\xa0\xef\xbc\x83\xef\xbc\x84\xef"
"\xbc\x85\xef\xbc\xbe\xef\xbc\x86", output);
// "京都東京ABCインターネット012"
manager->ConvertConversionString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4"
"\xba\xac\x41\x42\x43\xef\xbd\xb2\xef\xbe"
"\x9d\xef\xbe\x80\xef\xbd\xb0\xef\xbe\x88"
"\xef\xbd\xaf\xef\xbe\x84\x30\x31\x32",
&output);
// "京都東京ABCインターネット012"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xef\xbc\x90\xef\xbc\x91"
"\xef\xbc\x92", output);
// "グーグルABCインターネット012あいう"
manager->ConvertConversionString("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3"
"\x83\xab\x41\x42\x43\xef\xbd\xb2\xef\xbe"
"\x9d\xef\xbe\x80\xef\xbd\xb0\xef\xbe\x88"
"\xef\xbd\xaf\xef\xbe\x84\x30\x31\x32\xe3"
"\x81\x82\xe3\x81\x84\xe3\x81\x86",
&output);
// "グーグルABCインターネット012あいう"
EXPECT_EQ("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xef\xbc\x90\xef\xbc\x91"
"\xef\xbc\x92\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86", output);
// "[京都]{東京}ABC!インターネット"
manager->ConvertConversionString("\x5b\xe4\xba\xac\xe9\x83\xbd\x5d\x7b\xe6"
"\x9d\xb1\xe4\xba\xac\x7d\x41\x42\x43\x21"
"\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3"
"\x83\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83"
"\x88", &output);
// "[京都]{東京}ABC!インターネット"
EXPECT_EQ("\xef\xbc\xbb\xe4\xba\xac\xe9\x83\xbd\xef\xbc\xbd\xef\xbd\x9b\xe6"
"\x9d\xb1\xe4\xba\xac\xef\xbd\x9d\xef\xbc\xa1\xef\xbc\xa2\xef\xbc"
"\xa3\xef\xbc\x81\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc"
"\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// Set
// "カタカナ"
manager->SetCharacterForm("\xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab\xe3\x83\x8a",
config::Config::HALF_WIDTH);
manager->SetCharacterForm("012",
config::Config::HALF_WIDTH);
manager->SetCharacterForm("[",
config::Config::HALF_WIDTH);
manager->SetCharacterForm("/",
config::Config::HALF_WIDTH);
// "・"
manager->SetCharacterForm("\xe3\x83\xbb",
config::Config::HALF_WIDTH);
// "。"
manager->SetCharacterForm("\xe3\x80\x82",
config::Config::HALF_WIDTH);
// "、"
manager->SetCharacterForm("\xe3\x80\x81",
config::Config::HALF_WIDTH);
manager->SetCharacterForm("\\",
config::Config::HALF_WIDTH);
// retry
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "カタカナ"
manager->GetPreeditCharacterForm("\xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab"
"\xe3\x83\x8a"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("012"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("["));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("/"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "・"
manager->GetPreeditCharacterForm("\xe3\x83\xbb"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "。"
manager->GetPreeditCharacterForm("\xe3\x80\x82"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "、"
manager->GetPreeditCharacterForm("\xe3\x80\x81"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("\\"));
EXPECT_EQ(
config::Config::NO_CONVERSION,
// "ABC012ほげ"
manager->GetConversionCharacterForm("\x41\x42\x43\x30\x31\x32\xe3\x81\xbb"
"\xe3\x81\x92"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "カタカナ"
manager->GetConversionCharacterForm("\xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab"
"\xe3\x83\x8a"));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("012"));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("["));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("/"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "・"
manager->GetConversionCharacterForm("\xe3\x83\xbb"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "。"
manager->GetConversionCharacterForm("\xe3\x80\x82"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "、"
manager->GetConversionCharacterForm("\xe3\x80\x81"));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("\\"));
// "京都東京ABCインターネット"
manager->ConvertPreeditString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba"
"\xac\x41\x42\x43\xe3\x82\xa4\xe3\x83\xb3\xe3"
"\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3\x83\x83"
"\xe3\x83\x88", &output);
// "京都東京ABCインターネット"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "インターネット"
manager->ConvertPreeditString("\xef\xbd\xb2\xef\xbe\x9d\xef\xbe\x80\xef\xbd"
"\xb0\xef\xbe\x88\xef\xbd\xaf\xef\xbe\x84",
&output);
// "インターネット"
EXPECT_EQ("\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3"
"\x83\x83\xe3\x83\x88", output);
// "[]・。、"
manager->ConvertPreeditString("\x5b\x5d\xe3\x83\xbb\xe3\x80\x82\xe3\x80\x81",
&output);
// "[]・。、"
EXPECT_EQ("\xef\xbc\xbb\xef\xbc\xbd\xe3\x83\xbb\xe3\x80\x82\xe3\x80\x81",
output);
manager->ConvertPreeditString(".!@#$%^&", &output);
// ".!@#$%^&"
EXPECT_EQ("\xef\xbc\x8e\xef\xbc\x81\xef\xbc\xa0\xef\xbc\x83\xef\xbc\x84\xef"
"\xbc\x85\xef\xbc\xbe\xef\xbc\x86", output);
// "京都東京ABCインターネット"
manager->ConvertPreeditString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba"
"\xac\x41\x42\x43\xef\xbd\xb2\xef\xbe\x9d\xef"
"\xbe\x80\xef\xbd\xb0\xef\xbe\x88\xef\xbd\xaf"
"\xef\xbe\x84", &output);
// "京都東京ABCインターネット"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "グーグルABCインターネットあいう"
manager->ConvertPreeditString("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83"
"\xab\x41\x42\x43\xef\xbd\xb2\xef\xbe\x9d\xef"
"\xbe\x80\xef\xbd\xb0\xef\xbe\x88\xef\xbd\xaf"
"\xef\xbe\x84\xe3\x81\x82\xe3\x81\x84\xe3\x81"
"\x86", &output);
// "グーグルABCインターネットあいう"
EXPECT_EQ("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xe3\x81\x82\xe3\x81\x84"
"\xe3\x81\x86", output);
// "京都東京ABCインターネット"
manager->ConvertPreeditString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba"
"\xac\x41\x42\x43\xe3\x82\xa4\xe3\x83\xb3\xe3"
"\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3\x83\x83"
"\xe3\x83\x88", &output);
// "京都東京ABCインターネット"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "[京都]{東京}ABC!インターネット"
manager->ConvertPreeditString("\x5b\xe4\xba\xac\xe9\x83\xbd\x5d\x7b\xe6\x9d"
"\xb1\xe4\xba\xac\x7d\x41\x42\x43\x21\xe3\x82"
"\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3"
"\x83\x8d\xe3\x83\x83\xe3\x83\x88", &output);
// "[京都]{東京}ABC!インターネット"
EXPECT_EQ("\xef\xbc\xbb\xe4\xba\xac\xe9\x83\xbd\xef\xbc\xbd\xef\xbd\x9b\xe6"
"\x9d\xb1\xe4\xba\xac\xef\xbd\x9d\xef\xbc\xa1\xef\xbc\xa2\xef\xbc"
"\xa3\xef\xbc\x81\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc"
"\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "インターネット"
manager->ConvertConversionString("\xef\xbd\xb2\xef\xbe\x9d\xef\xbe\x80\xef"
"\xbd\xb0\xef\xbe\x88\xef\xbd\xaf\xef\xbe"
"\x84", &output);
// "インターネット"
EXPECT_EQ("\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3"
"\x83\x83\xe3\x83\x88", output);
// "[]・。、"
manager->ConvertConversionString("\x5b\x5d\xe3\x83\xbb\xe3\x80\x82\xe3\x80"
"\x81", &output);
// "[]・。、"
EXPECT_EQ("\x5b\x5d\xe3\x83\xbb\xe3\x80\x82\xe3\x80\x81", output);
manager->ConvertConversionString(".!@#$%^&", &output);
// ".!@#$%^&" will be ".!@#$%^&" by preference, but this is not
// consistent form. so we do not convert this.
EXPECT_EQ(".!@#$%^&", output);
// However we can convert separately.
manager->ConvertConversionString(".!", &output);
// ".!"
EXPECT_EQ("\xef\xbc\x8e\xef\xbc\x81", output);
manager->ConvertConversionString("@#$%^&", &output);
EXPECT_EQ("@#$%^&", output);
// "京都東京ABCインターネット"
manager->ConvertConversionString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4"
"\xba\xac\x41\x42\x43\xef\xbd\xb2\xef\xbe"
"\x9d\xef\xbe\x80\xef\xbd\xb0\xef\xbe\x88"
"\xef\xbd\xaf\xef\xbe\x84", &output);
// "京都東京ABCインターネット"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "グーグルABCインターネットあいう"
manager->ConvertConversionString("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3"
"\x83\xab\x41\x42\x43\xef\xbd\xb2\xef\xbe"
"\x9d\xef\xbe\x80\xef\xbd\xb0\xef\xbe\x88"
"\xef\xbd\xaf\xef\xbe\x84\xe3\x81\x82\xe3"
"\x81\x84\xe3\x81\x86", &output);
// "グーグルABCインターネットあいう"
EXPECT_EQ("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xe3\x81\x82\xe3\x81\x84"
"\xe3\x81\x86", output);
// "[京都]{東京}ABC!インターネット"
manager->ConvertConversionString("\x5b\xe4\xba\xac\xe9\x83\xbd\x5d\x7b\xe6"
"\x9d\xb1\xe4\xba\xac\x7d\x41\x42\x43\x21"
"\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3"
"\x83\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83"
"\x88", &output);
// "[京都]{東京}ABC!インターネット" will be
// "[京都]{東京}ABC!インターネット" by preference and this is
// not consistent
// "[京都]{東京}ABC!インターネット"
EXPECT_EQ("\x5b\xe4\xba\xac\xe9\x83\xbd\x5d\x7b\xe6\x9d\xb1\xe4"
"\xba\xac\x7d\x41\x42\x43\x21\xe3\x82\xa4\xe3\x83\xb3"
"\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3\x83\x83\xe3"
"\x83\x88", output);
// we can convert separately
// "[京都]{東京}ABC!インターネット"
// "[京都]{東京}"
manager->ConvertConversionString(
"\x5b\xe4\xba\xac\xe9\x83\xbd\x5d\x7b\xe6\x9d\xb1\xe4\xba\xac\x7d",
&output);
// "[京都]{東京}"
EXPECT_EQ("\x5b\xe4\xba\xac\xe9\x83\xbd\x5d\x7b\xe6\x9d\xb1\xe4\xba\xac\x7d",
output);
// "ABC!インターネット"
manager->ConvertConversionString(
"\x41\x42\x43\x21\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf"
"\xe3\x83\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", &output);
// "ABC!インターネット"
EXPECT_EQ("\xef\xbc\xa1\xef\xbc\xa2\xef\xbc\xa3\xef\xbc\x81\xe3\x82\xa4"
"\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3\x83\x83"
"\xe3\x83\x88", output);
// reset
// "カタカナ"
manager->SetCharacterForm("\xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab\xe3\x83\x8a",
config::Config::FULL_WIDTH);
manager->SetCharacterForm("012",
config::Config::FULL_WIDTH);
manager->SetCharacterForm("[",
config::Config::FULL_WIDTH);
manager->SetCharacterForm("/",
config::Config::FULL_WIDTH);
// "・"
manager->SetCharacterForm("\xe3\x83\xbb",
config::Config::FULL_WIDTH);
// "。"
manager->SetCharacterForm("\xe3\x80\x82",
config::Config::FULL_WIDTH);
// "、"
manager->SetCharacterForm("\xe3\x80\x81",
config::Config::FULL_WIDTH);
manager->SetCharacterForm("\\",
config::Config::FULL_WIDTH);
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "カタカナ"
manager->GetPreeditCharacterForm("\xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab"
"\xe3\x83\x8a"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("012"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("["));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("/"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "・"
manager->GetPreeditCharacterForm("\xe3\x83\xbb"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "。"
manager->GetPreeditCharacterForm("\xe3\x80\x82"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "、"
manager->GetPreeditCharacterForm("\xe3\x80\x81"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("\\"));
EXPECT_EQ(
config::Config::NO_CONVERSION,
// "ABC012ほげ"
manager->GetConversionCharacterForm("\x41\x42\x43\x30\x31\x32\xe3\x81"
"\xbb\xe3\x81\x92"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "カタカナ"
manager->GetConversionCharacterForm("\xe3\x82\xab\xe3\x82\xbf\xe3\x82\xab"
"\xe3\x83\x8a"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("012"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("["));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("/"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "・"
manager->GetConversionCharacterForm("\xe3\x83\xbb"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "。"
manager->GetConversionCharacterForm("\xe3\x80\x82"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
// "、"
manager->GetConversionCharacterForm("\xe3\x80\x81"));
EXPECT_EQ(
config::Config::NO_CONVERSION,
// "ABC012ほげ"
manager->GetConversionCharacterForm("\x41\x42\x43\x30\x31\x32\xe3\x81\xbb"
"\xe3\x81\x92"));
// "京都東京ABCインターネット"
manager->ConvertPreeditString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba"
"\xac\x41\x42\x43\xe3\x82\xa4\xe3\x83\xb3\xe3"
"\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3\x83\x83"
"\xe3\x83\x88", &output);
// "京都東京ABCインターネット"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "インターネット"
manager->ConvertPreeditString("\xef\xbd\xb2\xef\xbe\x9d\xef\xbe\x80\xef\xbd"
"\xb0\xef\xbe\x88\xef\xbd\xaf\xef\xbe\x84",
&output);
// "インターネット"
EXPECT_EQ("\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3"
"\x83\x83\xe3\x83\x88", output);
// "[]・。、"
manager->ConvertPreeditString("\x5b\x5d\xe3\x83\xbb\xe3\x80\x82\xe3\x80\x81",
&output);
// "[]・。、"
EXPECT_EQ("\xef\xbc\xbb\xef\xbc\xbd\xe3\x83\xbb\xe3\x80\x82\xe3\x80\x81",
output);
manager->ConvertPreeditString(".!@#$%^&", &output);
// ".!@#$%^&"
EXPECT_EQ("\xef\xbc\x8e\xef\xbc\x81\xef\xbc\xa0\xef\xbc\x83\xef\xbc\x84\xef"
"\xbc\x85\xef\xbc\xbe\xef\xbc\x86", output);
// "京都東京ABCインターネット012"
manager->ConvertPreeditString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba"
"\xac\x41\x42\x43\xef\xbd\xb2\xef\xbe\x9d\xef"
"\xbe\x80\xef\xbd\xb0\xef\xbe\x88\xef\xbd\xaf"
"\xef\xbe\x84\x30\x31\x32", &output);
// "京都東京ABCインターネット012"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xef\xbc\x90\xef\xbc\x91"
"\xef\xbc\x92", output);
// "グーグルABCインターネット012あいう"
manager->ConvertPreeditString("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83"
"\xab\x41\x42\x43\xef\xbd\xb2\xef\xbe\x9d\xef"
"\xbe\x80\xef\xbd\xb0\xef\xbe\x88\xef\xbd\xaf"
"\xef\xbe\x84\x30\x31\x32\xe3\x81\x82\xe3\x81"
"\x84\xe3\x81\x86", &output);
// "グーグルABCインターネット012あいう"
EXPECT_EQ("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xef\xbc\x90\xef\xbc\x91"
"\xef\xbc\x92\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86", output);
// "京都東京ABCインターネット"
manager->ConvertPreeditString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba"
"\xac\x41\x42\x43\xe3\x82\xa4\xe3\x83\xb3\xe3"
"\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3\x83\x83"
"\xe3\x83\x88", &output);
// "京都東京ABCインターネット"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "[京都]{東京}ABC!インターネット"
manager->ConvertPreeditString("\x5b\xe4\xba\xac\xe9\x83\xbd\x5d\x7b\xe6\x9d"
"\xb1\xe4\xba\xac\x7d\x41\x42\x43\x21\xe3\x82"
"\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3"
"\x83\x8d\xe3\x83\x83\xe3\x83\x88", &output);
// "[京都]{東京}ABC!インターネット"
EXPECT_EQ("\xef\xbc\xbb\xe4\xba\xac\xe9\x83\xbd\xef\xbc\xbd\xef\xbd\x9b\xe6"
"\x9d\xb1\xe4\xba\xac\xef\xbd\x9d\xef\xbc\xa1\xef\xbc\xa2\xef\xbc"
"\xa3\xef\xbc\x81\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc"
"\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
// "インターネット"
manager->ConvertConversionString("\xef\xbd\xb2\xef\xbe\x9d\xef\xbe\x80\xef"
"\xbd\xb0\xef\xbe\x88\xef\xbd\xaf\xef\xbe"
"\x84", &output);
// "インターネット"
EXPECT_EQ("\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8d\xe3"
"\x83\x83\xe3\x83\x88", output);
// "[]・。、"
manager->ConvertConversionString("\x5b\x5d\xe3\x83\xbb\xe3\x80\x82\xe3\x80"
"\x81", &output);
// "[]・。、"
EXPECT_EQ("\xef\xbc\xbb\xef\xbc\xbd\xe3\x83\xbb\xe3\x80\x82\xe3\x80\x81",
output);
manager->ConvertConversionString(".!@#$%^&", &output);
// ".!@#$%^&"
EXPECT_EQ("\xef\xbc\x8e\xef\xbc\x81\xef\xbc\xa0\xef\xbc\x83\xef\xbc\x84\xef"
"\xbc\x85\xef\xbc\xbe\xef\xbc\x86", output);
// "京都東京ABCインターネット012"
manager->ConvertConversionString("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4"
"\xba\xac\x41\x42\x43\xef\xbd\xb2\xef\xbe"
"\x9d\xef\xbe\x80\xef\xbd\xb0\xef\xbe\x88"
"\xef\xbd\xaf\xef\xbe\x84\x30\x31\x32",
&output);
// "京都東京ABCインターネット012"
EXPECT_EQ("\xe4\xba\xac\xe9\x83\xbd\xe6\x9d\xb1\xe4\xba\xac\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xef\xbc\x90\xef\xbc\x91"
"\xef\xbc\x92", output);
// "グーグルABCインターネット012あいう"
manager->ConvertConversionString("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3"
"\x83\xab\x41\x42\x43\xef\xbd\xb2\xef\xbe"
"\x9d\xef\xbe\x80\xef\xbd\xb0\xef\xbe\x88"
"\xef\xbd\xaf\xef\xbe\x84\x30\x31\x32\xe3"
"\x81\x82\xe3\x81\x84\xe3\x81\x86", &output);
// "グーグルABCインターネット012あいう"
EXPECT_EQ("\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\xef\xbc\xa1\xef"
"\xbc\xa2\xef\xbc\xa3\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83"
"\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88\xef\xbc\x90\xef\xbc\x91"
"\xef\xbc\x92\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86", output);
// "[京都]{東京}ABC!インターネット"
manager->ConvertConversionString("\x5b\xe4\xba\xac\xe9\x83\xbd\x5d\x7b\xe6"
"\x9d\xb1\xe4\xba\xac\x7d\x41\x42\x43\x21"
"\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3"
"\x83\xbc\xe3\x83\x8d\xe3\x83\x83\xe3\x83"
"\x88", &output);
// "[京都]{東京}ABC!インターネット"
EXPECT_EQ("\xef\xbc\xbb\xe4\xba\xac\xe9\x83\xbd\xef\xbc\xbd\xef\xbd\x9b\xe6"
"\x9d\xb1\xe4\xba\xac\xef\xbd\x9d\xef\xbc\xa1\xef\xbc\xa2\xef\xbc"
"\xa3\xef\xbc\x81\xe3\x82\xa4\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc"
"\xe3\x83\x8d\xe3\x83\x83\xe3\x83\x88", output);
}
TEST_F(CharacterFormManagerTest, MixedFormTest) {
CharacterFormManager *manager =
CharacterFormManager::GetCharacterFormManager();
manager->AddConversionRule("0", config::Config::FULL_WIDTH);
manager->AddConversionRule(".,", config::Config::HALF_WIDTH);
manager->AddPreeditRule("0", config::Config::FULL_WIDTH);
manager->AddPreeditRule(".,", config::Config::HALF_WIDTH);
string output;
manager->ConvertConversionString("1.23", &output);
EXPECT_EQ("1.23", output);
manager->ConvertPreeditString("1.23", &output);
// The period is half width here
// because require_consistent_conversion_ is false.
// "1.23"
EXPECT_EQ("\xef\xbc\x91\x2e\xef\xbc\x92\xef\xbc\x93", output);
}
TEST_F(CharacterFormManagerTest, GroupTest) {
CharacterFormManager *manager =
CharacterFormManager::GetCharacterFormManager();
{
manager->ClearHistory();
manager->Clear();
// "ア"
manager->AddConversionRule("\xe3\x82\xa2", config::Config::FULL_WIDTH);
// "ア"
manager->AddPreeditRule("\xe3\x82\xa2", config::Config::HALF_WIDTH);
manager->AddConversionRule("[]", config::Config::HALF_WIDTH);
manager->AddPreeditRule("[]", config::Config::FULL_WIDTH);
manager->AddConversionRule("!@#$%^&*()-=",
config::Config::FULL_WIDTH);
manager->AddConversionRule("!@#$%^&*()-=",
config::Config::HALF_WIDTH);
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("["));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("["));
EXPECT_EQ(
config::Config::HALF_WIDTH,
// "ア"
manager->GetPreeditCharacterForm("\xe3\x82\xa2"));
manager->SetCharacterForm("[",
config::Config::FULL_WIDTH);
// "ア"
manager->SetCharacterForm("\xe3\x82\xa2",
config::Config::FULL_WIDTH);
manager->SetCharacterForm("@",
config::Config::FULL_WIDTH);
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("["));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("["));
EXPECT_EQ(
config::Config::HALF_WIDTH,
// "ア"
manager->GetPreeditCharacterForm("\xe3\x82\xa2"));
}
{
manager->ClearHistory();
manager->Clear();
// "ア"
manager->AddConversionRule("\xe3\x82\xa2", config::Config::FULL_WIDTH);
manager->AddConversionRule("[]", config::Config::LAST_FORM);
manager->AddConversionRule("!@#$%^&*()-=",
config::Config::FULL_WIDTH);
EXPECT_EQ(
config::Config::FULL_WIDTH, // default
manager->GetConversionCharacterForm("["));
// same group
manager->SetCharacterForm("]",
config::Config::HALF_WIDTH);
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("["));
}
{
manager->ClearHistory();
manager->Clear();
// "ア"
manager->AddConversionRule("\xe3\x82\xa2", config::Config::FULL_WIDTH);
manager->AddConversionRule("[](){}", config::Config::LAST_FORM);
manager->AddConversionRule("!@#$%^&*-=",
config::Config::FULL_WIDTH);
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("{"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("}"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("("));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm(")"));
// same group
manager->SetCharacterForm(")",
config::Config::HALF_WIDTH);
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("{"));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("}"));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("("));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm(")"));
}
{
manager->ClearHistory();
manager->Clear();
// "ア"
manager->AddConversionRule("\xe3\x82\xa2", config::Config::FULL_WIDTH);
manager->AddConversionRule("[](){}", config::Config::LAST_FORM);
manager->AddPreeditRule("[](){}", config::Config::FULL_WIDTH);
manager->AddConversionRule("!@#$%^&*-=",
config::Config::FULL_WIDTH);
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("{"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("}"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm("("));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetConversionCharacterForm(")"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("{"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("}"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("("));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm(")"));
// same group
manager->SetCharacterForm(")",
config::Config::HALF_WIDTH);
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("{"));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("}"));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm("("));
EXPECT_EQ(
config::Config::HALF_WIDTH,
manager->GetConversionCharacterForm(")"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("{"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("}"));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm("("));
EXPECT_EQ(
config::Config::FULL_WIDTH,
manager->GetPreeditCharacterForm(")"));
}
}
TEST_F(CharacterFormManagerTest, GetFormTypesFromStringPair) {
CharacterFormManager::FormType f1, f2;
EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
"", &f1,
"", &f2));
EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
"abc", &f1,
"ab", &f2));
EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
"abc", &f1,
"abc", &f2));
EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
"12", &f1,
"12", &f2));
// EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
// "あいう", &f1,
// "あいう", &f2));
// EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
// "アイウ", &f1,
// "アイウ", &f2));
// EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
// "愛", &f1,
// "恋", &f2));
EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86", &f1,
"\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86", &f2));
EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE3\x82\xA2\xE3\x82\xA4\xE3\x82\xA6", &f1,
"\xE3\x82\xA2\xE3\x82\xA4\xE3\x82\xA6", &f2));
EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE6\x84\x9B", &f1,
"\xE6\x81\x8B", &f2));
// EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
// "ABC", &f1,
// "ABC", &f2));
EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
"ABC", &f1,
"\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3", &f2));
EXPECT_EQ(f1, CharacterFormManager::HALF_WIDTH);
EXPECT_EQ(f2, CharacterFormManager::FULL_WIDTH);
// EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
// "abc", &f1,
// "abc", &f2));
EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
"\xEF\xBD\x81\xEF\xBD\x82\xEF\xBD\x83", &f1,
"abc", &f2));
EXPECT_EQ(f1, CharacterFormManager::FULL_WIDTH);
EXPECT_EQ(f2, CharacterFormManager::HALF_WIDTH);
// EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
// "おばQ", &f1,
// "おばQ", &f2));
// EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
// "よろしくヨロシク", &f1,
// "よろしくヨロシク", &f2));
EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE3\x81\x8A\xE3\x81\xB0Q", &f1,
"\xE3\x81\x8A\xE3\x81\xB0\xEF\xBC\xB1", &f2));
EXPECT_EQ(f1, CharacterFormManager::HALF_WIDTH);
EXPECT_EQ(f2, CharacterFormManager::FULL_WIDTH);
EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE3\x82\x88\xE3\x82\x8D\xE3\x81\x97\xE3\x81\x8F"
"\xE3\x83\xA8\xE3\x83\xAD\xE3\x82\xB7\xE3\x82\xAF", &f1,
"\xE3\x82\x88\xE3\x82\x8D\xE3\x81\x97\xE3\x81\x8F"
"\xEF\xBE\x96\xEF\xBE\x9B\xEF\xBD\xBC\xEF\xBD\xB8", &f2));
EXPECT_EQ(f1, CharacterFormManager::FULL_WIDTH);
EXPECT_EQ(f2, CharacterFormManager::HALF_WIDTH);
// EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
// "よろしくグーグル", &f1,
// "よろしくグーグル", &f2));
// Voice sound mark
EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE3\x82\x88\xE3\x82\x8D\xE3\x81\x97\xE3\x81\x8F"
"\xE3\x82\xB0\xE3\x83\xBC\xE3\x82\xB0\xE3\x83\xAB", &f1,
"\xE3\x82\x88\xE3\x82\x8D\xE3\x81\x97\xE3\x81\x8F"
"\xEF\xBD\xB8\xEF\xBE\x9E\xEF\xBD\xB0\xEF\xBD\xB8"
"\xEF\xBE\x9E\xEF\xBE\x99", &f2));
EXPECT_EQ(f1, CharacterFormManager::FULL_WIDTH);
EXPECT_EQ(f2, CharacterFormManager::HALF_WIDTH);
// semi voice sound mark
// EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
// "カッパよろしくグーグル", &f1,
// "カッパよろしくグーグル", &f2));
EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE3\x82\xAB\xE3\x83\x83\xE3\x83\x91\xE3\x82\x88"
"\xE3\x82\x8D\xE3\x81\x97\xE3\x81\x8F\xE3\x82\xB0"
"\xE3\x83\xBC\xE3\x82\xB0\xE3\x83\xAB", &f1,
"\xEF\xBD\xB6\xEF\xBD\xAF\xEF\xBE\x8A\xEF\xBE\x9F"
"\xE3\x82\x88\xE3\x82\x8D\xE3\x81\x97\xE3\x81\x8F"
"\xEF\xBD\xB8\xEF\xBE\x9E\xEF\xBD\xB0\xEF\xBD\xB8"
"\xEF\xBE\x9E\xEF\xBE\x99", &f2));
EXPECT_EQ(f1, CharacterFormManager::FULL_WIDTH);
EXPECT_EQ(f2, CharacterFormManager::HALF_WIDTH);
// EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
// "ヨロシクQ", &f1,
// "ヨロシクQ", &f2));
EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE3\x83\xA8\xE3\x83\xAD\xE3\x82\xB7"
"\xE3\x82\xAF\xEF\xBC\xB1", &f1,
"\xEF\xBE\x96\xEF\xBE\x9B\xEF\xBD\xBC\xEF\xBD\xB8Q", &f2));
EXPECT_EQ(f1, CharacterFormManager::FULL_WIDTH);
EXPECT_EQ(f2, CharacterFormManager::HALF_WIDTH);
// mixed
// EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
// "ヨロシクQ", &f1,
// "ヨロシクQ", &f2));
EXPECT_FALSE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE3\x83\xA8\xE3\x83\xAD\xE3\x82\xB7\xE3\x82\xAFQ", &f1,
"\xEF\xBE\x96\xEF\xBE\x9B\xEF\xBD\xBC\xEF\xBD\xB8\xEF\xBC\xB1",
&f2));
// EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
// "京都Qぐーぐる", &f1,
// "京都Qぐーぐる", &f2));
EXPECT_TRUE(CharacterFormManager::GetFormTypesFromStringPair(
"\xE4\xBA\xAC\xE9\x83\xBDQ\xE3\x81\x90"
"\xE3\x83\xBC\xE3\x81\x90\xE3\x82\x8B", &f1,
"\xE4\xBA\xAC\xE9\x83\xBD\xEF\xBC\xB1"
"\xE3\x81\x90\xE3\x83\xBC\xE3\x81\x90\xE3\x82\x8B", &f2));
EXPECT_EQ(f1, CharacterFormManager::HALF_WIDTH);
EXPECT_EQ(f2, CharacterFormManager::FULL_WIDTH);
}
} // namespace config
} // namespace mozc