7 #include "../simpletest.h"
11 #include "../utf8_string.h"
12 #include "../TextArrayFormat.h"
14 bool utf8_multichar_test(smart_ptr<simpletest::CSimpleTestAsserter> asserter)
17 std::string tmp("あいuえお");
18 // マルチバイト文字列を正しく読みだせるかどうかのチェックを
20 smart_ptr<std::istream> ss(new std::stringstream(tmp));
22 utakata::utf8::CUTF8InputStream stream(ss);
25 utakata::utf8_string::CUTF8Char ch(stream.read());
26 asserter->check(ch.toUTF16Code(), utakata::utf8::generateUTF8Code("あ"));
27 // peekが問題なく働いていることのテスト
28 utakata::utf8_string::CUTF8Char ch2(stream.peek());
29 asserter->check(ch2.toUTF16Code(), utakata::utf8::generateUTF8Code("い"));
30 utakata::utf8_string::CUTF8Char ch3(stream.read());
31 asserter->check(ch3.toUTF16Code(), utakata::utf8::generateUTF8Code("い"));
33 // asciiだとしても問題無く読みだせるはず。
34 utakata::utf8_string::CUTF8Char ch4(stream.peek());
35 asserter->check(ch4.toUTF16Code(), 'u');
37 // 同一コードなので比較して同じになるはず。
38 asserter->check(ch == ch2, false, "chとch2が異なる");
39 asserter->check(ch < ch2, true , "chよりch2が大きいはず");
41 // 文字として直接返せる。ただし比較はstd::stringでしか行えない。
42 asserter->check(ch2.toStr(), "い");
44 return asserter->isOk();
47 bool utf8_string_test(smart_ptr<simpletest::CSimpleTestAsserter> asserter)
49 // マルチバイトとascii文字の混在文字も正しく扱うことのできる
52 std::string tmp("あいうえsssお");
54 smart_ptr<std::istream> ss(new std::stringstream(tmp));
55 utakata::utf8::CUTF8InputStream stream(ss);
57 utakata::utf8_string::CUTF8String str(stream.read(5));
58 asserter->check(str.begin()->toStr(), "あ");
59 asserter->check(str.size(), 5);
61 // 自分自身との加算でも問題ないことを確認する。
63 asserter->check(str[5].toStr(), "あ");
65 // 本当に基本的なもの以外は、同一の名前空間内に関数が用意されている。
66 // utf8_stringから返されるのは、UTF8のバイト列を設定した文字列であると
68 asserter->check(utakata::utf8_string::substring(str,0,2), "あい");
69 asserter->check(utakata::utf8_string::substring(str,1,2), "いう");
70 asserter->check(utakata::utf8_string::substring(str, 2), "うえsあいうえs");
72 // 文字列とするのは自身の関数だけで可能。
73 asserter->check(str.toStr(), "あいうえsあいうえs");
75 return asserter->isOk();
78 bool utf8_string_util_test(smart_ptr<simpletest::CSimpleTestAsserter> asserter)
80 // CUTF8Stringと共に利用するためのユーティリティ関数の操作を
83 std::string tmp("あいうえsssお");
85 smart_ptr<std::istream> ss(new std::stringstream(tmp));
86 utakata::utf8::CUTF8InputStream stream(ss);
88 utakata::utf8_string::CUTF8String str(stream.read(5));
89 utakata::utf8_string::CUTF8String str2(stream.read(3));
90 utakata::utf8_string::CUTF8String str3 = str;
93 str.insert(str.begin(), str2.begin(), str2.end());
94 asserter->check(str.toStr(), "ssおあいうえs");
96 str3.insert(str3.begin() + 1, str2.begin(), str2.begin() + 1);
97 asserter->check(str3.toStr(), "あsいうえs");
99 str3.insert(str3.end(), str2.begin(), str2.end());
100 asserter->check(str3.toStr(), "あsいうえsssお");
102 return asserter->isOk();
106 int main(int argc, char *argv[])
108 simpletest::CSimpleTestSuite suite("UTF-8 文字列テスト");
109 suite.addTester(sfcr::screate(utf8_multichar_test, suite.getAsserter()));
110 suite.addTester(sfcr::screate(utf8_string_test, suite.getAsserter()));
111 suite.addTester(sfcr::screate(utf8_string_util_test, suite.getAsserter()));