20 changed files with 513 additions and 13 deletions
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
// 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 ICSharpCode.Core; |
||||
using NuGet; |
||||
|
||||
namespace ICSharpCode.PackageManagement |
||||
{ |
||||
public class FileConflictResolver : IFileConflictResolver |
||||
{ |
||||
string[] buttons = new string[] { "Yes", "Yes to All", "No", "No to All" }; |
||||
|
||||
const int YesButtonIndex = 0; |
||||
const int YesToAllButtonIndex = 1; |
||||
const int NoButtonIndex = 2; |
||||
const int NoToAllButtonIndex = 3; |
||||
|
||||
public FileConflictResolution ResolveFileConflict(string message) |
||||
{ |
||||
int result = MessageService.ShowCustomDialog( |
||||
"File Conflict", |
||||
message, |
||||
NoButtonIndex, // "No" is default accept button.
|
||||
-1, |
||||
buttons); |
||||
return MapResultToFileConflictResolution(result); |
||||
} |
||||
|
||||
FileConflictResolution MapResultToFileConflictResolution(int result) |
||||
{ |
||||
switch (result) { |
||||
case YesButtonIndex: |
||||
return FileConflictResolution.Overwrite; |
||||
case YesToAllButtonIndex: |
||||
return FileConflictResolution.OverwriteAll; |
||||
case NoToAllButtonIndex: |
||||
return FileConflictResolution.IgnoreAll; |
||||
default: |
||||
return FileConflictResolution.Ignore; |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
// 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 NuGet; |
||||
|
||||
namespace ICSharpCode.PackageManagement |
||||
{ |
||||
public class ResolveFileConflictEventArgs : EventArgs |
||||
{ |
||||
public ResolveFileConflictEventArgs(string message) |
||||
{ |
||||
this.Message = message; |
||||
this.Resolution = FileConflictResolution.Ignore; |
||||
} |
||||
|
||||
public string Message { get; private set; } |
||||
public FileConflictResolution Resolution { get; set; } |
||||
} |
||||
} |
@ -0,0 +1,145 @@
@@ -0,0 +1,145 @@
|
||||
// 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 ICSharpCode.PackageManagement; |
||||
using NuGet; |
||||
using NUnit.Framework; |
||||
using Rhino.Mocks; |
||||
|
||||
namespace PackageManagement.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class ManagePackagesUserPromptsTests |
||||
{ |
||||
ManagePackagesUserPrompts userPrompts; |
||||
IPackageManagementEvents fakeEvents; |
||||
ILicenseAcceptanceService fakeLicenseService; |
||||
ISelectProjectsService fakeSelectProjectsService; |
||||
IFileConflictResolver fakeFileConflictResolver; |
||||
|
||||
void CreateUserPrompts() |
||||
{ |
||||
fakeEvents = MockRepository.GenerateStub<IPackageManagementEvents>(); |
||||
fakeLicenseService = MockRepository.GenerateStub<ILicenseAcceptanceService>(); |
||||
fakeSelectProjectsService = MockRepository.GenerateStub<ISelectProjectsService>(); |
||||
fakeFileConflictResolver = MockRepository.GenerateStub<IFileConflictResolver>(); |
||||
|
||||
userPrompts = new ManagePackagesUserPrompts( |
||||
fakeEvents, |
||||
fakeLicenseService, |
||||
fakeSelectProjectsService, |
||||
fakeFileConflictResolver); |
||||
} |
||||
|
||||
FileConflictResolution RaiseResolveFileConflict(string message) |
||||
{ |
||||
var eventArgs = new ResolveFileConflictEventArgs(message); |
||||
fakeEvents.Raise(events => events.ResolveFileConflict += null, fakeEvents, eventArgs); |
||||
return eventArgs.Resolution; |
||||
} |
||||
|
||||
void RaisePackageOperationsStarting() |
||||
{ |
||||
fakeEvents.Raise(events => events.PackageOperationsStarting += null, fakeEvents, new EventArgs()); |
||||
} |
||||
|
||||
void ResolverReturns(FileConflictResolution resolution) |
||||
{ |
||||
fakeFileConflictResolver |
||||
.Stub(r => r.ResolveFileConflict(Arg<string>.Is.Anything)) |
||||
.Return(resolution); |
||||
} |
||||
|
||||
void ResetFakeResolver() |
||||
{ |
||||
fakeFileConflictResolver.BackToRecord(BackToRecordOptions.All); |
||||
fakeFileConflictResolver.Replay(); |
||||
} |
||||
|
||||
void AssertFileConflictResolverWasNotCalled() |
||||
{ |
||||
fakeFileConflictResolver.AssertWasNotCalled(resolver => resolver.ResolveFileConflict(Arg<string>.Is.Anything)); |
||||
} |
||||
|
||||
[Test] |
||||
public void OnResolveFileConflict_MessagePassed_MessagePassedToFileConflictService() |
||||
{ |
||||
CreateUserPrompts(); |
||||
RaisePackageOperationsStarting(); |
||||
|
||||
RaiseResolveFileConflict("message"); |
||||
|
||||
fakeFileConflictResolver.AssertWasCalled(resolver => resolver.ResolveFileConflict("message")); |
||||
} |
||||
|
||||
[Test] |
||||
public void Dispose_ResolveFileConflictEventRaised_FileConflictServiceNotCalled() |
||||
{ |
||||
CreateUserPrompts(); |
||||
|
||||
userPrompts.Dispose(); |
||||
RaiseResolveFileConflict("message"); |
||||
|
||||
AssertFileConflictResolverWasNotCalled(); |
||||
} |
||||
|
||||
[Test] |
||||
public void OnResolveFileConflict_FileConflictResolverReturnsOverwrite_OverwriteSetInEventArgs() |
||||
{ |
||||
CreateUserPrompts(); |
||||
RaisePackageOperationsStarting(); |
||||
ResolverReturns(FileConflictResolution.Overwrite); |
||||
|
||||
FileConflictResolution resolution = RaiseResolveFileConflict("message"); |
||||
|
||||
Assert.AreEqual(FileConflictResolution.Overwrite, resolution); |
||||
} |
||||
|
||||
[Test] |
||||
public void OnResolveFileConflict_ResolverReturnsIgnoreAllAndThenResolveFileConflictFiredAgain_IgnoreAllReturnedWithoutCallingFileConflictResolverAgain() |
||||
{ |
||||
CreateUserPrompts(); |
||||
RaisePackageOperationsStarting(); |
||||
ResolverReturns(FileConflictResolution.IgnoreAll); |
||||
RaiseResolveFileConflict("message"); |
||||
ResetFakeResolver(); |
||||
ResolverReturns(FileConflictResolution.Overwrite); |
||||
|
||||
FileConflictResolution resolution = RaiseResolveFileConflict("message"); |
||||
|
||||
Assert.AreEqual(FileConflictResolution.IgnoreAll, resolution); |
||||
} |
||||
|
||||
[Test] |
||||
public void OnResolveFileConflict_ResolverReturnsOverwriteAllAndThenResolveFileConflictFiredAgain_OverwriteAllReturnedWithoutCallingFileConflictResolverAgain() |
||||
{ |
||||
CreateUserPrompts(); |
||||
RaisePackageOperationsStarting(); |
||||
ResolverReturns(FileConflictResolution.OverwriteAll); |
||||
RaiseResolveFileConflict("message"); |
||||
ResetFakeResolver(); |
||||
ResolverReturns(FileConflictResolution.Ignore); |
||||
|
||||
FileConflictResolution resolution = RaiseResolveFileConflict("message"); |
||||
|
||||
Assert.AreEqual(FileConflictResolution.OverwriteAll, resolution); |
||||
} |
||||
|
||||
[Test] |
||||
public void OnResolveFileConflict_ResolverReturnsOverwriteAllAndNewPackageInstalledAndThenResolveFileConflictFiredAgain_FileConflictResolverUsedAgainForNewPackage() |
||||
{ |
||||
CreateUserPrompts(); |
||||
RaisePackageOperationsStarting(); |
||||
ResolverReturns(FileConflictResolution.OverwriteAll); |
||||
RaiseResolveFileConflict("message"); |
||||
ResetFakeResolver(); |
||||
RaisePackageOperationsStarting(); |
||||
ResolverReturns(FileConflictResolution.Ignore); |
||||
|
||||
FileConflictResolution resolution = RaiseResolveFileConflict("message"); |
||||
|
||||
Assert.AreEqual(FileConflictResolution.Ignore, resolution); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
// 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 ICSharpCode.PackageManagement; |
||||
using NuGet; |
||||
using NUnit.Framework; |
||||
using Rhino.Mocks; |
||||
|
||||
namespace PackageManagement.Tests |
||||
{ |
||||
[TestFixture] |
||||
public class PackageViewModelOperationLoggerTests |
||||
{ |
||||
PackageViewModelOperationLogger operationLogger; |
||||
IPackage fakePackage; |
||||
ILogger fakeLogger; |
||||
|
||||
void CreateLogger() |
||||
{ |
||||
fakePackage = MockRepository.GenerateStub<IPackage>(); |
||||
fakeLogger = MockRepository.GenerateStub<ILogger>(); |
||||
operationLogger = new PackageViewModelOperationLogger(fakeLogger, fakePackage); |
||||
} |
||||
|
||||
[Test] |
||||
public void ResolveFileConflict_MessagePassed_MessagePassedToWrappedLogger() |
||||
{ |
||||
CreateLogger(); |
||||
|
||||
FileConflictResolution resolution = operationLogger.ResolveFileConflict("message"); |
||||
|
||||
fakeLogger.AssertWasCalled(logger => logger.ResolveFileConflict("message")); |
||||
} |
||||
|
||||
[Test] |
||||
public void ResolveFileConflict_WrappedLoggerResolveFileConflictReturnsOverwriteAll_ReturnsOverwriteAll() |
||||
{ |
||||
CreateLogger(); |
||||
fakeLogger |
||||
.Stub(logger => logger.ResolveFileConflict("message")) |
||||
.Return(FileConflictResolution.OverwriteAll); |
||||
|
||||
FileConflictResolution resolution = operationLogger.ResolveFileConflict("message"); |
||||
|
||||
Assert.AreEqual(FileConflictResolution.OverwriteAll, resolution); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue