unit testStringUnit;
interface
uses
StringUnit,
ConstUnit,
XPtest,
end_uses;
procedure testByteType;
procedure testCharToByteLen;
procedure testStringTextPartsCompare;
procedure testRangeAnsiPosForwardBackward;
procedure testRangeWidePosForwardBackward;
procedure testCopyIndex;
procedure testMapStringW;
procedure testConvertKataKana;
procedure testConvertNumeric;
procedure testConvertSymbol;
procedure testConvertAlphabet;
procedure testCheckStrInTable;
procedure testCheckWideCharInTable;
procedure testChangeLineBreakes;
procedure testStringsReplace;
procedure testWideStringsReplace;
procedure testEncodeEscapeSequence;
procedure testDecodeEscapeSequence;
procedure testWideStringsWordReplace;
procedure testTrimLeftChar;
procedure testTrimRightChar;
procedure testTrimChar;
procedure testOneTrimChar;
procedure testGetTagText;
procedure testInStr;
procedure testWideCharByteLength;
procedure testCharIndexToByteIndex;
procedure testByteIndexToCharIndex;
procedure testCharLengthToByteLength;
procedure testIncludeBothEndsStr;
procedure testExcludeBothEndsStr;
implementation
procedure testByteType;
begin
Check(True, IsDBCSLeadChar( ('る'[1]) ));
Check(True, IsDBCSLeadChar( ('る'[2]) ));
Check(True, IsDBCSLeadChar( ('あ'[1]) ));
Check(False, IsDBCSLeadChar( ('あ'[2]) ));
//↓SysUtilで使われているWinAPI関数
//Check(True, IsDBCSLeadByte( Byte('る'[1]) ));
//Check(True, IsDBCSLeadByte( Byte('る'[2]) ));
//Check(True, IsDBCSLeadByte( Byte('あ'[1]) ));
//Check(False, IsDBCSLeadByte( Byte('あ'[2]) ));
Check(mbSingleByte, ByteType('ABC', 1));
Check(mbLeadByte, ByteType('あ', 1));
Check(mbTrailByte, ByteType('あ', 2));
Check(mbLeadByte, ByteType('る', 1));
Check(mbTrailByte, ByteType('る', 2));
Check(mbLeadByte, ByteType('ああああ', 1));
Check(mbTrailByte, ByteType('ああああ', 2));
Check(mbLeadByte, ByteType('ああああ', 3));
Check(mbTrailByte, ByteType('ああああ', 4));
Check(mbLeadByte, ByteType('ああああ', 5));
Check(mbTrailByte, ByteType('ああああ', 6));
Check(mbLeadByte, ByteType('ああああ', 7));
Check(mbTrailByte, ByteType('ああああ', 8));
Check(mbLeadByte, ByteType('るるるる', 1));
Check(mbTrailByte, ByteType('るるるる', 2));
Check(mbLeadByte, ByteType('るるるる', 3));
Check(mbTrailByte, ByteType('るるるる', 4));
Check(mbLeadByte, ByteType('るるるる', 5));
Check(mbTrailByte, ByteType('るるるる', 6));
Check(mbLeadByte, ByteType('るるるる', 7));
Check(mbTrailByte, ByteType('るるるる', 8));
Check(mbLeadByte, ByteType('ABCああああ', 4));
Check(mbTrailByte, ByteType('ABCああああ', 5));
Check(mbLeadByte, ByteType('ABCああああ', 6));
Check(mbTrailByte, ByteType('ABCああああ', 7));
Check(mbLeadByte, ByteType('ABCああああ', 8));
Check(mbTrailByte, ByteType('ABCああああ', 9));
Check(mbLeadByte, ByteType('ABCああああ', 10));
Check(mbTrailByte, ByteType('ABCああああ', 11));
Check(mbLeadByte, ByteType('ABCるるるる', 4));
Check(mbTrailByte, ByteType('ABCるるるる', 5));
Check(mbLeadByte, ByteType('ABCるるるる', 6));
Check(mbTrailByte, ByteType('ABCるるるる', 7));
Check(mbLeadByte, ByteType('ABCるるるる', 8));
Check(mbTrailByte, ByteType('ABCるるるる', 9));
Check(mbLeadByte, ByteType('ABCるるるる', 10));
Check(mbTrailByte, ByteType('ABCるるるる', 11));
end;
procedure testCharToByteLen;
begin
Check( 2, CharToByteLen('あいうえお', 1));
Check( 6, CharToByteLen('あいうえお', 3));
Check(10, CharToByteLen('あいうえお', 5));
Check(10, CharToByteLen('あいうえお', 6));
Check( 1, CharToByteLen('ABC123あいうえお', 1));
Check( 6, CharToByteLen('ABC123あいうえお', 6));
Check( 8, CharToByteLen('ABC123あいうえお', 7));
Check(16, CharToByteLen('ABC123あいうえお',11));
end;
procedure testStringTextPartsCompare;
procedure CheckFunctionAnsi(ReturnStrValue, ReturnTextValue: Boolean;
const Sub, S: String; StrIndex: Integer);
begin
Check( ReturnStrValue, AnsiStringPartsCompare(Sub, S, StrIndex) );
Check( ReturnTextValue, AnsiTextPartsCompare(Sub, S, StrIndex) );
end;
procedure CheckFunctionWide(ReturnStrValue, ReturnTextValue: Boolean;
const Sub, S: WideString; StrIndex: Integer);
begin
Check( ReturnStrValue, WideStringPartsCompare(Sub, S, StrIndex) );
Check( ReturnTextValue, WideTextPartsCompare(Sub, S, StrIndex) );
end;
procedure CheckFunction(ReturnStrValue, ReturnTextValue: Boolean;
const Sub, S: WideString; AnsiStrIndex, WideStrIndex: Integer);
begin
CheckFunctionAnsi(ReturnStrValue, ReturnTextValue, Sub, S, AnsiStrIndex);
CheckFunctionWide(ReturnStrValue, ReturnTextValue, Sub, S, WideStrIndex);
end;
begin
CheckFunction( True, True, 'あ', 'あいうえお', 1, 1);
CheckFunction( True, True, 'うえ', 'あいうえお', 5, 3);
CheckFunction( True, True, 'お', 'あいうえお', 9, 5);
CheckFunction(False,False, 'あ', 'あいうえお', 0, 0);
CheckFunction(False,False, 'あ', 'あいうえお', 2, 2);
CheckFunction(False,False, 'うえ', 'あいうえお', 4, 2);
CheckFunction(False,False, 'うえ', 'あいうえお', 6, 4);
CheckFunction(False,False, 'うえ', 'あいうえお', 8, 5);
CheckFunction(False,False, 'お', 'あいうえお', 8, 4);
CheckFunction(False,False, 'お', 'あいうえお', 11, 6);
CheckFunction( True, True, 'D', 'ABCDEF', 4, 4);
CheckFunction(False, True, 'D', 'abcdef', 4, 4);
CheckFunction( True, True, 'D', 'ABCDEF', 7, 4);
CheckFunction(False, True, 'D', 'abcdef', 7, 4);
CheckFunction(False,False, 'ABC', 'AB', 1, 1);
// CheckFunction(False, False, 'ー', '久々', 3, 2);
CheckFunctionAnsi(False, False, 'ー', '久々', 3);
CheckFunctionWide(True, True, 'ー', '久々', 2);
{↑??これは何をテストしているのだろう?既存バグなのかな?}
end;
procedure testRangeAnsiPosForwardBackward;
procedure CheckFunction(ForwardSearchIndex, BackwardSearchIndex: Integer;
const SubStr, S: String; RangeStart, RangeCount: Integer);
begin
Check( ForwardSearchIndex, RangeAnsiPosForward(SubStr, S, RangeStart, RangeCount));
Check( BackwardSearchIndex, RangeAnsiPosBackward(SubStr, S, RangeStart, RangeCount));
end;
begin
CheckFunction( 0, 0, 'ABC', 'abcdefghi', 1, 3);
CheckFunction( 1, 1, 'ABC', 'ABCDEFGHI', 1, 3);
CheckFunction( 0, 0, 'ABC', 'ABCDEFGHI', 1, 2);
CheckFunction( 1, 1, 'ABC', 'ABCDEFGHI', 1, 4);
CheckFunction( 0, 0, 'ABC', 'ABCDEFGHI', 2, 4);
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 1, 6);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 1, 5);
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 3, 6);
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 4, 3);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 4, 2);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 5, 5);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 0, 6);
CheckFunction( 1, 1, 'ABC', 'ABCDEFGHI', 1, MaxInt);
Check( 1, RangeAnsiPosForward('ABC', 'ABCDEFGHI', 1) );
Check( 1, RangeAnsiPosForward('ABC', 'ABCDEFGHI') );
Check( 1, RangeAnsiPosBackward('ABC', 'ABCDEFGHI', 1) );
Check( 1, RangeAnsiPosBackward('ABC', 'ABCDEFGHI') );
CheckFunction( 0, 0, 'ABC', 'ABCDEFGHI', 2, MaxInt);
Check( 0, RangeAnsiPosForward('ABC', 'ABCDEFGHI', 2) );
Check( 0, RangeAnsiPosBackward('ABC', 'ABCDEFGHI', 2) );
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 1, MaxInt);
Check( 4, RangeAnsiPosForward('DEF', 'ABCDEFGHI') );
Check( 4, RangeAnsiPosBackward('DEF', 'ABCDEFGHI') );
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 3, MaxInt);
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 4, MaxInt);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 5, MaxInt);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 0, MaxInt);
//
CheckFunction( 1, 1, 'あいう', 'あいう123GHI', 1, 6);
CheckFunction( 0, 0, 'あいう', 'あいう123GHI', 1, 5);
CheckFunction( 1, 1, 'あいう', 'あいう123GHI', 1, 7);
CheckFunction( 0, 0, 'あいう', 'あいう123GHI', 2, 6);
CheckFunction( 7, 7, '123', 'あいう123GHI', 1, 12);
CheckFunction( 0, 0, '123', 'あいう123GHI', 1, 11);
CheckFunction( 7, 7, '123', 'あいう123GHI', 7, 12);
CheckFunction( 7, 7, '123', 'あいう123GHI', 7, 6);
CheckFunction( 0, 0, '123', 'あいう123GHI', 7, 5);
CheckFunction( 0, 0, '123', 'あいう123GHI', 8, 8);
CheckFunction( 0, 0, '123', 'あいう123GHI', 0, 12);
CheckFunction( 1, 1, 'あいう', 'あいう123GHI', 1, MaxInt);
Check( 1, RangeAnsiPosForward('あいう', 'あいう123GHI', 1) );
Check( 1, RangeAnsiPosForward('あいう', 'あいう123GHI') );
Check( 1, RangeAnsiPosBackward('あいう', 'あいう123GHI', 1) );
Check( 1, RangeAnsiPosBackward('あいう', 'あいう123GHI') );
CheckFunction( 0, 0, 'あいう', 'あいう123GHI', 2, MaxInt);
Check( 0, RangeAnsiPosForward('あいう', 'あいう123GHI', 2) );
Check( 0, RangeAnsiPosBackward('あいう', 'あいう123GHI', 2) );
CheckFunction( 7, 7, '123', 'あいう123GHI', 1, MaxInt);
Check( 7, RangeAnsiPosForward('123', 'あいう123GHI') );
Check( 7, RangeAnsiPosBackward('123', 'あいう123GHI') );
CheckFunction( 7, 7, '123', 'あいう123GHI', 6, MaxInt);
CheckFunction( 7, 7, '123', 'あいう123GHI', 7, MaxInt);
CheckFunction( 0, 0, '123', 'あいう123GHI', 8, MaxInt);
CheckFunction( 0, 0, '123', 'あいう123GHI', 0, MaxInt);
//
CheckFunction( 1, 1, 'ABC', 'ABCDEFABCDEF', 1, 3);
CheckFunction( 1, 7, 'ABC', 'ABCDEFABCDEF', 1, MaxInt);
CheckFunction( 1, 7, 'ABC', 'ABCDEFABCDEF', 1, 9);
CheckFunction( 1, 1, 'ABC', 'ABCDEFABCDEF', 1, 8);
CheckFunction( 7, 7, 'ABC', 'ABCDEFABCDEF', 2, 8);
CheckFunction( 0, 0, 'ABC', 'ABCDEFABCDEF', 2, 7);
CheckFunction( 1, 1, 'あいう', 'あいう123あいう123', 1, 6);
CheckFunction( 1,13, 'あいう', 'あいう123あいう123', 1, MaxInt);
CheckFunction( 1,13, 'あいう', 'あいう123あいう123', 1, 18);
CheckFunction( 1, 1, 'あいう', 'あいう123あいう123', 1, 17);
CheckFunction(13,13, 'あいう', 'あいう123あいう123', 2, 17);
CheckFunction( 0, 0, 'あいう', 'あいう123あいう123', 2, 16);
end;
procedure testRangeWidePosForwardBackward;
procedure CheckFunction(ForwardSearchIndex, BackwardSearchIndex: Integer;
const SubStr, S: WideString; RangeStart, RangeCount: Integer);
begin
Check( ForwardSearchIndex, RangeWidePosForward(SubStr, S, RangeStart, RangeCount));
Check( BackwardSearchIndex, RangeWidePosBackward(SubStr, S, RangeStart, RangeCount));
end;
begin
CheckFunction( 1, 1, 'ABC', 'ABCDEFGHI', 1, 3);
CheckFunction( 0, 0, 'ABC', 'ABCDEFGHI', 1, 2);
CheckFunction( 1, 1, 'ABC', 'ABCDEFGHI', 1, 4);
CheckFunction( 0, 0, 'ABC', 'ABCDEFGHI', 2, 4);
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 1, 6);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 1, 5);
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 3, 6);
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 4, 3);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 4, 2);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 5, 5);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 0, 6);
CheckFunction( 1, 1, 'ABC', 'ABCDEFGHI', 1, MaxInt);
Check( 1, RangeWidePosForward('ABC', 'ABCDEFGHI', 1) );
Check( 1, RangeWidePosForward('ABC', 'ABCDEFGHI') );
Check( 1, RangeWidePosBackward('ABC', 'ABCDEFGHI', 1) );
Check( 1, RangeWidePosBackward('ABC', 'ABCDEFGHI') );
CheckFunction( 0, 0, 'ABC', 'ABCDEFGHI', 2, MaxInt);
Check( 0, RangeWidePosForward('ABC', 'ABCDEFGHI', 2) );
Check( 0, RangeWidePosBackward('ABC', 'ABCDEFGHI', 2) );
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 1, MaxInt);
Check( 4, RangeWidePosForward('DEF', 'ABCDEFGHI') );
Check( 4, RangeWidePosBackward('DEF', 'ABCDEFGHI') );
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 3, MaxInt);
CheckFunction( 4, 4, 'DEF', 'ABCDEFGHI', 4, MaxInt);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 5, MaxInt);
CheckFunction( 0, 0, 'DEF', 'ABCDEFGHI', 0, MaxInt);
//
CheckFunction( 1, 1, 'あいう', 'あいう123GHI', 1, 3);
CheckFunction( 0, 0, 'あいう', 'あいう123GHI', 1, 2);
CheckFunction( 1, 1, 'あいう', 'あいう123GHI', 1, 4);
CheckFunction( 0, 0, 'あいう', 'あいう123GHI', 2, 3);
CheckFunction( 4, 4, '123', 'あいう123GHI', 1, 6);
CheckFunction( 0, 0, '123', 'あいう123GHI', 1, 5);
CheckFunction( 4, 4, '123', 'あいう123GHI', 4, 6);
CheckFunction( 4, 4, '123', 'あいう123GHI', 4, 3);
CheckFunction( 0, 0, '123', 'あいう123GHI', 4, 2);
CheckFunction( 0, 0, '123', 'あいう123GHI', 5, 4);
CheckFunction( 0, 0, '123', 'あいう123GHI', 0, 6);
CheckFunction( 1, 1, 'あいう', 'あいう123GHI', 1, MaxInt);
Check( 1, RangeWidePosForward('あいう', 'あいう123GHI', 1) );
Check( 1, RangeWidePosForward('あいう', 'あいう123GHI') );
Check( 1, RangeWidePosBackward('あいう', 'あいう123GHI', 1) );
Check( 1, RangeWidePosBackward('あいう', 'あいう123GHI') );
CheckFunction( 0, 0, 'あいう', 'あいう123GHI', 2, MaxInt);
Check( 0, RangeWidePosForward('あいう', 'あいう123GHI', 2) );
Check( 0, RangeWidePosBackward('あいう', 'あいう123GHI', 2) );
CheckFunction( 4, 4, '123', 'あいう123GHI', 1, MaxInt);
Check( 4, RangeWidePosForward('123', 'あいう123GHI') );
Check( 4, RangeWidePosBackward('123', 'あいう123GHI') );
CheckFunction( 4, 4, '123', 'あいう123GHI', 3, MaxInt);
CheckFunction( 4, 4, '123', 'あいう123GHI', 4, MaxInt);
CheckFunction( 0, 0, '123', 'あいう123GHI', 5, MaxInt);
CheckFunction( 0, 0, '123', 'あいう123GHI', 0, MaxInt);
//
CheckFunction( 1, 1, 'ABC', 'ABCDEFABCDEF', 1, 3);
CheckFunction( 1, 7, 'ABC', 'ABCDEFABCDEF', 1, MaxInt);
CheckFunction( 1, 7, 'ABC', 'ABCDEFABCDEF', 1, 9);
CheckFunction( 1, 1, 'ABC', 'ABCDEFABCDEF', 1, 8);
CheckFunction( 7, 7, 'ABC', 'ABCDEFABCDEF', 2, 8);
CheckFunction( 0, 0, 'ABC', 'ABCDEFABCDEF', 2, 7);
CheckFunction( 1, 1, 'あいう', 'あいう123あいう123', 1, 3);
CheckFunction( 1, 7, 'あいう', 'あいう123あいう123', 1, MaxInt);
CheckFunction( 1, 7, 'あいう', 'あいう123あいう123', 1, 9);
CheckFunction( 1, 1, 'あいう', 'あいう123あいう123', 1, 8);
CheckFunction( 7, 7, 'あいう', 'あいう123あいう123', 2, 8);
CheckFunction( 0, 0, 'あいう', 'あいう123あいう123', 2, 7);
CheckFunction( 4, 4, '゚Д゚', 'ミ,,゚Д゚彡', 1, 7);
CheckFunction( 4, 4, '゜Д゜', 'ミ,,゚Д゚彡', 1, 7);
{↑なぜこれが一致するんだ...orz...}
CheckFunction(1,1, 'リンゴ', 'リンゴ', 1, 3);
CheckFunction(0,0, 'リンゴ', 'リンゴ', 1, 3); //これは一致しない
CheckFunction(1,1, 'リ', 'リンコ', 1, 3);
CheckFunction(0,0, 'リ', 'リンコ', 1, 3); //これもだめ
CheckFunction(0,0, 'リ', 'リンコ', 1, 3); //これもだめ
CheckFunction(4,4, '゜', 'リンコ゚', 1, 4);
{↑↓なぜこれが...orz...}
CheckFunction(4,4, '゚', 'リンコ゜', 1, 4);
end;
procedure testCopyIndex;
begin
Check('', CopyIndex('abcdefg', -1, 0));
Check('', CopyIndex('abcdefg', 0, -1));
Check('', CopyIndex('abcdefg', -3, 0));
Check('', CopyIndex('abcdefg', 0, -3));
Check('', CopyIndex('abcdefg', -10, -1));
Check('', CopyIndex('abcdefg', -1, -10));
Check('', CopyIndex('abcdefg', -10, -2));
Check('', CopyIndex('abcdefg', -2, -10));
Check('abc', CopyIndex('abcdefg', 1, 3));
Check('abc', CopyIndex('abcdefg', 0, 3));
Check('abc', CopyIndex('abcdefg', -10, 3));
Check('', CopyIndex('abcdefg', 3, 1));
Check('', CopyIndex('abcdefg', 3, 0));
Check('', CopyIndex('abcdefg', 3, -10));
Check('def', CopyIndex('abcdefg', 4, 6));
Check('', CopyIndex('abcdefg', 6, 4));
Check('efg', CopyIndex('abcdefg', 5, 7));
Check('efg', CopyIndex('abcdefg', 5, 8));
Check('efg', CopyIndex('abcdefg', 5, 10));
Check('', CopyIndex('abcdefg', 7, 5));
Check('', CopyIndex('abcdefg', 8, 5));
Check('', CopyIndex('abcdefg', 10, 5));
Check('g', CopyIndex('abcdefg', 7, 7));
Check('g', CopyIndex('abcdefg', 7, 8));
Check('', CopyIndex('abcdefg', 8, 8));
Check('', CopyIndex('abcdefg', 8, 9));
Check('', CopyIndex('abcdefg', 8, 15));
Check('', CopyIndex('abcdefg', 9, 8));
Check('', CopyIndex('abcdefg', 15, 8));
Check('', CopyIndex('abcdefg', 10, 15));
Check('', CopyIndex('abcdefg', 15, 10));
end;
procedure testMapStringW;
begin
Check('あああ', KataToHira('アあア'));
Check('あかさたなはまやらわをん', KataToHira('アカサタナハマヤラワヲン'));
Check('アアア', HiraToKata('あアあ'));
Check('アカサタナハマヤラワヲン', HiraToKata('あかさたなはまやらわをん'));
Check('アアア', KataToHira('アアア'));
Check('abc', ZenkakuToHankaku('abc'));
Check('アアア', ZenkakuToHankaku('アアア'));
Check('abc', HankakuToZenkaku('abc'));
Check('アアア', HankakuToZenkaku('アアア'));
end;
procedure testConvertKataKana;
begin
Check(ConvertZenKataToHanKata('ガギグゲゴ'),'ガギグゲゴ');
Check(ConvertZenKataToHanKata('ザジズゼゾ'),'ザジズゼゾ');
Check(ConvertZenKataToHanKata('ダヂヅデド'),'ダヂヅデド');
Check(ConvertZenKataToHanKata('バビブベボ'),'バビブベボ');
Check(ConvertZenKataToHanKata('パピプペポ'),'パピプペポ');
Check(ConvertZenKataToHanKata('アイウエオ'),'アイウエオ');
Check(ConvertZenKataToHanKata('カキクケコ'),'カキクケコ');
Check(ConvertZenKataToHanKata('サシスセソ'),'サシスセソ');
Check(ConvertZenKataToHanKata('タチツテト'),'タチツテト');
Check(ConvertZenKataToHanKata('ナニヌネノ'),'ナニヌネノ');
Check(ConvertZenKataToHanKata('ハヒフヘホ'),'ハヒフヘホ');
Check(ConvertZenKataToHanKata('マミムメモ'),'マミムメモ');
Check(ConvertZenKataToHanKata('ヤユヨ'), 'ヤユヨ');
Check(ConvertZenKataToHanKata('ラリルレロ'),'ラリルレロ');
Check(ConvertZenKataToHanKata('ワヲン'), 'ワヲン');
Check(ConvertZenKataToHanKata('ァィゥェォ'),'ァィゥェォ');
Check(ConvertZenKataToHanKata('ャュョ'), 'ャュョ');
Check(ConvertZenKataToHanKata('ッ゜ー・、。「」'),'ッ゚ー・、。「」');
{↑『・、。「」』が変換できないのは仕様らしい
Check(ConvertZenKataToHanKata('ッ゜ー・、。「」'),'ッ゚ー・、。「」');
}
Check('ガギグゲゴ',ConvertHanKataToZenKata('ガギグゲゴ'));
Check('ザジズゼゾ',ConvertHanKataToZenKata('ザジズゼゾ'));
Check('ダヂヅデド',ConvertHanKataToZenKata('ダヂヅデド'));
Check('バビブベボ',ConvertHanKataToZenKata('バビブベボ'));
Check('パピプペポ',ConvertHanKataToZenKata('パピプペポ'));
Check('アイウエオ',ConvertHanKataToZenKata('アイウエオ'));
Check('カキクケコ',ConvertHanKataToZenKata('カキクケコ'));
Check('サシスセソ',ConvertHanKataToZenKata('サシスセソ'));
Check('タチツテト',ConvertHanKataToZenKata('タチツテト'));
Check('ナニヌネノ',ConvertHanKataToZenKata('ナニヌネノ'));
Check('ハヒフヘホ',ConvertHanKataToZenKata('ハヒフヘホ'));
Check('マミムメモ',ConvertHanKataToZenKata('マミムメモ'));
Check('ヤユヨ', ConvertHanKataToZenKata('ヤユヨ'));
Check('ラリルレロ',ConvertHanKataToZenKata('ラリルレロ'));
Check('ワヲン', ConvertHanKataToZenKata('ワヲン'));
Check('ァィゥェォ',ConvertHanKataToZenKata('ァィゥェォ'));
Check('ャュョ', ConvertHanKataToZenKata('ャュョ'));
Check('ッ゜ー・、。「」', ConvertHanKataToZenKata('ッ゚ー・、。「」'));
end;
procedure testConvertNumeric;
begin
Check(ConvertNumericZenToHan('12345'),'12345');
Check('12345', ConvertNumericHanToZen('12345'));
end;
procedure testConvertSymbol;
begin
Check(ConvertSymbolZenToHan('!?$¥%&#'),'!?$\%');
Check('!?$¥%&#', ConvertSymbolHanToZen('!?$\%'));
end;
procedure testConvertAlphabet;
begin
Check(ConvertAlphabetZenToHan('HIJKLMN'),'HIJKLMN');
Check('HIJKLMN', ConvertAlphabetHanToZen('HIJKLMN'));
end;
procedure testStrCount1;
begin
Check(0, StrCount('A', '') );
Check(0, StrCount('ABC', '') );
Check(0, StrCount('', 'A') );
Check(0, StrCount('', 'ABC') );
Check(1, StrCount('A', 'A') );
Check(3, StrCount('A', 'AAA') );
Check(1, StrCount('A', 'ABC') );
Check(2, StrCount('A', 'ABCABC') );
Check(3, StrCount('ABC', 'ABCABCABC') );
Check(2, StrCount('BCA', 'ABCABCABC') );
Check(1, StrCount('AA', 'AAA') );
Check(0, StrCount('A', '', ifByte) );
Check(0, StrCount('ABC', '', ifByte) );
Check(0, StrCount('', 'A', ifByte) );
Check(0, StrCount('', 'ABC', ifByte) );
Check(1, StrCount('A', 'A', ifByte) );
Check(3, StrCount('A', 'AAA', ifByte) );
Check(1, StrCount('A', 'ABC', ifByte) );
Check(2, StrCount('A', 'ABCABC', ifByte) );
Check(3, StrCount('ABC', 'ABCABCABC', ifByte) );
Check(2, StrCount('BCA', 'ABCABCABC', ifByte) );
Check(2, StrCount('AA', 'AAA', ifByte) );
Check(0, StrCount('A', '') );
Check(0, StrCount('ABC', '') );
Check(0, StrCount('', 'A') );
Check(0, StrCount('', 'ABC') );
Check(1, StrCount('A', 'A') );
Check(3, StrCount('A', 'AAA') );
Check(1, StrCount('A', 'ABC') );
Check(2, StrCount('A', 'ABCABC') );
Check(3, StrCount('ABC', 'ABCABCABC') );
Check(2, StrCount('BCA', 'ABCABCABC') );
Check(1, StrCount('AA', 'AAA') );
Check(0, StrCount('A', '', ifByte) );
Check(0, StrCount('ABC', '', ifByte) );
Check(0, StrCount('', 'A', ifByte) );
Check(0, StrCount('', 'ABC', ifByte) );
Check(1, StrCount('A', 'A', ifByte) );
Check(3, StrCount('A', 'AAA', ifByte) );
Check(1, StrCount('A', 'ABC', ifByte) );
Check(2, StrCount('A', 'ABCABC', ifByte) );
Check(3, StrCount('ABC', 'ABCABCABC', ifByte) );
Check(2, StrCount('BCA', 'ABCABCABC', ifByte) );
Check(2, StrCount('AA', 'AAA', ifByte) );
end;
procedure testCheckStrInTable;
begin
Check(itAllInclude, CheckStrInTable('123', '0123456789'));
Check(itAllExclude, CheckStrInTable('ABC', '0123456789'));
Check(itPartInclude, CheckStrInTable('ABC123', '0123456789'));
Check(itUnknown, CheckStrInTable('', '0123456789'));
Check(itUnknown, CheckStrInTable('123', ''));
Check(itAllInclude, CheckStrInTable('123123321123', '123'));
Check(itAllExclude, CheckStrInTable('ABCABCCBAABC', '123'));
Check(itPartInclude, CheckStrInTable('ABC123', '123'));
end;
procedure testCheckWideCharInTable;
begin
Check(True, CheckWideCharInTable('1', '0123456789'));
Check(False, CheckWideCharInTable('A', '0123456789'));
Check(False, CheckWideCharInTable('1', ''));
end;
procedure testInStr;
begin
Check(True, InStr('A', 'ABC'));
Check(True, InStr('B', 'ABC'));
Check(True, InStr('C', 'ABC'));
Check(True, InStr('あ', 'あいう'));
Check(True, InStr('い', 'あいう'));
Check(True, InStr('う', 'あいう'));
Check(False, InStr('a', 'ABC'));
Check(False, InStr('A', 'abc'));
Check(False, InStr('え', 'あいう'));
end;
procedure testChangeLineBreakes;
procedure CheckFunc(Source, CRLFResult, CRResult, LFResult: String);
begin
Check(CRLFResult, ChangeLineBreakes(Source, lbsCRLF));
Check(CRResult , ChangeLineBreakes(Source, lbsCR));
Check(LFResult , ChangeLineBreakes(Source, lbsLF));
Check(CRResult , ChangeLineBreakes(CRLFResult, lbsCR));
Check(LFResult , ChangeLineBreakes(CRLFResult, lbsLF));
Check(CRLFResult, ChangeLineBreakes(CRResult , lbsCRLF));
Check(LFResult , ChangeLineBreakes(CRResult , lbsLF));
Check(CRLFResult, ChangeLineBreakes(LFResult , lbsCRLF));
Check(CRResult , ChangeLineBreakes(LFResult , lbsCR));
end;
//2009/01/07
//※lbsNoLineBreaksについては未テスト
begin
//普通に変換
CheckFunc(#10#13+'あいう'+#10#13+'えお'+#10#13,
#13#10+'あいう'+#13#10+'えお'+#13#10,
#13 +'あいう'+#13 +'えお'+#13,
#10 +'あいう'+#10 +'えお'+#10);
//混在
CheckFunc(#13#10+'123'+#10#13+'ABC'+#13 +'あいう'+#10 ,
#13#10+'123'+#13#10+'ABC'+#13#10+'あいう'+#13#10,
#13 +'123'+#13 +'ABC'+#13 +'あいう'+#13 ,
#10 +'123'+#10 +'ABC'+#10 +'あいう'+#10 );
//連続
CheckFunc(#10#13#10#13+'ABC'+#10#13#10#13+'あいう'+#10#13#10#13,
#13#10#13#10+'ABC'+#13#10#13#10+'あいう'+#13#10#13#10,
#13#13 +'ABC'+#13#13 +'あいう'+#13#13 ,
#10#10 +'ABC'+#10#10 +'あいう'+#10#10 );
//混在して連続
CheckFunc(#10#13#13 +'123'+#13#13#10 +'ABC'+#10#10#13 ,
#13#10#13#10+'123'+#13#10#13#10+'ABC'+#13#10#13#10,
#13#13 +'123'+#13#13 +'ABC'+#13#13 ,
#10#10 +'123'+#10#10 +'ABC'+#10#10 );
CheckFunc(#10#13#13 +'123'+#13#10#13 +'あいう'+#10#13#10 ,
#13#10#13#10+'123'+#13#10#13#10+'あいう'+#13#10#13#10,
#13#13 +'123'+#13#13 +'あいう'+#13#13 ,
#10#10 +'123'+#10#10 +'あいう'+#10#10 );
//改行数のチェック
CheckFunc(#10#13#10#13+
'ABC'+#10#13#10#13#10#13+
'123'+#10#13#10#13#10#13#10#13+
'あいうえ'+#10#13#10#13#10#13#10#13#10#13,
#13#10#13#10+
'ABC'+#13#10#13#10#13#10+
'123'+#13#10#13#10#13#10#13#10+
'あいうえ'+#13#10#13#10#13#10#13#10#13#10,
#13#13 +
'ABC'+#13#13#13 +
'123'+#13#13#13#13 +
'あいうえ'+#13#13#13#13#13 ,
#10#10 +
'ABC'+#10#10#10 +
'123'+#10#10#10#10 +
'あいうえ'+#10#10#10#10#10 );
end;
procedure testStringsReplace;
var
OldPatterns, NewPatterns: TStringDynArray;
begin
SetLength(OldPatterns, 4);
SetLength(NewPatterns, 4);
OldPatterns[0] := '123'; NewPatterns[0] := 'ABC';
OldPatterns[1] := 'ABC'; NewPatterns[1] := '123';
OldPatterns[2] := '456'; NewPatterns[2] := 'DEF';
OldPatterns[3] := 'DEF'; NewPatterns[3] := '456';
Check('123ABC123ABC456DEF',
StringsReplace('ABC123ABC123DEF456', OldPatterns, NewPatterns, False));
Check('abcABCabcABCdefDEF',
StringsReplace('abc123abc123def456', OldPatterns, NewPatterns, False));
Check('123ABC123ABC456DEF',
StringsReplace('abc123abc123def456', OldPatterns, NewPatterns, True));
//オープン配列パラメータ指定
Check('123ABC123ABC456DEF',
StringsReplace('ABC123ABC123DEF456',
['123', 'ABC', '456', 'DEF'],
['ABC', '123', 'DEF', '456'], False));
end;
procedure testWideStringsReplace;
var
OldPatterns, NewPatterns: TWideStringDynArray;
begin
SetLength(OldPatterns, 4);
SetLength(NewPatterns, 4);
OldPatterns[0] := '123'; NewPatterns[0] := 'ABC';
OldPatterns[1] := 'ABC'; NewPatterns[1] := '123';
OldPatterns[2] := '456'; NewPatterns[2] := 'DEF';
OldPatterns[3] := 'DEF'; NewPatterns[3] := '456';
Check('123ABC123ABC456DEF',
WideStringsReplace('ABC123ABC123DEF456', OldPatterns, NewPatterns, False));
Check('abcABCabcABCdefDEF',
WideStringsReplace('abc123abc123def456', OldPatterns, NewPatterns, False));
Check('123ABC123ABC456DEF',
WideStringsReplace('abc123abc123def456', OldPatterns, NewPatterns, True));
//オープン配列パラメータ指定
Check('123ABC123ABC456DEF',
WideStringsReplace('ABC123ABC123DEF456',
['123', 'ABC', '456', 'DEF'],
['ABC', '123', 'DEF', '456'], False));
SetLength(OldPatterns, 1);
SetLength(NewPatterns, 1);
OldPatterns[0] := '
'; NewPatterns[0] := #13#10;
Check(#13#10#13#10#13#10#13#10,
WideStringsReplace('
', OldPatterns, NewPatterns, True));
SetLength(OldPatterns, 2);
SetLength(NewPatterns, 2);
OldPatterns[0] := 'A'; NewPatterns[0] := 'B';
OldPatterns[1] := 'B'; NewPatterns[1] := 'A';
Check('BA', WideStringsReplace('AB', OldPatterns, NewPatterns, True));
SetLength(OldPatterns, 1);
SetLength(NewPatterns, 1);
OldPatterns[0] := 'function'; NewPatterns[0] := 'FUNCTION';
Check(' FUNCTION ',
WideStringsReplace(' function ', OldPatterns, NewPatterns, True));
end;
procedure testEncodeEscapeSequence;
begin
Check('ABC\r\nDEF\r\n', EncodeEscapeSequence('ABC'#13#10'DEF'#13#10));
Check('ABC\rDEF\n', EncodeEscapeSequence('ABC'#13'DEF'#10));
Check('\rDEF\n', EncodeEscapeSequence(#13'DEF'#10));
Check('\\rDEF\\n', EncodeEscapeSequence('\rDEF\n'));
Check('\\\\rDEF\\\\n', EncodeEscapeSequence('\\rDEF\\n'));
Check('ABC\r\nDEF\r\n', EncodeEscapeSequence('ABC'#13#10'DEF'#13#10));
end;
procedure testDecodeEscapeSequence;
begin
Check('ABC'#13#10'DEF'#13#10, DecodeEscapeSequence('ABC\r\nDEF\r\n'));
Check('ABC'#13'DEF'#10, DecodeEscapeSequence('ABC\rDEF\n'));
Check(#13'DEF'#10, DecodeEscapeSequence('\rDEF\n'));
Check(#13'DEF'#10, DecodeEscapeSequence('\RDEF\N'));
Check('\rDEF\n', DecodeEscapeSequence('\\rDEF\\n'));
Check('\\rDEF\\n', DecodeEscapeSequence('\\\\rDEF\\\\n'));
Check('ABC'#13#10'DEF'#13#10, DecodeEscapeSequence('ABC\R\NDEF\R\N'));
end;
procedure testWideStringsWordReplace;
var
OldPatterns, NewPatterns: TWideStringDynArray;
begin
SetLength(OldPatterns, 1);
SetLength(NewPatterns, 1);
OldPatterns[0] := 'select'; NewPatterns[0] := 'SELECT';
Check('SELECT',
WideStringsWordReplace('seleCT', OldPatterns, NewPatterns, True));
Check(' SELECT ',
WideStringsWordReplace(' seleCT ', OldPatterns, NewPatterns, True));
Check('SELECT1',
WideStringsWordReplace('seleCT1', OldPatterns, NewPatterns, True));
Check('_seleCT',
WideStringsWordReplace('_seleCT', OldPatterns, NewPatterns, True));
OldPatterns[0] := 'ttp://'; NewPatterns[0] := 'http://';
Check('http:// ',
WideStringsWordReplace('ttp:// ', OldPatterns, NewPatterns, True));
Check(' http:// ',
WideStringsWordReplace(' ttp:// ', OldPatterns, NewPatterns, True));
Check(' http:// ',
WideStringsWordReplace(' http:// ', OldPatterns, NewPatterns, True));
Check('http://www',
WideStringsWordReplace('ttp://www', OldPatterns, NewPatterns, True));
Check(' http://www',
WideStringsWordReplace(' ttp://www', OldPatterns, NewPatterns, True));
Check(' http://www',
WideStringsWordReplace(' http://www', OldPatterns, NewPatterns, True));
SetLength(OldPatterns, 2);
SetLength(NewPatterns, 2);
OldPatterns[0] := ''''; NewPatterns[0] := '"';
OldPatterns[1] := '"'; NewPatterns[1] := '''';
Check('''"''',
WideStringsWordReplace('"''"', OldPatterns, NewPatterns, True));
Check('s"',
WideStringsWordReplace('s''', OldPatterns, NewPatterns, True));
Check('''s',
WideStringsWordReplace('"s', OldPatterns, NewPatterns, True));
Check('se"l"ect',
WideStringsWordReplace('se''l''ect', OldPatterns, NewPatterns, True));
Check('''se"l"ect''',
WideStringsWordReplace('"se''l''ect"', OldPatterns, NewPatterns, True));
Check('"se''l''ect"',
WideStringsWordReplace('''se"l"ect''', OldPatterns, NewPatterns, True));
end;
procedure testTrimLeftChar;
begin
Check('あ', TrimLeftChar(' あ', ' '));
Check('う', TrimLeftChar(' う', ' '));
Check('か', TrimLeftChar('あいうえおああいいか', 'あいうえお'));
Check('X', TrimLeftChar(' YY X', ' Y'));
Check('789', TrimLeftChar('012346789', '6543210'));
Check('ABCXYZ', TrimLeftChar('XXYYZZABCXYZ', 'XYZ'));
Check('', TrimLeftChar('XXYYZZABCXYZ', 'XYZABC'));
Check('AAA'#9, TrimLeftChar(#9'AAA'#9, #9));
Check(#9, TrimLeftChar('AAA'#9, 'A'));
Check(#9'AAA', TrimLeftChar(#13#10#9'AAA', #13#10));
Check(#13#10, TrimLeftChar(#9'AAA'#13#10, #9'A'));
Check('123', TrimLeftChar('123', ''));
end;
procedure testTrimRightChar;
begin
Check(' ', TrimRightChar(' あ', 'あ'));
Check('あいうえお', TrimRightChar('あいうえおああいいか', 'かいあ'));
Check('う', TrimRightChar('う ', ' '));
Check(' YY', TrimRightChar(' YY X', ' X'));
Check('012', TrimRightChar('012346789', '346789'));
Check('XXYYZZABC', TrimRightChar('XXYYZZABCXYZ', 'XYZ'));
Check('', TrimRightChar('XXYYZZABCXYZ', 'XYZABC'));
Check(#9'AAA', TrimRightChar(#9'AAA'#9, #9));
Check(#9, TrimRightChar(#9'AAA', 'A'));
Check(#9'AAA', TrimRightChar(#9'AAA'#13#10, #13#10));
Check(#13#10, TrimRightChar(#13#10#9'AAA', #9'A'));
Check('123', TrimRightChar('123', ''));
end;
procedure testTrimChar;
begin
Check('ABC', TrimChar('123467829ABC5212694192', '0123456789'));
Check('', TrimChar('123467829ABC5212694192', 'ABC0123456789'));
Check('かきくけこ', TrimChar('あいうえああいいかきくけこおおえういあい', 'あいうえお'));
Check('AAA', TrimChar(#9'AAA'#9, #9));
Check(#9, TrimChar(#9'AAA', 'A'));
Check(#9'AAA', TrimChar(#9'AAA'#13#10, #13#10));
Check(#13#10, TrimChar(#9'AAA'#13#10, #9'A'));
Check('123', TrimChar('123', ''));
Check('ABC DEF', TrimChar(' ABC DEF'#13#10' '#13#10, CtrlCharTbl+' '));
end;
procedure testOneTrimChar;
begin
Check('ABC', OneTrimChar('"ABC"', '"'));
Check('"ABC', OneTrimChar('"ABC', '"'));
Check('ABC"', OneTrimChar('ABC"', '"'));
Check('"ABC"',OneTrimChar('"ABC"', ''));
Check('ABC', OneTrimChar('ABC', ''));
Check('ABC', OneTrimChar('ABC', '"'));
Check('ABC', OneTrimChar('1ABC1', '123'));
Check('2ABC2', OneTrimChar('12ABC21', '123'));
Check('1ABC2',OneTrimChar('1ABC2', '123'));
Check('', OneTrimChar('', '"'));
end;
procedure testGetTagText;
begin
Check('aaa', GetTagText('<', '>', ''));
Check('aaa', GetTagText('<', '>', 'abcdef'));
Check('aaa', GetTagText('"', '"', '"aaa"'));
Check('aaa', GetTagText('"', '"', 'abc"aaa"def'));
end;
type TWideCharByteLength = (wcblSingle, wcblMulti);
procedure testWideCharByteLength;
begin
Check(wcblSingle, WideCharByteLength(WideChar(WideString('a')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('g')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('z')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('A')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('G')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('Z')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('\')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('[')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString(']')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('^')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('`')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('_')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('~')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('{')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('|')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('}')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('。')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('「')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('」')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('、')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('・')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヲ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ァ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ィ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ゥ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ェ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ォ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ャ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ュ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ョ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ッ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ー')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ア')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('イ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ウ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('エ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('オ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('カ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('キ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ク')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ケ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('コ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('サ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('シ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ス')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('セ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ソ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('タ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('チ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ツ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('テ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ト')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ナ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ニ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヌ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ネ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ノ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ハ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヒ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('フ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヘ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ホ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('マ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ミ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ム')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('メ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('モ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヤ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ユ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヨ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ラ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('リ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ル')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('レ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ロ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ワ')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('ン')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('゙')[1])));
Check(wcblSingle, WideCharByteLength(WideChar(WideString('゚')[1])));
Check(wcblMulti, WideCharByteLength(WideChar(WideString('a')[1])));
Check(wcblMulti, WideCharByteLength(WideChar(WideString('A')[1])));
end;
procedure testCharIndexToByteIndex;
begin
Check(1, CharIndexToByteIndex('a', 1));
Check(2, CharIndexToByteIndex('a', 2));
Check(0, CharIndexToByteIndex('a', 3));
Check(2, CharIndexToByteIndex('abc', 2));
Check(4, CharIndexToByteIndex('abc', 4));
Check(1, CharIndexToByteIndex('あ', 1));
Check(3, CharIndexToByteIndex('あ', 2));
Check(0, CharIndexToByteIndex('あ', 3));
Check(3, CharIndexToByteIndex('あいう', 2));
Check(7, CharIndexToByteIndex('あいう', 4));
Check(8, CharIndexToByteIndex('123123abcABC', 6));
Check(11, CharIndexToByteIndex('123123abcABC', 8));
Check(15, CharIndexToByteIndex('123123abcABC', 11));
Check(19, CharIndexToByteIndex('123123abcABC', 13));
Check( 0, CharIndexToByteIndex('123123abcABC', 14));
end;
procedure testByteIndexToCharIndex;
begin
Check(1, ByteIndexToCharIndex('a', 1));
Check(0, ByteIndexToCharIndex('a', 2));
Check(0, ByteIndexToCharIndex('a', 3));
Check(2, ByteIndexToCharIndex('abc', 2));
Check(0, ByteIndexToCharIndex('abc', 4));
Check(1, ByteIndexToCharIndex('あ', 1));
Check(1, ByteIndexToCharIndex('あ', 2));
Check(0, ByteIndexToCharIndex('あ', 3));
Check(1, ByteIndexToCharIndex('あいう', 2));
Check(2, ByteIndexToCharIndex('あいう', 4));
Check(5, ByteIndexToCharIndex('123123abcABC', 6));
Check(6, ByteIndexToCharIndex('123123abcABC', 8));
Check(8, ByteIndexToCharIndex('123123abcABC', 11));
Check(10, ByteIndexToCharIndex('123123abcABC', 13));
Check(11, ByteIndexToCharIndex('123123abcABC', 15));
Check(12, ByteIndexToCharIndex('123123abcABC', 18));
Check( 0, ByteIndexToCharIndex('123123abcABC', 19));
end;
procedure testCharLengthToByteLength;
begin
Check(1, ByteLength('a'));
Check(1, ByteLength('A'));
Check(2, ByteLength('a'));
Check(2, ByteLength('A'));
Check(18, ByteLength('123123abcABC'));
Check(25, ByteLength('確認に使用したコード12345'));
end;
procedure testIncludeBothEndsStr;
begin
Check('"テスト"', IncludeBothEndsStr('テスト', '"'));
Check('"テスト"', IncludeBothEndsStr('"テスト', '"'));
Check('"テスト"', IncludeBothEndsStr('テスト"', '"'));
Check('"テスト"', IncludeBothEndsStr('"テスト"', '"'));
Check('テスト', IncludeBothEndsStr('テスト', ''));
Check('テスト', IncludeBothEndsStr('テスト', ''));
Check('テスト', IncludeBothEndsStr('テスト', ''));
Check('テスト', IncludeBothEndsStr('テスト', ''));
end;
procedure testExcludeBothEndsStr;
begin
Check('テスト', ExcludeBothEndsStr('"テスト"', '"'));
Check('テスト', ExcludeBothEndsStr('"テスト', '"'));
Check('テスト', ExcludeBothEndsStr('テスト"', '"'));
Check('テスト', ExcludeBothEndsStr('テスト', '"'));
Check('テスト', ExcludeBothEndsStr('テスト', ''));
Check('テスト', ExcludeBothEndsStr('テスト', ''));
Check('テスト', ExcludeBothEndsStr('テスト', ''));
Check('テスト', ExcludeBothEndsStr('テスト', ''));
end;
end.