Browse Source

tests: add test for TEncoding class

git-svn-id: trunk@19357 -
paul 14 years ago
parent
commit
a068e0cae2

+ 4 - 0
.gitattributes

@@ -10801,6 +10801,7 @@ tests/test/units/sysutils/strtotimetest.pp svneol=native#text/plain
 tests/test/units/sysutils/tastrcmp.pp svneol=native#text/plain
 tests/test/units/sysutils/tastrcmp1.pp svneol=native#text/plain
 tests/test/units/sysutils/tdirex.pp svneol=native#text/plain
+tests/test/units/sysutils/tencodingtest.pp svneol=native#text/pascal
 tests/test/units/sysutils/texec1.pp svneol=native#text/plain
 tests/test/units/sysutils/texec2.pp svneol=native#text/plain
 tests/test/units/sysutils/textractquote.pp svneol=native#text/plain
@@ -10813,6 +10814,9 @@ tests/test/units/sysutils/tlocale.pp svneol=native#text/plain
 tests/test/units/sysutils/trwsync.pp svneol=native#text/plain
 tests/test/units/sysutils/tsscanf.pp svneol=native#text/plain
 tests/test/units/sysutils/tstrtobool.pp svneol=native#text/plain
+tests/test/units/sysutils/utf16.txt svneol=native#text/plain
+tests/test/units/sysutils/utf16be.txt svneol=native#text/plain
+tests/test/units/sysutils/utf8.txt svneol=native#text/plain
 tests/test/units/variants/tcustomvariant.pp svneol=native#text/plain
 tests/test/units/variants/tvararrayofintf.pp svneol=native#text/plain
 tests/test/uobjc24.pp svneol=native#text/plain

+ 83 - 0
tests/test/units/sysutils/tencodingtest.pp

@@ -0,0 +1,83 @@
+program tencodingtest;
+
+{$mode delphi}{$H+}
+{$codepage cp1251}
+
+uses
+  SysUtils, Classes, unit1;
+
+function CheckCodePage(AFileName: String; AEncoding: TEncoding): Boolean;
+var
+  S: TStream;
+  B: TBytes;
+  DetectedEncoding: TEncoding;
+begin
+  S := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyNone);
+  try
+    SetLength(B, S.Size);
+    S.Read(B[0], S.Size);
+    DetectedEncoding := nil;
+    Result :=
+      (TEncoding.GetBufferEncoding(B, DetectedEncoding) <> 0) and
+      (DetectedEncoding = AEncoding);
+  finally
+    S.Free;
+  end;
+end;
+
+type
+  TCp1251String = type AnsiString(1251);
+  TCp866String = type AnsiString(866);
+var
+  Cp866Encoding,
+  Cp1251Encoding: TEncoding;
+  Bytes: TBytes;
+  Cp1251String: TCp1251String;
+  Cp866String: Tcp866String;
+  S: AnsiString;
+  U8: UTF8String;
+  U1, U2: UnicodeString;
+begin
+  // 1. check various conversions
+  Cp866Encoding := TEncoding.GetEncoding('IBM866');
+  Cp1251Encoding := TEncoding.GetEncoding('windows-1251');
+  Cp1251String := 'Ïðèâåò çåìëÿíå!';
+  Cp866String := Cp1251String;
+  Bytes := Cp1251Encoding.GetBytes(Cp1251String);
+  Bytes := TEncoding.Convert(Cp1251Encoding, Cp866Encoding, Bytes);
+  SetString(S, PAnsiChar(Bytes), Length(Bytes));
+  if not CompareMem(Pointer(S), Pointer(Cp866String), Length(S)) then
+    halt(1);
+  U1 := Cp866Encoding.GetString(Bytes);
+  U2 := TEncoding.Unicode.GetString(TEncoding.Convert(Cp866Encoding, TEncoding.Unicode, Bytes));
+  if U1 <> U2 then
+    halt(2);
+  U1 := TEncoding.BigEndianUnicode.GetString(TEncoding.Convert(Cp866Encoding, TEncoding.BigEndianUnicode, Bytes));
+  if U1 <> U2 then
+    halt(3);
+  Bytes := TEncoding.Convert(Cp866Encoding, TEncoding.UTF8, Bytes);
+  U8 := Cp866String;
+  if not CompareMem(Pointer(U8), @Bytes[0], Length(U8)) then
+    halt(4);
+  // 2. check misc functions
+  if not (TEncoding.IsStandardEncoding(TEncoding.Unicode) or TEncoding.IsStandardEncoding(TEncoding.UTF8) or TEncoding.IsStandardEncoding(TEncoding.UTF7)) or
+    TEncoding.IsStandardEncoding(Cp866Encoding) or TEncoding.IsStandardEncoding(Cp1251Encoding) then
+    halt(5);
+  if Cp866Encoding.EncodingName = '' then
+    halt(6)
+  else
+    WriteLn(Cp866Encoding.EncodingName);
+  if TEncoding.Default.CodePage <> DefaultSystemCodePage then
+    halt(7);
+  // 3. check codepage detection
+  if not CheckCodePage('utf8.txt', TEncoding.UTF8) then
+    halt(8);
+  if not CheckCodePage('utf16.txt', TEncoding.Unicode) then
+    halt(9);
+  if not CheckCodePage('utf16be.txt', TEncoding.BigEndianUnicode) then
+    halt(10);
+  Cp866Encoding.Free;
+  Cp1251Encoding.Free;
+  WriteLn('ok');
+end.
+

+ 1 - 0
tests/test/units/sysutils/utf16.txt

@@ -0,0 +1 @@
+��@>25@:0

+ 1 - 0
tests/test/units/sysutils/utf16be.txt

@@ -0,0 +1 @@
+��@>25@:0

+ 1 - 0
tests/test/units/sysutils/utf8.txt

@@ -0,0 +1 @@
+Проверка