diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin
index 271643c62e..2e9551b194 100644
--- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin
+++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin
@@ -60,7 +60,8 @@
insertbefore="TextEditorOptions">
+ label="General"
+ class="ICSharpCode.PackageManagement.PackageManagementOptionsView"/>
+
+
+
+
+
+ PackageManagementOptionsView.xaml
+ Code
+
+
@@ -120,6 +129,7 @@
+
RegisteredPackageSourcesView.xaml
Code
@@ -170,6 +180,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs
index 2a8dc37feb..5c5b211bdb 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs
@@ -127,7 +127,7 @@ namespace ICSharpCode.PackageManagement.Design
public FakePackageRepository FakeRecentPackageRepository = new FakePackageRepository();
- public IPackageRepository RecentPackageRepository {
+ public IRecentPackageRepository RecentPackageRepository {
get { return FakeRecentPackageRepository; }
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageRepository.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageRepository.cs
index b6180d2421..f58a9739fe 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageRepository.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageRepository.cs
@@ -8,7 +8,7 @@ using NuGet;
namespace ICSharpCode.PackageManagement.Design
{
- public class FakePackageRepository : IPackageRepository
+ public class FakePackageRepository : IRecentPackageRepository
{
public List FakePackages = new List();
public bool IsRemovePackageCalled;
@@ -34,5 +34,9 @@ namespace ICSharpCode.PackageManagement.Design
}
public string Source { get; set; }
+
+ public void Clear()
+ {
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IMachinePackageCache.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IMachinePackageCache.cs
new file mode 100644
index 0000000000..946eafbcc3
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IMachinePackageCache.cs
@@ -0,0 +1,16 @@
+// 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.Linq;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public interface IMachinePackageCache
+ {
+ IQueryable GetPackages();
+ void Clear();
+ string Source { get; }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs
index 8a7072dcf5..a1efd472ff 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs
@@ -15,7 +15,7 @@ namespace ICSharpCode.PackageManagement
IPackageRepository CreateAggregatePackageRepository();
IPackageRepository ActivePackageRepository { get; }
IProjectManager ActiveProjectManager { get; }
- IPackageRepository RecentPackageRepository { get; }
+ IRecentPackageRepository RecentPackageRepository { get; }
void InstallPackage(IPackageRepository repository, IPackage package, IEnumerable operations);
void UninstallPackage(IPackageRepository repository, IPackage package);
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IProcess.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IProcess.cs
new file mode 100644
index 0000000000..62f6bd67e6
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IProcess.cs
@@ -0,0 +1,12 @@
+// 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;
+
+namespace ICSharpCode.PackageManagement
+{
+ public interface IProcess
+ {
+ void Start(string fileName);
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IRecentPackageRepository.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IRecentPackageRepository.cs
new file mode 100644
index 0000000000..30ac6c5a8a
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IRecentPackageRepository.cs
@@ -0,0 +1,13 @@
+// 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 interface IRecentPackageRepository : IPackageRepository
+ {
+ void Clear();
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/MachinePackageCache.cs b/src/AddIns/Misc/PackageManagement/Project/Src/MachinePackageCache.cs
new file mode 100644
index 0000000000..ab279b1381
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/MachinePackageCache.cs
@@ -0,0 +1,26 @@
+// 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.Linq;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class MachinePackageCache : IMachinePackageCache
+ {
+ public IQueryable GetPackages()
+ {
+ return MachineCache.Default.GetPackages();
+ }
+
+ public void Clear()
+ {
+ MachineCache.Default.Clear();
+ }
+
+ public string Source {
+ get { return MachineCache.Default.Source; }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/OpenHyperlinkCommand.cs b/src/AddIns/Misc/PackageManagement/Project/Src/OpenHyperlinkCommand.cs
index 107b1fb1c0..21f67ea04d 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/OpenHyperlinkCommand.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/OpenHyperlinkCommand.cs
@@ -35,7 +35,7 @@ namespace ICSharpCode.PackageManagement
protected virtual void StartProcess(string fileName)
{
- Process.Start(fileName);
+ System.Diagnostics.Process.Start(fileName);
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml
new file mode 100644
index 0000000000..f1ebcae289
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml.cs
new file mode 100644
index 0000000000..4d637af26b
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml.cs
@@ -0,0 +1,16 @@
+// 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.SharpDevelop.Gui;
+
+namespace ICSharpCode.PackageManagement
+{
+ public partial class PackageManagementOptionsView : OptionPanel
+ {
+ public PackageManagementOptionsView()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsViewModel.cs
new file mode 100644
index 0000000000..a5812cfb27
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsViewModel.cs
@@ -0,0 +1,82 @@
+// 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.Linq;
+using System.Windows.Input;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class PackageManagementOptionsViewModel : ViewModelBase
+ {
+ IRecentPackageRepository recentPackageRepository;
+ IMachinePackageCache machinePackageCache;
+ IProcess process;
+
+ public PackageManagementOptionsViewModel(IRecentPackageRepository recentPackageRepository)
+ : this(recentPackageRepository, new MachinePackageCache(), new Process())
+ {
+ }
+
+ public PackageManagementOptionsViewModel(
+ IRecentPackageRepository recentPackageRepository,
+ IMachinePackageCache machinePackageCache,
+ IProcess process)
+ {
+ this.recentPackageRepository = recentPackageRepository;
+ this.machinePackageCache = machinePackageCache;
+ this.process = process;
+
+ this.HasNoRecentPackages = !RecentPackageRepositoryHasPackages();
+ this.HasNoCachedPackages = !MachinePackageCacheHasPackages();
+
+ CreateCommands();
+ }
+
+ public bool HasNoRecentPackages { get; private set; }
+ public bool HasNoCachedPackages { get; private set; }
+
+ bool MachinePackageCacheHasPackages()
+ {
+ return machinePackageCache.GetPackages().Any();
+ }
+
+ bool RecentPackageRepositoryHasPackages()
+ {
+ return recentPackageRepository.GetPackages().Any();
+ }
+
+ void CreateCommands()
+ {
+ ClearRecentPackagesCommand =
+ new DelegateCommand(param => ClearRecentPackages(), param => !HasNoRecentPackages);
+ ClearCachedPackagesCommand =
+ new DelegateCommand(param => ClearCachedPackages(), param => !HasNoCachedPackages);
+ BrowseCachedPackagesCommand =
+ new DelegateCommand(param => BrowseCachedPackages(), param => !HasNoCachedPackages);
+ }
+
+ public ICommand ClearRecentPackagesCommand { get; private set; }
+ public ICommand ClearCachedPackagesCommand { get; private set; }
+ public ICommand BrowseCachedPackagesCommand { get; private set; }
+
+ public void ClearRecentPackages()
+ {
+ recentPackageRepository.Clear();
+ HasNoRecentPackages = true;
+ OnPropertyChanged(viewModel => viewModel.HasNoRecentPackages);
+ }
+
+ public void ClearCachedPackages()
+ {
+ machinePackageCache.Clear();
+ HasNoCachedPackages = true;
+ OnPropertyChanged(viewModel => viewModel.HasNoCachedPackages);
+ }
+
+ public void BrowseCachedPackages()
+ {
+ process.Start(machinePackageCache.Source);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
index 11e9f83d66..857fb780e9 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
@@ -71,7 +71,7 @@ namespace ICSharpCode.PackageManagement
}
}
- public IPackageRepository RecentPackageRepository {
+ public IRecentPackageRepository RecentPackageRepository {
get {
if (recentPackageRepository == null) {
CreateRecentPackageRepository();
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Process.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Process.cs
new file mode 100644
index 0000000000..1033f46b54
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Process.cs
@@ -0,0 +1,15 @@
+// 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;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class Process : IProcess
+ {
+ public void Start(string fileName)
+ {
+ System.Diagnostics.Process.Start(fileName);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs
index e4416a4cae..00bf7639f9 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/RecentPackageRepository.cs
@@ -8,7 +8,7 @@ using NuGet;
namespace ICSharpCode.PackageManagement
{
- public class RecentPackageRepository : IPackageRepository
+ public class RecentPackageRepository : IRecentPackageRepository
{
public const int DefaultMaximumPackagesCount = 20;
@@ -145,5 +145,11 @@ namespace ICSharpCode.PackageManagement
get { return maximumPackagesCount; }
set { maximumPackagesCount = value; }
}
+
+ public void Clear()
+ {
+ packages.Clear();
+ UpdateRecentPackagesInOptions();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesView.xaml.cs b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesView.xaml.cs
index e8ea1f802d..bc6111c60b 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesView.xaml.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesView.xaml.cs
@@ -8,7 +8,6 @@ namespace ICSharpCode.PackageManagement
{
public partial class RegisteredPackageSourcesView : OptionPanel
{
- const string ViewModelResourceName = "RegisteredPackageSourcesViewModel";
RegisteredPackageSourcesViewModel viewModel;
public RegisteredPackageSourcesView()
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs
index 04133ec050..9ebe61137f 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs
@@ -10,6 +10,7 @@ namespace ICSharpCode.PackageManagement
{
AddPackageReferenceViewModel addPackageReferenceViewModel;
RegisteredPackageSourcesViewModel registeredPackageSourcesViewModel;
+ PackageManagementOptionsViewModel packageManagementOptionsViewModel;
IPackageManagementService packageManagementService;
public AddPackageReferenceViewModel AddPackageReferenceViewModel {
@@ -60,5 +61,16 @@ namespace ICSharpCode.PackageManagement
registeredPackageSourcesViewModel = new RegisteredPackageSourcesViewModel(packageManagementService.Options);
}
}
+
+ public PackageManagementOptionsViewModel PackageManagementOptionsViewModel {
+ get {
+ if (packageManagementOptionsViewModel == null) {
+ CreatePackageManagementService();
+ IRecentPackageRepository recentRepository = packageManagementService.RecentPackageRepository;
+ packageManagementOptionsViewModel = new PackageManagementOptionsViewModel(recentRepository);
+ }
+ return packageManagementOptionsViewModel;
+ }
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
index f2816f7a2e..9daab03376 100644
--- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
@@ -74,6 +74,7 @@
+
@@ -83,6 +84,8 @@
+
+
@@ -120,6 +123,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeMachinePackageCache.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeMachinePackageCache.cs
new file mode 100644
index 0000000000..9df2d3e6b8
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeMachinePackageCache.cs
@@ -0,0 +1,32 @@
+// 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 System.Linq;
+
+using ICSharpCode.PackageManagement;
+using ICSharpCode.PackageManagement.Design;
+using NuGet;
+
+namespace PackageManagement.Tests.Helpers
+{
+ public class FakeMachinePackageCache : IMachinePackageCache
+ {
+ public List FakePackages = new List();
+
+ public IQueryable GetPackages()
+ {
+ return FakePackages.AsQueryable();
+ }
+
+ public bool IsClearCalled;
+
+ public void Clear()
+ {
+ IsClearCalled = true;
+ }
+
+ public string Source { get; set; }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProcess.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProcess.cs
new file mode 100644
index 0000000000..0b4ad6997c
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeProcess.cs
@@ -0,0 +1,18 @@
+// 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;
+
+namespace PackageManagement.Tests.Helpers
+{
+ public class FakeProcess : IProcess
+ {
+ public string FileNamePassedToStart;
+
+ public void Start(string fileName)
+ {
+ FileNamePassedToStart = fileName;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeRecentPackageRepository.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeRecentPackageRepository.cs
new file mode 100644
index 0000000000..def4658062
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeRecentPackageRepository.cs
@@ -0,0 +1,38 @@
+// 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 System.Linq;
+using ICSharpCode.PackageManagement;
+using ICSharpCode.PackageManagement.Design;
+using NuGet;
+
+namespace PackageManagement.Tests.Helpers
+{
+ public class FakeRecentPackageRepository : IRecentPackageRepository
+ {
+ public string Source { get; set; }
+ public List FakePackages = new List();
+
+ public IQueryable GetPackages()
+ {
+ return FakePackages.AsQueryable();
+ }
+
+ public void AddPackage(IPackage package)
+ {
+ }
+
+ public void RemovePackage(IPackage package)
+ {
+ }
+
+ public bool IsClearCalled;
+
+ public void Clear()
+ {
+ IsClearCalled = true;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs
new file mode 100644
index 0000000000..f07dda54a7
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs
@@ -0,0 +1,277 @@
+// 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 ICSharpCode.PackageManagement;
+using ICSharpCode.PackageManagement.Design;
+using NUnit.Framework;
+using PackageManagement.Tests.Helpers;
+
+namespace PackageManagement.Tests
+{
+ [TestFixture]
+ public class PackageManagementOptionsViewModelTests
+ {
+ PackageManagementOptionsViewModel viewModel;
+ FakeRecentPackageRepository fakeRecentRepository;
+ FakeMachinePackageCache fakeMachineCache;
+ FakeProcess fakeProcess;
+ List propertiesChanged;
+
+ void CreateRecentRepository()
+ {
+ fakeRecentRepository = new FakeRecentPackageRepository();
+ }
+
+ void CreateMachineCache()
+ {
+ fakeMachineCache = new FakeMachinePackageCache();
+ }
+
+ void CreateViewModelUsingCreatedMachineCache()
+ {
+ CreateRecentRepository();
+ fakeProcess = new FakeProcess();
+ viewModel = new PackageManagementOptionsViewModel(fakeRecentRepository, fakeMachineCache, fakeProcess);
+ }
+
+ void CreateViewModelUsingCreatedRecentRepository()
+ {
+ CreateMachineCache();
+ fakeProcess = new FakeProcess();
+ viewModel = new PackageManagementOptionsViewModel(fakeRecentRepository, fakeMachineCache, fakeProcess);
+ }
+
+ void AddPackageToRecentRepository()
+ {
+ fakeRecentRepository.FakePackages.Add(new FakePackage());
+ }
+
+ void AddPackageToMachineCache()
+ {
+ fakeMachineCache.FakePackages.Add(new FakePackage());
+ }
+
+ void RecordPropertyChanges()
+ {
+ propertiesChanged = new List();
+ viewModel.PropertyChanged += (sender, e) => propertiesChanged.Add(e.PropertyName);
+ }
+
+ [Test]
+ public void HasNoRecentPackages_RecentPackageRepositoryHasNoPackages_ReturnsTrue()
+ {
+ CreateRecentRepository();
+ CreateViewModelUsingCreatedRecentRepository();
+
+ bool hasPackages = viewModel.HasNoRecentPackages;
+
+ Assert.IsTrue(hasPackages);
+ }
+
+ [Test]
+ public void HasNoRecentPackages_RecentPackageRepositoryHasOnePackage_ReturnsFalse()
+ {
+ CreateRecentRepository();
+ AddPackageToRecentRepository();
+ CreateViewModelUsingCreatedRecentRepository();
+
+ bool hasPackages = viewModel.HasNoRecentPackages;
+
+ Assert.IsFalse(hasPackages);
+ }
+
+ [Test]
+ public void HasNoCachedPackages_MachinePackageCacheHasNoPackages_ReturnsTrue()
+ {
+ CreateMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ bool hasPackages = viewModel.HasNoCachedPackages;
+
+ Assert.IsTrue(hasPackages);
+ }
+
+ [Test]
+ public void HasNoCachedPackages_MachinePackageCacheHasOnePackage_ReturnsFalse()
+ {
+ CreateMachineCache();
+ AddPackageToMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ bool hasPackages = viewModel.HasNoCachedPackages;
+
+ Assert.IsFalse(hasPackages);
+ }
+
+ [Test]
+ public void ClearRecentPackagesCommandCanExecute_OneRecentPackage_CanExecuteReturnsTrue()
+ {
+ CreateRecentRepository();
+ AddPackageToRecentRepository();
+ CreateViewModelUsingCreatedRecentRepository();
+
+ bool canExecute = viewModel.ClearRecentPackagesCommand.CanExecute(null);
+
+ Assert.IsTrue(canExecute);
+ }
+
+ [Test]
+ public void ClearRecentPackagesCommandCanExecute_NoRecentPackages_CanExecuteReturnsFalse()
+ {
+ CreateRecentRepository();
+ CreateViewModelUsingCreatedRecentRepository();
+
+ bool canExecute = viewModel.ClearRecentPackagesCommand.CanExecute(null);
+
+ Assert.IsFalse(canExecute);
+ }
+
+ [Test]
+ public void ClearCachedPackagesCommandCanExecute_OneCachedPackage_CanExecuteReturnsTrue()
+ {
+ CreateMachineCache();
+ AddPackageToMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ bool canExecute = viewModel.ClearCachedPackagesCommand.CanExecute(null);
+
+ Assert.IsTrue(canExecute);
+ }
+
+ [Test]
+ public void ClearCachedPackagesCommandCanExecute_NoCachedPackages_CanExecuteReturnsFalse()
+ {
+ CreateMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ bool canExecute = viewModel.ClearCachedPackagesCommand.CanExecute(null);
+
+ Assert.IsFalse(canExecute);
+ }
+
+ [Test]
+ public void ClearCachedPackagesCommandExecute_OneCachedPackage_ClearsPackagesFromCache()
+ {
+ CreateMachineCache();
+ AddPackageToMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ viewModel.ClearCachedPackagesCommand.Execute(null);
+
+ Assert.IsTrue(fakeMachineCache.IsClearCalled);
+ }
+
+ [Test]
+ public void ClearRecentPackagesCommandExecute_OneRecentPackage_ClearsPackages()
+ {
+ CreateMachineCache();
+ AddPackageToRecentRepository();
+ CreateViewModelUsingCreatedRecentRepository();
+
+ viewModel.ClearRecentPackagesCommand.Execute(null);
+
+ Assert.IsTrue(fakeRecentRepository.IsClearCalled);
+ }
+
+ [Test]
+ public void ClearRecentPackages_OneRecentPackage_HasNoRecentPackagesIsTrue()
+ {
+ CreateRecentRepository();
+ AddPackageToRecentRepository();
+ CreateViewModelUsingCreatedRecentRepository();
+
+ RecordPropertyChanges();
+ viewModel.ClearRecentPackages();
+
+ bool hasPackages = viewModel.HasNoRecentPackages;
+
+ Assert.IsTrue(hasPackages);
+ }
+
+ [Test]
+ public void ClearCachedPackages_OneCachedPackage_HasNoCachedPackagesReturnsTrue()
+ {
+ CreateMachineCache();
+ AddPackageToMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ RecordPropertyChanges();
+ viewModel.ClearCachedPackages();
+
+ bool hasPackages = viewModel.HasNoCachedPackages;
+
+ Assert.IsTrue(hasPackages);
+ }
+
+ [Test]
+ public void ClearRecentPackages_OneRecentPackage_HasNoRecentPackagesPropertyChangedEventFired()
+ {
+ CreateRecentRepository();
+ AddPackageToRecentRepository();
+ CreateViewModelUsingCreatedMachineCache();
+
+ RecordPropertyChanges();
+ viewModel.ClearRecentPackages();
+
+ bool fired = propertiesChanged.Contains("HasNoRecentPackages");
+
+ Assert.IsTrue(fired);
+ }
+
+ [Test]
+ public void ClearCachedPackages_OneCachedPackage_HasNoCachedPackagesPropertyChangedEventFired()
+ {
+ CreateMachineCache();
+ AddPackageToMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ RecordPropertyChanges();
+ viewModel.ClearCachedPackages();
+
+ bool fired = propertiesChanged.Contains("HasNoCachedPackages");
+
+ Assert.IsTrue(fired);
+ }
+
+ [Test]
+ public void BrowseCachedPackagesCommandCanExecute_OneCachedPackage_ReturnsTrue()
+ {
+ CreateMachineCache();
+ AddPackageToMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ bool canExecute = viewModel.BrowseCachedPackagesCommand.CanExecute(null);
+
+ Assert.IsTrue(canExecute);
+ }
+
+ [Test]
+ public void BrowseCachedPackagesCommandCanExecute_NoCachedPackages_ReturnsFalse()
+ {
+ CreateMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ bool canExecute = viewModel.BrowseCachedPackagesCommand.CanExecute(null);
+
+ Assert.IsFalse(canExecute);
+ }
+
+ [Test]
+ public void BrowseCachedPackagesCommandExecute_OneCachedPackage_StartsProcessToOpenMachineCacheFolder()
+ {
+ CreateMachineCache();
+ CreateViewModelUsingCreatedMachineCache();
+
+ string expectedFileName = @"d:\projects\nugetpackages";
+ fakeMachineCache.Source = expectedFileName;
+
+ viewModel.BrowseCachedPackagesCommand.Execute(null);
+
+ string fileName = fakeProcess.FileNamePassedToStart;
+
+ Assert.AreEqual(expectedFileName, fileName);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs
index c9ed5db111..d7b6022876 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs
@@ -212,5 +212,30 @@ namespace PackageManagement.Tests
PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
}
+
+ [Test]
+ public void Clear_OneRecentPackage_PackagesRemoved()
+ {
+ CreateRepository();
+ AddOnePackageToRepository("Test1");
+
+ repository.Clear();
+
+ int count = repository.GetPackages().Count();
+
+ Assert.AreEqual(0, count);
+ }
+
+ [Test]
+ public void Clear_OneRecentPackageInOptions_RecentPackagesAreRemovedFromOptions()
+ {
+ CreateRepositoryWithOneRecentPackageSavedInOptions();
+
+ repository.Clear();
+
+ int count = options.RecentPackages.Count;
+
+ Assert.AreEqual(0, count);
+ }
}
}