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