From 7d3ccae4e92b74ea29e03c83bb7b5a454c6e76f7 Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Tue, 5 Feb 2013 01:32:38 +0100 Subject: [PATCH] Added first AddInSetup unit tests. --- .../AddInManager2.Tests.csproj | 25 +- .../AddInManager2.Tests/AddInSetupTests.cs | 260 +++++++++++++++++- .../Fakes/FakeSDAddInManagement.cs | 1 + .../TestResources/AddInManager2Test.addin | 2 +- .../TestResources/AddInManager2Test.sdaddin | Bin 0 -> 405 bytes .../TestResources/AddInManager2Test_2.addin | 13 + .../TestResources/AddInManager2Test_2.sdaddin | Bin 0 -> 415 bytes .../AddInManager2Test_2_New.addin | 13 + .../AddInManager2Test_2_New.sdaddin | Bin 0 -> 423 bytes .../TestResources/AddInManager2Test_New.addin | 13 + .../AddInManager2Test_New.sdaddin | Bin 0 -> 415 bytes 11 files changed, 315 insertions(+), 12 deletions(-) create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test.sdaddin create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2.addin create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2.sdaddin create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2_New.addin create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_2_New.sdaddin create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_New.addin create mode 100644 src/AddIns/Misc/AddInManager2/AddInManager2.Tests/TestResources/AddInManager2Test_New.sdaddin 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 0000000000000000000000000000000000000000..cbc1fd1814047a1d11032e800e4a5e631540bc28 GIT binary patch literal 405 zcmWIWW@Zs#U|`^2NaJ*MQvY&t;zJ;BIU@suIFNQsN%73{P0UM7Pc1SENi8nXOH4`0 z%$w@J*YAh{&%F0bs@b*qFEACaZ0TFd%&lN3owRP^C6%tb&c|09e(>1Cm-bsl}QZG+65)E-F@;T*M;3dQf9|9CbW$-k*u zXsB`G_m6`Lf-a#BZcVG!igG zP3BgIpS_g7>tK+8`f}6%8`j^c-Et-7T~Tm(qjKuHkLzZyF5=x%dof4f_4M(_YgP%b zl?(2QbT+>H<&}T^4wGxum;X(VjLe>~x$=5gz<=%lZ$>7223+By0t^`tPymxSLx~Hj rfRRCh;ibwtUsL9Dj4)d0fbSlCAV0vHl?`MHBM@c+X)$2HGcW)EMIe}W literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7e554633701538c9dea75153bd0f0c99883546bb GIT binary patch literal 415 zcmWIWW@Zs#U|`^2$l`Q$GTHd_<8vTyEh7ViB#?GYN%73{P0UM7Pc1SENi8mkH_}T? zNy*Hc>Tj5L*nnq_utL4U7lz$m-$-d(I_f-qo5S&@wKpOfbU20PD*cUWx6_R0P?h%B zrZ9;uXpi+h+5i7;yRWTg=X0+LSX$@SZr%04t#e`EY|}IB>T)$Kj+U~V!h0tFRIO&q z@QT04Vs?-7MAZMu4Ymc>9yTsm;oZt(;os}6v$W9KVR<5#l%@H4=3^gRsyEr4*%Goc zZ*$zq?4$F4ik-c){#M-N{w0fAx-C%P(D9^(!ndQMc^e>)X2;b_oY~GcwsT;0hlVUij0_SCtJXRPnKGYagwfj=zKI$G`2pUnY#?(OfiN3L%K@W+fdK&SiI!vl literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4d64d522d62463a75909160f799bfb07f57a0aee GIT binary patch literal 423 zcmWIWW@Zs#U|`^2xW?(~bn1K8`{zL3T1Ey2Ss?A0lH!@?o0ylFo?2uSl3H96ZxrvB zTCSIvl9HJ>)qii^Ap?PVj*n#h>KNFKmQU2$mGa_J*sF-x*V-GO+?ZCoaMAi>2b4c@ z-SAVnAuz4o`uA^JdH=JUgXXe!Guw6=?O$|Mmi5Pi69L^Arx6MlPK8JGO2<}jQ;Fk9!Y8`7x zZrIwq)X#@+&nRJ^70dSCsY_Ow_x`hj>+V{~E?+gaZ+K=A{(G6$f^SR#-i%E447kEb z1sF;opa3Qbgcui886$%PL*M?y)27Vl7-4k54uM1vKfs%n4P+K05at7EC16xAFaQ8c C?w|+& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0c36802c523e6bddd5b0044cef93765114e0401f GIT binary patch literal 415 zcmWIWW@Zs#U|`^2xX9`1w4pK5?=g_KoRNV+8b~{)ql6`a@AE~tos)pmsS0-#Cj;m2Lb~WF3q1 zPxYH8%qkQu#s3)ak>+wjTDF8kqCU8Lx@X-(+n zD7`1wE}i?=_1r@L)wK!fr`vbd@7BGQYp^80yi#lTfq6lCU(Ko(U$0ubAj|Fit7|1S z74k>6F1K9Vuju)5&dUE~?be#NES9fwpXzEleP`SCP(@Sm0B=Sndj?#gqXG;c5KsV< uc*BYds)&(6f}y-r=9nq-IYt