florian 1 неделя назад
Родитель
Сommit
87b44cb2b9
3 измененных файлов с 168 добавлено и 3 удалено
  1. 159 0
      packages/libtar/tests/tlibtar1.pp
  2. 8 2
      tests/Makefile
  3. 1 1
      tests/Makefile.fpc

+ 159 - 0
packages/libtar/tests/tlibtar1.pp

@@ -0,0 +1,159 @@
+{ Simple libtar test - creates a tar archive with a few entries }
+program libtar_simple_test;
+
+{$mode objfpc}{$H+}
+
+uses
+  SysUtils, libtar;
+
+const
+  TAR_FILENAME = 'simple_test.tar';
+  CONTENT_1 = 'Hello, World!';
+  CONTENT_2 = 'Some data in a subdirectory';
+  CONTENT_3 = 'hello.txt';
+  CONTENT_4 = 'hello.txt';
+
+  TotalEntries = 4;
+
+var
+  TW: TTarWriter;
+  TA: TTarArchive;
+  DirRec: TTarDirRec;
+  Content: RawByteString;
+  EntryCount: Integer;
+  Errors: Integer;
+begin
+  Errors := 0;
+
+  WriteLn('Creating tar archive: ', TAR_FILENAME);
+
+  try
+    TW := TTarWriter.Create(TAR_FILENAME);
+    try
+        { Set default permissions }
+        TW.Permissions := [tpReadByOwner, tpWriteByOwner, tpReadByGroup, tpReadByOther];
+
+        { Add a simple text file }
+        WriteLn('  Adding: hello.txt');
+        TW.AddString(CONTENT_1, 'hello.txt', Now);
+
+        { Add a file in a subdirectory }
+        WriteLn('  Adding: subdir/data.txt');
+        TW.AddString(CONTENT_2, 'subdir/data.txt', Now);
+
+        { Add a directory entry }
+        WriteLn('  Adding: emptydir/');
+        TW.AddDir(CONTENT_4, Now);
+
+        { Add a symbolic link }
+        WriteLn('  Adding: link.txt -> hello.txt');
+        TW.AddSymbolicLink('link.txt', CONTENT_3, Now);
+
+        TW.Finalize;
+    finally
+        TW.Free;
+    end;
+
+    WriteLn('Done. Archive created successfully.');
+    WriteLn;
+
+    WriteLn('=== Reading and verifying archive ===');
+    WriteLn;
+
+    TA := TTarArchive.Create(TAR_FILENAME);
+    try
+        EntryCount := 0;
+
+        while TA.FindNext(DirRec) do
+        begin
+        Inc(EntryCount);
+        WriteLn('Entry ', EntryCount, ':');
+        WriteLn('  Name: ', DirRec.Name);
+        WriteLn('  Size: ', DirRec.Size);
+        WriteLn('  Type: ', FILETYPE_NAME[DirRec.FileType]);
+
+        if DirRec.FileType = ftSymbolicLink then
+            begin
+            if DirRec.LinkName <> CONTENT_3 then
+                begin
+                Inc(Errors);
+                writeln('  Wrong link value');
+                end;
+            WriteLn('  Link: -> ', DirRec.LinkName);
+            end;
+
+        if DirRec.FileType = ftDirectory then
+            begin
+            if DirRec.Name <> CONTENT_4 then
+                begin
+                Inc(Errors);
+                writeln('  Wrong directory Name');
+                end;
+            end;
+
+        if DirRec.ChecksumOK then
+            WriteLn('  Checksum: OK')
+        else
+        begin
+            WriteLn('  Checksum: FAILED');
+            Inc(Errors);
+        end;
+
+        { Verify content for regular files }
+        if DirRec.FileType = ftNormal then
+        begin
+            Content := TA.ReadFile;
+
+            if DirRec.Name = 'hello.txt' then
+            begin
+            if Content = CONTENT_1 then
+                WriteLn('  Content: verified OK')
+            else
+            begin
+                WriteLn('  Content: MISMATCH');
+                Inc(Errors);
+            end;
+            end
+            else if DirRec.Name = 'subdir/data.txt' then
+            begin
+            if Content = CONTENT_2 then
+                WriteLn('  Content: verified OK')
+            else
+            begin
+                WriteLn('  Content: MISMATCH');
+                Inc(Errors);
+            end;
+            end;
+        end;
+
+        WriteLn;
+        end;
+    finally
+        TA.Free;
+    end;
+
+    { === PART 3: Summary === }
+    WriteLn('=== Summary ===');
+    WriteLn;
+    WriteLn('Total entries: ', EntryCount);
+
+    if EntryCount <> TotalEntries then
+    begin
+        WriteLn('ERROR: Expected ',TotalEntries,' entries!');
+        Inc(Errors);
+    end;
+
+    if Errors = 0 then
+        WriteLn('All tests PASSED.')
+    else
+        WriteLn('FAILED with ', Errors, ' error(s).');
+
+    WriteLn;
+
+  finally
+    { Cleanup }
+    DeleteFile(TAR_FILENAME);
+  end;
+
+  Halt(Errors);
+end.

+ 8 - 2
tests/Makefile

@@ -2,7 +2,7 @@
 # Don't edit, this file is generated by FPCMake Version 2.0.0
 #
 default: allexectests
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macosclassic m68k-embedded m68k-sinclairql m68k-human68k powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macosclassic powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-haiku x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-android x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros arm-freertos arm-ios powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android mipsel-ps1 mips64-linux mips64el-linux jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-freebsd aarch64-darwin aarch64-win64 aarch64-embedded aarch64-iphonesim aarch64-android aarch64-ios wasm32-embedded wasm32-wasip1 wasm32-wasip1threads wasm32-wasip2 sparc64-linux riscv32-linux riscv32-embedded riscv32-freertos riscv64-linux riscv64-embedded xtensa-linux xtensa-embedded xtensa-freertos z80-embedded z80-zxspectrum z80-msxdos z80-amstradcpc loongarch64-linux
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macosclassic m68k-embedded m68k-sinclairql m68k-human68k powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macosclassic powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-haiku x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-android x86_64-aros x86_64-dragonfly arm-linux arm-netbsd arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros arm-freertos arm-ios powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android mipsel-ps1 mips64-linux mips64el-linux jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-freebsd aarch64-darwin aarch64-win64 aarch64-embedded aarch64-iphonesim aarch64-android aarch64-ios wasm32-embedded wasm32-wasip1 wasm32-wasip1threads wasm32-wasip2 sparc64-linux riscv32-linux riscv32-embedded riscv32-freertos riscv64-linux riscv64-embedded xtensa-linux xtensa-embedded xtensa-freertos z80-embedded z80-zxspectrum z80-msxdos z80-amstradcpc loongarch64-linux
 BSDs = freebsd netbsd openbsd darwin dragonfly
 UNIXs = linux $(BSDs) solaris qnx haiku aix
 LIMIT83fs = go32v2 os2 emx watcom msdos win16 atari human68k
@@ -393,6 +393,9 @@ endif
 ifeq ($(CPU_OS_TARGET),i386-solaris)
 override TARGET_PROGRAMS+=gparmake createlst
 endif
+ifeq ($(CPU_OS_TARGET),i386-qnx)
+override TARGET_PROGRAMS+=gparmake createlst
+endif
 ifeq ($(CPU_OS_TARGET),i386-netware)
 override TARGET_PROGRAMS+=gparmake createlst
 endif
@@ -1540,6 +1543,9 @@ endif
 ifeq ($(CPU_OS_TARGET),i386-solaris)
 REQUIRE_PACKAGES_RTL=1
 endif
+ifeq ($(CPU_OS_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+endif
 ifeq ($(CPU_OS_TARGET),i386-netware)
 REQUIRE_PACKAGES_RTL=1
 endif
@@ -2597,7 +2603,7 @@ TESTDIRECTDIRS=
 TESTSUBDIRS=cg cg/variants cg/cdecl cpu8/avr cpu16 cpu16/i8086 library opt wasm $(addprefix units/,$(TESTUNITDIRS))
 TESTPACKAGESDIRS=bzip2 cocoaint fcl-base fcl-db fcl-image fcl-registry fcl-xml hash rtl-objpas univint webtbs win-base zlib
 TESTPACKAGESUBDIRS=$(addprefix packages/,$(TESTPACKAGESDIRS))
-TESTPACKAGESDIRECTDIRS=rtl-objpas rtl-generics hash regexpr fcl-registry fcl-passrc fcl-json fcl-image pastojs fcl-process
+TESTPACKAGESDIRECTDIRS=rtl-objpas rtl-generics hash regexpr fcl-registry fcl-passrc fcl-json fcl-image pastojs fcl-process libtar
 TESTPACKAGESDIRECTSUBDIRS=$(addprefix ../packages/,$(addsuffix /tests,$(TESTPACKAGESDIRECTDIRS)))
 ifdef QUICKTEST
 export QUICKTEST

+ 1 - 1
tests/Makefile.fpc

@@ -175,7 +175,7 @@ TESTSUBDIRS=cg cg/variants cg/cdecl cpu8/avr cpu16 cpu16/i8086 library opt wasm
 TESTPACKAGESDIRS=bzip2 cocoaint fcl-base fcl-db fcl-image fcl-registry fcl-xml hash rtl-objpas univint webtbs win-base zlib
 
 TESTPACKAGESUBDIRS=$(addprefix packages/,$(TESTPACKAGESDIRS))
-TESTPACKAGESDIRECTDIRS=rtl-objpas rtl-generics hash regexpr fcl-registry fcl-passrc fcl-json fcl-image pastojs fcl-process
+TESTPACKAGESDIRECTDIRS=rtl-objpas rtl-generics hash regexpr fcl-registry fcl-passrc fcl-json fcl-image pastojs fcl-process libtar
 TESTPACKAGESDIRECTSUBDIRS=$(addprefix ../packages/,$(addsuffix /tests,$(TESTPACKAGESDIRECTDIRS)))
 
 ifdef QUICKTEST