mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-11 14:02:49 +02:00
94 lines
1.8 KiB
ObjectPascal
94 lines
1.8 KiB
ObjectPascal
unit TestVarious;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FpPascalBuilder, LazLoggerBase, TestOutputLogger, fpcunit,
|
|
testutils, testregistry;
|
|
|
|
type
|
|
|
|
{ TTestVarious }
|
|
|
|
TTestVarious = class(TTestCase)
|
|
published
|
|
procedure TestQuoteString;
|
|
end;
|
|
|
|
implementation
|
|
|
|
procedure TTestVarious.TestQuoteString;
|
|
const
|
|
N: array [0..9] of string = (
|
|
#0, #1, 'a', '1', '''',
|
|
'ä', // correct utf8
|
|
#193, #225#129, #225, #129 // broken
|
|
);
|
|
E: array [0..9] of string = (
|
|
'#$00', '#$01', 'a', '1', '''''',
|
|
'ä',
|
|
'#$C1', '#$E1#$81', '#$E1', '#$81' // broken
|
|
);
|
|
|
|
Q='''';
|
|
var
|
|
c: array [1..5] of integer;
|
|
l, i: Integer;
|
|
s1, s2: String;
|
|
InQuote: Boolean;
|
|
begin
|
|
AssertEquals(Q+Q, QuoteText(''));
|
|
AssertEquals(Q+'a'+Q, QuoteText('a'));
|
|
AssertEquals(Q+Q+Q+Q, QuoteText(Q));
|
|
AssertEquals('#$09', QuoteText(#9));
|
|
|
|
for l := 1 to 5 do begin
|
|
for i := 1 to l do c[i] := 0;
|
|
while true do begin
|
|
s1 := '';
|
|
s2 := '';
|
|
InQuote := False;
|
|
for i := 1 to l do begin
|
|
s1 := s1 + N[c[i]]; // input
|
|
if (E[c[i]][1] <> '#') xor InQuote then begin
|
|
s2 := s2 + Q;
|
|
InQuote := not InQuote;
|
|
end;
|
|
s2 := s2 + E[c[i]]; // expect
|
|
end;
|
|
if InQuote then
|
|
s2 := s2 + Q;
|
|
|
|
AssertEquals(s2, QuoteText(s1));
|
|
|
|
// iterate all variations for length 1 - 5
|
|
i := 1;
|
|
while i <= l do begin
|
|
if c[i] < 9 then begin
|
|
inc(c[i]);
|
|
// avoid combining 2 broken into one correct char
|
|
if (c[i] in [6,7,8]) and (i < l) and (c[i+1] = 9) then
|
|
c[i] := 9;
|
|
break;
|
|
end else begin
|
|
c[i] := 0;
|
|
inc(i);
|
|
end;
|
|
end;
|
|
if i > l then
|
|
break;
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
initialization
|
|
|
|
RegisterTest(TTestVarious);
|
|
end.
|
|
|