Browse Source

Refresh Projects window after updating all NuGet packages.

pull/44/head
Matt Ward 13 years ago
parent
commit
0ad4adb5a8
  1. 1
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
  3. 4
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs
  4. 9
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs
  5. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
  6. 19
      src/AddIns/Misc/PackageManagement/Project/Src/ParentPackagesOperationEventArgs.cs
  7. 3
      src/AddIns/Misc/PackageManagement/Project/Src/ProjectBrowserRefresher.cs
  8. 26
      src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafePackageManagementEvents.cs
  9. 7
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackagesAction.cs
  10. 6
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackagesActionFactory.cs
  11. 7
      src/AddIns/Misc/PackageManagement/Project/Src/UpdateSolutionPackagesAction.cs
  12. 4
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs
  13. 8
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementEvents.cs
  14. 6
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatePackagesAction.cs
  15. 6
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdateSolutionPackagesAction.cs
  16. 35
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementEventsTests.cs
  17. 2
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs
  18. 17
      src/AddIns/Misc/PackageManagement/Test/Src/ProjectBrowserRefresherTests.cs
  19. 2
      src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs
  20. 61
      src/AddIns/Misc/PackageManagement/Test/Src/ThreadSafePackageManagementEventsTests.cs
  21. 23
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackagesActionTests.cs
  22. 18
      src/AddIns/Misc/PackageManagement/Test/Src/UpdateSolutionPackagesActionTests.cs

1
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -232,6 +232,7 @@
<Compile Include="Src\MSBuildBasedProjectExtensions.cs" /> <Compile Include="Src\MSBuildBasedProjectExtensions.cs" />
<Compile Include="Src\PackageLicenseViewModel.cs" /> <Compile Include="Src\PackageLicenseViewModel.cs" />
<Compile Include="Src\PackageManagementServiceProvider.cs" /> <Compile Include="Src\PackageManagementServiceProvider.cs" />
<Compile Include="Src\ParentPackagesOperationEventArgs.cs" />
<Compile Include="Src\ProjectBuilder.cs" /> <Compile Include="Src\ProjectBuilder.cs" />
<Compile Include="Src\ReducedPackageOperations.cs" /> <Compile Include="Src\ReducedPackageOperations.cs" />
<Compile Include="Src\ResolveFileConflictEventArgs.cs" /> <Compile Include="Src\ResolveFileConflictEventArgs.cs" />

2
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs

@ -223,7 +223,7 @@ namespace ICSharpCode.PackageManagement.Design
public UpdatePackagesAction CreateUpdatePackagesAction() public UpdatePackagesAction CreateUpdatePackagesAction()
{ {
var action = new UpdatePackagesAction(this); var action = new UpdatePackagesAction(this, null);
UpdatePackagesActionsCreated.Add(action); UpdatePackagesActionsCreated.Add(action);
return action; return action;
} }

4
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs

@ -16,13 +16,15 @@ namespace ICSharpCode.PackageManagement
event EventHandler<PackageOperationExceptionEventArgs> PackageOperationError; event EventHandler<PackageOperationExceptionEventArgs> PackageOperationError;
event EventHandler<ParentPackageOperationEventArgs> ParentPackageInstalled; event EventHandler<ParentPackageOperationEventArgs> ParentPackageInstalled;
event EventHandler<ParentPackageOperationEventArgs> ParentPackageUninstalled; event EventHandler<ParentPackageOperationEventArgs> ParentPackageUninstalled;
event EventHandler<ParentPackagesOperationEventArgs> ParentPackagesUpdated;
event EventHandler<PackageOperationMessageLoggedEventArgs> PackageOperationMessageLogged; event EventHandler<PackageOperationMessageLoggedEventArgs> PackageOperationMessageLogged;
void OnPackageOperationsStarting(); void OnPackageOperationsStarting();
void OnPackageOperationError(Exception ex); void OnPackageOperationError(Exception ex);
bool OnAcceptLicenses(IEnumerable<IPackage> packages); bool OnAcceptLicenses(IEnumerable<IPackage> packages);
void OnParentPackageInstalled(IPackage package); void OnParentPackageInstalled(IPackage package);
void OnParentPackageUninstalled(IPackage package); void OnParentPackageUninstalled(IPackage package);
void OnParentPackagesUpdated(IEnumerable<IPackage> packages);
void OnPackageOperationMessageLogged(MessageLevel level, string message, params object[] args); void OnPackageOperationMessageLogged(MessageLevel level, string message, params object[] args);
bool OnSelectProjects(IEnumerable<IPackageManagementSelectedProject> selectedProjects); bool OnSelectProjects(IEnumerable<IPackageManagementSelectedProject> selectedProjects);
FileConflictResolution OnResolveFileConflict(string message); FileConflictResolution OnResolveFileConflict(string message);

9
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs

@ -90,5 +90,14 @@ namespace ICSharpCode.PackageManagement
} }
return FileConflictResolution.IgnoreAll; return FileConflictResolution.IgnoreAll;
} }
public event EventHandler<ParentPackagesOperationEventArgs> ParentPackagesUpdated;
public void OnParentPackagesUpdated(IEnumerable<IPackage> packages)
{
if (ParentPackagesUpdated != null) {
ParentPackagesUpdated(this, new ParentPackagesOperationEventArgs(packages));
}
}
} }
} }

2
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs

@ -139,7 +139,7 @@ namespace ICSharpCode.PackageManagement
public UpdatePackagesAction CreateUpdatePackagesAction() public UpdatePackagesAction CreateUpdatePackagesAction()
{ {
return new UpdatePackagesAction(this); return new UpdatePackagesAction(this, packageManagementEvents);
} }
public IEnumerable<PackageOperation> GetUpdatePackagesOperations( public IEnumerable<PackageOperation> GetUpdatePackagesOperations(

19
src/AddIns/Misc/PackageManagement/Project/Src/ParentPackagesOperationEventArgs.cs

@ -0,0 +1,19 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class ParentPackagesOperationEventArgs : EventArgs
{
public ParentPackagesOperationEventArgs(IEnumerable<IPackage> packages)
{
this.Packages = packages;
}
public IEnumerable<IPackage> Packages { get; private set; }
}
}

3
src/AddIns/Misc/PackageManagement/Project/Src/ProjectBrowserRefresher.cs

@ -19,9 +19,10 @@ namespace ICSharpCode.PackageManagement
packageManagementEvents.ParentPackageInstalled += ProjectChanged; packageManagementEvents.ParentPackageInstalled += ProjectChanged;
packageManagementEvents.ParentPackageUninstalled += ProjectChanged; packageManagementEvents.ParentPackageUninstalled += ProjectChanged;
packageManagementEvents.ParentPackagesUpdated += ProjectChanged;
} }
void ProjectChanged(object sender, ParentPackageOperationEventArgs e) void ProjectChanged(object sender, EventArgs e)
{ {
projectService.RefreshProjectBrowser(); projectService.RefreshProjectBrowser();
} }

26
src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafePackageManagementEvents.cs

@ -33,6 +33,7 @@ namespace ICSharpCode.PackageManagement
unsafeEvents.PackageOperationError += RaisePackageOperationErrorEventIfHasSubscribers; unsafeEvents.PackageOperationError += RaisePackageOperationErrorEventIfHasSubscribers;
unsafeEvents.ParentPackageInstalled += RaiseParentPackageInstalledEventIfHasSubscribers; unsafeEvents.ParentPackageInstalled += RaiseParentPackageInstalledEventIfHasSubscribers;
unsafeEvents.ParentPackageUninstalled += RaiseParentPackageUninstalledEventIfHasSubscribers; unsafeEvents.ParentPackageUninstalled += RaiseParentPackageUninstalledEventIfHasSubscribers;
unsafeEvents.ParentPackagesUpdated += RaiseParentPackagesUpdatedEventIfHasSubscribers;
} }
public void Dispose() public void Dispose()
@ -46,6 +47,7 @@ namespace ICSharpCode.PackageManagement
unsafeEvents.PackageOperationError -= RaisePackageOperationErrorEventIfHasSubscribers; unsafeEvents.PackageOperationError -= RaisePackageOperationErrorEventIfHasSubscribers;
unsafeEvents.ParentPackageInstalled -= RaiseParentPackageInstalledEventIfHasSubscribers; unsafeEvents.ParentPackageInstalled -= RaiseParentPackageInstalledEventIfHasSubscribers;
unsafeEvents.ParentPackageUninstalled -= RaiseParentPackageUninstalledEventIfHasSubscribers; unsafeEvents.ParentPackageUninstalled -= RaiseParentPackageUninstalledEventIfHasSubscribers;
unsafeEvents.ParentPackagesUpdated -= RaiseParentPackagesUpdatedEventIfHasSubscribers;
} }
void RaisePackageOperationStartingEventIfHasSubscribers(object sender, EventArgs e) void RaisePackageOperationStartingEventIfHasSubscribers(object sender, EventArgs e)
@ -199,5 +201,29 @@ namespace ICSharpCode.PackageManagement
{ {
return unsafeEvents.OnResolveFileConflict(message); return unsafeEvents.OnResolveFileConflict(message);
} }
public event EventHandler<ParentPackagesOperationEventArgs> ParentPackagesUpdated;
public void OnParentPackagesUpdated(IEnumerable<IPackage> packages)
{
unsafeEvents.OnParentPackagesUpdated(packages);
}
void RaiseParentPackagesUpdatedEventIfHasSubscribers(object sender, ParentPackagesOperationEventArgs e)
{
if (ParentPackagesUpdated != null) {
RaiseParentPackagesUpdatedEvent(sender, e);
}
}
void RaiseParentPackagesUpdatedEvent(object sender, ParentPackagesOperationEventArgs e)
{
if (InvokeRequired) {
Action<object, ParentPackagesOperationEventArgs> action = RaiseParentPackagesUpdatedEvent;
SafeThreadAsyncCall(action, sender, e);
} else {
ParentPackagesUpdated(sender, e);
}
}
} }
} }

7
src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackagesAction.cs

@ -12,10 +12,14 @@ namespace ICSharpCode.PackageManagement
{ {
List<IPackage> packages = new List<IPackage>(); List<IPackage> packages = new List<IPackage>();
List<PackageOperation> operations = new List<PackageOperation>(); List<PackageOperation> operations = new List<PackageOperation>();
IPackageManagementEvents packageManagementEvents;
public UpdatePackagesAction(IPackageManagementProject project) public UpdatePackagesAction(
IPackageManagementProject project,
IPackageManagementEvents packageManagementEvents)
{ {
Project = project; Project = project;
this.packageManagementEvents = packageManagementEvents;
UpdateDependencies = true; UpdateDependencies = true;
} }
@ -62,6 +66,7 @@ namespace ICSharpCode.PackageManagement
protected virtual void ExecuteCore() protected virtual void ExecuteCore()
{ {
Project.UpdatePackages(this); Project.UpdatePackages(this);
packageManagementEvents.OnParentPackagesUpdated(Packages);
} }
void ExecuteWithScriptRunner() void ExecuteWithScriptRunner()

6
src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackagesActionFactory.cs

@ -12,14 +12,16 @@ namespace ICSharpCode.PackageManagement
public class UpdatePackagesActionFactory public class UpdatePackagesActionFactory
{ {
ILogger logger; ILogger logger;
IPackageManagementEvents packageManagementEvents;
bool singleProjectSelected; bool singleProjectSelected;
IPackageManagementProject project; IPackageManagementProject project;
PackageManagementSelectedProjects selectedProjects; PackageManagementSelectedProjects selectedProjects;
IEnumerable<IPackageFromRepository> packages; IEnumerable<IPackageFromRepository> packages;
public UpdatePackagesActionFactory(ILogger logger) public UpdatePackagesActionFactory(ILogger logger, IPackageManagementEvents packageManagementEvents)
{ {
this.logger = logger; this.logger = logger;
this.packageManagementEvents = packageManagementEvents;
} }
public IUpdatePackagesAction CreateAction( public IUpdatePackagesAction CreateAction(
@ -52,7 +54,7 @@ namespace ICSharpCode.PackageManagement
if (singleProjectSelected) { if (singleProjectSelected) {
return project.CreateUpdatePackagesAction(); return project.CreateUpdatePackagesAction();
} else { } else {
return new UpdateSolutionPackagesAction(selectedProjects.Solution); return new UpdateSolutionPackagesAction(selectedProjects.Solution, packageManagementEvents);
} }
} }

7
src/AddIns/Misc/PackageManagement/Project/Src/UpdateSolutionPackagesAction.cs

@ -14,11 +14,15 @@ namespace ICSharpCode.PackageManagement
List<IPackageFromRepository> packages = new List<IPackageFromRepository>(); List<IPackageFromRepository> packages = new List<IPackageFromRepository>();
List<PackageOperation> operations = new List<PackageOperation>(); List<PackageOperation> operations = new List<PackageOperation>();
List<IPackageManagementProject> projects; List<IPackageManagementProject> projects;
IPackageManagementEvents packageManagementEvents;
public UpdateSolutionPackagesAction(IPackageManagementSolution solution) public UpdateSolutionPackagesAction(
IPackageManagementSolution solution,
IPackageManagementEvents packageManagementEvents)
{ {
this.Solution = solution; this.Solution = solution;
this.UpdateDependencies = true; this.UpdateDependencies = true;
this.packageManagementEvents = packageManagementEvents;
} }
public IPackageManagementSolution Solution { get; private set; } public IPackageManagementSolution Solution { get; private set; }
@ -76,6 +80,7 @@ namespace ICSharpCode.PackageManagement
{ {
RunPackageOperations(); RunPackageOperations();
UpdatePackageReferences(); UpdatePackageReferences();
packageManagementEvents.OnParentPackagesUpdated(Packages);
} }
void RunPackageOperations() void RunPackageOperations()

4
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackagesViewModel.cs

@ -15,6 +15,7 @@ namespace ICSharpCode.PackageManagement
UpdatedPackages updatedPackages; UpdatedPackages updatedPackages;
string errorMessage = String.Empty; string errorMessage = String.Empty;
ILogger logger; ILogger logger;
IPackageManagementEvents packageManagementEvents;
public UpdatedPackagesViewModel( public UpdatedPackagesViewModel(
IPackageManagementSolution solution, IPackageManagementSolution solution,
@ -28,6 +29,7 @@ namespace ICSharpCode.PackageManagement
{ {
this.selectedProjects = new PackageManagementSelectedProjects(solution); this.selectedProjects = new PackageManagementSelectedProjects(solution);
this.logger = packageViewModelFactory.Logger; this.logger = packageViewModelFactory.Logger;
this.packageManagementEvents = packageViewModelFactory.PackageManagementEvents;
ShowPackageSources = true; ShowPackageSources = true;
ShowUpdateAllPackages = true; ShowUpdateAllPackages = true;
} }
@ -68,7 +70,7 @@ namespace ICSharpCode.PackageManagement
protected override void TryUpdatingAllPackages() protected override void TryUpdatingAllPackages()
{ {
var factory = new UpdatePackagesActionFactory(logger); var factory = new UpdatePackagesActionFactory(logger, packageManagementEvents);
IUpdatePackagesAction action = factory.CreateAction(selectedProjects, GetPackagesFromViewModels()); IUpdatePackagesAction action = factory.CreateAction(selectedProjects, GetPackagesFromViewModels());
ActionRunner.Run(action); ActionRunner.Run(action);
} }

8
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementEvents.cs

@ -18,6 +18,7 @@ namespace PackageManagement.Tests.Helpers
public event EventHandler<PackageOperationExceptionEventArgs> PackageOperationError; public event EventHandler<PackageOperationExceptionEventArgs> PackageOperationError;
public event EventHandler<ParentPackageOperationEventArgs> ParentPackageInstalled; public event EventHandler<ParentPackageOperationEventArgs> ParentPackageInstalled;
public event EventHandler<ParentPackageOperationEventArgs> ParentPackageUninstalled; public event EventHandler<ParentPackageOperationEventArgs> ParentPackageUninstalled;
public event EventHandler<ParentPackagesOperationEventArgs> ParentPackagesUpdated;
public event EventHandler<PackageOperationMessageLoggedEventArgs> PackageOperationMessageLogged; public event EventHandler<PackageOperationMessageLoggedEventArgs> PackageOperationMessageLogged;
public event EventHandler<ResolveFileConflictEventArgs> ResolveFileConflict; public event EventHandler<ResolveFileConflictEventArgs> ResolveFileConflict;
#pragma warning restore 0067 #pragma warning restore 0067
@ -118,5 +119,12 @@ namespace PackageManagement.Tests.Helpers
MessagePassedToOnResolveFileConflict = message; MessagePassedToOnResolveFileConflict = message;
return FileConflictResolutionToReturn; return FileConflictResolutionToReturn;
} }
public IEnumerable<IPackage> PackagesPassedToOnParentPackageUpdated;
public void OnParentPackagesUpdated(IEnumerable<IPackage> packages)
{
PackagesPassedToOnParentPackageUpdated = packages;
}
} }
} }

6
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatePackagesAction.cs

@ -14,8 +14,10 @@ namespace PackageManagement.Tests.Helpers
public IPackageManagementProject ProjectPassedToCreateRunPackageScriptsAction; public IPackageManagementProject ProjectPassedToCreateRunPackageScriptsAction;
public RunPackageScriptsAction RunPackageScriptsAction; public RunPackageScriptsAction RunPackageScriptsAction;
public TestableUpdatePackagesAction(IPackageManagementProject project) public TestableUpdatePackagesAction(
: base(project) IPackageManagementProject project,
IPackageManagementEvents packageManagementEvents)
: base(project, packageManagementEvents)
{ {
} }

6
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdateSolutionPackagesAction.cs

@ -16,8 +16,10 @@ namespace PackageManagement.Tests.Helpers
public List<IPackageManagementProject> ProjectsPassedToCreateRunPackageScriptsAction; public List<IPackageManagementProject> ProjectsPassedToCreateRunPackageScriptsAction;
public RunAllProjectPackageScriptsAction RunPackageScriptsAction; public RunAllProjectPackageScriptsAction RunPackageScriptsAction;
public TestableUpdateSolutionPackagesAction(IPackageManagementSolution solution) public TestableUpdateSolutionPackagesAction(
: base(solution) IPackageManagementSolution solution,
IPackageManagementEvents packageManagementEvents)
: base(solution, packageManagementEvents)
{ {
} }

35
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementEventsTests.cs

@ -387,5 +387,40 @@ namespace PackageManagement.Tests
Assert.AreEqual(FileConflictResolution.IgnoreAll, resolution); Assert.AreEqual(FileConflictResolution.IgnoreAll, resolution);
} }
[Test]
public void OnParentPackagesUpdated_OneEventSubscriber_PackagesUpdatedEventFired()
{
CreateEvents();
ParentPackagesOperationEventArgs eventArgs = null;
events.ParentPackagesUpdated += (sender, e) => eventArgs = e;
var packages = new FakePackage[] { new FakePackage("Test") };
events.OnParentPackagesUpdated(packages);
Assert.AreEqual(packages, eventArgs.Packages);
}
[Test]
public void OnParentPackagesUpdated_OneEventSubscriber_SenderIsPackageManagementEvents()
{
CreateEvents();
object eventSender = null;
events.ParentPackagesUpdated += (sender, e) => eventSender = sender;
var packages = new FakePackage[] { new FakePackage("Test") };
events.OnParentPackagesUpdated(packages);
Assert.AreEqual(events, eventSender);
}
[Test]
public void OnParentPackagesUpdated_NoEventSubscribers_NullReferenceExceptionNotThrown()
{
CreateEvents();
var packages = new FakePackage[] { new FakePackage("Test") };
Assert.DoesNotThrow(() => events.OnParentPackagesUpdated(packages));
}
} }
} }

2
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs

@ -66,7 +66,7 @@ namespace PackageManagement.Tests
void CreateUpdatePackagesAction() void CreateUpdatePackagesAction()
{ {
updatePackagesAction = new UpdatePackagesAction(project); updatePackagesAction = new UpdatePackagesAction(project, null);
} }
[Test] [Test]

17
src/AddIns/Misc/PackageManagement/Test/Src/ProjectBrowserRefresherTests.cs

@ -31,7 +31,12 @@ namespace PackageManagement.Tests
{ {
packageManagementEvents.OnParentPackageUninstalled(new FakePackage("Test")); packageManagementEvents.OnParentPackageUninstalled(new FakePackage("Test"));
} }
void RaiseOnParentPackagesUpdatedEvent()
{
packageManagementEvents.OnParentPackagesUpdated(new FakePackage[0]);
}
[Test] [Test]
public void OnParentPackageInstalled_EventFires_ProjectBrowserIsRefreshed() public void OnParentPackageInstalled_EventFires_ProjectBrowserIsRefreshed()
{ {
@ -49,5 +54,15 @@ namespace PackageManagement.Tests
Assert.IsTrue(fakeProjectService.IsRefreshProjectBrowserCalled); Assert.IsTrue(fakeProjectService.IsRefreshProjectBrowserCalled);
} }
[Test]
public void OnParentPackagesUpdated_EventFires_ProjectBrowserIsRefreshed()
{
CreateProjectBrowserRefresher();
RaiseOnParentPackagesUpdatedEvent();
Assert.IsTrue(fakeProjectService.IsRefreshProjectBrowserCalled);
}
} }
} }

2
src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs

@ -273,7 +273,7 @@ namespace PackageManagement.Tests
UpdatePackagesAction CreateUpdatePackagesAction() UpdatePackagesAction CreateUpdatePackagesAction()
{ {
return new UpdatePackagesAction(new FakePackageManagementProject()); return new UpdatePackagesAction(new FakePackageManagementProject(), null);
} }
UpdatePackagesAction CreateUpdatePackagesActionWithPackages(params IPackageFromRepository[] packages) UpdatePackagesAction CreateUpdatePackagesActionWithPackages(params IPackageFromRepository[] packages)

61
src/AddIns/Misc/PackageManagement/Test/Src/ThreadSafePackageManagementEventsTests.cs

@ -506,5 +506,66 @@ namespace PackageManagement.Tests
Assert.IsFalse(eventHandlerFired); Assert.IsFalse(eventHandlerFired);
} }
[Test]
public void OnParentPackagesUpdated_NoInvokeRequired_NonThreadSafeOnParentPackagesUpdatedMethodCalled()
{
CreateEvents();
var expectedPackages = new FakePackage[] { new FakePackage() };
threadSafeEvents.OnParentPackagesUpdated(expectedPackages);
IEnumerable<IPackage> packages = fakeEvents.PackagesPassedToOnParentPackageUpdated;
Assert.AreEqual(expectedPackages, packages);
}
[Test]
public void ParentPackagesUpdated_UnsafeEventFired_ThreadSafeEventFired()
{
CreateEventsWithRealPackageManagementEvents();
bool fired = false;
threadSafeEvents.ParentPackagesUpdated += (sender, e) => fired = true;
unsafeEvents.OnParentPackagesUpdated(null);
Assert.IsTrue(fired);
}
[Test]
public void ParentPackagesUpdated_UnsafeEventFiredAndInvokeRequired_ThreadSafeEventIsSafelyInvoked()
{
CreateEventsWithRealPackageManagementEvents();
fakeWorkbench.InvokeRequiredReturnValue = true;
threadSafeEvents.ParentPackagesUpdated += OnEventHandlerFired;
var expectedPackages = new FakePackage[] { new FakePackage() };
unsafeEvents.OnParentPackagesUpdated(expectedPackages);
var eventArgs = fakeWorkbench.Arg2PassedToSafeThreadAsyncCall as ParentPackagesOperationEventArgs;
Assert.AreEqual(expectedPackages, eventArgs.Packages);
}
[Test]
public void ParentPackagesUpdated_UnsafeEventFiredAndInvokeRequiredButNoEventHandlerRegistered_ThreadSafeEventIsNotInvoked()
{
CreateEventsWithRealPackageManagementEvents();
fakeWorkbench.InvokeRequiredReturnValue = true;
var packages = new FakePackage[] { new FakePackage() };
unsafeEvents.OnParentPackagesUpdated(packages);
Assert.IsFalse(fakeWorkbench.IsSafeThreadAsyncCallMade);
}
[Test]
public void Dispose_ParentPackagesUpdatedHandlerExistsAndThreadUnsafeEventFiredAfterDispose_ThreadSafeEventIsNotFired()
{
CreateEventsWithRealPackageManagementEvents();
eventHandlerFired = false;
threadSafeEvents.ParentPackagesUpdated += OnEventHandlerFired;
threadSafeEvents.Dispose();
unsafeEvents.OnParentPackagesUpdated(new FakePackage[0]);
Assert.IsFalse(eventHandlerFired);
}
} }
} }

23
src/AddIns/Misc/PackageManagement/Test/Src/UpdatePackagesActionTests.cs

@ -3,6 +3,7 @@
using System; using System;
using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.PackageManagement.Scripting; using ICSharpCode.PackageManagement.Scripting;
using NuGet; using NuGet;
using NUnit.Framework; using NUnit.Framework;
@ -16,11 +17,13 @@ namespace PackageManagement.Tests
{ {
TestableUpdatePackagesAction action; TestableUpdatePackagesAction action;
IPackageManagementProject project; IPackageManagementProject project;
IPackageManagementEvents packageEvents;
void CreateAction() void CreateAction()
{ {
CreateSolution(); CreateSolution();
action = new TestableUpdatePackagesAction(project); packageEvents = MockRepository.GenerateStub<IPackageManagementEvents>();
action = new TestableUpdatePackagesAction(project, packageEvents);
} }
void CreateActionWithOperations(params PackageOperation[] operations) void CreateActionWithOperations(params PackageOperation[] operations)
@ -49,6 +52,13 @@ namespace PackageManagement.Tests
return MockRepository.GenerateStub<IPackageScriptRunner>(); return MockRepository.GenerateStub<IPackageScriptRunner>();
} }
FakePackage AddPackageToAction(string id, string version)
{
var package = new FakePackage(id, version);
action.AddPackages(new FakePackage[] { package });
return package;
}
[Test] [Test]
public void UpdateDependencies_DefaultValue_IsTrue() public void UpdateDependencies_DefaultValue_IsTrue()
{ {
@ -161,5 +171,16 @@ namespace PackageManagement.Tests
project.AssertWasCalled(p => p.UpdatePackages(action)); project.AssertWasCalled(p => p.UpdatePackages(action));
} }
[Test]
public void Execute_ActionHasOnePackage_ParentPackagesUpdatedEventIsFired()
{
CreateAction();
AddPackageToAction("Test", "1.0");
action.Execute();
packageEvents.AssertWasCalled(events => events.OnParentPackagesUpdated(action.Packages));
}
} }
} }

18
src/AddIns/Misc/PackageManagement/Test/Src/UpdateSolutionPackagesActionTests.cs

@ -19,11 +19,13 @@ namespace PackageManagement.Tests
IPackageManagementSolution solution; IPackageManagementSolution solution;
List<IPackageManagementProject> projects; List<IPackageManagementProject> projects;
IPackageRepository sourceRepository; IPackageRepository sourceRepository;
IPackageManagementEvents packageEvents;
void CreateAction() void CreateAction()
{ {
CreateSolution(); CreateSolution();
action = new TestableUpdateSolutionPackagesAction(solution); packageEvents = MockRepository.GenerateStub<IPackageManagementEvents>();
action = new TestableUpdateSolutionPackagesAction(solution, packageEvents);
} }
void CreateActionWithOperations(params PackageOperation[] operations) void CreateActionWithOperations(params PackageOperation[] operations)
@ -307,5 +309,19 @@ namespace PackageManagement.Tests
Assert.AreEqual(logger, project1.Logger); Assert.AreEqual(logger, project1.Logger);
Assert.AreEqual(logger, project2.Logger); Assert.AreEqual(logger, project2.Logger);
} }
[Test]
public void Execute_OneProjectThatHasOlderVersionOfPackageBeingUpdated_PackagesUpdatedEventIsFired()
{
PackageOperation operation = CreateInstallOperationWithFile(@"tools\readme.txt");
CreateActionWithOperations(operation);
IPackageFromRepository package = AddPackageToAction("Test", "1.0");
IPackageManagementProject project = AddProjectToSolution();
var expectedOperations = new PackageOperation[] { operation };
action.Execute();
packageEvents.AssertWasCalled(events => events.OnParentPackagesUpdated(action.Packages));
}
} }
} }

Loading…
Cancel
Save