mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-09 03:37:28 +01:00
tests: add test for TEncoding class
git-svn-id: trunk@19357 -
This commit is contained in:
parent
09fa98a564
commit
a068e0cae2
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -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
tests/test/units/sysutils/tencodingtest.pp
Normal file
83
tests/test/units/sysutils/tencodingtest.pp
Normal file
@ -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
tests/test/units/sysutils/utf16.txt
Normal file
1
tests/test/units/sysutils/utf16.txt
Normal file
@ -0,0 +1 @@
|
||||
Проверка
|
||||
1
tests/test/units/sysutils/utf16be.txt
Normal file
1
tests/test/units/sysutils/utf16be.txt
Normal file
@ -0,0 +1 @@
|
||||
Проверка
|
||||
1
tests/test/units/sysutils/utf8.txt
Normal file
1
tests/test/units/sysutils/utf8.txt
Normal file
@ -0,0 +1 @@
|
||||
Проверка
|
||||
Loading…
Reference in New Issue
Block a user