Beispiel #1
0
        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)));
        }
Beispiel #2
0
        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)));
        }
Beispiel #3
0
        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)));
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        public void GetLibraryInfoFromPath_NoExtensionReturnsNull()
        {
            const string path = @"C:\Users\Rubberduck\Documents\Book1";

            var reconciler = AddRemoveReferencesSetup.ArrangeReferenceReconciler();
            var model      = reconciler.GetLibraryInfoFromPath(path);

            Assert.IsNull(model);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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));
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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));
        }
Beispiel #17
0
        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));
        }
Beispiel #18
0
        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);
        }
Beispiel #19
0
        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);
        }
Beispiel #20
0
        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);
        }
Beispiel #21
0
        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);
        }
Beispiel #22
0
        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);
        }
Beispiel #23
0
        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);
        }
Beispiel #24
0
        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));
        }
Beispiel #25
0
        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));
        }
Beispiel #26
0
        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);
        }
Beispiel #27
0
        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);
        }
Beispiel #28
0
        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);
        }
Beispiel #29
0
        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);
        }
Beispiel #30
0
        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));
        }