Skip to content

Commit b7548a8

Browse files
author
Arnaud Bouchez
committed
tests: completed GB18030 coverage
1 parent 00a555c commit b7548a8

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

src/mormot.commit.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
'2.3.9547'
1+
'2.3.9548'

test/test.core.base.pas

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5074,6 +5074,7 @@ procedure TTestCoreBase._UTF8;
50745074
Unic: RawByteString;
50755075
WA, HasValidUtf8Avx2: Boolean;
50765076
rb1, rb2, rb3: RawByteString;
5077+
eng: TSynAnsiConvert;
50775078
const
50785079
ROWIDS: array[0..17] of PUtf8Char = ('id', 'ID', 'iD', 'rowid', 'ROWid',
50795080
'ROWID', 'rowiD', 'ROWId', // ok
@@ -5920,25 +5921,29 @@ procedure TTestCoreBase._UTF8;
59205921
FastSetString(U, @CHINESE_TEXT, 9);
59215922
CheckEqual(StrLen(pointer(U)), 9);
59225923
SU := Utf8ToSynUnicode(U);
5923-
rb1 := TSynAnsiConvert.Engine(936).UnicodeStringToAnsi(SU); // GB2312
5924+
eng := TSynAnsiConvert.Engine(936);
5925+
Check(eng <> nil, 'Engine(936)');
5926+
rb1 := eng.UnicodeStringToAnsi(SU); // GB2312
59245927
CheckEqual(length(rb1), 7, 'cp936a');
5925-
SU2 := TSynAnsiConvert.Engine(936).AnsiToUnicodeString(rb1);
5928+
SU2 := eng.AnsiToUnicodeString(rb1);
59265929
Check(SU = SU2);
59275930
rb1 := '';
5928-
rb1 := TSynAnsiConvert.Engine(936).Utf8ToAnsi(U);
5931+
rb1 := eng.Utf8ToAnsi(U);
59295932
CheckEqual(length(rb1), 7);
5930-
U2 := TSynAnsiConvert.Engine(936).AnsiToUtf8(rb1);
5933+
U2 := eng.AnsiToUtf8(rb1);
59315934
CheckEqual(U, U2);
5932-
rb1 := TSynAnsiConvert.Engine(54936).UnicodeStringToAnsi(SU); // GB18030
5935+
eng := TSynAnsiConvert.Engine(54936);
5936+
Check(eng <> nil, 'Engine(54936)');
5937+
rb1 := eng.UnicodeStringToAnsi(SU); // GB18030
59335938
if rb1 <> '' then // some Windows versions won't support this code page
59345939
begin
59355940
CheckEqual(length(rb1), 7, 'cp54936a');
5936-
SU2 := TSynAnsiConvert.Engine(54936).AnsiToUnicodeString(rb1);
5941+
SU2 := eng.AnsiToUnicodeString(rb1);
59375942
Check(SU = SU2, 'cp54936b');
59385943
rb1 := '';
5939-
rb1 := TSynAnsiConvert.Engine(54936).Utf8ToAnsi(U);
5944+
rb1 := eng.Utf8ToAnsi(U);
59405945
CheckEqual(length(rb1), 7, 'cp54936c');
5941-
U2 := TSynAnsiConvert.Engine(54936).AnsiToUtf8(rb1);
5946+
U2 := eng.AnsiToUtf8(rb1);
59425947
CheckEqual(U, U2, 'cp54936d');
59435948
{$ifdef HASCODEPAGE}
59445949
rb2 := U;
@@ -5950,6 +5955,16 @@ procedure TTestCoreBase._UTF8;
59505955
Check(rb1 = rb2, 'setcodepage');
59515956
Check(SortDynArrayRawByteString(rb1, rb2) = 0);
59525957
{$endif HASCODEPAGE}
5958+
SetLength(U, 4);
5959+
PCardinal(U)^ := $A59AAAF0; // valid in GB18030 only
5960+
SU := Utf8ToSynUnicode(U); // 69 D8 A5 DE , UTF16, Code Point: \uD869\uDEA5
5961+
CheckEqual(PCardinal(SU)^, $DEA5D869);
5962+
RB1 := eng.Utf8ToAnsi(U);
5963+
Check((RB1 <> '') and (PCardinal(RB1)^ = $37EE3598), 'Utf8ToAnsi');
5964+
RB2 := eng.UnicodeStringToAnsi(SU);
5965+
CheckEqual(RB1, RB2, 'RB1=RB2');
5966+
U2 := eng.AnsiToUtf8(RB1);
5967+
CheckEqual(U2, U, 'AnsiToUtf8');
59535968
end;
59545969
Check(UnQuoteSqlStringVar('"one two"', U) <> nil);
59555970
Check(U = 'one two');

0 commit comments

Comments
 (0)