mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-02 17:19:27 +01:00
* Some fixes from Graeme Geldenhuys (Bug ID 30038):
- pdf unittests: Minor improvement to PDFString.TestWrite() - pdf: fixes FPC bug ID #30038 and implements TPDFUTF8String unit tests. - pdf test: Extended the SimpleText() text output to show more symbols git-svn-id: trunk@33543 -
This commit is contained in:
parent
3c2dab9878
commit
bae53fda21
@ -166,7 +166,7 @@ begin
|
||||
P.WriteText(15, 200, 'Typography: “What’s wrong?”');
|
||||
P.WriteText(40, 210, '£17.99 vs £17·99');
|
||||
P.WriteText(40, 220, '€17.99 vs €17·99');
|
||||
P.WriteText(40, 230, 'OK then… êçèûÎÐð£¢ß');
|
||||
P.WriteText(40, 230, 'OK then… (êçèûÎÐð£¢ß) \\//{}()#<>');
|
||||
|
||||
P.WriteText(25, 280, 'B субботу двадцать третьего мая приезжает твоя любимая теща.');
|
||||
end;
|
||||
|
||||
@ -2408,8 +2408,6 @@ begin
|
||||
inherited Create(ADocument);
|
||||
FValue := AValue;
|
||||
FFontIndex := AFontIndex;
|
||||
if (Pos('(', FValue) > 0) or (Pos(')', FValue) > 0) or (Pos('\', FValue) > 0) then
|
||||
FValue := InsertEscape(FValue);
|
||||
end;
|
||||
|
||||
{ TPDFArray }
|
||||
|
||||
@ -82,6 +82,7 @@ type
|
||||
procedure TestInsertEscape;
|
||||
end;
|
||||
|
||||
|
||||
TTestPDFString = class(TBasePDFTest)
|
||||
published
|
||||
procedure TestWrite;
|
||||
@ -90,6 +91,13 @@ type
|
||||
end;
|
||||
|
||||
|
||||
TTestPDFUTF8String = class(TBasePDFTest)
|
||||
published
|
||||
procedure TestWrite;
|
||||
procedure TestWriteEscaped;
|
||||
end;
|
||||
|
||||
|
||||
TTestPDFArray = class(TBasePDFTest)
|
||||
published
|
||||
procedure TestWrite;
|
||||
@ -242,6 +250,9 @@ implementation
|
||||
uses
|
||||
FPImage;
|
||||
|
||||
const
|
||||
cFont1 = 'fonts' + PathDelim + 'LiberationSans-Regular.ttf';
|
||||
|
||||
type
|
||||
// so we can access Protected methods in the tests
|
||||
TMockPDFObject = class(TPDFObject);
|
||||
@ -252,6 +263,7 @@ type
|
||||
TMockPDFReference = class(TPDFReference);
|
||||
TMockPDFName = class(TPDFName);
|
||||
TMockPDFString = class(TPDFString);
|
||||
TMockPDFUTF8String = class(TPDFUTF8String);
|
||||
TMockPDFArray = class(TPDFArray);
|
||||
TMockPDFStream = class(TPDFStream);
|
||||
TMockPDFEmbeddedFont = class(TPDFEmbeddedFont);
|
||||
@ -568,11 +580,13 @@ begin
|
||||
o.Free;
|
||||
end;
|
||||
|
||||
S.Size := 0; // empty out the Stream data
|
||||
|
||||
{ Length1 seems to be a special case? }
|
||||
o := TPDFString.Create(PDF, #$C2#$A3+#$C2#$BB); // UTF-8 text of "£»"
|
||||
try
|
||||
TMockPDFString(o).Write(S); // write will convert UTF-8 to ANSI
|
||||
AssertEquals('Failed on 3', '(Test)('+#163#187+')', S.DataString);
|
||||
AssertEquals('Failed on 3', '('+#163#187+')', S.DataString);
|
||||
finally
|
||||
o.Free;
|
||||
end;
|
||||
@ -607,6 +621,55 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TTestPDFUTF8String }
|
||||
|
||||
procedure TTestPDFUTF8String.TestWrite;
|
||||
var
|
||||
o: TPDFUTF8String;
|
||||
fnt: integer;
|
||||
begin
|
||||
PDF.Options := []; // disable all compression
|
||||
fnt := PDF.AddFont(cFont1, 'Liberation Sans', clBlack);
|
||||
o := TPDFUTF8String.Create(PDF, 'TestT', fnt);
|
||||
try
|
||||
AssertEquals('Failed on 1', '', S.DataString);
|
||||
TMockPDFUTF8String(o).Write(S);
|
||||
// T | e | s | t | T |
|
||||
AssertEquals('Failed on 2', '<00370048005600570037>', S.DataString);
|
||||
finally
|
||||
o.Free;
|
||||
end;
|
||||
|
||||
S.Size := 0; // empty out the Stream data
|
||||
|
||||
{ Length1 seems to be a special case? }
|
||||
o := TPDFUTF8String.Create(PDF, #$C2#$A3+#$C2#$BB, fnt); // UTF-8 text of "£»"
|
||||
try
|
||||
TMockPDFUTF8String(o).Write(S);
|
||||
// £ | » |
|
||||
AssertEquals('Failed on 3', '<0065007D>', S.DataString);
|
||||
finally
|
||||
o.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTestPDFUTF8String.TestWriteEscaped;
|
||||
var
|
||||
o: TPDFUTF8String;
|
||||
fnt: integer;
|
||||
begin
|
||||
fnt := PDF.AddFont(cFont1, 'Liberation Sans', clBlack);
|
||||
o := TPDFUTF8String.Create(PDF, 'a(b)c\def/g', fnt);
|
||||
try
|
||||
AssertEquals('Failed on 1', '', S.DataString);
|
||||
TMockPDFUTF8String(o).Write(S);
|
||||
// a| ( | b | ) | c | \ | d | e | f | / | g |
|
||||
AssertEquals('Failed on 2', '<0044000B0045000C0046003F0047004800490012004A>', S.DataString);
|
||||
finally
|
||||
o.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TTestPDFArray }
|
||||
|
||||
procedure TTestPDFArray.TestWrite;
|
||||
@ -1741,6 +1804,7 @@ initialization
|
||||
RegisterTest({$ifdef fptest}'fpPDF',{$endif}TTestPDFName{$ifdef fptest}.Suite{$endif});
|
||||
RegisterTest({$ifdef fptest}'fpPDF',{$endif}TTestPDFAbstractString{$ifdef fptest}.Suite{$endif});
|
||||
RegisterTest({$ifdef fptest}'fpPDF',{$endif}TTestPDFString{$ifdef fptest}.Suite{$endif});
|
||||
RegisterTest({$ifdef fptest}'fpPDF',{$endif}TTestPDFUTF8String{$ifdef fptest}.Suite{$endif});
|
||||
RegisterTest({$ifdef fptest}'fpPDF',{$endif}TTestPDFArray{$ifdef fptest}.Suite{$endif});
|
||||
RegisterTest({$ifdef fptest}'fpPDF',{$endif}TTestPDFStream{$ifdef fptest}.Suite{$endif});
|
||||
RegisterTest({$ifdef fptest}'fpPDF',{$endif}TTestPDFEmbeddedFont{$ifdef fptest}.Suite{$endif});
|
||||
|
||||
@ -76,35 +76,35 @@ end;
|
||||
procedure TFPFontCacheItemTest.TestIsRegular;
|
||||
begin
|
||||
{ regular should be the default flag set }
|
||||
CheckEquals(True, CI.IsRegular, 'Failed on 1');
|
||||
AssertEquals('Failed on 1', True, CI.IsRegular);
|
||||
end;
|
||||
|
||||
procedure TFPFontCacheItemTest.TestIsBold;
|
||||
begin
|
||||
CheckEquals(False, CI.IsBold, 'Failed on 1');
|
||||
AssertEquals('Failed on 1', False, CI.IsBold);
|
||||
end;
|
||||
|
||||
procedure TFPFontCacheItemTest.TestIsItalic;
|
||||
begin
|
||||
CheckEquals(False, CI.IsItalic, 'Failed on 1');
|
||||
AssertEquals('Failed on 1', False, CI.IsItalic);
|
||||
end;
|
||||
|
||||
procedure TFPFontCacheItemTest.TestIsFixedWidth;
|
||||
begin
|
||||
CheckEquals(False, CI.IsFixedWidth, 'Failed on 1');
|
||||
AssertEquals('Failed on 1', False, CI.IsFixedWidth);
|
||||
end;
|
||||
|
||||
procedure TFPFontCacheItemTest.TestRegularVsFixedWidth;
|
||||
begin
|
||||
CheckEquals(True, CI.IsRegular, 'Failed on 1');
|
||||
CheckEquals(False, CI.IsFixedWidth, 'Failed on 2');
|
||||
AssertEquals('Failed on 1', True, CI.IsRegular);
|
||||
AssertEquals('Failed on 2', False, CI.IsFixedWidth);
|
||||
end;
|
||||
|
||||
procedure TFPFontCacheItemTest.TestFileName;
|
||||
begin
|
||||
CheckTrue(CI.FileName <> '', 'Failed on 1');
|
||||
AssertTrue('Failed on 1', CI.FileName <> '');
|
||||
{ FileName is a non-existing file though, so FontData should be nil }
|
||||
CheckTrue(CI.FontData = nil, 'Failed on 2');
|
||||
AssertTrue('Failed on 2', CI.FontData = nil);
|
||||
end;
|
||||
|
||||
procedure TFPFontCacheItemTest.TestTextWidth_FontUnits;
|
||||
@ -185,40 +185,40 @@ end;
|
||||
|
||||
procedure TFPFontCacheListTest.TestCount;
|
||||
begin
|
||||
CheckEquals(0, FC.Count, 'Failed on 1');
|
||||
AssertEquals('Failed on 1', 0, FC.Count);
|
||||
FC.SearchPath.Add(ExtractFilePath(ParamStr(0)) + 'fonts');
|
||||
CheckEquals(0, FC.Count, 'Failed on 2');
|
||||
AssertEquals('Failed on 2', 0, FC.Count);
|
||||
FC.BuildFontCache;
|
||||
CheckEquals(4, FC.Count, 'Failed on 3' + cErrFontCountWrong);
|
||||
AssertEquals('Failed on 3' + cErrFontCountWrong, 4, FC.Count);
|
||||
end;
|
||||
|
||||
procedure TFPFontCacheListTest.TestBuildFontCache;
|
||||
begin
|
||||
CheckEquals(0, FC.Count, 'Failed on 1');
|
||||
AssertEquals('Failed on 1', 0, FC.Count);
|
||||
try
|
||||
FC.BuildFontCache;
|
||||
Fail('Failed on 2. We don''t have font paths, so BuildFontCache shouldn''t run.');
|
||||
except
|
||||
on e: Exception do
|
||||
begin
|
||||
CheckEquals(E.ClassName, 'ETTF', 'Failed on 3.');
|
||||
AssertEquals('Failed on 3', E.ClassName, 'ETTF');
|
||||
end;
|
||||
end;
|
||||
|
||||
FC.SearchPath.Add(ExtractFilePath(ParamStr(0)) + 'fonts');
|
||||
CheckEquals(0, FC.Count, 'Failed on 4');
|
||||
AssertEquals('Failed on 4', 0, FC.Count);
|
||||
FC.BuildFontCache;
|
||||
CheckEquals(4, FC.Count, 'Failed on 5' + cErrFontCountWrong);
|
||||
AssertEquals('Failed on 5' + cErrFontCountWrong, 4, FC.Count);
|
||||
end;
|
||||
|
||||
procedure TFPFontCacheListTest.TestClear;
|
||||
begin
|
||||
CheckEquals(0, FC.Count, 'Failed on 1');
|
||||
AssertEquals('Failed on 1', 0, FC.Count);
|
||||
FC.SearchPath.Add(ExtractFilePath(ParamStr(0)) + 'fonts');
|
||||
FC.BuildFontCache;
|
||||
CheckEquals(4, FC.Count, 'Failed on 2');
|
||||
AssertEquals('Failed on 2', 4, FC.Count);
|
||||
FC.Clear;
|
||||
CheckEquals(0, FC.Count, 'Failed on 3');
|
||||
AssertEquals('Failed on 3', 0, FC.Count);
|
||||
end;
|
||||
|
||||
procedure TFPFontCacheListTest.TestFind_FamilyName;
|
||||
@ -226,29 +226,29 @@ var
|
||||
lCI: TFPFontCacheItem;
|
||||
begin
|
||||
lCI := nil;
|
||||
CheckEquals(0, FC.Count, 'Failed on 1');
|
||||
AssertEquals('Failed on 1', 0, FC.Count);
|
||||
lCI := FC.Find('Ubuntu');
|
||||
CheckTrue(lCI = nil, 'Failed on 2');
|
||||
AssertTrue('Failed on 2', lCI = nil);
|
||||
FC.SearchPath.Add(ExtractFilePath(ParamStr(0)) + 'fonts');
|
||||
FC.BuildFontCache;
|
||||
CheckEquals(4, FC.Count, 'Failed on 3' + cErrFontCountWrong);
|
||||
AssertEquals('Failed on 3' + cErrFontCountWrong, 4, FC.Count);
|
||||
lCI := FC.Find('Ubuntu');
|
||||
CheckTrue(Assigned(lCI), 'Failed on 4');
|
||||
AssertTrue('Failed on 4', Assigned(lCI));
|
||||
|
||||
{ TODO: We should try and extend this to make font paths user configure
|
||||
thus the tests could be more flexible. }
|
||||
|
||||
lCI := FC.Find('Ubuntu', True); // bold font
|
||||
CheckTrue(lCI = nil, 'Failed on 5');
|
||||
AssertTrue('Failed on 5', lCI = nil);
|
||||
lCI := FC.Find('Ubuntu', False, True); // italic font
|
||||
CheckTrue(lCI = nil, 'Failed on 6');
|
||||
AssertTrue('Failed on 6', lCI = nil);
|
||||
lCI := FC.Find('Ubuntu', True, True); // bold+italic font
|
||||
CheckTrue(lCI = nil, 'Failed on 7');
|
||||
AssertTrue('Failed on 7', lCI = nil);
|
||||
|
||||
lCI := FC.Find('DejaVu Sans');
|
||||
CheckTrue(Assigned(lCI), 'Failed on 8');
|
||||
AssertTrue('Failed on 8', Assigned(lCI));
|
||||
lCI := FC.Find('DejaVu Sans Bold');
|
||||
CheckTrue(lCI = nil, 'Failed on 9');
|
||||
AssertTrue('Failed on 9', lCI = nil);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user