diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj
index 2aa4969829..5c3c0a8462 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInManager2.Tests.csproj
@@ -112,7 +112,30 @@
SharpDevelop.exe
Always
-
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
\ 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 f116d4c8f1..e28f7a4a3f 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs
@@ -23,6 +23,11 @@ namespace ICSharpCode.AddInManager2.Tests
FakeSDAddInManagement _sdAddInManagement;
AddInSetup _addInSetup;
+ AddIn _addIn1;
+ AddIn _addIn1_new;
+ AddIn _addIn2;
+ AddIn _addIn2_new;
+
public AddInSetupTests()
{
}
@@ -35,33 +40,268 @@ namespace ICSharpCode.AddInManager2.Tests
_addInSetup = new AddInSetup(_events, _nuGet, _sdAddInManagement);
}
- private AddIn CreateAddIn()
+ private void CreateAddIns()
{
- // Create AddIn object from an *.addin file available in this assembly's resources
+ // Create AddIn objects from *.addin files available in this assembly's output directory
FakeAddInTree _addInTree = new FakeAddInTree();
- Stream resourceStream =
- Assembly.GetExecutingAssembly().GetManifestResourceStream("ICSharpCode.AddInManager2.Tests.TestResources.AddInManager2Test.addin");
- using (StreamReader streamReader = new StreamReader(resourceStream))
+
+ using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test.addin"))
+ {
+ _addIn1 = AddIn.Load(_addInTree, streamReader);
+ }
+
+ using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test_New.addin"))
+ {
+ _addIn1_new = AddIn.Load(_addInTree, streamReader);
+ }
+
+ using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test_2.addin"))
+ {
+ _addIn2 = AddIn.Load(_addInTree, streamReader);
+ }
+
+ using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test_2_New.addin"))
+ {
+ _addIn2_new = AddIn.Load(_addInTree, streamReader);
+ }
+ }
+
+ [Test, Description("")]
+ public void InstallValidAddInFromManifest()
+ {
+ CreateAddIns();
+
+ // Prepare all (fake) services needed for AddInSetup and its instance, itself
+ PrepareAddInSetup();
+
+ // Install the AddIn from *.sdaddin package
+ _sdAddInManagement.AddInToLoad = _addIn1;
+ AddIn installedAddIn = _addInSetup.InstallAddIn(@"TestResources\AddInManager2Test.addin");
+
+ // The AddIn must have been added to AddInTree
+ Assert.That(installedAddIn, Is.Not.Null, "InstallAddIn() returns valid AddIn object");
+ Assert.That(_sdAddInManagement.RegisteredAddIns, Contains.Item(_addIn1), "AddIn object added to AddInTree");
+ Assert.That(_sdAddInManagement.AddedExternalAddIns, Contains.Item(_addIn1), "AddIn object added as external");
+
+ // Look if we find a ManagedAddIn object for the new AddIn
+ ManagedAddIn foundAddIn = null;
+ foreach (var managedAddIn in _addInSetup.AddInsWithMarkedForInstallation)
{
- return AddIn.Load(_addInTree, streamReader);
+ if (managedAddIn.AddIn.Manifest.PrimaryIdentity == _addIn1.Manifest.PrimaryIdentity)
+ {
+ // Found!
+ foundAddIn = managedAddIn;
+ break;
+ }
}
+
+ Assert.That(foundAddIn, Is.Not.Null, "ManagedAddIn found in AddInsWithMarkedForInstallation");
+ Assert.That(foundAddIn.IsTemporary, Is.True, "ManagedAddIn is temporary");
+ Assert.That(foundAddIn.IsUpdate, Is.False, "ManagedAddIn is not an update");
+ Assert.That(foundAddIn.InstallationSource, Is.EqualTo(AddInInstallationSource.Offline), "ManagedAddIn's installation source is 'offline'");
+ }
+
+ [Test, Description("")]
+ public void InstallValidAddInFromOfflinePackage()
+ {
+ CreateAddIns();
+
+ // Prepare all (fake) services needed for AddInSetup and its instance, itself
+ PrepareAddInSetup();
+
+ // Install the AddIn from manifest
+ _sdAddInManagement.AddInToLoad = _addIn1;
+ AddIn installedAddIn = _addInSetup.InstallAddIn(@"TestResources\AddInManager2Test.sdaddin");
+
+ // The AddIn must have been added to AddInTree
+ Assert.That(installedAddIn, Is.Not.Null, "InstallAddIn() returns valid AddIn object");
+ Assert.That(_sdAddInManagement.RegisteredAddIns, Contains.Item(_addIn1), "AddIn object added to AddInTree");
+
+ // Look if we find a ManagedAddIn object for the new AddIn
+ ManagedAddIn foundAddIn = null;
+ foreach (var managedAddIn in _addInSetup.AddInsWithMarkedForInstallation)
+ {
+ if (managedAddIn.AddIn.Manifest.PrimaryIdentity == _addIn1.Manifest.PrimaryIdentity)
+ {
+ // Found!
+ foundAddIn = managedAddIn;
+ break;
+ }
+ }
+
+ Assert.That(foundAddIn, Is.Not.Null, "ManagedAddIn found in AddInsWithMarkedForInstallation");
+ Assert.That(foundAddIn.IsTemporary, Is.True, "ManagedAddIn is temporary");
+ Assert.That(foundAddIn.IsUpdate, Is.False, "ManagedAddIn is not an update");
+ Assert.That(foundAddIn.InstallationSource, Is.EqualTo(AddInInstallationSource.Offline), "ManagedAddIn's installation source is 'offline'");
}
[Test, Description("")]
- public void InstallValidAddIn()
+ public void UpdateValidAddInFromOfflinePackage()
{
- AddIn addIn = CreateAddIn();
+ CreateAddIns();
+
+ // Prepare all (fake) services needed for AddInSetup and its instance, itself
+ PrepareAddInSetup();
+
+ // This AddIn is already installed
+ _sdAddInManagement.RegisteredAddIns.Add(_addIn1);
+
+ // Install the new version of AddIn from manifest
+ _sdAddInManagement.AddInToLoad = _addIn1_new;
+ AddIn installedAddIn = _addInSetup.InstallAddIn(@"TestResources\AddInManager2Test_New.sdaddin");
+
+ // Test updated AddIn in AddInTree
+ Assert.That(installedAddIn, Is.Not.Null, "InstallAddIn() returns valid AddIn object");
+ Assert.That(_sdAddInManagement.RegisteredAddIns, Contains.Item(_addIn1), "Old AddIn object still in AddInTree");
+ Assert.That(_sdAddInManagement.RegisteredAddIns.Contains(_addIn1_new), Is.Not.True,
+ "New AddIn object not in AddInTree");
+
+ // Look if we find a ManagedAddIn object for the new AddIn
+ ManagedAddIn foundAddIn = null;
+ foreach (var managedAddIn in _addInSetup.AddInsWithMarkedForInstallation)
+ {
+ if (managedAddIn.AddIn.Manifest.PrimaryIdentity == _addIn1_new.Manifest.PrimaryIdentity)
+ {
+ // Found!
+ foundAddIn = managedAddIn;
+ break;
+ }
+ }
+
+ Assert.That(foundAddIn, Is.Not.Null, "ManagedAddIn found in AddInsWithMarkedForInstallation");
+ Assert.That(foundAddIn.AddIn.Version, Is.EqualTo(_addIn1_new.Version), "ManagedAddIn must have new version");
+ Assert.That(foundAddIn.OldVersion, Is.EqualTo(_addIn1.Version), "ManagedAddIn must know installed (old) version");
+ Assert.That(foundAddIn.IsTemporary, Is.True, "ManagedAddIn is temporary");
+ Assert.That(foundAddIn.IsUpdate, Is.True, "ManagedAddIn is an update");
+ Assert.That(foundAddIn.InstallationSource, Is.EqualTo(AddInInstallationSource.Offline), "ManagedAddIn's installation source is 'offline'");
+ }
+
+ [Test, Description("")]
+ public void InstallValidAddInFromIncompletelyInstalledNuGetPackage()
+ {
+ CreateAddIns();
+
+ // Create a fake package
+ FakePackage package = new FakePackage()
+ {
+ Id = _addIn1.Name,
+ Version = new SemanticVersion(_addIn1.Version)
+ };
+
+ // Prepare all (fake) services needed for AddInSetup and its instance, itself
+ PrepareAddInSetup();
+
+ // Install the AddIn from an extracted NuGet package
+ _sdAddInManagement.AddInToLoad = _addIn1;
+ AddIn installedAddIn = _addInSetup.InstallAddIn(package, "TestResources");
+
+ // The AddIn must have been added to AddInTree
+ Assert.That(installedAddIn, Is.Not.Null, "InstallAddIn() returns valid AddIn object");
+ Assert.That(_sdAddInManagement.RegisteredAddIns, Contains.Item(_addIn1), "AddIn object added to AddInTree");
+
+ // Look if we find a ManagedAddIn object for the new AddIn
+ ManagedAddIn foundAddIn = null;
+ foreach (var managedAddIn in _addInSetup.AddInsWithMarkedForInstallation)
+ {
+ if (managedAddIn.AddIn.Manifest.PrimaryIdentity == _addIn1.Manifest.PrimaryIdentity)
+ {
+ // Found!
+ foundAddIn = managedAddIn;
+ break;
+ }
+ }
+
+ Assert.That(foundAddIn, Is.Not.Null, "ManagedAddIn found in AddInsWithMarkedForInstallation");
+ Assert.That(foundAddIn.IsTemporary, Is.True, "ManagedAddIn is temporary");
+ Assert.That(foundAddIn.IsUpdate, Is.False, "ManagedAddIn is not an update");
+ Assert.That(foundAddIn.InstallationSource, Is.EqualTo(AddInInstallationSource.NuGetRepository), "ManagedAddIn's installation source is 'NuGet'");
+ }
+
+ [Test, Description("")]
+ public void InstallValidAddInFromDownloadedNuGetPackage()
+ {
+ CreateAddIns();
// Create a fake package
FakePackage package = new FakePackage()
{
- Id = addIn.Name,
- Version = new SemanticVersion(addIn.Version)
+ Id = _addIn1.Name,
+ Version = new SemanticVersion(_addIn1.Version)
};
+ // Prepare all (fake) services needed for AddInSetup and its instance, itself
PrepareAddInSetup();
+ // Simulate download by NuGet Core PackageManager
+ _sdAddInManagement.AddInToLoad = _addIn1;
+ _events.OnAddInPackageDownloaded(new PackageOperationEventArgs(package, null, "TestResources"));
+
+ // The AddIn must have been added to AddInTree
+ Assert.That(_sdAddInManagement.RegisteredAddIns, Contains.Item(_addIn1), "AddIn object added to AddInTree");
+
+ // Look if we find a ManagedAddIn object for the new AddIn
+ ManagedAddIn foundAddIn = null;
+ foreach (var managedAddIn in _addInSetup.AddInsWithMarkedForInstallation)
+ {
+ if (managedAddIn.AddIn.Manifest.PrimaryIdentity == _addIn1.Manifest.PrimaryIdentity)
+ {
+ // Found!
+ foundAddIn = managedAddIn;
+ break;
+ }
+ }
+
+ Assert.That(foundAddIn, Is.Not.Null, "ManagedAddIn found in AddInsWithMarkedForInstallation");
+ Assert.That(foundAddIn.IsTemporary, Is.True, "ManagedAddIn is temporary");
+ Assert.That(foundAddIn.IsUpdate, Is.False, "ManagedAddIn is not an update");
+ Assert.That(foundAddIn.InstallationSource, Is.EqualTo(AddInInstallationSource.NuGetRepository), "ManagedAddIn's installation source is 'NuGet'");
+ }
+
+ [Test, Description("")]
+ public void UpdateValidAddInFromDownloadedNuGetPackage()
+ {
+ CreateAddIns();
+
+ // Create a fake package
+ FakePackage package = new FakePackage()
+ {
+ Id = _addIn1.Name,
+ Version = new SemanticVersion(_addIn1_new.Version)
+ };
+
+ // Prepare all (fake) services needed for AddInSetup and its instance, itself
+ PrepareAddInSetup();
+
+ // This AddIn is already installed
+ _sdAddInManagement.RegisteredAddIns.Add(_addIn1);
+
+ // Simulate download of new version by NuGet Core PackageManager
+ _sdAddInManagement.AddInToLoad = _addIn1_new;
+ _events.OnAddInPackageDownloaded(new PackageOperationEventArgs(package, null, "TestResources"));
+
+ // Test updated AddIn in AddInTree
+ Assert.That(_sdAddInManagement.RegisteredAddIns, Contains.Item(_addIn1), "Old AddIn object still in AddInTree");
+ Assert.That(_sdAddInManagement.RegisteredAddIns.Contains(_addIn1_new), Is.Not.True,
+ "New AddIn object not in AddInTree");
+
+ // Look if we find a ManagedAddIn object for the new AddIn
+ ManagedAddIn foundAddIn = null;
+ foreach (var managedAddIn in _addInSetup.AddInsWithMarkedForInstallation)
+ {
+ if (managedAddIn.AddIn.Manifest.PrimaryIdentity == _addIn1_new.Manifest.PrimaryIdentity)
+ {
+ // Found!
+ foundAddIn = managedAddIn;
+ break;
+ }
+ }
+ Assert.That(foundAddIn, Is.Not.Null, "ManagedAddIn found in AddInsWithMarkedForInstallation");
+ Assert.That(foundAddIn.AddIn.Version, Is.EqualTo(_addIn1_new.Version), "ManagedAddIn must have new version");
+ Assert.That(foundAddIn.OldVersion, Is.EqualTo(_addIn1.Version), "ManagedAddIn must know installed (old) version");
+ Assert.That(foundAddIn.IsTemporary, Is.True, "ManagedAddIn is temporary");
+ Assert.That(foundAddIn.IsUpdate, Is.True, "ManagedAddIn is an update");
+ Assert.That(foundAddIn.InstallationSource, Is.EqualTo(AddInInstallationSource.NuGetRepository), "ManagedAddIn's installation source is 'NuGet'");
}
}
}
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs
index b273241e25..b2a2eb22a5 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs
@@ -150,6 +150,7 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
if (addIns != null)
{
_addedExternalAddIns.AddRange(addIns);
+ _registeredAddIns.AddRange(addIns);
}
}
}
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.addin b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.addin
index 9e78f88775..f58685f8ff 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.addin
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.addin
@@ -3,7 +3,7 @@
description="Allows to test the AddIn that allows installing and updating SharpDevelop AddIns.">
-
+
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.sdaddin b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.sdaddin
new file mode 100644
index 0000000000..cbc1fd1814
Binary files /dev/null and b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.sdaddin differ
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2.addin b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2.addin
new file mode 100644
index 0000000000..c715ae8204
--- /dev/null
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2.addin
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2.sdaddin b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2.sdaddin
new file mode 100644
index 0000000000..7e55463370
Binary files /dev/null and b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2.sdaddin differ
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2_New.addin b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2_New.addin
new file mode 100644
index 0000000000..0bd9f32e30
--- /dev/null
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2_New.addin
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2_New.sdaddin b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2_New.sdaddin
new file mode 100644
index 0000000000..4d64d522d6
Binary files /dev/null and b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2_New.sdaddin differ
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_New.addin b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_New.addin
new file mode 100644
index 0000000000..f7a8f20b7d
--- /dev/null
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_New.addin
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_New.sdaddin b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_New.sdaddin
new file mode 100644
index 0000000000..0c36802c52
Binary files /dev/null and b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_New.sdaddin differ