diff --git a/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs b/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs index 12bc9c067b..50503ed18f 100644 --- a/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs +++ b/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesPresenterFactory.cs @@ -31,18 +31,21 @@ public class AddRemoveReferencesPresenterFactory : IAddRemoveReferencesPresenter private readonly IConfigProvider _settings; private readonly IRegisteredLibraryFinderService _finder; private readonly IReferenceReconciler _reconciler; + private readonly IFileSystemBrowserFactory _browser; public AddRemoveReferencesPresenterFactory(IVBE vbe, RubberduckParserState state, IConfigProvider settingsProvider, IRegisteredLibraryFinderService finder, - IReferenceReconciler reconciler) + IReferenceReconciler reconciler, + IFileSystemBrowserFactory browser) { _vbe = vbe; _state = state; _settings = settingsProvider; _finder = finder; _reconciler = reconciler; + _browser = browser; } public AddRemoveReferencesPresenter Create(ProjectDeclaration project) @@ -106,7 +109,7 @@ public AddRemoveReferencesPresenter Create(ProjectDeclaration project) item.FullPath.Equals(proj.FullPath, StringComparison.OrdinalIgnoreCase)))); } - return new AddRemoveReferencesPresenter(new AddRemoveReferencesDialog(new AddRemoveReferencesViewModel(model, _reconciler))); + return new AddRemoveReferencesPresenter(new AddRemoveReferencesDialog(new AddRemoveReferencesViewModel(model, _reconciler, _browser))); } private IEnumerable GetUserProjectFolderModels(IReferenceSettings settings) diff --git a/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesViewModel.cs b/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesViewModel.cs index b8e18817f2..463b12c96c 100644 --- a/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesViewModel.cs +++ b/Rubberduck.Core/UI/AddRemoveReferences/AddRemoveReferencesViewModel.cs @@ -82,11 +82,13 @@ static AddRemoveReferencesViewModel() private readonly ObservableCollection _available; private readonly ObservableCollection _project; private readonly IReferenceReconciler _reconciler; + private readonly IFileSystemBrowserFactory _browser; - public AddRemoveReferencesViewModel(IAddRemoveReferencesModel model, IReferenceReconciler reconciler) + public AddRemoveReferencesViewModel(IAddRemoveReferencesModel model, IReferenceReconciler reconciler, IFileSystemBrowserFactory browser) { Model = model; _reconciler = reconciler; + _browser = browser; _available = new ObservableCollection(model.References .Where(reference => !reference.IsReferenced).OrderBy(reference => reference.Description)); @@ -110,25 +112,48 @@ public AddRemoveReferencesViewModel(IAddRemoveReferencesModel model, IReferenceR ApplyCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteApplyCommand); } + /// + /// The IAddRemoveReferencesModel for the view. + /// public IAddRemoveReferencesModel Model { get; set; } + /// + /// Hides the projects filter if the host does not support them. Statically set. + /// public bool ProjectsVisible => HostHasProjects; + /// + /// The number of built-in (locked) references of the project. + /// public int BuiltInReferenceCount { get; } + /// + /// Adds a reference to the project. + /// public ICommand AddCommand { get; } + /// + /// Removes a reference from the project and makes it "available". + /// public ICommand RemoveCommand { get; } + /// - /// Prompts user for a .tlb, .dll, or .ocx file, and attempts to append it to . + /// Prompts the user to browse for a reference. /// public ICommand BrowseCommand { get; } + /// + /// Closes the dialog and indicates changes are to be saved. + /// public CommandBase OkCommand { get; } + + /// + /// Closes the dialog and indicates changes are not to be saved. + /// public CommandBase CancelCommand { get; } /// - /// Applies all changes to project references. + /// Applies any changes without closing the dialog. /// public ICommand ApplyCommand { get; } @@ -142,10 +167,20 @@ public AddRemoveReferencesViewModel(IAddRemoveReferencesModel model, IReferenceR /// public ICommand MoveDownCommand { get; } + /// + /// Pins the selected reference from the available list. + /// public ICommand PinLibraryCommand { get; } + /// + /// Pins the selected reference from the referenced list. + /// public ICommand PinReferenceCommand { get; } + /// + /// Delegate for AddCommand. + /// + /// Ignored private void ExecuteAddCommand(object parameter) { if (SelectedLibrary == null) @@ -158,8 +193,13 @@ private void ExecuteAddCommand(object parameter) EvaluateProjectDirty(); ProjectReferences.Refresh(); _available.Remove(SelectedLibrary); + AvailableReferences.Refresh(); } + /// + /// Delegate for RemoveCommand. + /// + /// Ignored private void ExecuteRemoveCommand(object parameter) { if (SelectedReference == null) @@ -179,18 +219,21 @@ private void ExecuteRemoveCommand(object parameter) EvaluateProjectDirty(); ProjectReferences.Refresh(); + AvailableReferences.Refresh(); } - + + /// + /// Delegate for BrowseCommand. + /// + /// Ignored private void ExecuteBrowseCommand(object parameter) { - using (var dialog = new OpenFileDialog + using (var dialog = _browser.CreateOpenFileDialog()) { - Filter = string.Join("|", FileFilters), - Title = RubberduckUI.References_BrowseCaption - }) - { - dialog.ShowDialog(); - if (string.IsNullOrEmpty(dialog.FileName)) + dialog.Filter = string.Join("|", FileFilters); + dialog.Title = RubberduckUI.References_BrowseCaption; + var result = dialog.ShowDialog(); + if (result != DialogResult.OK || string.IsNullOrEmpty(dialog.FileName)) { return; } @@ -221,6 +264,10 @@ private void ExecuteBrowseCommand(object parameter) } } + /// + /// Delegate for ApplyCommand. + /// + /// Ignored private void ExecuteApplyCommand(object parameter) { var changed = _reconciler.ReconcileReferences(Model, _available.ToList()); @@ -233,6 +280,10 @@ private void ExecuteApplyCommand(object parameter) ProjectReferences.Refresh(); } + /// + /// Delegate for MoveUpCommand. + /// + /// Ignored private void ExecuteMoveUpCommand(object parameter) { if (SelectedReference == null || SelectedReference.IsBuiltIn || SelectedReference.Priority == 1) @@ -253,6 +304,10 @@ private void ExecuteMoveUpCommand(object parameter) ProjectReferences.Refresh(); } + /// + /// Delegate for MoveDownCommand. + /// + /// Ignored private void ExecuteMoveDownCommand(object parameter) { if (SelectedReference == null || SelectedReference.IsBuiltIn || SelectedReference.Priority == _project.Count) @@ -273,6 +328,10 @@ private void ExecuteMoveDownCommand(object parameter) ProjectReferences.Refresh(); } + /// + /// Delegate for PinLibraryCommand. + /// + /// Ignored private void ExecutePinLibraryCommand(object parameter) { if (SelectedLibrary == null) @@ -283,9 +342,13 @@ private void ExecutePinLibraryCommand(object parameter) AvailableReferences.Refresh(); } + /// + /// Delegate for PinReferenceCommand. + /// + /// Ignored private void ExecutePinReferenceCommand(object parameter) { - if (SelectedReference == null || SelectedReference.IsBuiltIn) + if (SelectedReference == null) { return; } @@ -293,6 +356,9 @@ private void ExecutePinReferenceCommand(object parameter) ProjectReferences.Refresh(); } + /// + /// Ordered collection of the project's currently selected references. + /// public ICollectionView ProjectReferences { get @@ -303,6 +369,9 @@ public ICollectionView ProjectReferences } } + /// + /// Collection of references not currently selected for the project, filtered by the current filter. + /// public ICollectionView AvailableReferences { get @@ -314,16 +383,29 @@ public ICollectionView AvailableReferences } private string _filter; + + /// + /// The currently selected filter. Should be a member of ReferenceFilter. + /// public string SelectedFilter { get => _filter; set { + if (!Enum.TryParse(value, out _)) + { + return; + } _filter = value; AvailableReferences.Refresh(); } } + /// + /// Applies selected filter and any search term to CollectionViewSource. + /// + /// The ReferenceModel to test. + /// Returns true if the passed reference is included in the filtered result. private bool Filter(ReferenceModel reference) { var filtered = false; @@ -353,6 +435,10 @@ private bool Filter(ReferenceModel reference) } private string _search = string.Empty; + + /// + /// Search term for filtering AvailableReferences. + /// public string Search { get => _search; @@ -364,6 +450,10 @@ public string Search } private ReferenceModel _selection; + + /// + /// The currently selected Reference in the focused list. + /// public ReferenceModel CurrentSelection { get => _selection; @@ -375,6 +465,10 @@ public ReferenceModel CurrentSelection } private ReferenceModel _reference; + + /// + /// The currently selected Reference for the project. + /// public ReferenceModel SelectedReference { get => _reference; @@ -386,6 +480,10 @@ public ReferenceModel SelectedReference } private ReferenceModel _library; + + /// + /// The currently selected available (not included in the project) Reference. + /// public ReferenceModel SelectedLibrary { get => _library; @@ -397,6 +495,10 @@ public ReferenceModel SelectedLibrary } private bool _dirty; + + /// + /// Indicated whether any changes were made to the project's references. + /// public bool IsProjectDirty { get => _dirty; @@ -407,6 +509,9 @@ public bool IsProjectDirty } } + /// + /// Tests to see if any changes have been made to the project and sets IsProjectDirty to the appropriate value. + /// private void EvaluateProjectDirty() { var selected = _project.Select(reference => (reference.Priority, reference.ToReferenceInfo())).ToList(); diff --git a/Rubberduck.Core/UI/Command/ExportAllCommand.cs b/Rubberduck.Core/UI/Command/ExportAllCommand.cs index 97d2c70fe5..92d3bca7ce 100644 --- a/Rubberduck.Core/UI/Command/ExportAllCommand.cs +++ b/Rubberduck.Core/UI/Command/ExportAllCommand.cs @@ -11,9 +11,9 @@ namespace Rubberduck.UI.Command public class ExportAllCommand : CommandBase { private readonly IVBE _vbe; - private readonly IFolderBrowserFactory _factory; + private readonly IFileSystemBrowserFactory _factory; - public ExportAllCommand(IVBE vbe, IFolderBrowserFactory folderBrowserFactory) : base(LogManager.GetCurrentClassLogger()) + public ExportAllCommand(IVBE vbe, IFileSystemBrowserFactory folderBrowserFactory) : base(LogManager.GetCurrentClassLogger()) { _vbe = vbe; _factory = folderBrowserFactory; diff --git a/Rubberduck.Core/UI/FileBrowserDialogFactory.cs b/Rubberduck.Core/UI/FileBrowserDialogFactory.cs index 5356d96741..b8940ab37b 100644 --- a/Rubberduck.Core/UI/FileBrowserDialogFactory.cs +++ b/Rubberduck.Core/UI/FileBrowserDialogFactory.cs @@ -1,7 +1,11 @@ namespace Rubberduck.UI { - public interface IFolderBrowserFactory + public interface IFileSystemBrowserFactory { + IOpenFileDialog CreateOpenFileDialog(); + + ISaveFileDialog CreateSaveFileDialog(); + IFolderBrowser CreateFolderBrowser(string description); IFolderBrowser CreateFolderBrowser(string description, bool showNewFolderButton); @@ -10,7 +14,7 @@ public interface IFolderBrowserFactory string rootFolder); } - public class DialogFactory : IFolderBrowserFactory + public class DialogFactory : IFileSystemBrowserFactory { private readonly IEnvironmentProvider _environment; private readonly bool _oldSchool; @@ -48,5 +52,15 @@ public IFolderBrowser CreateFolderBrowser(string description, bool showNewFolder ? new ModernFolderBrowser(_environment, description, showNewFolderButton, rootFolder) as IFolderBrowser : new FolderBrowser(_environment, description, showNewFolderButton, rootFolder); } + + public IOpenFileDialog CreateOpenFileDialog() + { + return new OpenFileDialog(); + } + + public ISaveFileDialog CreateSaveFileDialog() + { + return new SaveFileDialog(); + } } } diff --git a/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs b/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs index 4029e00a07..c4d69dc110 100644 --- a/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs +++ b/Rubberduck.Core/UI/Settings/AddRemoveReferencesUserSettingsViewModel.cs @@ -14,11 +14,11 @@ namespace Rubberduck.UI.Settings public class AddRemoveReferencesUserSettingsViewModel : SettingsViewModelBase, ISettingsViewModel { private readonly IConfigProvider _provider; - private readonly IFolderBrowserFactory _browserFactory; + private readonly IFileSystemBrowserFactory _browserFactory; private readonly ReferenceSettings _clean; - public AddRemoveReferencesUserSettingsViewModel(IConfigProvider provider, IFolderBrowserFactory browserFactory) + public AddRemoveReferencesUserSettingsViewModel(IConfigProvider provider, IFileSystemBrowserFactory browserFactory) { _provider = provider; _browserFactory = browserFactory; diff --git a/Rubberduck.Core/UI/Settings/SettingsForm.cs b/Rubberduck.Core/UI/Settings/SettingsForm.cs index 5bff9296b2..d5769a674d 100644 --- a/Rubberduck.Core/UI/Settings/SettingsForm.cs +++ b/Rubberduck.Core/UI/Settings/SettingsForm.cs @@ -27,7 +27,7 @@ public SettingsForm() IMessageBox messageBox, IVbeSettings vbeSettings, IConfigProvider referencesProvider, - IFolderBrowserFactory browserFactory, + IFileSystemBrowserFactory browserFactory, SettingsViews activeView = SettingsViews.GeneralSettings) : this() { var config = configService.LoadConfiguration(); diff --git a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs index 894175c3f8..8a697a98c3 100644 --- a/Rubberduck.Main/Root/RubberduckIoCInstaller.cs +++ b/Rubberduck.Main/Root/RubberduckIoCInstaller.cs @@ -274,7 +274,7 @@ private void RegisterSpecialFactories(IWindsorContainer container) container.Register(Component.For() .ImplementedBy() .LifestyleSingleton()); - container.Register(Component.For() + container.Register(Component.For() .ImplementedBy() .LifestyleSingleton()); container.Register(Component.For() diff --git a/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs b/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs index 49c361c438..abe984c8d2 100644 --- a/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs +++ b/RubberduckTests/AddRemoveReferences/AddRemoveReferencesSetup.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices.ComTypes; +using System.Windows.Forms; using Moq; using Rubberduck.AddRemoveReferences; using Rubberduck.Interaction; @@ -10,6 +11,7 @@ using Rubberduck.Resources.Registration; using Rubberduck.Settings; using Rubberduck.SettingsProvider; +using Rubberduck.UI; using Rubberduck.UI.AddRemoveReferences; using Rubberduck.VBEditor; using Rubberduck.VBEditor.SafeComWrappers; @@ -50,7 +52,7 @@ public static class AddRemoveReferencesSetup new ReferenceInfo(new Guid(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte)info), $"Recent{info}", $@"C:\Windows\System32\recent{info}.dll", 1, 0)) .ToList(); - public static List MockedReferencesList => new List + public static List DummyReferencesList => new List { new ReferenceModel(new ReferenceInfo(VbaGuid, "VBA", @"C:\Shortcut\VBE7.DLL", 4, 2), ReferenceKind.TypeLibrary) {IsBuiltIn = true, IsReferenced = true, Priority = 1 }, new ReferenceModel(new ReferenceInfo(ExcelGuid, "Excel", @"C:\Office\EXCEL.EXE", 15, 0), ReferenceKind.TypeLibrary) {IsBuiltIn = true, IsReferenced = true, Priority = 2}, @@ -105,6 +107,11 @@ public static Mock> GetMockReferenceSettingsP return output; } + public static ReferenceReconciler ArrangeReferenceReconciler(ReferenceSettings settings = null) + { + return ArrangeReferenceReconciler(settings, out _, out _); + } + public static ReferenceReconciler ArrangeReferenceReconciler( ReferenceSettings settings, out Mock messageBox, @@ -152,12 +159,12 @@ public static Mock ArrangeAddRemoveReferencesModel(Li return model; } - public static Mock ArrangeParsedAddRemoveReferencesModel( - List input, - List output, - List registered, - out Mock references, - out MockProjectBuilder projectBuilder) + public static ProjectDeclaration ArrangeMocksAndGetProject() + { + return ArrangeMocksAndGetProject(out _, out _); + } + + public static ProjectDeclaration ArrangeMocksAndGetProject(out MockProjectBuilder projectBuilder, out Mock references) { var builder = new MockVbeBuilder(); @@ -167,19 +174,104 @@ public static Mock ArrangeAddRemoveReferencesModel(Li references = projectBuilder .AddReference("VBA", @"C:\Shortcut\VBE7.DLL", 4, 2, true) .AddReference("Excel", @"C:\Office\EXCEL.EXE", 15, 0, true) - .AddReference("ReferenceOne", @"C:\Libs\reference1.dll", 1, 1) - .AddReference("ReferenceTwo", @"C:\Libs\reference2.dll", 2, 2) + .AddReference("Library One", @"C:\Libs\library1.dll", 1, 1) + .AddReference("Library Two", @"C:\Libs\library2.dll", 2, 2) .GetMockedReferences(out _); builder.AddProject(projectBuilder.Build()); var parser = MockParser.CreateAndParse(builder.Build().Object); - var declaration = parser.AllUserDeclarations.OfType().Single(); + return parser.AllUserDeclarations.OfType().Single(); + } + + public static Mock ArrangeParsedAddRemoveReferencesModel( + List input, + List output, + List registered, + out Mock references, + out MockProjectBuilder projectBuilder) + { + var declaration = ArrangeMocksAndGetProject(out projectBuilder, out references); var model = ArrangeAddRemoveReferencesModel(input, output, GetDefaultReferenceSettings()); model.Setup(m => m.Project).Returns(declaration); return model; } + + public static AddRemoveReferencesViewModel ArrangeViewModel() + { + return ArrangeViewModel(out _, out _, out _); + } + + public static AddRemoveReferencesViewModel ArrangeViewModel( + out List allReferences, + out List projectReferences, + out Mock browserFactory, + bool addHostProjects = false) + { + return ArrangeViewModel(out allReferences, out projectReferences, out browserFactory, out _, addHostProjects); + } + + public static AddRemoveReferencesViewModel ArrangeViewModel( + out Mock browserFactory, + out Mock libraryProvider, + bool addHostProjects = false) + { + return ArrangeViewModel(out _, out _, out browserFactory, out libraryProvider, addHostProjects); + } + + public static AddRemoveReferencesViewModel ArrangeViewModel( + out List allReferences, + out List projectReferences, + out Mock browserFactory, + out Mock libraryProvider, + bool addHostProjects = false) + { + var registered = LibraryReferenceInfoList.Select(reference => new ReferenceModel(reference, ReferenceKind.TypeLibrary)).ToList(); + + var declaration = ArrangeMocksAndGetProject(out _, out var references); + var settings = GetNonDefaultReferenceSettings(); + + var priority = 1; + projectReferences = references.Object.Select(item => new ReferenceModel(item, priority++) { IsRegistered = true }).ToList(); + + allReferences = registered.ToList(); + var pinnedLibrary = registered.First(); + pinnedLibrary.IsPinned = true; + pinnedLibrary.IsRecent = true; + + allReferences.AddRange(projectReferences.Where(proj => !registered.Any(item => + item.FullPath.Equals(proj.FullPath, StringComparison.OrdinalIgnoreCase)))); + + if (addHostProjects) //RecentProjectReferenceInfoList + { + var projects = RecentProjectReferenceInfoList.Select(project => new ReferenceModel(project, ReferenceKind.Project)).ToList(); + var pinnedProject = projects.First(); + pinnedProject.IsPinned = true; + pinnedProject.IsRecent = true; + + allReferences.AddRange(projects); + } + + var model = new AddRemoveReferencesModel(declaration, allReferences, settings); + var reconciler = ArrangeReferenceReconciler(settings, out _, out libraryProvider); + browserFactory = new Mock(); + + return new AddRemoveReferencesViewModel(model, reconciler, browserFactory.Object); + } + + public static void SetupMockedOpenDialog(this Mock factory, string filename, DialogResult result) + { + factory.SetupMockedOpenDialog(filename, result, out _); + } + + public static void SetupMockedOpenDialog(this Mock factory, string filename, DialogResult result, out Mock dialog) + { + dialog = new Mock(); + dialog.Setup(m => m.FileName).Returns(filename); + dialog.Setup(m => m.ShowDialog()).Returns(result); + factory.Setup(m => m.CreateOpenFileDialog()).Returns(dialog.Object); + } } } diff --git a/RubberduckTests/AddRemoveReferences/AddRemoveReferencesViewModelTests.cs b/RubberduckTests/AddRemoveReferences/AddRemoveReferencesViewModelTests.cs new file mode 100644 index 0000000000..4741e876a9 --- /dev/null +++ b/RubberduckTests/AddRemoveReferences/AddRemoveReferencesViewModelTests.cs @@ -0,0 +1,454 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Moq; +using NUnit.Framework; +using Rubberduck.AddRemoveReferences; +using Rubberduck.UI; +using Rubberduck.UI.AddRemoveReferences; +using Rubberduck.VBEditor; +using Rubberduck.VBEditor.SafeComWrappers; + +namespace RubberduckTests.AddRemoveReferences +{ + [TestFixture] + public class AddRemoveReferencesViewModelTests + { + [Test] + [Category("AddRemoveReferences")] + public void ViewModelCtor_AddsProjectReferencesInOrder() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out _, out var projectReferences, out _); + + var actual = new List(viewModel.ProjectReferences.Cast()); + + Assert.IsTrue(projectReferences.OrderBy(reference => reference.Priority).SequenceEqual(actual)); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelCtor_AvailableDoesNotIncludeProjectReferences() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out _, out var projectReferences, out _); + + var actual = new List(viewModel.AvailableReferences.Cast()); + + Assert.IsTrue(!actual.Any(reference => projectReferences.Contains(reference))); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelCtor_SetsBuiltInCount() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out _, out var projectReferences, out _); + + var expected = projectReferences.Count(reference => reference.IsBuiltIn); + + Assert.AreEqual(expected, viewModel.BuiltInReferenceCount); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModel_NewViewModelIsNotDirty() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + Assert.IsFalse(viewModel.IsProjectDirty); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelFilters_RecentIsAppliedToAvailableReferences() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var allReferences, out _, out _, true); + viewModel.SelectedFilter = "Recent"; + + var expected = allReferences.Count(reference => !reference.IsReferenced && reference.IsRecent); + var actual = viewModel.AvailableReferences.Cast().Count(); + + Assert.AreEqual(expected, actual); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelFilters_PinnedIsAppliedToAvailableReferences() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var allReferences, out _, out _, true); + viewModel.SelectedFilter = "Pinned"; + + var expected = allReferences.Count(reference => !reference.IsReferenced && reference.IsPinned); + var actual = viewModel.AvailableReferences.Cast().Count(); + + Assert.AreEqual(expected, actual); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelFilters_ComTypesIsAppliedToAvailableReferences() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var allReferences, out _, out _, true); + viewModel.SelectedFilter = "ComTypes"; + + var expected = allReferences.Count(reference => !reference.IsReferenced && reference.Type == ReferenceKind.TypeLibrary); + var actual = viewModel.AvailableReferences.Cast().Count(); + + Assert.AreEqual(expected, actual); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelFilters_ProjectsIsAppliedToAvailableReferences() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var allReferences, out _, out _, true); + viewModel.SelectedFilter = "Projects"; + + var expected = allReferences.Count(reference => !reference.IsReferenced && reference.Type == ReferenceKind.Project); + var actual = viewModel.AvailableReferences.Cast().Count(); + + Assert.AreEqual(expected, actual); + } + + private static readonly List SearchReferencesList = new List + { + new ReferenceModel(new ReferenceInfo(Guid.NewGuid(), "Scripting", @"C:\Shortcut\scripting.dll", 1, 0), ReferenceKind.TypeLibrary), + new ReferenceModel(new ReferenceInfo(Guid.NewGuid(), "Scripting Regular Expressions", @"C:\Office\regex.dll", 2, 0), ReferenceKind.TypeLibrary), + new ReferenceModel(new ReferenceInfo(Guid.NewGuid(), "ReferenceOne", @"C:\Libs\reference1.dll", 3, 0), ReferenceKind.TypeLibrary), + new ReferenceModel(new ReferenceInfo(Guid.NewGuid(), "ReferenceTwo", @"C:\Libs\reference2.dll", 4, 0), ReferenceKind.TypeLibrary), + new ReferenceModel(new ReferenceInfo(Guid.NewGuid(), string.Empty, @"C:\Libs\empty.dll", 5, 0), ReferenceKind.TypeLibrary), + }; + + [Test] + [Category("AddRemoveReferences")] + [TestCase("", 5)] + [TestCase("scri", 2)] + [TestCase("Regu", 1)] + [TestCase("REFERENCE", 2)] + [TestCase("empty", 1)] + [TestCase("shortcut", 1)] + [TestCase("libs", 3)] + [TestCase("1", 1)] + [TestCase(null, 5)] + public void ViewModelFilters_SearchInputFiltersList(string input, int expected) + { + var declaration = AddRemoveReferencesSetup.ArrangeMocksAndGetProject(); + var settings = AddRemoveReferencesSetup.GetNonDefaultReferenceSettings(); + var model = new AddRemoveReferencesModel(declaration, SearchReferencesList, settings); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings); + + var viewModel = new AddRemoveReferencesViewModel(model, reconciler, new Mock().Object); + viewModel.SelectedFilter = ReferenceFilter.ComTypes.ToString(); + viewModel.Search = input; + + var actual = viewModel.AvailableReferences.OfType().Count(); + + Assert.AreEqual(expected, actual); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelAddCommand_AddsSelectedLibrary() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + + var adding = viewModel.AvailableReferences.OfType().First(); + viewModel.SelectedFilter = ReferenceFilter.ComTypes.ToString(); + viewModel.SelectedLibrary = adding; + viewModel.AddCommand.Execute(null); + + Assert.IsTrue(viewModel.ProjectReferences.OfType().Contains(adding)); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelAddCommand_AddedReferenceIsLast() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + + var adding = viewModel.AvailableReferences.OfType().First(); + viewModel.SelectedFilter = ReferenceFilter.ComTypes.ToString(); + viewModel.SelectedLibrary = adding; + viewModel.AddCommand.Execute(null); + + var expected = viewModel.ProjectReferences.OfType().Count(); + Assert.AreEqual(expected, adding.Priority); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelAddCommand_AddedReferenceIsNotAvailable() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + + var adding = viewModel.AvailableReferences.OfType().First(); + viewModel.SelectedFilter = ReferenceFilter.ComTypes.ToString(); + viewModel.SelectedLibrary = adding; + viewModel.AddCommand.Execute(null); + + Assert.IsFalse(viewModel.AvailableReferences.OfType().Contains(adding)); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelRemoveCommand_RemovedReferenceIsNowAvailable() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + + var removing = viewModel.ProjectReferences.OfType().First(reference => !reference.IsBuiltIn); + viewModel.SelectedFilter = ReferenceFilter.ComTypes.ToString(); + viewModel.SelectedReference = removing; + viewModel.RemoveCommand.Execute(null); + + Assert.IsTrue(viewModel.AvailableReferences.OfType().Contains(removing)); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelRemoveCommand_ClearsPriority() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + + var removing = viewModel.ProjectReferences.OfType().First(reference => !reference.IsBuiltIn); + viewModel.SelectedReference = removing; + viewModel.RemoveCommand.Execute(null); + + Assert.IsNull(removing.Priority); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelRemoveCommand_RemovedReferenceIsNotInProject() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + + var removing = viewModel.ProjectReferences.OfType().First(reference => !reference.IsBuiltIn); + viewModel.SelectedReference = removing; + viewModel.RemoveCommand.Execute(null); + + Assert.IsFalse(viewModel.ProjectReferences.OfType().Contains(removing)); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelBrowseCommand_ShowsDialog() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var dialogFactory, out _); + + dialogFactory.SetupMockedOpenDialog(@"C:\Foo\bar.dll", DialogResult.Cancel, out var dialog); + viewModel.BrowseCommand.Execute(null); + + dialogFactory.Verify(m => m.CreateOpenFileDialog(), Times.Once); + dialog.Verify(m => m.ShowDialog(), Times.Once); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelBrowseCommand_CallsLoadLibrary() + { + const string filename = @"C:\Foo\bar.dll"; + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var dialogFactory, out var libraryProvider); + + dialogFactory.SetupMockedOpenDialog(filename, DialogResult.OK); + viewModel.BrowseCommand.Execute(null); + + libraryProvider.Verify(m => m.LoadTypeLibrary(filename), Times.Once); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelBrowseCommand_DoesNotCallLoadLibraryOnCancel() + { + const string filename = @"C:\Foo\bar.dll"; + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var dialogFactory, out var libraryProvider); + + dialogFactory.SetupMockedOpenDialog(filename, DialogResult.Cancel); + viewModel.BrowseCommand.Execute(null); + + libraryProvider.Verify(m => m.LoadTypeLibrary(filename), Times.Never); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelBrowseCommand_DoesNotCallLoadLibraryOnEmptyResult() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var dialogFactory, out var libraryProvider); + + dialogFactory.SetupMockedOpenDialog(string.Empty, DialogResult.OK); + viewModel.BrowseCommand.Execute(null); + + libraryProvider.Verify(m => m.LoadTypeLibrary(string.Empty), Times.Never); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelBrowseCommand_BrowsedLibraryAddedToProject() + { + const string path = @"C:\Windows\System32\library.dll"; + const string name = "Library"; + const string description = "Library 1.1"; + + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var dialogFactory, out var libraryProvider); + var info = new ReferenceInfo(AddRemoveReferencesSetup.DummyGuidOne, name, path, 1, 1); + AddRemoveReferencesSetup.SetupIComLibraryProvider(libraryProvider, info, path, description); + + dialogFactory.SetupMockedOpenDialog(path, DialogResult.OK); + viewModel.BrowseCommand.Execute(null); + + var expected = viewModel.ProjectReferences.OfType().Last(); + + Assert.IsTrue(expected.FullPath.Equals(path)); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelBrowseCommand_BrowsedLibraryAddedIfBroken() + { + const string path = @"C:\Windows\System32\borked.dll"; + + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var dialogFactory, out var libraryProvider); + libraryProvider.Setup(m => m.LoadTypeLibrary(path)).Throws(new COMException()); + + dialogFactory.SetupMockedOpenDialog(path, DialogResult.OK); + viewModel.BrowseCommand.Execute(null); + + var expected = viewModel.ProjectReferences.OfType().Last(); + + Assert.IsTrue(expected.FullPath.Equals(path)); + Assert.IsTrue(expected.IsBroken); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelBrowseCommand_BrowseMatchesAvailableLibraries() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var allReferences, out _, out var dialogFactory, out var libraryProvider); + + var expected = allReferences.First(reference => !reference.IsReferenced); + var browsed = expected.FullPath; + dialogFactory.SetupMockedOpenDialog(browsed, DialogResult.OK); + viewModel.BrowseCommand.Execute(null); + + var actual = viewModel.ProjectReferences.OfType().Last(); + + libraryProvider.Verify(m => m.LoadTypeLibrary(browsed), Times.Never); + Assert.AreSame(expected, actual); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelBrowseCommand_BrowseMatchRemovesFromAvailableLibraries() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(out var allReferences, out _, out var dialogFactory, out _); + + var browsed = allReferences.First(reference => !reference.IsReferenced); + + dialogFactory.SetupMockedOpenDialog(browsed.FullPath, DialogResult.OK); + viewModel.BrowseCommand.Execute(null); + + Assert.IsFalse(viewModel.AvailableReferences.OfType().Contains(browsed)); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelMoveUpCommand_MovesPriorityUp() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + var referenced = viewModel.ProjectReferences.OfType().ToDictionary(model => model.Priority.GetValueOrDefault()); + + var last = referenced.Count; + var moving = referenced[last]; + var switching = referenced[last - 1]; + viewModel.SelectedReference = moving; + viewModel.MoveUpCommand.Execute(null); + + Assert.AreEqual(last - 1, moving.Priority); + Assert.AreEqual(last, switching.Priority); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelMoveUpCommand_DoesNotMoveBeforeLocked() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + var referenced = viewModel.ProjectReferences.OfType().ToDictionary(model => model.Priority.GetValueOrDefault()); + + var startingPriority = viewModel.BuiltInReferenceCount + 1; + var moving = referenced[startingPriority]; + + viewModel.SelectedReference = moving; + viewModel.MoveUpCommand.Execute(null); + + Assert.AreEqual(startingPriority, moving.Priority); + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelMoveDownCommand_MovesPriorityDown() + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + var referenced = viewModel.ProjectReferences.OfType().ToDictionary(model => model.Priority.GetValueOrDefault()); + + var startingPriority = viewModel.BuiltInReferenceCount + 1; + var moving = referenced[startingPriority]; + var switching = referenced[startingPriority + 1]; + + viewModel.SelectedReference = moving; + viewModel.MoveDownCommand.Execute(null); + + Assert.AreEqual(startingPriority + 1, moving.Priority); + Assert.AreEqual(startingPriority, switching.Priority); + + } + + [Test] + [Category("AddRemoveReferences")] + public void ViewModelMoveDownCommand_DoesNotMoveLastReference() + + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + var referenced = viewModel.ProjectReferences.OfType().ToDictionary(model => model.Priority.GetValueOrDefault()); + + var last = referenced.Count; + var moving = referenced[last]; + + viewModel.SelectedReference = moving; + viewModel.MoveDownCommand.Execute(null); + + Assert.AreEqual(last, moving.Priority); + } + + [Test] + [Category("AddRemoveReferences")] + [TestCase(true, false)] + [TestCase(false, true)] + public void ViewModelPinLibraryCommand_TogglesLibraryPin(bool starting, bool ending) + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + + var pinning = viewModel.AvailableReferences.OfType().First(); + pinning.IsPinned = starting; + viewModel.SelectedLibrary = pinning; + + viewModel.PinLibraryCommand.Execute(null); + + Assert.AreEqual(ending, pinning.IsPinned); + } + + [Test] + [Category("AddRemoveReferences")] + [TestCase(true, false)] + [TestCase(false, true)] + public void ViewModelPinReferenceCommand_TogglesReferencePin(bool starting, bool ending) + { + var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); + + var pinning = viewModel.ProjectReferences.OfType().First(); + pinning.IsPinned = starting; + viewModel.SelectedReference = pinning; + + viewModel.PinReferenceCommand.Execute(null); + + Assert.AreEqual(ending, pinning.IsPinned); + } + } +} diff --git a/RubberduckTests/AddRemoveReferences/ReferenceReconcilerTests.cs b/RubberduckTests/AddRemoveReferences/ReferenceReconcilerTests.cs index d112264cc9..23c98d9ea6 100644 --- a/RubberduckTests/AddRemoveReferences/ReferenceReconcilerTests.cs +++ b/RubberduckTests/AddRemoveReferences/ReferenceReconcilerTests.cs @@ -22,7 +22,7 @@ public void GetLibraryInfoFromPath_HandlesProjects() { const string path = @"C:\Users\Rubberduck\Documents\Book1.xlsm"; - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var model = reconciler.GetLibraryInfoFromPath(path); Assert.AreEqual(path, model.FullPath); @@ -65,7 +65,7 @@ public void GetLibraryInfoFromPath_NoExtensionReturnsNull() { const string path = @"C:\Users\Rubberduck\Documents\Book1"; - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var model = reconciler.GetLibraryInfoFromPath(path); Assert.IsNull(model); @@ -117,7 +117,7 @@ public void GetLibraryInfoFromPath_LoadLibraryLoadsModel() public void UpdateSettings_UpdatesRecentLibrariesBasedOnFlag(bool updating) { var settings = AddRemoveReferencesSetup.GetNonDefaultReferenceSettings(); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings); var input = settings.GetRecentReferencesForHost(null).Select(info => new ReferenceModel(info, ReferenceKind.TypeLibrary) { IsRecent = true }).ToList(); @@ -143,7 +143,7 @@ public void UpdateSettings_UpdatesRecentLibrariesBasedOnFlag(bool updating) public void UpdateSettings_UpdatesRecentProjectsBasedOnFlag(bool updating) { var settings = AddRemoveReferencesSetup.GetNonDefaultReferenceSettings(); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings); var input = settings.GetRecentReferencesForHost("EXCEL.EXE").Select(info => new ReferenceModel(info, ReferenceKind.Project) { IsRecent = true }).ToList(); @@ -167,7 +167,7 @@ public void UpdateSettings_UpdatesRecentProjectsBasedOnFlag(bool updating) public void UpdateSettings_AddsPinnedLibraries() { var settings = AddRemoveReferencesSetup.GetDefaultReferenceSettings(); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings); var input = settings.GetPinnedReferencesForHost(null).Select(info => new ReferenceModel(info, ReferenceKind.TypeLibrary) {IsPinned = true}).ToList(); @@ -191,7 +191,7 @@ public void UpdateSettings_AddsPinnedLibraries() public void UpdateSettings_RemovesPinnedLibraries() { var settings = AddRemoveReferencesSetup.GetDefaultReferenceSettings(); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings); var input = settings.GetPinnedReferencesForHost(null).Select(info => new ReferenceModel(info, ReferenceKind.TypeLibrary) { IsPinned = true }).ToList(); @@ -215,7 +215,7 @@ public void TryAddReferenceString_CallsAddFromFile() { const string file = @"C:\Windows\System32\reference.dll"; - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); reconciler.TryAddReference(project.Object, file); @@ -229,7 +229,7 @@ public void TryAddReferenceString_ReturnsNullOnThrow() { const string file = @"C:\Windows\System32\reference.dll"; - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); references.Setup(m => m.AddFromFile(file)).Throws(new COMException()); @@ -260,7 +260,7 @@ public void TryAddReferenceString_ReturnedReferenceIsRecent() { const string file = @"C:\Windows\System32\reference.dll"; - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out var builder); var returned = builder.CreateReferenceMock("Reference", file, 1, 1, false).Object; @@ -276,7 +276,7 @@ public void TryAddReferenceString_ReturnedReferenceIsRecent() public void TryAddReferenceReferenceModel_ReturnedReferenceIsRecent() { var input = new ReferenceModel(DummyReferenceInfo, 0); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); var model = reconciler.TryAddReference(project.Object, input); @@ -289,7 +289,7 @@ public void TryAddReferenceReferenceModel_ReturnedReferenceIsRecent() public void TryAddReferenceReferenceModel_ReturnedReferenceIsLastPriority() { var input = new ReferenceModel(DummyReferenceInfo, 0); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _).Object; var priority = reconciler.TryAddReference(project.Object, input).Priority; @@ -319,7 +319,7 @@ public void TryAddReferenceReferenceModel_ReturnsNullOnThrow() { var input = new ReferenceModel(DummyReferenceInfo, 0); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); references.Setup(m => m.AddFromFile(input.FullPath)).Throws(new COMException()); @@ -333,7 +333,7 @@ public void TryAddReferenceReferenceModel_ReturnsNullOnThrow() public void ReconcileReferences_ReturnsEmptyWithoutNewReferences() { var model = AddRemoveReferencesSetup.ArrangeParsedAddRemoveReferencesModel(null, null, null, out _, out _); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var output = reconciler.ReconcileReferences(model.Object); @@ -345,7 +345,7 @@ public void ReconcileReferences_ReturnsEmptyWithoutNewReferences() public void ReconcileReferencesOverload_ReturnsEmptyWithoutNewReferences() { var model = AddRemoveReferencesSetup.ArrangeParsedAddRemoveReferencesModel(null, null, null, out _, out _); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var output = reconciler.ReconcileReferences(model.Object, null); Assert.IsEmpty(output); @@ -359,7 +359,7 @@ public void ReconcileReferences_UpdatesSettingsPinned() .Select(reference => new ReferenceModel(reference, ReferenceKind.TypeLibrary)).ToList(); var model = AddRemoveReferencesSetup.ArrangeParsedAddRemoveReferencesModel(null, newReferences, null, out _, out _); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var pinned = newReferences.First(); pinned.IsPinned = true; @@ -378,7 +378,7 @@ public void ReconcileReferences_AllReferencesAreAdded() .Select(reference => new ReferenceModel(reference, ReferenceKind.TypeLibrary)).ToList(); var model = AddRemoveReferencesSetup.ArrangeParsedAddRemoveReferencesModel(newReferences, newReferences, newReferences, out var references, out var builder); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var priority = references.Object.Count; foreach (var item in newReferences) @@ -397,9 +397,9 @@ public void ReconcileReferences_AllReferencesAreAdded() [Category("AddRemoveReferences")] public void ReconcileReferences_RemoveNotCalledOnBuiltIn() { - var registered = AddRemoveReferencesSetup.MockedReferencesList; + var registered = AddRemoveReferencesSetup.DummyReferencesList; var model = AddRemoveReferencesSetup.ArrangeParsedAddRemoveReferencesModel(registered, registered, registered, out var references, out _); - var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out _); + var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var vba = references.Object.First(lib => lib.Name.Equals("VBA")); var excel = references.Object.First(lib => lib.Name.Equals("Excel")); diff --git a/RubberduckTests/CodeExplorer/CodeExplorerTests.cs b/RubberduckTests/CodeExplorer/CodeExplorerTests.cs index 736347c0c2..bbf88842e2 100644 --- a/RubberduckTests/CodeExplorer/CodeExplorerTests.cs +++ b/RubberduckTests/CodeExplorer/CodeExplorerTests.cs @@ -1266,7 +1266,7 @@ protected class MockedCodeExplorer : IDisposable private readonly Mock> _windowSettingsProvider = new Mock>(); private readonly Mock _configLoader = new Mock(null, null, null, null, null, null, null, null); private readonly Mock _interaction = new Mock(); - private readonly Mock _browserFactory = new Mock(); + private readonly Mock _browserFactory = new Mock(); private MockedCodeExplorer() { diff --git a/RubberduckTests/Commands/ExportAllCommandTests.cs b/RubberduckTests/Commands/ExportAllCommandTests.cs index 7d07b5f4f4..d30a932332 100644 --- a/RubberduckTests/Commands/ExportAllCommandTests.cs +++ b/RubberduckTests/Commands/ExportAllCommandTests.cs @@ -29,7 +29,7 @@ public void ExportAllCommand_CanExecute_PassedNull_ExpectTrue() vbe.SetupGet(m => m.ActiveVBProject.VBComponents.Count).Returns(1); var mockFolderBrowser = new Mock(); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); var ExportAllCommand = new ExportAllCommand(vbe.Object, mockFolderBrowserFactory.Object); @@ -48,7 +48,7 @@ public void ExportAllCommand_CanExecute_PassedNull_NoComponents_ExpectFalse() vbe.SetupGet(m => m.ActiveVBProject.VBComponents.Count).Returns(0); var mockFolderBrowser = new Mock(); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); var ExportAllCommand = new ExportAllCommand(vbe.Object, mockFolderBrowserFactory.Object); @@ -68,7 +68,7 @@ public void ExportAllCommand_CanExecute_PassedIVBProject_ExpectTrue() project.SetupGet(m => m.VBComponents.Count).Returns(1); var mockFolderBrowser = new Mock(); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); var ExportAllCommand = new ExportAllCommand(vbe.Object, mockFolderBrowserFactory.Object); @@ -87,7 +87,7 @@ public void ExportAllCommand_CanExecute_PassedIVBProject_NoComponents_ExpectFals vbe.SetupGet(m => m.ActiveVBProject.VBComponents.Count).Returns(0); var mockFolderBrowser = new Mock(); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); var ExportAllCommand = new ExportAllCommand(vbe.Object, mockFolderBrowserFactory.Object); @@ -117,7 +117,7 @@ public void ExportAllCommand_Execute_PassedNull_SingleProject_ExpectExecution() mockFolderBrowser.Setup(m => m.SelectedPath).Returns(_path); mockFolderBrowser.Setup(m => m.ShowDialog()).Returns(DialogResult.OK); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); mockFolderBrowserFactory.Setup(m => m.CreateFolderBrowser(It.IsAny(), true, _projectPath)).Returns(mockFolderBrowser.Object); project.Setup(m => m.ExportSourceFiles(_path)); @@ -150,7 +150,7 @@ public void ExportAllCommand_Execute_PassedIVBProject_SingleProject_ExpectExecut mockFolderBrowser.Setup(m => m.SelectedPath).Returns(_path); mockFolderBrowser.Setup(m => m.ShowDialog()).Returns(DialogResult.OK); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); mockFolderBrowserFactory.Setup(m => m.CreateFolderBrowser(It.IsAny(), true, _projectPath)).Returns(mockFolderBrowser.Object); project.Setup(m => m.ExportSourceFiles(_path)); @@ -196,7 +196,7 @@ public void ExportAllCommand_Execute_PassedNull_MultipleProjects_ExpectExecution mockFolderBrowser.Setup(m => m.SelectedPath).Returns(_path); mockFolderBrowser.Setup(m => m.ShowDialog()).Returns(DialogResult.OK); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); mockFolderBrowserFactory.Setup(m => m.CreateFolderBrowser(It.IsAny(), true, _projectPath)).Returns(mockFolderBrowser.Object); project2.Setup(m => m.ExportSourceFiles(_path)); @@ -243,7 +243,7 @@ public void ExportAllCommand_Execute_PassedIVBProject_MultipleProjects_ExpectExe mockFolderBrowser.Setup(m => m.SelectedPath).Returns(_path); mockFolderBrowser.Setup(m => m.ShowDialog()).Returns(DialogResult.OK); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); mockFolderBrowserFactory.Setup(m => m.CreateFolderBrowser(It.IsAny(), true, _projectPath)).Returns(mockFolderBrowser.Object); project1.Setup(m => m.ExportSourceFiles(_path)); @@ -277,7 +277,7 @@ public void ExportAllCommand_Execute_PassedNull_SingleProject_BrowserCanceled_Ex mockFolderBrowser.Setup(m => m.SelectedPath).Returns(_path); mockFolderBrowser.Setup(m => m.ShowDialog()).Returns(DialogResult.Cancel); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); mockFolderBrowserFactory.Setup(m => m.CreateFolderBrowser(It.IsAny(), true, _projectPath)).Returns(mockFolderBrowser.Object); project.Setup(m => m.ExportSourceFiles(_path)); @@ -310,7 +310,7 @@ public void ExportAllCommand_Execute_PassedIVBProject_SingleProject_BrowserCance mockFolderBrowser.Setup(m => m.SelectedPath).Returns(_path); mockFolderBrowser.Setup(m => m.ShowDialog()).Returns(DialogResult.Cancel); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); mockFolderBrowserFactory.Setup(m => m.CreateFolderBrowser(It.IsAny(), true, _projectPath)).Returns(mockFolderBrowser.Object); project.Setup(m => m.ExportSourceFiles(_path)); @@ -356,7 +356,7 @@ public void ExportAllCommand_Execute_PassedNull_MultipleProjects_BrowserCanceled mockFolderBrowser.Setup(m => m.SelectedPath).Returns(_path); mockFolderBrowser.Setup(m => m.ShowDialog()).Returns(DialogResult.Cancel); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); mockFolderBrowserFactory.Setup(m => m.CreateFolderBrowser(It.IsAny(), true, _projectPath)).Returns(mockFolderBrowser.Object); project2.Setup(m => m.ExportSourceFiles(_path)); @@ -403,7 +403,7 @@ public void ExportAllCommand_Execute_PassedIVBProject_MultipleProjects_BrowserCa mockFolderBrowser.Setup(m => m.SelectedPath).Returns(_path); mockFolderBrowser.Setup(m => m.ShowDialog()).Returns(DialogResult.Cancel); - var mockFolderBrowserFactory = new Mock(); + var mockFolderBrowserFactory = new Mock(); mockFolderBrowserFactory.Setup(m => m.CreateFolderBrowser(It.IsAny(), true, _projectPath)).Returns(mockFolderBrowser.Object); project1.Setup(m => m.ExportSourceFiles(_path)); diff --git a/RubberduckTests/Settings/ReferenceSettingsTests.cs b/RubberduckTests/Settings/ReferenceSettingsTests.cs index 0656fd5839..71d920dc23 100644 --- a/RubberduckTests/Settings/ReferenceSettingsTests.cs +++ b/RubberduckTests/Settings/ReferenceSettingsTests.cs @@ -17,7 +17,7 @@ public class ReferenceSettingsTests { private static AddRemoveReferencesUserSettingsViewModel GetSettingsViewModel(ReferenceSettings settings) { - return new AddRemoveReferencesUserSettingsViewModel(AddRemoveReferencesSetup.GetReferenceSettingsProvider(settings), new Mock().Object); + return new AddRemoveReferencesUserSettingsViewModel(AddRemoveReferencesSetup.GetReferenceSettingsProvider(settings), new Mock().Object); } [Test] @@ -260,7 +260,7 @@ public void UpdateConfig_CallsSave() { var clean = AddRemoveReferencesSetup.GetDefaultReferenceSettings(); var provider = AddRemoveReferencesSetup.GetMockReferenceSettingsProvider(clean); - var viewModel = new AddRemoveReferencesUserSettingsViewModel(provider.Object, new Mock().Object); + var viewModel = new AddRemoveReferencesUserSettingsViewModel(provider.Object, new Mock().Object); viewModel.UpdateConfig(null); provider.Verify(m => m.Save(It.IsAny()), Times.Once); @@ -272,7 +272,7 @@ public void UpdateConfig_UsesLoadedSettingsInstance() { var clean = AddRemoveReferencesSetup.GetDefaultReferenceSettings(); var provider = AddRemoveReferencesSetup.GetMockReferenceSettingsProvider(clean); - var viewModel = new AddRemoveReferencesUserSettingsViewModel(provider.Object, new Mock().Object); + var viewModel = new AddRemoveReferencesUserSettingsViewModel(provider.Object, new Mock().Object); viewModel.UpdateConfig(null); provider.Verify(m => m.Save(clean), Times.Once);