blob: bcea22674031b8a3a7b34b47b149322da1e7e5d1 [file] [log] [blame]
// Copyright 2010-2014, 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 <string>
#include "session/commands.pb.h"
#include "testing/base/public/googletest.h"
#include "testing/base/public/gunit.h"
#include "win32/base/string_util.h"
namespace mozc {
namespace win32 {
TEST(StringUtilTest, InvalidCases) {
EXPECT_EQ("", StringUtil::KeyToReadingA(""));
// KeyToReadingA fails if the resultant string is longer than 512 characters.
string longa(10000, 'a');
EXPECT_EQ("", StringUtil::KeyToReadingA(longa.c_str()));
}
TEST(StringUtilTest, Hiragana) {
// "ア", "あ"
EXPECT_EQ("\xef\xbd\xb1", StringUtil::KeyToReadingA("\xe3\x81\x82"));
// "イ", "い"
EXPECT_EQ("\xef\xbd\xb2", StringUtil::KeyToReadingA("\xe3\x81\x84"));
// "ウ", "う"
EXPECT_EQ("\xef\xbd\xb3", StringUtil::KeyToReadingA("\xe3\x81\x86"));
// "エ", "え"
EXPECT_EQ("\xef\xbd\xb4", StringUtil::KeyToReadingA("\xe3\x81\x88"));
// "オ", "お"
EXPECT_EQ("\xef\xbd\xb5", StringUtil::KeyToReadingA("\xe3\x81\x8a"));
// "ァ", "ぁ"
EXPECT_EQ("\xef\xbd\xa7", StringUtil::KeyToReadingA("\xe3\x81\x81"));
// "ィ", "ぃ"
EXPECT_EQ("\xef\xbd\xa8", StringUtil::KeyToReadingA("\xe3\x81\x83"));
// "ゥ", "ぅ"
EXPECT_EQ("\xef\xbd\xa9", StringUtil::KeyToReadingA("\xe3\x81\x85"));
// "ェ", "ぇ"
EXPECT_EQ("\xef\xbd\xaa", StringUtil::KeyToReadingA("\xe3\x81\x87"));
// "ォ", "ぉ"
EXPECT_EQ("\xef\xbd\xab", StringUtil::KeyToReadingA("\xe3\x81\x89"));
// "カ", "か"
EXPECT_EQ("\xef\xbd\xb6", StringUtil::KeyToReadingA("\xe3\x81\x8b"));
// "キ", "き"
EXPECT_EQ("\xef\xbd\xb7", StringUtil::KeyToReadingA("\xe3\x81\x8d"));
// "ク", "く"
EXPECT_EQ("\xef\xbd\xb8", StringUtil::KeyToReadingA("\xe3\x81\x8f"));
// "ケ", "け"
EXPECT_EQ("\xef\xbd\xb9", StringUtil::KeyToReadingA("\xe3\x81\x91"));
// "コ", "こ"
EXPECT_EQ("\xef\xbd\xba", StringUtil::KeyToReadingA("\xe3\x81\x93"));
// "ガ", "が"
EXPECT_EQ("\xef\xbd\xb6\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x8c"));
// "ギ", "ぎ"
EXPECT_EQ("\xef\xbd\xb7\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x8e"));
// "グ", "ぐ"
EXPECT_EQ("\xef\xbd\xb8\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x90"));
// "ゲ", "げ"
EXPECT_EQ("\xef\xbd\xb9\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x92"));
// "ゴ", "ご"
EXPECT_EQ("\xef\xbd\xba\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x94"));
// "サ", "さ"
EXPECT_EQ("\xef\xbd\xbb", StringUtil::KeyToReadingA("\xe3\x81\x95"));
// "シ", "し"
EXPECT_EQ("\xef\xbd\xbc", StringUtil::KeyToReadingA("\xe3\x81\x97"));
// "ス", "す"
EXPECT_EQ("\xef\xbd\xbd", StringUtil::KeyToReadingA("\xe3\x81\x99"));
// "セ", "せ"
EXPECT_EQ("\xef\xbd\xbe", StringUtil::KeyToReadingA("\xe3\x81\x9b"));
// "ソ", "そ"
EXPECT_EQ("\xef\xbd\xbf", StringUtil::KeyToReadingA("\xe3\x81\x9d"));
// "ザ", "ざ"
EXPECT_EQ("\xef\xbd\xbb\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x96"));
// "ジ", "じ"
EXPECT_EQ("\xef\xbd\xbc\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x98"));
// "ズ", "ず"
EXPECT_EQ("\xef\xbd\xbd\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x9a"));
// "ゼ", "ぜ"
EXPECT_EQ("\xef\xbd\xbe\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x9c"));
// "ゾ", "ぞ"
EXPECT_EQ("\xef\xbd\xbf\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\x9e"));
// "タ", "た"
EXPECT_EQ("\xef\xbe\x80", StringUtil::KeyToReadingA("\xe3\x81\x9f"));
// "チ", "ち"
EXPECT_EQ("\xef\xbe\x81", StringUtil::KeyToReadingA("\xe3\x81\xa1"));
// "ツ", "つ"
EXPECT_EQ("\xef\xbe\x82", StringUtil::KeyToReadingA("\xe3\x81\xa4"));
// "テ", "て"
EXPECT_EQ("\xef\xbe\x83", StringUtil::KeyToReadingA("\xe3\x81\xa6"));
// "ト", "と"
EXPECT_EQ("\xef\xbe\x84", StringUtil::KeyToReadingA("\xe3\x81\xa8"));
// "ダ", "だ"
EXPECT_EQ("\xef\xbe\x80\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xa0"));
// "ヂ", "ぢ"
EXPECT_EQ("\xef\xbe\x81\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xa2"));
// "ヅ", "づ"
EXPECT_EQ("\xef\xbe\x82\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xa5"));
// "デ", "で"
EXPECT_EQ("\xef\xbe\x83\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xa7"));
// "ド", "ど"
EXPECT_EQ("\xef\xbe\x84\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xa9"));
// "ッ", "っ"
EXPECT_EQ("\xef\xbd\xaf", StringUtil::KeyToReadingA("\xe3\x81\xa3"));
// "ナ", "な"
EXPECT_EQ("\xef\xbe\x85", StringUtil::KeyToReadingA("\xe3\x81\xaa"));
// "ニ", "に"
EXPECT_EQ("\xef\xbe\x86", StringUtil::KeyToReadingA("\xe3\x81\xab"));
// "ヌ", "ぬ"
EXPECT_EQ("\xef\xbe\x87", StringUtil::KeyToReadingA("\xe3\x81\xac"));
// "ネ", "ね"
EXPECT_EQ("\xef\xbe\x88", StringUtil::KeyToReadingA("\xe3\x81\xad"));
// "ノ", "の"
EXPECT_EQ("\xef\xbe\x89", StringUtil::KeyToReadingA("\xe3\x81\xae"));
// "ハ", "は"
EXPECT_EQ("\xef\xbe\x8a", StringUtil::KeyToReadingA("\xe3\x81\xaf"));
// "ヒ", "ひ"
EXPECT_EQ("\xef\xbe\x8b", StringUtil::KeyToReadingA("\xe3\x81\xb2"));
// "フ", "ふ"
EXPECT_EQ("\xef\xbe\x8c", StringUtil::KeyToReadingA("\xe3\x81\xb5"));
// "ヘ", "へ"
EXPECT_EQ("\xef\xbe\x8d", StringUtil::KeyToReadingA("\xe3\x81\xb8"));
// "ホ", "ほ"
EXPECT_EQ("\xef\xbe\x8e", StringUtil::KeyToReadingA("\xe3\x81\xbb"));
// "バ", "ば"
EXPECT_EQ("\xef\xbe\x8a\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xb0"));
// "ビ", "び"
EXPECT_EQ("\xef\xbe\x8b\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xb3"));
// "ブ", "ぶ"
EXPECT_EQ("\xef\xbe\x8c\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xb6"));
// "ベ", "べ"
EXPECT_EQ("\xef\xbe\x8d\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xb9"));
// "ボ", "ぼ"
EXPECT_EQ("\xef\xbe\x8e\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x81\xbc"));
// "パ", "ぱ"
EXPECT_EQ("\xef\xbe\x8a\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x81\xb1"));
// "ピ", "ぴ"
EXPECT_EQ("\xef\xbe\x8b\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x81\xb4"));
// "プ", "ぷ"
EXPECT_EQ("\xef\xbe\x8c\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x81\xb7"));
// "ペ", "ぺ"
EXPECT_EQ("\xef\xbe\x8d\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x81\xba"));
// "ポ", "ぽ"
EXPECT_EQ("\xef\xbe\x8e\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x81\xbd"));
// "マ", "ま"
EXPECT_EQ("\xef\xbe\x8f", StringUtil::KeyToReadingA("\xe3\x81\xbe"));
// "ミ", "み"
EXPECT_EQ("\xef\xbe\x90", StringUtil::KeyToReadingA("\xe3\x81\xbf"));
// "ム", "む"
EXPECT_EQ("\xef\xbe\x91", StringUtil::KeyToReadingA("\xe3\x82\x80"));
// "メ", "め"
EXPECT_EQ("\xef\xbe\x92", StringUtil::KeyToReadingA("\xe3\x82\x81"));
// "モ", "も"
EXPECT_EQ("\xef\xbe\x93", StringUtil::KeyToReadingA("\xe3\x82\x82"));
// "ヤ", "や"
EXPECT_EQ("\xef\xbe\x94", StringUtil::KeyToReadingA("\xe3\x82\x84"));
// "ユ", "ゆ"
EXPECT_EQ("\xef\xbe\x95", StringUtil::KeyToReadingA("\xe3\x82\x86"));
// "ヨ", "よ"
EXPECT_EQ("\xef\xbe\x96", StringUtil::KeyToReadingA("\xe3\x82\x88"));
// "ャ", "ゃ"
EXPECT_EQ("\xef\xbd\xac", StringUtil::KeyToReadingA("\xe3\x82\x83"));
// "ュ", "ゅ"
EXPECT_EQ("\xef\xbd\xad", StringUtil::KeyToReadingA("\xe3\x82\x85"));
// "ョ", "ょ"
EXPECT_EQ("\xef\xbd\xae", StringUtil::KeyToReadingA("\xe3\x82\x87"));
// "ワ", "わ"
EXPECT_EQ("\xef\xbe\x9c", StringUtil::KeyToReadingA("\xe3\x82\x8f"));
// "ヲ", "を"
EXPECT_EQ("\xef\xbd\xa6", StringUtil::KeyToReadingA("\xe3\x82\x92"));
// "ン", "ん"
EXPECT_EQ("\xef\xbe\x9d", StringUtil::KeyToReadingA("\xe3\x82\x93"));
}
TEST(StringUtilTest, Katakana) {
// "ア", "ア"
EXPECT_EQ("\xef\xbd\xb1", StringUtil::KeyToReadingA("\xe3\x82\xa2"));
// "イ", "イ"
EXPECT_EQ("\xef\xbd\xb2", StringUtil::KeyToReadingA("\xe3\x82\xa4"));
// "ウ", "ウ"
EXPECT_EQ("\xef\xbd\xb3", StringUtil::KeyToReadingA("\xe3\x82\xa6"));
// "エ", "エ"
EXPECT_EQ("\xef\xbd\xb4", StringUtil::KeyToReadingA("\xe3\x82\xa8"));
// "オ", "オ"
EXPECT_EQ("\xef\xbd\xb5", StringUtil::KeyToReadingA("\xe3\x82\xaa"));
// "カ", "カ"
EXPECT_EQ("\xef\xbd\xb6", StringUtil::KeyToReadingA("\xe3\x82\xab"));
// "キ", "キ"
EXPECT_EQ("\xef\xbd\xb7", StringUtil::KeyToReadingA("\xe3\x82\xad"));
// "ク", "ク"
EXPECT_EQ("\xef\xbd\xb8", StringUtil::KeyToReadingA("\xe3\x82\xaf"));
// "ケ", "ケ"
EXPECT_EQ("\xef\xbd\xb9", StringUtil::KeyToReadingA("\xe3\x82\xb1"));
// "コ", "コ"
EXPECT_EQ("\xef\xbd\xba", StringUtil::KeyToReadingA("\xe3\x82\xb3"));
// "ガ", "ガ"
EXPECT_EQ("\xef\xbd\xb6\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xac"));
// "ギ", "ギ"
EXPECT_EQ("\xef\xbd\xb7\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xae"));
// "グ", "グ"
EXPECT_EQ("\xef\xbd\xb8\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xb0"));
// "ゲ", "ゲ"
EXPECT_EQ("\xef\xbd\xb9\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xb2"));
// "ゴ", "ゴ"
EXPECT_EQ("\xef\xbd\xba\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xb4"));
// "サ", "サ"
EXPECT_EQ("\xef\xbd\xbb", StringUtil::KeyToReadingA("\xe3\x82\xb5"));
// "シ", "シ"
EXPECT_EQ("\xef\xbd\xbc", StringUtil::KeyToReadingA("\xe3\x82\xb7"));
// "ス", "ス"
EXPECT_EQ("\xef\xbd\xbd", StringUtil::KeyToReadingA("\xe3\x82\xb9"));
// "セ", "セ"
EXPECT_EQ("\xef\xbd\xbe", StringUtil::KeyToReadingA("\xe3\x82\xbb"));
// "ソ", "ソ"
EXPECT_EQ("\xef\xbd\xbf", StringUtil::KeyToReadingA("\xe3\x82\xbd"));
// "ザ", "ザ"
EXPECT_EQ("\xef\xbd\xbb\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xb6"));
// "ジ", "ジ"
EXPECT_EQ("\xef\xbd\xbc\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xb8"));
// "ズ", "ズ"
EXPECT_EQ("\xef\xbd\xbd\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xba"));
// "ゼ", "ゼ"
EXPECT_EQ("\xef\xbd\xbe\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xbc"));
// "ゾ", "ゾ"
EXPECT_EQ("\xef\xbd\xbf\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x82\xbe"));
// "タ", "タ"
EXPECT_EQ("\xef\xbe\x80", StringUtil::KeyToReadingA("\xe3\x82\xbf"));
// "チ", "チ"
EXPECT_EQ("\xef\xbe\x81", StringUtil::KeyToReadingA("\xe3\x83\x81"));
// "ツ", "ツ"
EXPECT_EQ("\xef\xbe\x82", StringUtil::KeyToReadingA("\xe3\x83\x84"));
// "テ", "テ"
EXPECT_EQ("\xef\xbe\x83", StringUtil::KeyToReadingA("\xe3\x83\x86"));
// "ト", "ト"
EXPECT_EQ("\xef\xbe\x84", StringUtil::KeyToReadingA("\xe3\x83\x88"));
// "ダ", "ダ"
EXPECT_EQ("\xef\xbe\x80\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x80"));
// "ヂ", "ヂ"
EXPECT_EQ("\xef\xbe\x81\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x82"));
// "ヅ", "ヅ"
EXPECT_EQ("\xef\xbe\x82\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x85"));
// "デ", "デ"
EXPECT_EQ("\xef\xbe\x83\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x87"));
// "ド", "ド"
EXPECT_EQ("\xef\xbe\x84\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x89"));
// "ナ", "ナ"
EXPECT_EQ("\xef\xbe\x85", StringUtil::KeyToReadingA("\xe3\x83\x8a"));
// "ニ", "ニ"
EXPECT_EQ("\xef\xbe\x86", StringUtil::KeyToReadingA("\xe3\x83\x8b"));
// "ヌ", "ヌ"
EXPECT_EQ("\xef\xbe\x87", StringUtil::KeyToReadingA("\xe3\x83\x8c"));
// "ネ", "ネ"
EXPECT_EQ("\xef\xbe\x88", StringUtil::KeyToReadingA("\xe3\x83\x8d"));
// "ノ", "ノ"
EXPECT_EQ("\xef\xbe\x89", StringUtil::KeyToReadingA("\xe3\x83\x8e"));
// "ハ", "ハ"
EXPECT_EQ("\xef\xbe\x8a", StringUtil::KeyToReadingA("\xe3\x83\x8f"));
// "ヒ", "ヒ"
EXPECT_EQ("\xef\xbe\x8b", StringUtil::KeyToReadingA("\xe3\x83\x92"));
// "フ", "フ"
EXPECT_EQ("\xef\xbe\x8c", StringUtil::KeyToReadingA("\xe3\x83\x95"));
// "ヘ", "ヘ"
EXPECT_EQ("\xef\xbe\x8d", StringUtil::KeyToReadingA("\xe3\x83\x98"));
// "ホ", "ホ"
EXPECT_EQ("\xef\xbe\x8e", StringUtil::KeyToReadingA("\xe3\x83\x9b"));
// "バ", "バ"
EXPECT_EQ("\xef\xbe\x8a\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x90"));
// "ビ", "ビ"
EXPECT_EQ("\xef\xbe\x8b\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x93"));
// "ブ", "ブ"
EXPECT_EQ("\xef\xbe\x8c\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x96"));
// "ベ", "ベ"
EXPECT_EQ("\xef\xbe\x8d\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x99"));
// "ボ", "ボ"
EXPECT_EQ("\xef\xbe\x8e\xef\xbe\x9e",
StringUtil::KeyToReadingA("\xe3\x83\x9c"));
// "パ", "パ"
EXPECT_EQ("\xef\xbe\x8a\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x83\x91"));
// "ピ", "ピ"
EXPECT_EQ("\xef\xbe\x8b\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x83\x94"));
// "プ", "プ"
EXPECT_EQ("\xef\xbe\x8c\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x83\x97"));
// "ペ", "ペ"
EXPECT_EQ("\xef\xbe\x8d\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x83\x9a"));
// "ポ", "ポ"
EXPECT_EQ("\xef\xbe\x8e\xef\xbe\x9f",
StringUtil::KeyToReadingA("\xe3\x83\x9d"));
// "マ", "マ"
EXPECT_EQ("\xef\xbe\x8f", StringUtil::KeyToReadingA("\xe3\x83\x9e"));
// "ミ", "ミ"
EXPECT_EQ("\xef\xbe\x90", StringUtil::KeyToReadingA("\xe3\x83\x9f"));
// "ム", "ム"
EXPECT_EQ("\xef\xbe\x91", StringUtil::KeyToReadingA("\xe3\x83\xa0"));
// "メ", "メ"
EXPECT_EQ("\xef\xbe\x92", StringUtil::KeyToReadingA("\xe3\x83\xa1"));
// "モ", "モ"
EXPECT_EQ("\xef\xbe\x93", StringUtil::KeyToReadingA("\xe3\x83\xa2"));
// "ヤ", "ヤ"
EXPECT_EQ("\xef\xbe\x94", StringUtil::KeyToReadingA("\xe3\x83\xa4"));
// "ユ", "ユ"
EXPECT_EQ("\xef\xbe\x95", StringUtil::KeyToReadingA("\xe3\x83\xa6"));
// "ヨ", "ヨ"
EXPECT_EQ("\xef\xbe\x96", StringUtil::KeyToReadingA("\xe3\x83\xa8"));
// "ワ", "ワ"
EXPECT_EQ("\xef\xbe\x9c", StringUtil::KeyToReadingA("\xe3\x83\xaf"));
// "ヲ", "ヲ"
EXPECT_EQ("\xef\xbd\xa6", StringUtil::KeyToReadingA("\xe3\x83\xb2"));
// "ン", "ン"
EXPECT_EQ("\xef\xbe\x9d", StringUtil::KeyToReadingA("\xe3\x83\xb3"));
}
TEST(StringUtilTest, AlphaNumeric) {
// "!"
EXPECT_EQ("!", StringUtil::KeyToReadingA("\xef\xbc\x81"));
// "¥"
EXPECT_EQ("\"", StringUtil::KeyToReadingA("\xe2\x80\x9d"));
// "#"
EXPECT_EQ("#", StringUtil::KeyToReadingA("\xef\xbc\x83"));
// "$"
EXPECT_EQ("$", StringUtil::KeyToReadingA("\xef\xbc\x84"));
// "%"
EXPECT_EQ("%", StringUtil::KeyToReadingA("\xef\xbc\x85"));
// "&"
EXPECT_EQ("&", StringUtil::KeyToReadingA("\xef\xbc\x86"));
// "’"
EXPECT_EQ("'", StringUtil::KeyToReadingA("\xe2\x80\x99"));
// "("
EXPECT_EQ("(", StringUtil::KeyToReadingA("\xef\xbc\x88"));
// ")"
EXPECT_EQ(")", StringUtil::KeyToReadingA("\xef\xbc\x89"));
// "="
EXPECT_EQ("=", StringUtil::KeyToReadingA("\xef\xbc\x9d"));
// "-"
EXPECT_EQ("-", StringUtil::KeyToReadingA("\xef\xbc\x8d"));
// "~"
EXPECT_EQ("~", StringUtil::KeyToReadingA("\xef\xbd\x9e"));
// "^"
EXPECT_EQ("^", StringUtil::KeyToReadingA("\xef\xbc\xbe"));
// "|"
EXPECT_EQ("|", StringUtil::KeyToReadingA("\xef\xbd\x9c"));
// "¥"
EXPECT_EQ("\\", StringUtil::KeyToReadingA("\xef\xbf\xa5"));
// "‘"
EXPECT_EQ("`", StringUtil::KeyToReadingA("\xe2\x80\x98"));
// "゙", "゛"
EXPECT_EQ("\xef\xbe\x9e", StringUtil::KeyToReadingA("\xe3\x82\x9b"));
// "@"
EXPECT_EQ("@", StringUtil::KeyToReadingA("\xef\xbc\xa0"));
// "{"
EXPECT_EQ("{", StringUtil::KeyToReadingA("\xef\xbd\x9b"));
// "「", "「"
EXPECT_EQ("\xef\xbd\xa2", StringUtil::KeyToReadingA("\xe3\x80\x8c"));
// "+"
EXPECT_EQ("+", StringUtil::KeyToReadingA("\xef\xbc\x8b"));
// ";"
EXPECT_EQ(";", StringUtil::KeyToReadingA("\xef\xbc\x9b"));
// "*"
EXPECT_EQ("*", StringUtil::KeyToReadingA("\xef\xbc\x8a"));
// ":"
EXPECT_EQ(":", StringUtil::KeyToReadingA("\xef\xbc\x9a"));
// "}"
EXPECT_EQ("}", StringUtil::KeyToReadingA("\xef\xbd\x9d"));
// "」", "」"
EXPECT_EQ("\xef\xbd\xa3", StringUtil::KeyToReadingA("\xe3\x80\x8d"));
// "<"
EXPECT_EQ("<", StringUtil::KeyToReadingA("\xef\xbc\x9c"));
// "、", "、"
EXPECT_EQ("\xef\xbd\xa4", StringUtil::KeyToReadingA("\xe3\x80\x81"));
// ">"
EXPECT_EQ(">", StringUtil::KeyToReadingA("\xef\xbc\x9e"));
// "。", "。"
EXPECT_EQ("\xef\xbd\xa1", StringUtil::KeyToReadingA("\xe3\x80\x82"));
// "?"
EXPECT_EQ("?", StringUtil::KeyToReadingA("\xef\xbc\x9f"));
// "・", "・"
EXPECT_EQ("\xef\xbd\xa5", StringUtil::KeyToReadingA("\xe3\x83\xbb"));
// "_"
EXPECT_EQ("_", StringUtil::KeyToReadingA("\xef\xbc\xbf"));
// "1"
EXPECT_EQ("1", StringUtil::KeyToReadingA("\xef\xbc\x91"));
// "2"
EXPECT_EQ("2", StringUtil::KeyToReadingA("\xef\xbc\x92"));
// "3"
EXPECT_EQ("3", StringUtil::KeyToReadingA("\xef\xbc\x93"));
// "4"
EXPECT_EQ("4", StringUtil::KeyToReadingA("\xef\xbc\x94"));
// "5"
EXPECT_EQ("5", StringUtil::KeyToReadingA("\xef\xbc\x95"));
// "6"
EXPECT_EQ("6", StringUtil::KeyToReadingA("\xef\xbc\x96"));
// "7"
EXPECT_EQ("7", StringUtil::KeyToReadingA("\xef\xbc\x97"));
// "8"
EXPECT_EQ("8", StringUtil::KeyToReadingA("\xef\xbc\x98"));
// "9"
EXPECT_EQ("9", StringUtil::KeyToReadingA("\xef\xbc\x99"));
// "0"
EXPECT_EQ("0", StringUtil::KeyToReadingA("\xef\xbc\x90"));
// "a"
EXPECT_EQ("a", StringUtil::KeyToReadingA("\xef\xbd\x81"));
// "b"
EXPECT_EQ("b", StringUtil::KeyToReadingA("\xef\xbd\x82"));
// "c"
EXPECT_EQ("c", StringUtil::KeyToReadingA("\xef\xbd\x83"));
// "d"
EXPECT_EQ("d", StringUtil::KeyToReadingA("\xef\xbd\x84"));
// "e"
EXPECT_EQ("e", StringUtil::KeyToReadingA("\xef\xbd\x85"));
// "f"
EXPECT_EQ("f", StringUtil::KeyToReadingA("\xef\xbd\x86"));
// "g"
EXPECT_EQ("g", StringUtil::KeyToReadingA("\xef\xbd\x87"));
// "h"
EXPECT_EQ("h", StringUtil::KeyToReadingA("\xef\xbd\x88"));
// "i"
EXPECT_EQ("i", StringUtil::KeyToReadingA("\xef\xbd\x89"));
// "j"
EXPECT_EQ("j", StringUtil::KeyToReadingA("\xef\xbd\x8a"));
// "k"
EXPECT_EQ("k", StringUtil::KeyToReadingA("\xef\xbd\x8b"));
// "l"
EXPECT_EQ("l", StringUtil::KeyToReadingA("\xef\xbd\x8c"));
// "m"
EXPECT_EQ("m", StringUtil::KeyToReadingA("\xef\xbd\x8d"));
// "n"
EXPECT_EQ("n", StringUtil::KeyToReadingA("\xef\xbd\x8e"));
// "o"
EXPECT_EQ("o", StringUtil::KeyToReadingA("\xef\xbd\x8f"));
// "p"
EXPECT_EQ("p", StringUtil::KeyToReadingA("\xef\xbd\x90"));
// "q"
EXPECT_EQ("q", StringUtil::KeyToReadingA("\xef\xbd\x91"));
// "r"
EXPECT_EQ("r", StringUtil::KeyToReadingA("\xef\xbd\x92"));
// "s"
EXPECT_EQ("s", StringUtil::KeyToReadingA("\xef\xbd\x93"));
// "t"
EXPECT_EQ("t", StringUtil::KeyToReadingA("\xef\xbd\x94"));
// "u"
EXPECT_EQ("u", StringUtil::KeyToReadingA("\xef\xbd\x95"));
// "v"
EXPECT_EQ("v", StringUtil::KeyToReadingA("\xef\xbd\x96"));
// "w"
EXPECT_EQ("w", StringUtil::KeyToReadingA("\xef\xbd\x97"));
// "x"
EXPECT_EQ("x", StringUtil::KeyToReadingA("\xef\xbd\x98"));
// "y"
EXPECT_EQ("y", StringUtil::KeyToReadingA("\xef\xbd\x99"));
// "z"
EXPECT_EQ("z", StringUtil::KeyToReadingA("\xef\xbd\x9a"));
// "A"
EXPECT_EQ("A", StringUtil::KeyToReadingA("\xef\xbc\xa1"));
// "B"
EXPECT_EQ("B", StringUtil::KeyToReadingA("\xef\xbc\xa2"));
// "C"
EXPECT_EQ("C", StringUtil::KeyToReadingA("\xef\xbc\xa3"));
// "D"
EXPECT_EQ("D", StringUtil::KeyToReadingA("\xef\xbc\xa4"));
// "E"
EXPECT_EQ("E", StringUtil::KeyToReadingA("\xef\xbc\xa5"));
// "F"
EXPECT_EQ("F", StringUtil::KeyToReadingA("\xef\xbc\xa6"));
// "G"
EXPECT_EQ("G", StringUtil::KeyToReadingA("\xef\xbc\xa7"));
// "H"
EXPECT_EQ("H", StringUtil::KeyToReadingA("\xef\xbc\xa8"));
// "I"
EXPECT_EQ("I", StringUtil::KeyToReadingA("\xef\xbc\xa9"));
// "J"
EXPECT_EQ("J", StringUtil::KeyToReadingA("\xef\xbc\xaa"));
// "K"
EXPECT_EQ("K", StringUtil::KeyToReadingA("\xef\xbc\xab"));
// "L"
EXPECT_EQ("L", StringUtil::KeyToReadingA("\xef\xbc\xac"));
// "M"
EXPECT_EQ("M", StringUtil::KeyToReadingA("\xef\xbc\xad"));
// "N"
EXPECT_EQ("N", StringUtil::KeyToReadingA("\xef\xbc\xae"));
// "O"
EXPECT_EQ("O", StringUtil::KeyToReadingA("\xef\xbc\xaf"));
// "P"
EXPECT_EQ("P", StringUtil::KeyToReadingA("\xef\xbc\xb0"));
// "Q"
EXPECT_EQ("Q", StringUtil::KeyToReadingA("\xef\xbc\xb1"));
// "R"
EXPECT_EQ("R", StringUtil::KeyToReadingA("\xef\xbc\xb2"));
// "S"
EXPECT_EQ("S", StringUtil::KeyToReadingA("\xef\xbc\xb3"));
// "T"
EXPECT_EQ("T", StringUtil::KeyToReadingA("\xef\xbc\xb4"));
// "U"
EXPECT_EQ("U", StringUtil::KeyToReadingA("\xef\xbc\xb5"));
// "V"
EXPECT_EQ("V", StringUtil::KeyToReadingA("\xef\xbc\xb6"));
// "W"
EXPECT_EQ("W", StringUtil::KeyToReadingA("\xef\xbc\xb7"));
// "X"
EXPECT_EQ("X", StringUtil::KeyToReadingA("\xef\xbc\xb8"));
// "Y"
EXPECT_EQ("Y", StringUtil::KeyToReadingA("\xef\xbc\xb9"));
// "Z"
EXPECT_EQ("Z", StringUtil::KeyToReadingA("\xef\xbc\xba"));
}
TEST(StringUtilTest, LCMapStringATest) {
DWORD lcid = MAKELCID(MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT),
SORT_JAPANESE_XJIS);
char buf[512];
// backquote
size_t len = LCMapStringA(lcid, LCMAP_HALFWIDTH, "\x81\x65", -1, buf,
sizeof(buf));
EXPECT_EQ(2, len);
// LCMapStringA converts "\x81\x65" (backquote) to ' for some reason.
// EXPECT_EQ('`', buf[0]);
EXPECT_EQ('\'', buf[0]);
// quote
len = LCMapStringA(lcid, LCMAP_HALFWIDTH, "\x81\x66", -1, buf,
sizeof(buf));
EXPECT_EQ(2, len);
EXPECT_EQ('\'', buf[0]);
}
TEST(StringUtilTest, ComposePreeditText) {
commands::Preedit preedit;
preedit.add_segment()->set_value("a");
preedit.add_segment()->set_value("b");
preedit.add_segment()->set_value("c");
EXPECT_EQ(L"abc", StringUtil::ComposePreeditText(preedit));
}
} // namespace win32
} // namespace mozc