/src/AddIns/Misc/PackageManagement/Test/Src/ReducedPackageOperationsTests.cs

https://github.com/ajadex/SharpDevelop · C# · 183 lines · 137 code · 29 blank · 17 comment · 2 complexity · e1af443cdf0f7daff45b4dd2dbe50267 MD5 · raw file

  1. // Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
  2. //
  3. // Permission is hereby granted, free of charge, to any person obtaining a copy of this
  4. // software and associated documentation files (the "Software"), to deal in the Software
  5. // without restriction, including without limitation the rights to use, copy, modify, merge,
  6. // publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
  7. // to whom the Software is furnished to do so, subject to the following conditions:
  8. //
  9. // The above copyright notice and this permission notice shall be included in all copies or
  10. // substantial portions of the Software.
  11. //
  12. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  13. // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  14. // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
  15. // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  16. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  17. // DEALINGS IN THE SOFTWARE.
  18. using System;
  19. using System.Collections.Generic;
  20. using System.Linq;
  21. using ICSharpCode.PackageManagement;
  22. using NuGet;
  23. using NUnit.Framework;
  24. using PackageManagement.Tests.Helpers;
  25. using Rhino.Mocks;
  26. namespace PackageManagement.Tests
  27. {
  28. [TestFixture]
  29. public class ReducedPackageOperationsTests
  30. {
  31. ReducedPackageOperations reducedPackageOperations;
  32. IPackageOperationResolver fakePackageOperationResolver;
  33. List<IPackage> packages;
  34. void CreateReducedPackageOperations()
  35. {
  36. packages = new List<IPackage>();
  37. fakePackageOperationResolver = MockRepository.GenerateStub<IPackageOperationResolver>();
  38. reducedPackageOperations = new ReducedPackageOperations(fakePackageOperationResolver, packages);
  39. }
  40. IPackage AddPackage(string id, string version)
  41. {
  42. IPackage package = CreatePackage(id, version);
  43. packages.Add(package);
  44. return package;
  45. }
  46. IPackage CreatePackage(string id, string version)
  47. {
  48. return new TestPackageHelper(id, version).Package;
  49. }
  50. PackageOperation AddInstallOperationForPackage(IPackage package)
  51. {
  52. var operation = new PackageOperation(package, PackageAction.Install);
  53. AddInstallOperationsForPackage(package, operation);
  54. return operation;
  55. }
  56. void AddInstallOperationsForPackage(IPackage package, params PackageOperation[] operations)
  57. {
  58. fakePackageOperationResolver
  59. .Stub(resolver => resolver.ResolveOperations(package))
  60. .Return(operations);
  61. }
  62. PackageOperation CreatePackageOperation(string id, string version, PackageAction action)
  63. {
  64. IPackage package = CreatePackage(id, version);
  65. return new PackageOperation(package, action);
  66. }
  67. void AssertReducedOperationsContains(PackageOperation operation)
  68. {
  69. Assert.Contains(operation, reducedPackageOperations.Operations.ToList());
  70. }
  71. [Test]
  72. public void Reduce_OnePackage_ReturnsPackageOperationsFromResolverForPackage()
  73. {
  74. CreateReducedPackageOperations();
  75. IPackage package = AddPackage("Test", "1.0");
  76. PackageOperation operation = AddInstallOperationForPackage(package);
  77. reducedPackageOperations.Reduce();
  78. Assert.AreEqual(1, reducedPackageOperations.Operations.Count());
  79. Assert.AreEqual(operation, reducedPackageOperations.Operations.First());
  80. }
  81. [Test]
  82. public void Reduce_TwoPackages_ReturnsPackageOperationsForBothPackages()
  83. {
  84. CreateReducedPackageOperations();
  85. IPackage package1 = AddPackage("Test", "1.0");
  86. IPackage package2 = AddPackage("Test2", "1.0");
  87. PackageOperation operation1 = AddInstallOperationForPackage(package1);
  88. PackageOperation operation2 = AddInstallOperationForPackage(package2);
  89. reducedPackageOperations.Reduce();
  90. Assert.AreEqual(2, reducedPackageOperations.Operations.Count());
  91. AssertReducedOperationsContains(operation1);
  92. AssertReducedOperationsContains(operation2);
  93. }
  94. [Test]
  95. public void Reduce_OncePackageOperationInstallsPackageWhilstOneUninstallsSamePackage_PackageOperationNotIncludedInReducedSet()
  96. {
  97. CreateReducedPackageOperations();
  98. IPackage package = AddPackage("Test", "1.0");
  99. PackageOperation installOperation = CreatePackageOperation("Foo", "1.0", PackageAction.Install);
  100. PackageOperation uninstallOperation = CreatePackageOperation("Foo", "1.0", PackageAction.Uninstall);
  101. AddInstallOperationsForPackage(package, installOperation, uninstallOperation);
  102. reducedPackageOperations.Reduce();
  103. Assert.AreEqual(0, reducedPackageOperations.Operations.Count());
  104. }
  105. [Test]
  106. public void Reduce_OnePackageOperationMatchesPackageBeingInstalled_ReturnsOnlyOnePackageInstallOperationForThisPackage()
  107. {
  108. CreateReducedPackageOperations();
  109. IPackage package1 = AddPackage("Test", "1.0");
  110. IPackage package2 = AddPackage("Test2", "1.0");
  111. PackageOperation operation1a = CreatePackageOperation("Test", "1.0", PackageAction.Install);
  112. PackageOperation operation1b = CreatePackageOperation("Test2", "1.0", PackageAction.Install);
  113. PackageOperation operation2 = CreatePackageOperation("Test2", "1.0", PackageAction.Install);
  114. AddInstallOperationsForPackage(package1, operation1a, operation1b);
  115. AddInstallOperationsForPackage(package2, operation2);
  116. reducedPackageOperations.Reduce();
  117. PackageOperation operation = reducedPackageOperations
  118. .Operations
  119. .SingleOrDefault(o => o.Package.Id == "Test2");
  120. Assert.AreEqual(2, reducedPackageOperations.Operations.Count());
  121. }
  122. [Test]
  123. public void Reduce_OnePackageOperationMatchesPackageBeingInstalledOnlyById_MatchingPackageOperationByIdIncludedInSet()
  124. {
  125. CreateReducedPackageOperations();
  126. IPackage package1 = AddPackage("Test", "1.0");
  127. IPackage package2 = AddPackage("Test2", "1.0");
  128. PackageOperation operation1a = CreatePackageOperation("Test", "1.0", PackageAction.Install);
  129. PackageOperation operation1b = CreatePackageOperation("Test2", "1.1", PackageAction.Install);
  130. PackageOperation operation2 = CreatePackageOperation("Test2", "1.0", PackageAction.Install);
  131. AddInstallOperationsForPackage(package1, operation1a, operation1b);
  132. AddInstallOperationsForPackage(package2, operation2);
  133. reducedPackageOperations.Reduce();
  134. Assert.AreEqual(3, reducedPackageOperations.Operations.Count());
  135. }
  136. [Test]
  137. public void Reduce_OnePackageOperationMatchesPackageBeingInstalledByIdAndVersionButOneIsInstallAndOneIsUninstall_BothOperationsNotIncludedInSet()
  138. {
  139. CreateReducedPackageOperations();
  140. IPackage package1 = AddPackage("Test", "1.0");
  141. IPackage package2 = AddPackage("Test2", "1.0");
  142. PackageOperation operation1a = CreatePackageOperation("Test", "1.0", PackageAction.Install);
  143. PackageOperation operation1b = CreatePackageOperation("Test2", "1.0", PackageAction.Uninstall);
  144. PackageOperation operation2 = CreatePackageOperation("Test2", "1.0", PackageAction.Install);
  145. AddInstallOperationsForPackage(package1, operation1a, operation1b);
  146. AddInstallOperationsForPackage(package2, operation2);
  147. reducedPackageOperations.Reduce();
  148. PackageOperation operation = reducedPackageOperations
  149. .Operations
  150. .SingleOrDefault(o => o.Package.Id == "Test");
  151. Assert.AreEqual(1, reducedPackageOperations.Operations.Count());
  152. }
  153. }
  154. }