Răsfoiți Sursa

* 2 test cases from Reinier Olislagers

git-svn-id: trunk@22138 -
michael 13 ani în urmă
părinte
comite
e1ad1a02d2
3 a modificat fișierele cu 298 adăugiri și 0 ștergeri
  1. 2 0
      .gitattributes
  2. 152 0
      packages/paszlib/tests/tconend.pp
  3. 144 0
      packages/paszlib/tests/tczipper.pp

+ 2 - 0
.gitattributes

@@ -5840,6 +5840,8 @@ packages/paszlib/src/zipper.pp svneol=native#text/plain
 packages/paszlib/src/ziputils.pas svneol=native#text/plain
 packages/paszlib/src/zstream.pp svneol=native#text/plain
 packages/paszlib/src/zuncompr.pas svneol=native#text/plain
+packages/paszlib/tests/tconend.pp svneol=native#text/plain
+packages/paszlib/tests/tczipper.pp svneol=native#text/plain
 packages/pcap/Makefile svneol=native#text/plain
 packages/pcap/Makefile.fpc svneol=native#text/plain
 packages/pcap/Makefile.fpc.fpcmake svneol=native#text/plain

+ 152 - 0
packages/paszlib/tests/tconend.pp

@@ -0,0 +1,152 @@
+{
+    This file is part of the Free Pascal packages.
+    Copyright (c) 1999-2012 by the Free Pascal development team
+
+    Tests zip/unzip functionality provided by the FPC zipper.pp unit.
+    Created by Reinier Olislagers
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+program tconend;
+ 
+{$mode objfpc}{$h+}
+
+uses SysUtils, classes, zipper, md5;
+
+type
+  TCallBackHandler = class(TObject)
+  public
+    procedure EndOfFile(Sender:TObject; const Ratio:double);
+    procedure StartOfFile(Sender:TObject; const AFileName:string);
+  end;
+
+
+procedure TCallBackHandler.EndOfFile(Sender : TObject; Const Ratio : Double);
+begin
+  writeln('End of file handler hit; ratio: '+floattostr(ratio));
+  if (Ratio<0) then
+  begin
+    writeln('Found compression ratio '+floattostr(Ratio)+', which should never be lower than 0.');
+    halt(3);
+  end;
+end;
+
+procedure TCallBackHandler.StartOfFile(Sender : TObject; Const AFileName : String);
+begin
+  writeln('Start of file handler hit; filename: '+AFileName);
+  if AFileName='' then
+  begin
+    writeln('Archive filename should not be empty.');
+    halt(4);
+  end;
+end;
+
+var
+  code: cardinal;
+  CallBackHandler: TCallBackHandler;
+  CompressedFile: string;
+  FileContents: TStringList;
+  UncompressedFile1: string;
+  UncompressedFile1Hash: string;
+  UncompressedFile2: string;
+  UncompressedFile2Hash: string;
+  OurZipper: TZipper;
+  UnZipper: TUnZipper;
+begin
+  code := 0;
+  UncompressedFile1:=SysUtils.GetTempFileName('', 'UNC');
+  UncompressedFile2:=SysUtils.GetTempFileName('', 'UNC');
+  CompressedFile:=SysUtils.GetTempFileName('', 'ZP');
+
+  FileContents:=TStringList.Create;
+  OurZipper:=TZipper.Create;
+  UnZipper:=TUnZipper.Create;
+  CallBackHandler:=TCallBackHandler.Create;
+  try
+    // Set up uncompressed files
+    FileContents.Add('This is an uncompressed file.');
+    FileContents.Add('And another line.');
+    FileContents.SaveToFile(UncompressedFile1);
+    FileContents.Clear;
+    FileContents.Add('Have you looked into using fpcup today?');
+    FileContents.Add('It works nicely with fpc and goes well with a fruity red wine, too.');
+    FileContents.SaveToFile(UncompressedFile2);
+    // Remember their content, so we can compare later.
+    UncompressedFile1Hash:=MD5Print(MD5File(UncompressedFile1, MDDefBufSize));
+    UncompressedFile2Hash:=MD5Print(MD5File(UncompressedFile2, MDDefBufSize));
+
+    // Test zip functionality.
+    writeln('Beginning zip test');
+    OurZipper.FileName:=CompressedFile;
+    // Add the files only with their filenames, we don't want to create
+    // subdirectories:
+    OurZipper.Entries.AddFileEntry(UncompressedFile1,ExtractFileName(UncompressedFile1));
+    OurZipper.Entries.AddFileEntry(UncompressedFile2,ExtractFileName(UncompressedFile2));
+    OurZipper.OnStartFile:[email protected];
+    OurZipper.OnEndFile:[email protected];
+    OurZipper.ZipAllFiles;
+    if not FileExists(CompressedFile) then
+    begin
+      writeln('Zip file was not created.');
+      halt(5);
+    end;
+    writeln('Zip test done');
+
+    // Delete original files
+    DeleteFile(UncompressedFile1);
+    DeleteFile(UncompressedFile2);
+
+    // Now unzip
+    writeln('Beginning unzip test');
+    Unzipper.FileName:=CompressedFile;
+    Unzipper.OutputPath:=ExtractFilePath(UncompressedFile1);
+    UnZipper.OnStartFile:[email protected];
+    UnZipper.OnEndFile:[email protected];
+    Unzipper.Examine;
+    Unzipper.UnZipAllFiles;
+
+    // Now we should have the uncompressed files again
+    if (not FileExists(UncompressedFile1)) or
+      (not FileExists(UncompressedFile2)) then
+    begin
+      writeln('Unzip failed: could not find decompressed files.');
+      halt(6);
+    end;
+
+    // Compare hashes
+    if
+      (UncompressedFile1Hash<>MD5Print(MD5File(UncompressedFile1, MDDefBufSize)))
+      or
+      (UncompressedFile2Hash<>MD5Print(MD5File(UncompressedFile2, MDDefBufSize)))
+    then
+    begin
+      writeln('Unzip failed: uncompressed files are not the same as the originals.');
+      halt(7);
+    end;
+    writeln('Unzip test done');
+
+    if code = 0 then
+      writeln('Basic zip/unzip tests passed')
+    else
+      writeln('Basic zip/unzip test failed: ', code);
+  finally
+    FileContents.Free;
+    CallBackHandler.Free;
+    OurZipper.Free;
+    UnZipper.Free;
+    try
+      if FileExists(CompressedFile) then DeleteFile(CompressedFile);
+      if FileExists(UncompressedFile1) then DeleteFile(UncompressedFile1);
+      if FileExists(UncompressedFile2) then DeleteFile(UncompressedFile2);
+    finally
+      // Ignore errors; operating system should clean out temp files
+    end; 
+  end;
+  Halt(code);
+end.

+ 144 - 0
packages/paszlib/tests/tczipper.pp

@@ -0,0 +1,144 @@
+program tczipper;
+{
+    This file is part of the Free Pascal packages.
+    Copyright (c) 1999-2012 by the Free Pascal development team
+
+    Tests zip/unzip functionality provided by the FPC zipper.pp unit.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+{$mode objfpc}{$h+}
+
+uses SysUtils, classes, zipper, md5;
+
+type
+  TCallBackHandler = class(TObject)
+  public
+    procedure EndOfFile(Sender:TObject; const Ratio:double);
+    procedure StartOfFile(Sender:TObject; const AFileName:string);
+  end;
+
+
+procedure TCallBackHandler.EndOfFile(Sender : TObject; Const Ratio : Double);
+begin
+  if (Ratio<0) then
+  begin
+    writeln('Found compression ratio '+floattostr(Ratio)+', which should never be lower than 0.');
+    halt(3);
+  end;
+end;
+
+procedure TCallBackHandler.StartOfFile(Sender : TObject; Const AFileName : String);
+begin
+  if AFileName='' then
+  begin
+    writeln('Archive filename should not be empty.');
+    halt(4);
+  end;
+end;
+
+var
+  code: cardinal;
+  CallBackHandler: TCallBackHandler;
+  CompressedFile: string;
+  FileContents: TStringList;
+  UncompressedFile1: string;
+  UncompressedFile1Hash: string;
+  UncompressedFile2: string;
+  UncompressedFile2Hash: string;
+  OurZipper: TZipper;
+  UnZipper: TUnZipper;
+begin
+  code := 0;
+  UncompressedFile1:=SysUtils.GetTempFileName('', 'UNC');
+  UncompressedFile2:=SysUtils.GetTempFileName('', 'UNC');
+  CompressedFile:=SysUtils.GetTempFileName('', 'ZP');
+
+  FileContents:=TStringList.Create;
+  OurZipper:=TZipper.Create;
+  UnZipper:=TUnZipper.Create;
+  CallBackHandler:=TCallBackHandler.Create;
+  try
+    // Set up uncompressed files
+    FileContents.Add('This is an uncompressed file.');
+    FileContents.Add('And another line.');
+    FileContents.SaveToFile(UncompressedFile1);
+    FileContents.Clear;
+    FileContents.Add('Have you looked into using fpcup today?');
+    FileContents.Add('It works nicely with fpc and goes well with a fruity red wine, too.');
+    FileContents.SaveToFile(UncompressedFile2);
+    // Remember their content, so we can compare later.
+    UncompressedFile1Hash:=MD5Print(MD5File(UncompressedFile1, MDDefBufSize));
+    UncompressedFile2Hash:=MD5Print(MD5File(UncompressedFile2, MDDefBufSize));
+
+    // Test zip functionality.
+    OurZipper.FileName:=CompressedFile;
+    // Add the files only with their filenames, we don't want to create
+    // subdirectories:
+    OurZipper.Entries.AddFileEntry(UncompressedFile1,ExtractFileName(UncompressedFile1));
+    OurZipper.Entries.AddFileEntry(UncompressedFile2,ExtractFileName(UncompressedFile2));
+    OurZipper.OnStartFile:[email protected];
+    OurZipper.OnEndFile:[email protected];
+    OurZipper.ZipAllFiles;
+    if not FileExists(CompressedFile) then
+    begin
+      writeln('Zip file was not created.');
+      halt(5);
+    end;
+
+    // Delete original files
+    DeleteFile(UncompressedFile1);
+    DeleteFile(UncompressedFile2);
+
+    // Now unzip
+    Unzipper.FileName:=CompressedFile;
+    Unzipper.OutputPath:=ExtractFilePath(UncompressedFile1);
+    UnZipper.OnStartFile:[email protected];
+    UnZipper.OnEndFile:[email protected];
+    Unzipper.Examine;
+    Unzipper.UnZipAllFiles;
+
+    // Now we should have the uncompressed files again
+    if (not FileExists(UncompressedFile1)) or
+      (not FileExists(UncompressedFile2)) then
+    begin
+      writeln('Unzip failed: could not find decompressed files.');
+      halt(6);
+    end;
+
+    // Compare hashes
+    if
+      (UncompressedFile1Hash<>MD5Print(MD5File(UncompressedFile1, MDDefBufSize)))
+      or
+      (UncompressedFile2Hash<>MD5Print(MD5File(UncompressedFile2, MDDefBufSize)))
+    then
+    begin
+      writeln('Unzip failed: uncompressed files are not the same as the originals.');
+      halt(7);
+    end;
+
+    if code = 0 then
+      writeln('Basic zip/unzip tests passed')
+    else
+      writeln('Basic zip/unzip test failed: ', code);
+  finally
+    FileContents.Free;
+    CallBackHandler.Free;
+    OurZipper.Free;
+    UnZipper.Free;
+    try
+      if FileExists(CompressedFile) then DeleteFile(CompressedFile);
+      if FileExists(UncompressedFile1) then DeleteFile(UncompressedFile1);
+      if FileExists(UncompressedFile2) then DeleteFile(UncompressedFile2);
+    finally
+      // Ignore errors; operating system should clean out temp files
+    end; 
+  end;
+  Halt(code);
+end.