From 9e0c85d3f275460eaa44f29ec6808468cf82c87c Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Sun, 3 Feb 2013 14:08:06 +0100 Subject: [PATCH] Work on infrastructure for AddInSetup unit testing. --- .../AddInManager2.Tests.csproj | 10 +- .../AddInManager2.Tests/AddInSetupTests.cs | 45 +++++ .../Fakes/FakeAddInTree.cs | 68 +++++++ .../Fakes/FakeCorePackageRepository.cs | 67 +++++++ .../Fakes/FakeNuGetCorePackageManager.cs | 115 ++++++++---- .../Fakes/FakeNuGetPackageManager.cs | 39 +++- .../AddInManager2.Tests/Fakes/FakePackage.cs | 174 ++++++++++++++++++ .../Fakes/FakePackageOperationResolver.cs | 34 ++++ .../Fakes/FakeSDAddInManagement.cs | 156 ++++++++++++++++ .../TestResources/AddInManager2Test.addin | 13 ++ 10 files changed, 677 insertions(+), 44 deletions(-) create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInTree.cs create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeCorePackageRepository.cs create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackageOperationResolver.cs create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.addin diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj index 4a8a55290e..2aa4969829 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj @@ -71,13 +71,20 @@ + + + + + - + + + {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} @@ -105,6 +112,7 @@ SharpDevelop.exe Always + \ No newline at end of file diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs index 666cc151ff..f116d4c8f1 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs @@ -2,9 +2,12 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.IO; +using System.Reflection; using ICSharpCode.AddInManager2; using ICSharpCode.AddInManager2.Model; using ICSharpCode.AddInManager2.Tests.Fakes; +using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using NuGet; using NUnit.Framework; @@ -15,8 +18,50 @@ namespace ICSharpCode.AddInManager2.Tests [Category("AddInSetupTests")] public class AddInSetupTests { + AddInManagerEvents _events; + FakeNuGetPackageManager _nuGet; + FakeSDAddInManagement _sdAddInManagement; + AddInSetup _addInSetup; + public AddInSetupTests() { } + + private void PrepareAddInSetup() + { + _events = new AddInManagerEvents(); + _nuGet = new FakeNuGetPackageManager(); + _sdAddInManagement = new FakeSDAddInManagement(); + _addInSetup = new AddInSetup(_events, _nuGet, _sdAddInManagement); + } + + private AddIn CreateAddIn() + { + // Create AddIn object from an *.addin file available in this assembly's resources + FakeAddInTree _addInTree = new FakeAddInTree(); + Stream resourceStream = + Assembly.GetExecutingAssembly().GetManifestResourceStream("ICSharpCode.AddInManager2.Tests.TestResources.AddInManager2Test.addin"); + using (StreamReader streamReader = new StreamReader(resourceStream)) + { + return AddIn.Load(_addInTree, streamReader); + } + } + + [Test, Description("")] + public void InstallValidAddIn() + { + AddIn addIn = CreateAddIn(); + + // Create a fake package + FakePackage package = new FakePackage() + { + Id = addIn.Name, + Version = new SemanticVersion(addIn.Version) + }; + + PrepareAddInSetup(); + + + } } } diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInTree.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInTree.cs new file mode 100644 index 0000000000..03610a7426 --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInTree.cs @@ -0,0 +1,68 @@ +// 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.Concurrent; +using System.Collections.Generic; +using ICSharpCode.Core; + +namespace ICSharpCode.AddInManager2.Tests.Fakes +{ + public class FakeAddInTree : IAddInTree + { + private List _addIns; + private ConcurrentDictionary _doozers; + private ConcurrentDictionary _conditionEvaluators; + + public FakeAddInTree() + { + _addIns = new List(); + _doozers = new ConcurrentDictionary(); + _conditionEvaluators = new ConcurrentDictionary(); + } + + public System.Collections.Generic.IReadOnlyList AddIns + { + get + { + return _addIns.AsReadOnly(); + } + } + + public System.Collections.Concurrent.ConcurrentDictionary Doozers + { + get + { + return _doozers; + } + } + + public System.Collections.Concurrent.ConcurrentDictionary ConditionEvaluators + { + get + { + return _conditionEvaluators; + } + } + + public System.Collections.Generic.IReadOnlyList BuildItems(string path, object parameter, bool throwOnNotFound) + { + return new List().AsReadOnly(); + } + + public object BuildItem(string path, object parameter) + { + return null; + } + + public object BuildItem(string path, object parameter, System.Collections.Generic.IEnumerable additionalConditions) + { + return null; + } + + public AddInTreeNode GetTreeNode(string path, bool throwOnNotFound) + { + return null; + } + } +} diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeCorePackageRepository.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeCorePackageRepository.cs new file mode 100644 index 0000000000..ca8ebd7c81 --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeCorePackageRepository.cs @@ -0,0 +1,67 @@ +// 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.Linq; +using NuGet; + +namespace ICSharpCode.AddInManager2.Tests.Fakes +{ + public class FakeCorePackageRepository : IPackageRepository + { + public FakeCorePackageRepository() + { + } + + public string Source + { + get; + set; + } + + public bool SupportsPrereleasePackages + { + get; + set; + } + + public IQueryable ReturnedPackages + { + get; + set; + } + + public System.Linq.IQueryable GetPackages() + { + return ReturnedPackages; + } + + public void AddPackage(IPackage package) + { + if (AddPackageCallback != null) + { + AddPackageCallback(package); + } + } + + public Action AddPackageCallback + { + get; + set; + } + + public void RemovePackage(IPackage package) + { + if (RemovePackageCallback != null) + { + RemovePackageCallback(package); + } + } + + public Action RemovePackageCallback + { + get; + set; + } + } +} diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetCorePackageManager.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetCorePackageManager.cs index dbaa906754..4c30f42d57 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetCorePackageManager.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetCorePackageManager.cs @@ -2,12 +2,10 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using NuGet; namespace ICSharpCode.AddInManager2.Tests.Fakes { - /// - /// Description of FakeNuGetCorePackageManager. - /// public class FakeNuGetCorePackageManager : NuGet.IPackageManager { public FakeNuGetCorePackageManager() @@ -24,85 +22,132 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes public NuGet.IFileSystem FileSystem { - get - { - throw new NotImplementedException(); - } - set - { - throw new NotImplementedException(); - } + get; + set; } public NuGet.IPackageRepository LocalRepository { - get - { - throw new NotImplementedException(); - } + get; + set; } public NuGet.ILogger Logger { - get - { - throw new NotImplementedException(); - } - set - { - throw new NotImplementedException(); - } + get; + set; } public NuGet.IPackageRepository SourceRepository { - get - { - throw new NotImplementedException(); - } + get; + set; } public NuGet.IPackagePathResolver PathResolver { get { - throw new NotImplementedException(); + return null; } } + public Action InstallPackageCallback + { + get; + set; + } + + public Action InstallPackageWithVersionCallback + { + get; + set; + } + public void InstallPackage(NuGet.IPackage package, bool ignoreDependencies, bool allowPrereleaseVersions) { - throw new NotImplementedException(); + if (InstallPackageCallback != null) + { + InstallPackageCallback(package, ignoreDependencies, allowPrereleaseVersions); + } } public void InstallPackage(string packageId, NuGet.SemanticVersion version, bool ignoreDependencies, bool allowPrereleaseVersions) { - throw new NotImplementedException(); + if (InstallPackageWithVersionCallback != null) + { + InstallPackageWithVersionCallback(packageId, version, ignoreDependencies, allowPrereleaseVersions); + } + } + + public Action UpdatePackageCallback + { + get; + set; } public void UpdatePackage(NuGet.IPackage newPackage, bool updateDependencies, bool allowPrereleaseVersions) { - throw new NotImplementedException(); + if (UpdatePackageCallback != null) + { + UpdatePackageCallback(newPackage, updateDependencies, allowPrereleaseVersions); + } + } + + public Action UpdatePackageWithVersionCallback + { + get; + set; } public void UpdatePackage(string packageId, NuGet.SemanticVersion version, bool updateDependencies, bool allowPrereleaseVersions) { - throw new NotImplementedException(); + if (UpdatePackageWithVersionCallback != null) + { + UpdatePackageWithVersionCallback(packageId, version, updateDependencies, allowPrereleaseVersions); + } + } + + public Action UpdatePackageWithVersionSpecCallback + { + get; + set; } public void UpdatePackage(string packageId, NuGet.IVersionSpec versionSpec, bool updateDependencies, bool allowPrereleaseVersions) { - throw new NotImplementedException(); + if (UpdatePackageWithVersionSpecCallback != null) + { + UpdatePackageWithVersionSpecCallback(packageId, versionSpec, updateDependencies, allowPrereleaseVersions); + } + } + + public Action UninstallPackageCallback + { + get; + set; } public void UninstallPackage(NuGet.IPackage package, bool forceRemove, bool removeDependencies) { - throw new NotImplementedException(); + if (UninstallPackageCallback != null) + { + UninstallPackageCallback(package, forceRemove, removeDependencies); + } + } + + public Action UninstallPackageWithVersionCallback + { + get; + set; } public void UninstallPackage(string packageId, NuGet.SemanticVersion version, bool forceRemove, bool removeDependencies) { - throw new NotImplementedException(); + if (UninstallPackageWithVersionCallback != null) + { + UninstallPackageWithVersionCallback(packageId, version, forceRemove, removeDependencies); + } } } } diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs index 9b73dcbd31..2566180cf6 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs @@ -7,40 +7,63 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using NuGet; namespace ICSharpCode.AddInManager2.Tests.Fakes { public class FakeNuGetPackageManager : INuGetPackageManager { + private FakeNuGetCorePackageManager _corePackageManager; + private FakePackageOperationResolver _packageOperationResolver; + + public FakeNuGetPackageManager() + { + _corePackageManager = new FakeNuGetCorePackageManager(); + _packageOperationResolver = new FakePackageOperationResolver(); + } + public NuGet.IPackageManager Packages { get { - throw new NotImplementedException(); + return _corePackageManager; } } public string PackageOutputDirectory { - get - { - throw new NotImplementedException(); - } + get; + set; + } + + public bool FakePackageContainsAddIn + { + get; + set; } public bool PackageContainsAddIn(NuGet.IPackage package) { - throw new NotImplementedException(); + return FakePackageContainsAddIn; } public NuGet.IPackageOperationResolver CreateInstallPackageOperationResolver(bool allowPrereleaseVersions) { - throw new NotImplementedException(); + return _packageOperationResolver; } public void ExecuteOperation(NuGet.PackageOperation operation) { - throw new NotImplementedException(); + if (ExecuteOperationCallback != null) + { + ExecuteOperationCallback(operation); + } } + + public Action ExecuteOperationCallback + { + get; + set; + } } } diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs new file mode 100644 index 0000000000..c1dae740da --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs @@ -0,0 +1,174 @@ +// 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 NuGet; + +namespace ICSharpCode.AddInManager2.Tests.Fakes +{ + public class FakePackage : IPackage + { + public FakePackage() + { + } + + public bool IsAbsoluteLatestVersion + { + get; + set; + } + + public bool IsLatestVersion + { + get; + set; + } + + public bool Listed + { + get; + set; + } + + public Nullable Published + { + get; + set; + } + + public System.Collections.Generic.IEnumerable AssemblyReferences + { + get; + set; + } + + public string Id + { + get; + set; + } + + public SemanticVersion Version + { + get; + set; + } + + public string Title + { + get; + set; + } + + public System.Collections.Generic.IEnumerable Authors + { + get; + set; + } + + public System.Collections.Generic.IEnumerable Owners + { + get; + set; + } + + public Uri IconUrl + { + get; + set; + } + + public Uri LicenseUrl + { + get; + set; + } + + public Uri ProjectUrl + { + get; + set; + } + + public bool RequireLicenseAcceptance + { + get; + set; + } + + public string Description + { + get; + set; + } + + public string Summary + { + get; + set; + } + + public string ReleaseNotes + { + get; + set; + } + + public string Language + { + get; + set; + } + + public string Tags + { + get; + set; + } + + public string Copyright + { + get; + set; + } + + public System.Collections.Generic.IEnumerable FrameworkAssemblies + { + get; + set; + } + + public System.Collections.Generic.IEnumerable DependencySets + { + get; + set; + } + + public Uri ReportAbuseUrl + { + get; + set; + } + + public int DownloadCount + { + get; + set; + } + + public System.Collections.Generic.IEnumerable GetFiles() + { + return null; + } + + public System.Collections.Generic.IEnumerable GetSupportedFrameworks() + { + return null; + } + + public System.IO.Stream GetStream() + { + return null; + } + } +} diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackageOperationResolver.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackageOperationResolver.cs new file mode 100644 index 0000000000..4eeedc04c1 --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackageOperationResolver.cs @@ -0,0 +1,34 @@ +// 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 NuGet; + +namespace ICSharpCode.AddInManager2.Tests.Fakes +{ + public class FakePackageOperationResolver : IPackageOperationResolver + { + public FakePackageOperationResolver() + { + } + + public System.Collections.Generic.IEnumerable ResolveOperations(IPackage package) + { + if (ResolveOperationsCallback != null) + { + return ResolveOperationsCallback(package); + } + else + { + return null; + } + } + + public Func> ResolveOperationsCallback + { + get; + set; + } + } +} diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs new file mode 100644 index 0000000000..b273241e25 --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs @@ -0,0 +1,156 @@ +// 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.AddInManager2.Model; +using ICSharpCode.Core; + +namespace ICSharpCode.AddInManager2.Tests.Fakes +{ + public class FakeSDAddInManagement : ISDAddInManagement + { + private List _registeredAddIns; + private List _addInsMarkedForRemoval; + private List _addedExternalAddIns; + private List _removedExternalAddIns; + + public FakeSDAddInManagement() + { + _registeredAddIns = new List(); + _addInsMarkedForRemoval = new List(); + _addedExternalAddIns = new List(); + _removedExternalAddIns = new List(); + } + + public List RegisteredAddIns + { + get + { + return _registeredAddIns; + } + } + + public List AddInsMarkedForRemoval + { + get + { + return _addInsMarkedForRemoval; + } + } + + public List AddedExternalAddIns + { + get + { + return _addedExternalAddIns; + } + } + + public List RemovedExternalAddIns + { + get + { + return _removedExternalAddIns; + } + } + + public AddIn AddInToLoad + { + get; + set; + } + + public System.Collections.Generic.IReadOnlyList AddIns + { + get + { + return _registeredAddIns.AsReadOnly(); + } + } + + public string TempInstallDirectory + { + get; + set; + } + + public string UserInstallDirectory + { + get; + set; + } + + public void AddToTree(ICSharpCode.Core.AddIn addIn) + { + if (addIn != null) + { + _registeredAddIns.Add(addIn); + } + } + + public void AbortRemoveUserAddInOnNextStart(string identity) + { + if (identity != null) + { + _addInsMarkedForRemoval.Remove(identity); + } + } + + public void Enable(System.Collections.Generic.IList addIns) + { + if (addIns != null) + { + foreach (var addIn in addIns) + { + addIn.Enabled = true; + } + } + } + + public void Disable(System.Collections.Generic.IList addIns) + { + if (addIns != null) + { + foreach (var addIn in addIns) + { + addIn.Enabled = false; + } + } + } + + public void RemoveExternalAddIns(System.Collections.Generic.IList addIns) + { + if (addIns != null) + { + _removedExternalAddIns.AddRange(addIns); + } + } + + public void RemoveUserAddInOnNextStart(string identity) + { + if (identity != null) + { + _addInsMarkedForRemoval.Add(identity); + } + } + + public ICSharpCode.Core.AddIn Load(System.IO.TextReader textReader) + { + return AddInToLoad; + } + + public ICSharpCode.Core.AddIn Load(string fileName) + { + return AddInToLoad; + } + + public void AddExternalAddIns(System.Collections.Generic.IList addIns) + { + if (addIns != null) + { + _addedExternalAddIns.AddRange(addIns); + } + } + } +} diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.addin b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.addin new file mode 100644 index 0000000000..9e78f88775 --- /dev/null +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.addin @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file