public void UpdateSettings_AddsPinnedLibraries() { var settings = AddRemoveReferencesSetup.GetDefaultReferenceSettings(); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings); var input = settings.GetPinnedReferencesForHost(null).Select(info => new ReferenceModel(info, ReferenceKind.TypeLibrary) { IsPinned = true }).ToList(); var output = input.Union(AddRemoveReferencesSetup.LibraryReferenceInfoList.Select(info => new ReferenceModel(info, ReferenceKind.TypeLibrary) { IsPinned = true })).ToList(); var model = AddRemoveReferencesSetup.ArrangeAddRemoveReferencesModel(output, null, settings); reconciler.UpdateSettings(model.Object); var actual = settings.GetPinnedReferencesForHost(null); var expected = output.Select(reference => reference.ToReferenceInfo()).ToList(); Assert.AreEqual(expected.Count, actual.Count); Assert.IsTrue(expected.All(info => actual.Contains(info))); }
public void UpdateSettings_UpdatesRecentLibrariesBasedOnFlag(bool updating) { var settings = AddRemoveReferencesSetup.GetNonDefaultReferenceSettings(); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings); var input = settings.GetRecentReferencesForHost(null).Select(info => new ReferenceModel(info, ReferenceKind.TypeLibrary) { IsRecent = true }).ToList(); var added = new ReferenceInfo(AddRemoveReferencesSetup.DummyGuidOne, "Reference", @"C:\Windows\System32\reference.dll", 1, 0); var output = input.Union(new [] { new ReferenceModel(added, ReferenceKind.TypeLibrary) { IsReferenced = true } }).ToList(); var model = AddRemoveReferencesSetup.ArrangeAddRemoveReferencesModel(output, null, settings); reconciler.UpdateSettings(model.Object, updating); var actual = settings.GetRecentReferencesForHost(null); var expected = (updating ? output : input).Select(reference => reference.ToReferenceInfo()).ToList(); Assert.AreEqual(expected.Count, actual.Count); Assert.IsTrue(expected.All(info => actual.Contains(info))); }
public void UpdateSettings_UpdatesRecentProjectsBasedOnFlag(bool updating) { var settings = AddRemoveReferencesSetup.GetNonDefaultReferenceSettings(); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings); var input = settings.GetRecentReferencesForHost("EXCEL.EXE").Select(info => new ReferenceModel(info, ReferenceKind.Project) { IsRecent = true }).ToList(); var added = DummyReferenceInfo; var output = input.Union(new[] { new ReferenceModel(added, ReferenceKind.TypeLibrary) { IsReferenced = true } }).ToList(); var model = AddRemoveReferencesSetup.ArrangeAddRemoveReferencesModel(output, null, settings); reconciler.UpdateSettings(model.Object, updating); var actual = settings.GetRecentReferencesForHost("EXCEL.EXE"); var expected = (updating ? output : input).Select(reference => reference.ToReferenceInfo()).ToList(); Assert.AreEqual(updating ? expected.Count : input.Count, actual.Count); Assert.IsTrue(expected.All(info => actual.Contains(info))); }
public void ReconcileReferencesOverload_ReturnsEmptyWithoutNewReferences() { var model = AddRemoveReferencesSetup.ArrangeParsedAddRemoveReferencesModel(null, null, null, out _, out _); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var output = reconciler.ReconcileReferences(model.Object, null); Assert.IsEmpty(output); }
public void GetLibraryInfoFromPath_NoExtensionReturnsNull() { const string path = @"C:\Users\Rubberduck\Documents\Book1"; var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var model = reconciler.GetLibraryInfoFromPath(path); Assert.IsNull(model); }
public void ReconcileReferences_ReturnsEmptyWithoutNewReferences() { var model = AddRemoveReferencesSetup.ArrangeParsedAddRemoveReferencesModel(null, null, null, out _, out _, out var projectsProvider); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(projectsProvider); var output = reconciler.ReconcileReferences(model.Object); Assert.IsEmpty(output); }
public void GetLibraryInfoFromPath_HandlesProjects() { const string path = @"C:\Users\Rubberduck\Documents\Book1.xlsm"; var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var model = reconciler.GetLibraryInfoFromPath(path); Assert.AreEqual(path, model.FullPath); Assert.IsFalse(model.IsBroken); }
public void TryAddReferenceReferenceModel_ReturnedReferenceIsLastPriority() { var input = new ReferenceModel(DummyReferenceInfo, 0); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _).Object; var priority = reconciler.TryAddReference(project.Object, input).Priority; Assert.IsTrue(priority > 0); }
public void GetLibraryInfoFromPath_LoadLibraryCalledOnTypeExtensions(string extension) { var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out var provider); var path = $@"C:\Windows\System32\library{extension}"; AddRemoveReferencesSetup.SetupIComLibraryProvider(provider, new ReferenceInfo(Guid.Empty, "Library", path, 1, 1), path, "Library 1.1"); reconciler.GetLibraryInfoFromPath(path); provider.Verify(m => m.LoadTypeLibrary(It.IsAny <string>()), Times.Once); }
public void GetLibraryInfoFromPath_ProjectsDoNotCallLoadLibrary() { const string path = @"C:\Users\Rubberduck\Documents\Book1.xlsm"; var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out var provider); reconciler.GetLibraryInfoFromPath(path); provider.Verify(m => m.LoadTypeLibrary(It.IsAny <string>()), Times.Never); }
public void GetLibraryInfoFromPath_GivesBrokenReferenceOnThrow() { const string path = @"C:\Windows\System32\bad.dll"; var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out _, out var provider); provider.Setup(m => m.LoadTypeLibrary(path)).Throws(new COMException()); var model = reconciler.GetLibraryInfoFromPath(path); Assert.IsTrue(model.IsBroken); }
public void TryAddReferenceString_CallsAddFromFile() { const string file = @"C:\Windows\System32\reference.dll"; var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); reconciler.TryAddReference(project.Object, file); references.Verify(m => m.AddFromFile(file), Times.Once); }
public void ViewModelRemoveCommand_RemovedReferenceIsNotInProject() { var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); var removing = viewModel.ProjectReferences.OfType <ReferenceModel>().First(reference => !reference.IsBuiltIn); viewModel.SelectedReference = removing; viewModel.RemoveCommand.Execute(null); Assert.IsFalse(viewModel.ProjectReferences.OfType <ReferenceModel>().Contains(removing)); }
public void TryAddReferenceReferenceModel_ReturnedReferenceIsRecent() { var input = new ReferenceModel(DummyReferenceInfo, 0); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); var model = reconciler.TryAddReference(project.Object, input); Assert.IsTrue(model.IsRecent); }
public void ViewModelRemoveCommand_ClearsPriority() { var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); var removing = viewModel.ProjectReferences.OfType <ReferenceModel>().First(reference => !reference.IsBuiltIn); viewModel.SelectedReference = removing; viewModel.RemoveCommand.Execute(null); Assert.IsNull(removing.Priority); }
public void ViewModelRemoveCommand_RemovedReferenceIsNowAvailable() { var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); var removing = viewModel.ProjectReferences.OfType <ReferenceModel>().First(reference => !reference.IsBuiltIn); viewModel.SelectedFilter = ReferenceFilter.ComTypes.ToString(); viewModel.SelectedReference = removing; viewModel.RemoveCommand.Execute(null); Assert.IsTrue(viewModel.AvailableReferences.OfType <ReferenceModel>().Contains(removing)); }
public void ViewModelAddCommand_AddedReferenceIsNotAvailable() { var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); var adding = viewModel.AvailableReferences.OfType <ReferenceModel>().First(); viewModel.SelectedFilter = ReferenceFilter.ComTypes.ToString(); viewModel.SelectedLibrary = adding; viewModel.AddCommand.Execute(null); Assert.IsFalse(viewModel.AvailableReferences.OfType <ReferenceModel>().Contains(adding)); }
public void ReconcileReferences_RemoveNotCalledOnBuiltIn() { var registered = AddRemoveReferencesSetup.DummyReferencesList; var model = AddRemoveReferencesSetup.ArrangeParsedAddRemoveReferencesModel(registered, registered, registered, out var references, 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")); reconciler.ReconcileReferences(model.Object, registered); references.Verify(m => m.Remove(vba), Times.Never); references.Verify(m => m.Remove(excel), Times.Never); }
public void TryAddReferenceString_ReturnsNullOnThrow() { const string file = @"C:\Windows\System32\reference.dll"; var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); references.Setup(m => m.AddFromFile(file)).Throws(new COMException()); var model = reconciler.TryAddReference(project.Object, file); Assert.IsNull(model); }
public void TryAddReferenceReferenceModel_ReturnsNullOnThrow() { var input = new ReferenceModel(DummyReferenceInfo, 0); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); references.Setup(m => m.AddFromFile(input.FullPath)).Throws(new COMException()); var model = reconciler.TryAddReference(project.Object, input); Assert.IsNull(model); }
public void ViewModelPinReferenceCommand_TogglesReferencePin(bool starting, bool ending) { var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); var pinning = viewModel.ProjectReferences.OfType <ReferenceModel>().First(); pinning.IsPinned = starting; viewModel.SelectedReference = pinning; viewModel.PinReferenceCommand.Execute(null); Assert.AreEqual(ending, pinning.IsPinned); }
public void ViewModelMoveUpCommand_DoesNotMoveBeforeLocked() { var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); var referenced = viewModel.ProjectReferences.OfType <ReferenceModel>().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); }
public void ViewModelMoveDownCommand_DoesNotMoveLastReference() { var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); var referenced = viewModel.ProjectReferences.OfType <ReferenceModel>().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); }
public void TryAddReferenceString_DisplaysMessageOnThrow() { const string file = @"C:\Windows\System32\reference.dll"; const string exception = "Don't mock me."; var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out var messageBox, out _); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); references.Setup(m => m.AddFromFile(file)).Throws(new COMException(exception)); reconciler.TryAddReference(project.Object, file); messageBox.Verify(m => m.NotifyWarn(exception, RubberduckUI.References_AddFailedCaption)); }
public void TryAddReferenceReferenceModel_DisplaysMessageOnThrow() { var input = new ReferenceModel(DummyReferenceInfo, 0); const string exception = "Don't mock me."; var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(null, out var messageBox, out _); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out _); references.Setup(m => m.AddFromFile(input.FullPath)).Throws(new COMException(exception)); reconciler.TryAddReference(project.Object, input); messageBox.Verify(m => m.NotifyWarn(exception, RubberduckUI.References_AddFailedCaption)); }
public void ViewModelAddCommand_AddedReferenceIsLast() { var viewModel = AddRemoveReferencesSetup.ArrangeViewModel(); var adding = viewModel.AvailableReferences.OfType <ReferenceModel>().First(); viewModel.SelectedFilter = ReferenceFilter.ComTypes.ToString(); viewModel.SelectedLibrary = adding; viewModel.AddCommand.Execute(null); var expected = viewModel.ProjectReferences.OfType <ReferenceModel>().Count(); Assert.AreEqual(expected, adding.Priority); }
public void TryAddReferenceString_ReturnedReferenceIsRecent() { const string file = @"C:\Windows\System32\reference.dll"; var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var references = AddRemoveReferencesSetup.GetReferencesMock(out var project, out var builder); var returned = builder.CreateReferenceMock("Reference", file, 1, 1, false).Object; references.Setup(m => m.AddFromFile(file)).Returns(returned); var model = reconciler.TryAddReference(project.Object, file); Assert.IsTrue(model.IsRecent); }
public void ViewModelFilters_SearchInputFiltersList(string input, int expected) { var declaration = AddRemoveReferencesSetup.ArrangeMocksAndGetProject(); var settings = AddRemoveReferencesSetup.GetNonDefaultReferenceSettings(); var model = new AddRemoveReferencesModel(null, declaration, SearchReferencesList, settings); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(settings); var viewModel = new AddRemoveReferencesViewModel(model, reconciler, new Mock <IFileSystemBrowserFactory>().Object, null); viewModel.SelectedFilter = ReferenceFilter.ComTypes.ToString(); viewModel.Search = input; var actual = viewModel.AvailableReferences.OfType <ReferenceModel>().Count(); Assert.AreEqual(expected, actual); }
public void ReconcileReferences_UpdatesSettingsPinned() { var newReferences = AddRemoveReferencesSetup.LibraryReferenceInfoList .Select(reference => new ReferenceModel(reference, ReferenceKind.TypeLibrary)).ToList(); var model = AddRemoveReferencesSetup.ArrangeParsedAddRemoveReferencesModel(null, newReferences, null, out _, out _); var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler(); var pinned = newReferences.First(); pinned.IsPinned = true; reconciler.ReconcileReferences(model.Object, newReferences); var result = model.Object.Settings.GetPinnedReferencesForHost(null).Exists(info => pinned.Matches(info)); Assert.IsTrue(result); }
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 <ReferenceModel>().Last(); Assert.IsTrue(expected.FullPath.Equals(path)); }