Browse Source

Fix: Incorrect identification if a NuGet package is an update or not, if installed AddIn has no version in its manifest.

pull/32/head
Andreas Weizel 13 years ago
parent
commit
0fed1eb972
  1. 49
      src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs
  2. 201
      src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs
  3. 2
      src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInSetup.cs
  4. 2
      src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs

49
src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs

@ -29,6 +29,7 @@ namespace ICSharpCode.AddInManager2.Tests @@ -29,6 +29,7 @@ namespace ICSharpCode.AddInManager2.Tests
AddIn _addIn2;
AddIn _addIn2_new;
AddIn _addIn_noIdentity;
AddIn _addIn_noVersion;
public AddInSetupTests()
{
@ -71,6 +72,54 @@ namespace ICSharpCode.AddInManager2.Tests @@ -71,6 +72,54 @@ namespace ICSharpCode.AddInManager2.Tests
{
_addIn_noIdentity = AddIn.Load(_addInTree, streamReader);
}
using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test_noVersion.addin"))
{
_addIn_noVersion = AddIn.Load(_addInTree, streamReader);
}
}
[Test]
public void CompareAddInToPackageVersion()
{
CreateAddIns();
// Prepare all (fake) services needed for AddInSetup and its instance, itself
PrepareAddInSetup();
// Create fake packages
FakePackage fakePackageEqual = new FakePackage()
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1.Version)
};
FakePackage fakePackageGreater = new FakePackage()
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion("9.9.9.9")
};
FakePackage fakePackageLess = new FakePackage()
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion("0.0.0.0")
};
// Ensure we have no __nuGet... attributes in manifest
if (_addIn1.Properties.Contains(ManagedAddIn.NuGetPackageVersionManifestAttribute))
{
_addIn1.Properties.Remove(ManagedAddIn.NuGetPackageVersionManifestAttribute);
}
Assert.That(_addInSetup.CompareAddInToPackageVersion(_addIn1, fakePackageEqual), Is.EqualTo(0), "Comparing AddIn 1.0.0.0 and NuGet package 1.0.0.0");
Assert.That(_addInSetup.CompareAddInToPackageVersion(_addIn1, fakePackageGreater), Is.LessThan(0), "Comparing AddIn 1.0.0.0 and NuGet package 9.9.9.9");
Assert.That(_addInSetup.CompareAddInToPackageVersion(_addIn1, fakePackageLess), Is.GreaterThan(0), "Comparing AddIn 1.0.0.0 and NuGet package 0.0.0.0");
// Comparison if there's no version in manifest
Assert.That(_addInSetup.CompareAddInToPackageVersion(_addIn_noVersion, fakePackageEqual), Is.LessThan(0), "Comparing AddIn <null> and NuGet package 1.0.0.0");
// Comparison if there's no regular version in manifest, but there is one in __nuGet... attribute
_addIn_noVersion.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackageEqual.Version.ToString());
Assert.That(_addInSetup.CompareAddInToPackageVersion(_addIn_noVersion, fakePackageEqual), Is.EqualTo(0), "Comparing AddIn <null> (NuGet: 1.0.0.0) and NuGet package 1.0.0.0");
}
[Test, Description("AddIn must be installed from external *.addin manifest file. Pending installation must be cancellable.")]

201
src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs

@ -25,6 +25,7 @@ namespace ICSharpCode.AddInManager2.Tests @@ -25,6 +25,7 @@ namespace ICSharpCode.AddInManager2.Tests
AddIn _addIn1_new;
AddIn _addIn2;
AddIn _addIn2_new;
AddIn _addIn_noVersion;
public AvailableAddInsViewModelTests()
{
@ -54,6 +55,11 @@ namespace ICSharpCode.AddInManager2.Tests @@ -54,6 +55,11 @@ namespace ICSharpCode.AddInManager2.Tests
{
_addIn2_new = AddIn.Load(_addInTree, streamReader);
}
using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test_noVersion.addin"))
{
_addIn_noVersion = AddIn.Load(_addInTree, streamReader);
}
}
[SetUp]
@ -248,6 +254,200 @@ namespace ICSharpCode.AddInManager2.Tests @@ -248,6 +254,200 @@ namespace ICSharpCode.AddInManager2.Tests
CreateAddIns();
_addIn1.Enabled = true;
// Package to be shown in repository
FakePackage fakePackage1 = new FakePackage()
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1.Version),
Tags = SharpDevelopAddInTag
};
FakePackage fakePackage2 = new FakePackage()
{
Id = _addIn2.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2.Version),
Tags = SharpDevelopAddInTag
};
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage1.Id);
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage1.Version.ToString());
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage2.Id);
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage2.Version.ToString());
// List of NuGet repositories
List<PackageSource> registeredPackageSources = new List<PackageSource>();
registeredPackageSources.Add(new PackageSource("", "Test Repository"));
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources;
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>();
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository();
remoteRepository.Source = registeredPackageSources[0].Source;
remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable();
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories;
// PackageRepository service should return remoteRepository instance
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource)
{
return remoteRepository;
};
FakeCorePackageRepository localRepository = new FakeCorePackageRepository();
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository;
localRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable();
// Simulate list of AddIns
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn1);
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2);
// Simulation of resolving AddIns <-> NuGet packages
_services.FakeSetup.GetAddInForNuGetPackageCallback = delegate(IPackage package, bool withAddInsMarkedForInstallation)
{
if (package.Id == _addIn1.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute])
{
return _addIn1;
}
else if (package.Id == _addIn2.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute])
{
return _addIn2;
}
return null;
};
var viewModel = new AvailableAddInsViewModel(_services);
viewModel.ReadPackagesAndWaitForUpdate();
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items.");
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0];
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn");
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Name of 1st AddIn");
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1.Version), "Version of 1st AddIn");
Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''");
Assert.That(firstAddIn.IsOffline, Is.False, "1st AddIn must not be 'offline'");
Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'");
Assert.That(firstAddIn.IsUpdate, Is.False, "1st AddIn must not be 'update'");
Assert.That(firstAddIn.IsAdded, Is.False, "1st AddIn must not be 'added'");
Assert.That(firstAddIn.IsRemoved, Is.False, "1st AddIn must not be 'removed'");
Assert.That(firstAddIn.HasNuGetConnection, Is.False, "1st AddIn must not have 'NuGet connection'");
Assert.That(viewModel.AddInPackages[0].IsExternallyReferenced, Is.False, "1st AddIn must not be 'externally referenced'");
Assert.That(viewModel.AddInPackages[1].IsExternallyReferenced, Is.False, "2nd AddIn must not be 'externally referenced'");
AddInPackageViewModelBase secondAddIn = viewModel.AddInPackages[1];
Assert.That(secondAddIn.Id, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Primary identity of 2nd AddIn");
Assert.That(secondAddIn.Name, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Name of 2nd AddIn");
Assert.That(secondAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 2nd AddIn");
Assert.That(secondAddIn.IsInstalled, Is.True, "2nd AddIn must be 'installed''");
Assert.That(secondAddIn.IsOffline, Is.False, "2nd AddIn must not be 'offline'");
Assert.That(secondAddIn.IsEnabled, Is.True, "2nd AddIn must be 'enabled'");
Assert.That(secondAddIn.IsUpdate, Is.False, "2nd AddIn mustnot be 'update'");
Assert.That(secondAddIn.IsAdded, Is.False, "2nd AddIn must not be 'added'");
Assert.That(secondAddIn.IsRemoved, Is.False, "2nd AddIn must not be 'removed'");
Assert.That(secondAddIn.HasNuGetConnection, Is.False, "2nd AddIn must not have 'NuGet connection'");
}
[Test]
public void ShowAlreadyInstalledAddInsWithoutManifestVersion()
{
CreateAddIns();
_addIn_noVersion.Enabled = true;
// Package to be shown in repository
FakePackage fakePackage1 = new FakePackage()
{
Id = _addIn_noVersion.Manifest.PrimaryIdentity,
Version = new SemanticVersion("1.0.2.0"),
Tags = SharpDevelopAddInTag
};
FakePackage fakePackage2 = new FakePackage()
{
Id = _addIn2.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2.Version),
Tags = SharpDevelopAddInTag
};
_addIn_noVersion.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage1.Id);
_addIn_noVersion.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage1.Version.ToString());
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage2.Id);
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage2.Version.ToString());
// List of NuGet repositories
List<PackageSource> registeredPackageSources = new List<PackageSource>();
registeredPackageSources.Add(new PackageSource("", "Test Repository"));
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources;
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>();
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository();
remoteRepository.Source = registeredPackageSources[0].Source;
remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable();
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories;
// PackageRepository service should return remoteRepository instance
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource)
{
return remoteRepository;
};
FakeCorePackageRepository localRepository = new FakeCorePackageRepository();
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository;
localRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable();
// Simulate list of AddIns
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn_noVersion);
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2);
// Simulation of resolving AddIns <-> NuGet packages
_services.FakeSetup.GetAddInForNuGetPackageCallback = delegate(IPackage package, bool withAddInsMarkedForInstallation)
{
if (package.Id == _addIn_noVersion.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute])
{
return _addIn_noVersion;
}
else if (package.Id == _addIn2.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute])
{
return _addIn2;
}
return null;
};
var viewModel = new AvailableAddInsViewModel(_services);
viewModel.ReadPackagesAndWaitForUpdate();
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items.");
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0];
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn_noVersion.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn");
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn_noVersion.Manifest.PrimaryIdentity), "Name of 1st AddIn");
Assert.That(firstAddIn.Version, Is.EqualTo(fakePackage1.Version.Version), "Version of 1st AddIn");
Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''");
Assert.That(firstAddIn.IsOffline, Is.False, "1st AddIn must not be 'offline'");
Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'");
Assert.That(firstAddIn.IsUpdate, Is.False, "1st AddIn must not be 'update'");
Assert.That(firstAddIn.IsAdded, Is.False, "1st AddIn must not be 'added'");
Assert.That(firstAddIn.IsRemoved, Is.False, "1st AddIn must not be 'removed'");
Assert.That(firstAddIn.HasNuGetConnection, Is.False, "1st AddIn must not have 'NuGet connection'");
Assert.That(viewModel.AddInPackages[0].IsExternallyReferenced, Is.False, "1st AddIn must not be 'externally referenced'");
Assert.That(viewModel.AddInPackages[1].IsExternallyReferenced, Is.False, "2nd AddIn must not be 'externally referenced'");
AddInPackageViewModelBase secondAddIn = viewModel.AddInPackages[1];
Assert.That(secondAddIn.Id, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Primary identity of 2nd AddIn");
Assert.That(secondAddIn.Name, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Name of 2nd AddIn");
Assert.That(secondAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 2nd AddIn");
Assert.That(secondAddIn.IsInstalled, Is.True, "2nd AddIn must be 'installed''");
Assert.That(secondAddIn.IsOffline, Is.False, "2nd AddIn must not be 'offline'");
Assert.That(secondAddIn.IsEnabled, Is.True, "2nd AddIn must be 'enabled'");
Assert.That(secondAddIn.IsUpdate, Is.False, "2nd AddIn mustnot be 'update'");
Assert.That(secondAddIn.IsAdded, Is.False, "2nd AddIn must not be 'added'");
Assert.That(secondAddIn.IsRemoved, Is.False, "2nd AddIn must not be 'removed'");
Assert.That(secondAddIn.HasNuGetConnection, Is.False, "2nd AddIn must not have 'NuGet connection'");
}
[Test]
public void ShowUpdatableAddIns()
{
CreateAddIns();
_addIn1.Enabled = true;
// Package to be shown in repository
FakePackage fakePackage1_old = new FakePackage()
{
@ -271,6 +471,7 @@ namespace ICSharpCode.AddInManager2.Tests @@ -271,6 +471,7 @@ namespace ICSharpCode.AddInManager2.Tests
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage1_old.Id);
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage1_old.Version.ToString());
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage2.Id);
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage2.Version.ToString());
// List of NuGet repositories
List<PackageSource> registeredPackageSources = new List<PackageSource>();

2
src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeAddInSetup.cs

@ -288,7 +288,7 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes @@ -288,7 +288,7 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
}
}
return addIn.Version.CompareTo(nuGetPackage.Version.Version);
return addInVersion.CompareTo(nuGetPackage.Version.Version);
}
}
}

2
src/AddIns/Misc/AddInManager2/Project/Src/Model/AddInSetup.cs

@ -773,7 +773,7 @@ namespace ICSharpCode.AddInManager2.Model @@ -773,7 +773,7 @@ namespace ICSharpCode.AddInManager2.Model
}
}
return addIn.Version.CompareTo(nuGetPackage.Version.Version);
return addInVersion.CompareTo(nuGetPackage.Version.Version);
}
public void RemoveUnreferencedNuGetPackages()

Loading…
Cancel
Save