Browse Source

* Added PackageVariant-test

git-svn-id: trunk@35807 -
joost 8 years ago
parent
commit
790c9995fe

+ 5 - 0
.gitattributes

@@ -3434,6 +3434,11 @@ packages/fppkg/tests/packages/base/packagea/fpmake.pp svneol=native#text/plain
 packages/fppkg/tests/packages/base/packagea/src/PackageAUnitA.pas svneol=native#text/plain
 packages/fppkg/tests/packages/base/packagea/src/PackageAUnitA.pas svneol=native#text/plain
 packages/fppkg/tests/packages/base/packageb/fpmake.pp svneol=native#text/plain
 packages/fppkg/tests/packages/base/packageb/fpmake.pp svneol=native#text/plain
 packages/fppkg/tests/packages/base/packageb/src/PackageBUnitB.pas svneol=native#text/plain
 packages/fppkg/tests/packages/base/packageb/src/PackageBUnitB.pas svneol=native#text/plain
+packages/fppkg/tests/packages/base/packagevarianta/fpmake.pp svneol=native#text/pascal
+packages/fppkg/tests/packages/base/packagevarianta/src/packagevariantbaseunit.pp svneol=native#text/pascal
+packages/fppkg/tests/packages/base/packagevarianta/src/packagevariantversionbonly.pp svneol=native#text/pascal
+packages/fppkg/tests/packages/base/packagevariantp/fpmake.pp svneol=native#text/pascal
+packages/fppkg/tests/packages/base/packagevariantp/src/packagevariantp.pp svneol=native#text/pascal
 packages/fppkg/tests/packages/specific/transmitoptions/packagea/fpmake.pp svneol=native#text/pascal
 packages/fppkg/tests/packages/specific/transmitoptions/packagea/fpmake.pp svneol=native#text/pascal
 packages/fppkg/tests/packages/specific/transmitoptions/packagea/src/PackageAUnitA.pas svneol=native#text/pascal
 packages/fppkg/tests/packages/specific/transmitoptions/packagea/src/PackageAUnitA.pas svneol=native#text/pascal
 packages/fppkg/tests/packages/specific/transmitoptions/packageb1/fpmake.pp svneol=native#text/pascal
 packages/fppkg/tests/packages/specific/transmitoptions/packageb1/fpmake.pp svneol=native#text/pascal

+ 47 - 0
packages/fppkg/tests/fullfpcinstallationtests.pas

@@ -34,6 +34,7 @@ type
     procedure TestFakePackageDir;
     procedure TestFakePackageDir;
     procedure TestSourceDependency;
     procedure TestSourceDependency;
     procedure TestTransmitOptions;
     procedure TestTransmitOptions;
+    procedure TestPackageVariantPackage;
   end;
   end;
 
 
   { TFullFPCInstallationSetup }
   { TFullFPCInstallationSetup }
@@ -474,6 +475,52 @@ begin
   RunFppkgIndir(TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath + 'packagec', ['install'], 'build PackageC');
   RunFppkgIndir(TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath + 'packagec', ['install'], 'build PackageC');
 end;
 end;
 
 
+procedure TFullFPCInstallationTests.TestPackageVariantPackage;
+var
+  s: String;
+  CompilerStr,
+  FpcSearchpath,
+  PackageSearchpath: string;
+begin
+  TFullFPCInstallationSetup.SyncPackageIntoCurrentTest('packagevarianta');
+  TFullFPCInstallationSetup.SyncPackageIntoCurrentTest('packagevariantp');
+
+  // Compile the packages with their default variant
+  RunFppkgIndir(TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath + 'packagevarianta', ['install'], 'install PackageVariantA');
+  RunFppkgIndir(TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath + 'packagevariantp', ['install'], 'install PackageVariantP');
+
+  // Check the usage of the versiona-subdirectory
+  Check(FileExists(ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestPath, 'user', 'lib', 'fpc', TFullFPCInstallationSetup.GetCompilerVersion, 'units', TFullFPCInstallationSetup.GetTargetString, 'packagevarianta', 'versiona', 'packagevariantbaseunit.ppu'])), 'packagevariantbaseunit.ppu not found');
+
+  // Check the output of the generated executable
+  s := RunTestCommandIndir(TFullFPCInstallationSetup.GetCurrentTestPath, ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestPath, 'user', 'bin', 'packagevariantp']), [], 'Run PackageVariantP');
+  Check(pos('Hello version A', s) > 0, 'Package is not compiled with Version-A unit');
+
+  // Compile the package in the ProcVersion=VersionB variant
+  CompilerStr := ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestPath, 'bin', 'fpc']);
+  FpcSearchpath := ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestPath, 'lib', 'fpc', TFullFPCInstallationSetup.GetCompilerVersion]);
+  PackageSearchpath := TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath;
+
+  RunTestCommandIndir(ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packagevarianta']), ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packagevarianta', 'fpmake']), ['build', '--nofpccfg', '--compiler='+CompilerStr, '--searchpath='+FpcSearchpath, '--searchpath='+PackageSearchpath, '+ProcVersion=versionb'], 'build PackageVariantA in the VersionB variant');
+  RunTestCommandIndir(ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packagevariantp']), ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packagevariantp', 'fpmake']), ['build', '--nofpccfg', '--compiler='+CompilerStr, '--searchpath='+FpcSearchpath, '--searchpath='+PackageSearchpath, '+ProcVersion=versionb'], 'build PackageVariantP in the VersionB variant');
+
+  // Check the usage of the versiona- & versionb-subdirectory
+  Check(FileExists(ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath, 'packagevarianta', 'units', TFullFPCInstallationSetup.GetTargetString, 'versiona', 'packagevariantbaseunit.ppu'])), 'packagevariantbaseunit.ppu versiona not found');
+  Check(FileExists(ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath, 'packagevarianta', 'units', TFullFPCInstallationSetup.GetTargetString, 'versionb', 'packagevariantbaseunit.ppu'])), 'packagevariantbaseunit.ppu versionb not found');
+
+  // Check the output of the generated executable
+  s := RunTestCommandIndir(TFullFPCInstallationSetup.GetCurrentTestPath, ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath, 'packagevariantp', 'bin', TFullFPCInstallationSetup.GetTargetString, 'packagevariantp']), [], 'Run PackageVariantP');
+  Check(pos('Bye version B', s) > 0, 'Package is not compiled with Version-B unit');
+  Check(pos('Now with extra unit!', s) > 0, 'Package is not compiled with extra Version-B unit');
+
+  // Compile PackageVariantP again, but now with VersionA
+  RunTestCommandIndir(ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packagevariantp']), ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath,'packagevariantp', 'fpmake']), ['build', '--nofpccfg', '--compiler='+CompilerStr, '--searchpath='+FpcSearchpath, '--searchpath='+PackageSearchpath, '+ProcVersion=versiona'], 'build PackageVariantP in the VersionB variant');
+
+  // Check the output of the generated executable
+  s := RunTestCommandIndir(TFullFPCInstallationSetup.GetCurrentTestPath, ConcatPaths([TFullFPCInstallationSetup.GetCurrentTestBasePackagesPath, 'packagevariantp', 'bin', TFullFPCInstallationSetup.GetTargetString, 'packagevariantp']), [], 'Run PackageVariantP');
+  Check(pos('Hello version A', s) > 0, 'Package is not compiled with Version-A unit');
+end;
+
 Initialization
 Initialization
   RegisterTestDecorator(TFullFPCInstallationSetup, TFullFPCInstallationTests);
   RegisterTestDecorator(TFullFPCInstallationSetup, TFullFPCInstallationTests);
 end.
 end.

+ 51 - 0
packages/fppkg/tests/packages/base/packagevarianta/fpmake.pp

@@ -0,0 +1,51 @@
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+var
+  P : TPackage;
+  T : TTarget;
+  ProcVersionVariant: TPackageVariants;
+  ProcVersionA,
+  ProcVersionB : TPackageVariant;
+
+begin
+  with Installer do
+    begin
+    P:=AddPackage('packagevarianta');
+    P.Version:='1.0';
+
+    P.Author := 'Joost van der Sluis';
+    P.License := 'GPL';
+    P.HomepageURL := 'www.freepascal.org';
+    P.Description := 'Package which comes in two flavours: VersionA and VersionB.';
+
+    P.SourcePath.Add('src');
+
+    // Definition of Widgetsets
+    ProcVersionVariant := AddPackageVariant('ProcVersion', true);
+    p.AddPackageVariant(ProcVersionVariant);
+
+    ProcVersionA := ProcVersionVariant.Add('versiona');
+    ProcVersionB := ProcVersionVariant.Add('versionb');
+
+    ProcVersionVariant.DefaultPackageVariantName:='versiona';
+
+    // Not used, but for example:
+    // P.IncludePath.Add('$(ProcVersion)');
+    // P.SourcePath.Add('$(ProcVersion)');
+
+    P.Options.Add('-d$(ProcVersion)');
+    P.TransmitOptions.Add('-dPROC$(ProcVersion)');
+
+    // ProcVersion-specific options
+    ProcVersionA.Options.Add('-dHello');
+
+    T:=P.Targets.AddUnit('packagevariantbaseunit.pp');
+
+    ProcVersionB.Targets.AddUnit('packagevariantversionbonly.pp');
+
+    Run;
+    end;
+end.

+ 28 - 0
packages/fppkg/tests/packages/base/packagevarianta/src/packagevariantbaseunit.pp

@@ -0,0 +1,28 @@
+unit PackageVariantBaseUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+function GetPackageVariantMessage: string;
+
+implementation
+
+function GetPackageVariantMessage: string;
+begin
+  {$ifdef Hello}
+  Result := 'Hello ';
+  {$else}
+  Result := 'Bye ';
+  {$endif}
+
+  {$ifdef versiona}
+  Result := Result + 'version A';
+  {$endif}
+
+  {$ifdef versionb}
+  Result := Result + 'version B';
+  {$endif}
+end;
+
+end.

+ 16 - 0
packages/fppkg/tests/packages/base/packagevarianta/src/packagevariantversionbonly.pp

@@ -0,0 +1,16 @@
+unit PackageVariantVersionBOnly;
+
+{$mode objfpc}{$H+}
+
+interface
+
+function FuncPackageVariantVersionBOnly: string;
+
+implementation
+
+function FuncPackageVariantVersionBOnly: string;
+begin
+  Result := 'Now with extra unit!';
+end;
+
+end.

+ 27 - 0
packages/fppkg/tests/packages/base/packagevariantp/fpmake.pp

@@ -0,0 +1,27 @@
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+  P : TPackage;
+  T : TTarget;
+begin
+  With Installer do
+    begin
+    P:=AddPackage('packagevariantp');
+    P.Version:='1.0';
+
+    P.Author := 'Joost van der Sluis';
+    P.License := 'GPL';
+    P.HomepageURL := 'www.freepascal.org';
+    P.Description := 'Application of which the output depends on the used flavour of the packagevarianta package';
+
+    P.Dependencies.Add('packagevarianta');
+
+    P.SourcePath.Add('src');
+ 
+    T:=P.Targets.AddProgram('packagevariantp.pp');
+    Run;
+    end;
+end.

+ 21 - 0
packages/fppkg/tests/packages/base/packagevariantp/src/packagevariantp.pp

@@ -0,0 +1,21 @@
+program PackageVariantP;
+
+{$mode objfpc}{$H+}
+
+{$ifdef versiona}
+{$fatal VersionA should only be defined in the PackageVariantA package}
+{$endif}
+
+uses
+  {$ifdef PROCVersionB}
+  PackageVariantVersionBOnly,
+  {$endif}
+  PackageVariantBaseUnit;
+
+begin
+  writeln(GetPackageVariantMessage);
+  {$ifdef PROCVersionB}
+  writeln(FuncPackageVariantVersionBOnly);
+  {$endif}
+
+end.

+ 1 - 1
packages/fppkg/tests/packages/specific/transmitoptions/packagec/fpmake.pp

@@ -15,7 +15,7 @@ begin
     P:=AddPackage('packagec');
     P:=AddPackage('packagec');
     P.Version:='4.5.6';
     P.Version:='4.5.6';
 
 
-    P.Author := 'Joost vam der Sluis';
+    P.Author := 'Joost van der Sluis';
     P.License := 'GPL';
     P.License := 'GPL';
     P.HomepageURL := 'www.freepascal.org';
     P.HomepageURL := 'www.freepascal.org';
     P.Email := '';
     P.Email := '';