Browse Source

Add methods to determine if a package PowerShell script file exists on the file system.

pull/15/head
Matt Ward 15 years ago
parent
commit
e549d51049
  1. 1
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageScript.cs
  2. 28
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScripts.cs
  3. 12
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageScript.cs
  4. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  5. 9
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageScript.cs
  6. 5
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageScriptFactory.cs
  7. 40
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageScriptFactoryWithPredefinedPackageScripts.cs
  8. 75
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsTests.cs
  9. 22
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInstallScriptTests.cs

1
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageScript.cs

@ -9,6 +9,7 @@ namespace ICSharpCode.PackageManagement.Scripting
{ {
IPackageManagementProject Project { get; set; } IPackageManagementProject Project { get; set; }
bool Exists();
void Execute(); void Execute();
} }
} }

28
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScripts.cs

@ -3,6 +3,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using NuGet; using NuGet;
namespace ICSharpCode.PackageManagement.Scripting namespace ICSharpCode.PackageManagement.Scripting
@ -11,6 +12,7 @@ namespace ICSharpCode.PackageManagement.Scripting
{ {
ISolutionPackageRepository solutionPackageRepository; ISolutionPackageRepository solutionPackageRepository;
IPackageScriptFactory scriptFactory; IPackageScriptFactory scriptFactory;
List<IPackageScript> scripts;
public PackageInitializationScripts( public PackageInitializationScripts(
ISolutionPackageRepository solutionPackageRepository, ISolutionPackageRepository solutionPackageRepository,
@ -22,9 +24,27 @@ namespace ICSharpCode.PackageManagement.Scripting
public void Run() public void Run()
{ {
foreach (IPackageScript script in GetScripts()) {
script.Execute();
}
}
List<IPackageScript> GetScripts()
{
if (scripts == null) {
CreatePackageInitializationScripts();
}
return scripts;
}
void CreatePackageInitializationScripts()
{
scripts = new List<IPackageScript>();
foreach (IPackage package in GetPackages()) { foreach (IPackage package in GetPackages()) {
IPackageScript script = CreateInitializeScript(package); IPackageScript script = CreateInitializeScript(package);
script.Execute(); if (script.Exists()) {
scripts.Add(script);
}
} }
} }
@ -38,5 +58,11 @@ namespace ICSharpCode.PackageManagement.Scripting
string packageInstallDirectory = solutionPackageRepository.GetInstallPath(package); string packageInstallDirectory = solutionPackageRepository.GetInstallPath(package);
return scriptFactory.CreatePackageInitializeScript(packageInstallDirectory); return scriptFactory.CreatePackageInitializeScript(packageInstallDirectory);
} }
public bool Any()
{
List<IPackageScript> scripts = GetScripts();
return scripts.Count > 0;
}
} }
} }

12
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageScript.cs

@ -23,10 +23,15 @@ namespace ICSharpCode.PackageManagement.Scripting
public IPackage Package { get; set; } public IPackage Package { get; set; }
public IPackageManagementProject Project { get; set; } public IPackageManagementProject Project { get; set; }
public bool Exists()
{
return ScriptFileName.FileExists();
}
public void Execute() public void Execute()
{ {
BeforeExecute(); BeforeExecute();
if (ScriptFileExists()) { if (Exists()) {
AddSessionVariables(); AddSessionVariables();
ExecuteScript(); ExecuteScript();
RemoveSessionVariables(); RemoveSessionVariables();
@ -37,11 +42,6 @@ namespace ICSharpCode.PackageManagement.Scripting
{ {
} }
bool ScriptFileExists()
{
return ScriptFileName.FileExists();
}
void AddSessionVariables() void AddSessionVariables()
{ {
Session.AddVariable("__rootPath", ScriptFileName.PackageInstallDirectory); Session.AddVariable("__rootPath", ScriptFileName.PackageInstallDirectory);

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -90,6 +90,7 @@
<Compile Include="Src\Helpers\FakePackageManagementProjectFactory.cs" /> <Compile Include="Src\Helpers\FakePackageManagementProjectFactory.cs" />
<Compile Include="Src\Helpers\FakePackageScript.cs" /> <Compile Include="Src\Helpers\FakePackageScript.cs" />
<Compile Include="Src\Helpers\FakePackageScriptFactory.cs" /> <Compile Include="Src\Helpers\FakePackageScriptFactory.cs" />
<Compile Include="Src\Helpers\FakePackageScriptFactoryWithPredefinedPackageScripts.cs" />
<Compile Include="Src\Helpers\FakePackageScriptFileName.cs" /> <Compile Include="Src\Helpers\FakePackageScriptFileName.cs" />
<Compile Include="Src\Helpers\FakePackageViewModelFactory.cs" /> <Compile Include="Src\Helpers\FakePackageViewModelFactory.cs" />
<Compile Include="Src\Helpers\FakePowerShellSession.cs" /> <Compile Include="Src\Helpers\FakePowerShellSession.cs" />

9
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageScript.cs

@ -9,6 +9,8 @@ namespace PackageManagement.Tests.Helpers
{ {
public class FakePackageScript : IPackageScript public class FakePackageScript : IPackageScript
{ {
public IPackageManagementProject Project { get; set; }
public bool IsExecuted; public bool IsExecuted;
public void Execute() public void Execute()
@ -16,6 +18,11 @@ namespace PackageManagement.Tests.Helpers
IsExecuted = true; IsExecuted = true;
} }
public IPackageManagementProject Project { get; set; } public bool ExistsReturnValue = true;
public bool Exists()
{
return ExistsReturnValue;
}
} }
} }

5
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageScriptFactory.cs

@ -10,6 +10,8 @@ namespace PackageManagement.Tests.Helpers
{ {
public class FakePackageScriptFactory : IPackageScriptFactory public class FakePackageScriptFactory : IPackageScriptFactory
{ {
public bool ScriptFileExistsReturnValue = true;
public List<string> PackageInstallDirectoriesPassed = new List<string>(); public List<string> PackageInstallDirectoriesPassed = new List<string>();
public string FirstPackageInstallDirectoryPassed { public string FirstPackageInstallDirectoryPassed {
@ -38,6 +40,7 @@ namespace PackageManagement.Tests.Helpers
{ {
PackageInstallDirectoriesPassed.Add(packageInstallDirectory); PackageInstallDirectoriesPassed.Add(packageInstallDirectory);
var script = new FakePackageScript(); var script = new FakePackageScript();
script.ExistsReturnValue = ScriptFileExistsReturnValue;
FakePackageInitializeScriptsCreated.Add(script); FakePackageInitializeScriptsCreated.Add(script);
return script; return script;
} }
@ -46,6 +49,7 @@ namespace PackageManagement.Tests.Helpers
{ {
PackageInstallDirectoriesPassed.Add(packageInstallDirectory); PackageInstallDirectoriesPassed.Add(packageInstallDirectory);
var script = new FakePackageScript(); var script = new FakePackageScript();
script.ExistsReturnValue = ScriptFileExistsReturnValue;
FakePackageUninstallScriptsCreated.Add(script); FakePackageUninstallScriptsCreated.Add(script);
return script; return script;
} }
@ -54,6 +58,7 @@ namespace PackageManagement.Tests.Helpers
{ {
PackageInstallDirectoriesPassed.Add(packageInstallDirectory); PackageInstallDirectoriesPassed.Add(packageInstallDirectory);
var script = new FakePackageScript(); var script = new FakePackageScript();
script.ExistsReturnValue = ScriptFileExistsReturnValue;
FakePackageInstallScriptsCreated.Add(script); FakePackageInstallScriptsCreated.Add(script);
return script; return script;
} }

40
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageScriptFactoryWithPredefinedPackageScripts.cs

@ -0,0 +1,40 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.PackageManagement.Scripting;
namespace PackageManagement.Tests.Helpers
{
public class FakePackageScriptFactoryWithPredefinedPackageScripts : IPackageScriptFactory
{
public List<FakePackageScript> FakeInitializeScripts = new List<FakePackageScript>();
public FakePackageScript AddFakeInitializationScript()
{
var script = new FakePackageScript();
FakeInitializeScripts.Add(script);
return script;
}
public IPackageScript CreatePackageInitializeScript(string packageInstallDirectory)
{
FakePackageScript script = FakeInitializeScripts[0];
FakeInitializeScripts.RemoveAt(0);
return script;
}
public IPackageScript CreatePackageUninstallScript(string packageInstallDirectory)
{
throw new NotImplementedException();
}
public IPackageScript CreatePackageInstallScript(string packageInstallDirectory)
{
throw new NotImplementedException();
}
}
}

75
src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsTests.cs

@ -16,12 +16,18 @@ namespace PackageManagement.Tests.Scripting
PackageInitializationScripts scripts; PackageInitializationScripts scripts;
FakePackageScriptFactory fakeScriptFactory; FakePackageScriptFactory fakeScriptFactory;
FakeSolutionPackageRepository fakeSolutionPackageRepository; FakeSolutionPackageRepository fakeSolutionPackageRepository;
FakePackageScriptFactoryWithPredefinedPackageScripts fakeScriptFactoryWithPredefinedPackageScripts;
void CreateScripts() void CreateScripts()
{ {
fakeSolutionPackageRepository = new FakeSolutionPackageRepository();
fakeScriptFactory = new FakePackageScriptFactory(); fakeScriptFactory = new FakePackageScriptFactory();
scripts = new PackageInitializationScripts(fakeSolutionPackageRepository, fakeScriptFactory); CreateScripts(fakeScriptFactory);
}
void CreateScripts(IPackageScriptFactory scriptFactory)
{
fakeSolutionPackageRepository = new FakeSolutionPackageRepository();
scripts = new PackageInitializationScripts(fakeSolutionPackageRepository, scriptFactory);
} }
FakePackage AddPackageToRepository(string packageId) FakePackage AddPackageToRepository(string packageId)
@ -31,6 +37,25 @@ namespace PackageManagement.Tests.Scripting
return package; return package;
} }
void CreateScriptsUsingScriptFactoryWithPredefinedScripts()
{
fakeScriptFactoryWithPredefinedPackageScripts = new FakePackageScriptFactoryWithPredefinedPackageScripts();
CreateScripts(fakeScriptFactoryWithPredefinedPackageScripts);
}
void CreateScriptsWithTwoPackagesInRepositoryAndLastPackageScriptFileExistsButNotFirst()
{
CreateScriptsUsingScriptFactoryWithPredefinedScripts();
AddPackageToRepository("A");
AddPackageToRepository("B");
var scriptForPackageA = fakeScriptFactoryWithPredefinedPackageScripts.AddFakeInitializationScript();
scriptForPackageA.ExistsReturnValue = false;
var scriptForPackageB = fakeScriptFactoryWithPredefinedPackageScripts.AddFakeInitializationScript();
scriptForPackageB.ExistsReturnValue = true;
}
[Test] [Test]
public void Run_OnePackageInRepository_OnePackageScriptExecuted() public void Run_OnePackageInRepository_OnePackageScriptExecuted()
{ {
@ -82,5 +107,51 @@ namespace PackageManagement.Tests.Scripting
Assert.IsTrue(executed); Assert.IsTrue(executed);
} }
[Test]
public void Any_OnePackageInRepositoryAndScriptFileExists_ReturnsTrue()
{
CreateScripts();
AddPackageToRepository("A");
fakeScriptFactory.ScriptFileExistsReturnValue = true;
bool result = scripts.Any();
Assert.IsTrue(result);
}
[Test]
public void Any_OnePackageInRepositoryAndScriptFileDoesNotExist_ReturnsFalse()
{
CreateScripts();
AddPackageToRepository("A");
fakeScriptFactory.ScriptFileExistsReturnValue = false;
bool result = scripts.Any();
Assert.IsFalse(result);
}
[Test]
public void Any_TwoPackagesInRepositoryAndLastPackageScriptFileExistsButNotFirst_ReturnsTrue()
{
CreateScriptsWithTwoPackagesInRepositoryAndLastPackageScriptFileExistsButNotFirst();
bool result = scripts.Any();
Assert.IsTrue(result);
}
[Test]
public void Run_TwoPackagesInRepositoryAndLastPackageScriptFileExistsButNotFirst_FirstScriptNotExecuted()
{
CreateScriptsWithTwoPackagesInRepositoryAndLastPackageScriptFileExistsButNotFirst();
FakePackageScript firstScript = fakeScriptFactoryWithPredefinedPackageScripts.FakeInitializeScripts[0];
scripts.Run();
bool executed = firstScript.IsExecuted;
Assert.IsFalse(executed);
}
} }
} }

22
src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInstallScriptTests.cs

@ -57,6 +57,28 @@ namespace PackageManagement.Tests.Scripting
Assert.IsFalse(executed); Assert.IsFalse(executed);
} }
[Test]
public void Exists_ScriptDoesNotExist_ReturnsFalse()
{
CreateScript();
fakeFileSystem.FileExistsReturnValue = false;
bool exists = script.Exists();
Assert.IsFalse(exists);
}
[Test]
public void Exists_ScriptDoesExist_ReturnsTrue()
{
CreateScript();
fakeFileSystem.FileExistsReturnValue = true;
bool exists = script.Exists();
Assert.IsTrue(exists);
}
[Test] [Test]
public void Execute_ScriptDoesNotExist_InstallScriptCheckedForExistence() public void Execute_ScriptDoesNotExist_InstallScriptCheckedForExistence()
{ {

Loading…
Cancel
Save