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

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

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using NuGet;
namespace ICSharpCode.PackageManagement.Scripting
@ -11,6 +12,7 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -11,6 +12,7 @@ namespace ICSharpCode.PackageManagement.Scripting
{
ISolutionPackageRepository solutionPackageRepository;
IPackageScriptFactory scriptFactory;
List<IPackageScript> scripts;
public PackageInitializationScripts(
ISolutionPackageRepository solutionPackageRepository,
@ -22,9 +24,27 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -22,9 +24,27 @@ namespace ICSharpCode.PackageManagement.Scripting
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()) {
IPackageScript script = CreateInitializeScript(package);
script.Execute();
if (script.Exists()) {
scripts.Add(script);
}
}
}
@ -38,5 +58,11 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -38,5 +58,11 @@ namespace ICSharpCode.PackageManagement.Scripting
string packageInstallDirectory = solutionPackageRepository.GetInstallPath(package);
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 @@ -23,10 +23,15 @@ namespace ICSharpCode.PackageManagement.Scripting
public IPackage Package { get; set; }
public IPackageManagementProject Project { get; set; }
public bool Exists()
{
return ScriptFileName.FileExists();
}
public void Execute()
{
BeforeExecute();
if (ScriptFileExists()) {
if (Exists()) {
AddSessionVariables();
ExecuteScript();
RemoveSessionVariables();
@ -37,11 +42,6 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -37,11 +42,6 @@ namespace ICSharpCode.PackageManagement.Scripting
{
}
bool ScriptFileExists()
{
return ScriptFileName.FileExists();
}
void AddSessionVariables()
{
Session.AddVariable("__rootPath", ScriptFileName.PackageInstallDirectory);

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

@ -90,6 +90,7 @@ @@ -90,6 +90,7 @@
<Compile Include="Src\Helpers\FakePackageManagementProjectFactory.cs" />
<Compile Include="Src\Helpers\FakePackageScript.cs" />
<Compile Include="Src\Helpers\FakePackageScriptFactory.cs" />
<Compile Include="Src\Helpers\FakePackageScriptFactoryWithPredefinedPackageScripts.cs" />
<Compile Include="Src\Helpers\FakePackageScriptFileName.cs" />
<Compile Include="Src\Helpers\FakePackageViewModelFactory.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 @@ -9,6 +9,8 @@ namespace PackageManagement.Tests.Helpers
{
public class FakePackageScript : IPackageScript
{
public IPackageManagementProject Project { get; set; }
public bool IsExecuted;
public void Execute()
@ -16,6 +18,11 @@ namespace PackageManagement.Tests.Helpers @@ -16,6 +18,11 @@ namespace PackageManagement.Tests.Helpers
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 @@ -10,6 +10,8 @@ namespace PackageManagement.Tests.Helpers
{
public class FakePackageScriptFactory : IPackageScriptFactory
{
public bool ScriptFileExistsReturnValue = true;
public List<string> PackageInstallDirectoriesPassed = new List<string>();
public string FirstPackageInstallDirectoryPassed {
@ -38,6 +40,7 @@ namespace PackageManagement.Tests.Helpers @@ -38,6 +40,7 @@ namespace PackageManagement.Tests.Helpers
{
PackageInstallDirectoriesPassed.Add(packageInstallDirectory);
var script = new FakePackageScript();
script.ExistsReturnValue = ScriptFileExistsReturnValue;
FakePackageInitializeScriptsCreated.Add(script);
return script;
}
@ -46,6 +49,7 @@ namespace PackageManagement.Tests.Helpers @@ -46,6 +49,7 @@ namespace PackageManagement.Tests.Helpers
{
PackageInstallDirectoriesPassed.Add(packageInstallDirectory);
var script = new FakePackageScript();
script.ExistsReturnValue = ScriptFileExistsReturnValue;
FakePackageUninstallScriptsCreated.Add(script);
return script;
}
@ -54,6 +58,7 @@ namespace PackageManagement.Tests.Helpers @@ -54,6 +58,7 @@ namespace PackageManagement.Tests.Helpers
{
PackageInstallDirectoriesPassed.Add(packageInstallDirectory);
var script = new FakePackageScript();
script.ExistsReturnValue = ScriptFileExistsReturnValue;
FakePackageInstallScriptsCreated.Add(script);
return script;
}

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

@ -0,0 +1,40 @@ @@ -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 @@ -16,12 +16,18 @@ namespace PackageManagement.Tests.Scripting
PackageInitializationScripts scripts;
FakePackageScriptFactory fakeScriptFactory;
FakeSolutionPackageRepository fakeSolutionPackageRepository;
FakePackageScriptFactoryWithPredefinedPackageScripts fakeScriptFactoryWithPredefinedPackageScripts;
void CreateScripts()
{
fakeSolutionPackageRepository = new FakeSolutionPackageRepository();
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)
@ -31,6 +37,25 @@ namespace PackageManagement.Tests.Scripting @@ -31,6 +37,25 @@ namespace PackageManagement.Tests.Scripting
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]
public void Run_OnePackageInRepository_OnePackageScriptExecuted()
{
@ -82,5 +107,51 @@ namespace PackageManagement.Tests.Scripting @@ -82,5 +107,51 @@ namespace PackageManagement.Tests.Scripting
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 @@ -57,6 +57,28 @@ namespace PackageManagement.Tests.Scripting
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]
public void Execute_ScriptDoesNotExist_InstallScriptCheckedForExistence()
{

Loading…
Cancel
Save