public bool AddUserForm_CanExecuteBasedOnProjectType(ProjectType projectType) { using (var explorer = new MockedCodeExplorer(projectType).ImplementAddUserFormCommand().SelectFirstModule()) { return(explorer.ViewModel.AddUserFormCommand.CanExecute(explorer.ViewModel.SelectedItem)); } }
public void AddedModuleIsAtCorrectDepth_DefaultNode() { const string inputCode = @"'@Folder(""First.Second.Third"") Sub Foo() Dim d As Boolean d = True End Sub"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.StandardModule }, new[] { inputCode }) .SelectFirstProject()) { var project = (CodeExplorerProjectViewModel)explorer.ViewModel.SelectedItem; var folder = project.Children.OfType <CodeExplorerCustomFolderViewModel>().First(node => node.Name.Equals(project.Declaration.IdentifierName)); var declarations = project.State.AllUserDeclarations.ToList(); declarations.Add(GetNewClassDeclaration(project.Declaration, "Foo")); project.Synchronize(ref declarations); var added = folder.Children.OfType <CodeExplorerComponentViewModel>().Single(); Assert.AreEqual(DeclarationType.ClassModule, added.Declaration.DeclarationType); Assert.AreEqual(project.Declaration.IdentifierName, added.Declaration.CustomFolder); } }
public void AddTestModuleWithStubs_DisabledWhenParameterIsFolder() { using (var explorer = new MockedCodeExplorer(ProjectType.HostProject).ImplementAddTestModuleWithStubsCommand().SelectFirstCustomFolder()) { Assert.IsFalse(explorer.ViewModel.AddTestModuleWithStubsCommand.CanExecute(explorer.ViewModel.SelectedItem)); } }
public void IndentProject_IndentsModulesWithoutNoIndentAnnotation() { const string inputCode1 = @"Sub Foo() Dim d As Boolean d = True End Sub"; const string inputCode2 = @"'@NoIndent Sub Foo() Dim d As Boolean d = True End Sub"; const string expectedCode = @"Sub Foo() Dim d As Boolean d = True End Sub "; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.StandardModule, ComponentType.ClassModule }, new[] { inputCode1, inputCode2 }) .SelectFirstProject()) { var module1 = explorer.VbComponents.Object[0].CodeModule; var module2 = explorer.VbComponents.Object[1].CodeModule; explorer.ExecuteIndenterCommand(); Assert.AreEqual(expectedCode, module1.Content()); Assert.AreEqual(inputCode2, module2.Content()); } }
public void IndentFolder() { const string inputCode = @"'@Folder ""folder"" Sub Foo() Dim d As Boolean d = True End Sub"; const string expectedCode = @"'@Folder ""folder"" Sub Foo() Dim d As Boolean d = True End Sub "; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.StandardModule, ComponentType.ClassModule }, new[] { inputCode, inputCode }) .SelectFirstCustomFolder()) { var module1 = explorer.VbComponents.Object[0].CodeModule; var module2 = explorer.VbComponents.Object[1].CodeModule; explorer.ExecuteIndenterCommand(); Assert.AreEqual(expectedCode, module1.Content()); Assert.AreEqual(expectedCode, module2.Content()); } }
public void AddedModuleIsAtCorrectDepth_FirstAnnotation() { const string inputCode = @"'@Folder(""First.Second.Third"") Sub Foo() Dim d As Boolean d = True End Sub"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.StandardModule }, new[] { inputCode }) .SelectFirstCustomFolder()) { var project = explorer.ViewModel.Projects.OfType <CodeExplorerProjectViewModel>().First(); var folder = (CodeExplorerCustomFolderViewModel)explorer.ViewModel.SelectedItem; var declarations = project.State.AllUserDeclarations.ToList(); var annotation = new FolderAnnotation(new QualifiedSelection(project.Declaration.QualifiedModuleName, new Selection(1, 1)), null, new[] { "\"First\"" }); var predeclared = new PredeclaredIdAnnotation(new QualifiedSelection(project.Declaration.QualifiedModuleName, new Selection(2, 1)), null, Enumerable.Empty <string>()); declarations.Add(GetNewClassDeclaration(project.Declaration, "Foo", new IAnnotation [] { annotation, predeclared })); project.Synchronize(ref declarations); var added = folder.Children.OfType <CodeExplorerComponentViewModel>().Single(); Assert.AreEqual(DeclarationType.ClassModule, added.Declaration.DeclarationType); Assert.AreEqual("\"First\"", added.Declaration.CustomFolder); } }
public void AddMDIForm_CannotExecuteIfProjectAlreadyHasMDIForm() { using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, ComponentType.MDIForm).ImplementAddMdiFormCommand().SelectFirstModule()) { Assert.IsFalse(explorer.ViewModel.AddMDIFormCommand.CanExecute(explorer.ViewModel.SelectedItem)); } }
public void AddedModuleIsAtCorrectDepth_FirstAnnotation() { const string inputCode = @"'@Folder(""First.Second.Third"") Sub Foo() Dim d As Boolean d = True End Sub"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.StandardModule }, new[] { inputCode }) .SelectFirstCustomFolder()) { var project = explorer.ViewModel.Projects.OfType <CodeExplorerProjectViewModel>().First(); var folder = (CodeExplorerCustomFolderViewModel)explorer.ViewModel.SelectedItem; var declarations = project.State.AllUserDeclarations.ToList(); var mockedAnnotation = new Mock <IParseTreeAnnotation>(); mockedAnnotation.Setup(m => m.Annotation).Returns(new FolderAnnotation()); mockedAnnotation.Setup(m => m.QualifiedSelection).Returns(new QualifiedSelection(project.Declaration.QualifiedModuleName, new Selection(1, 1))); // returns unquoted argument because the FolderAnnotation's argument processing is never invoked in the mock mockedAnnotation.Setup(m => m.AnnotationArguments).Returns(new[] { "First" }.ToList()); var annotation = mockedAnnotation.Object; var predeclared = new ParseTreeAnnotation(new PredeclaredIdAnnotation(), new QualifiedSelection(project.Declaration.QualifiedModuleName, new Selection(2, 1)), (VBAParser.AnnotationContext)null); declarations.Add(GetNewClassDeclaration(project.Declaration, "Foo", new IParseTreeAnnotation[] { annotation, predeclared })); project.Synchronize(ref declarations); var added = folder.Children.OfType <CodeExplorerComponentViewModel>().Single(); Assert.AreEqual(DeclarationType.ClassModule, added.Declaration.DeclarationType); Assert.AreEqual("First", added.Declaration.CustomFolder); } }
public void AddTestModuleWithStubs() { using (var explorer = new MockedCodeExplorer(ProjectType.HostProject).SelectFirstModule()) { explorer.ExecuteAddTestModuleWithStubsCommand(); explorer.VbComponents.Verify(c => c.Add(ComponentType.StandardModule), Times.Once); } }
public void AddUserForm() { using (var explorer = new MockedCodeExplorer(ProjectType.HostProject).SelectFirstModule()) { explorer.ExecuteAddUserFormCommand(); explorer.VbComponents.Verify(c => c.Add(ComponentType.UserForm), Times.Once); } }
public void AddTestModuleWithStubs_DisabledWhenParameterIsModuleMember() { using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, ComponentType.StandardModule, @"Private Sub Foo(): End Sub") .ImplementAddTestModuleWithStubsCommand() .SelectFirstMember()) { Assert.IsFalse(explorer.ViewModel.AddTestModuleWithStubsCommand.CanExecute(explorer.ViewModel.SelectedItem)); } }
public void OpenDesigner() { using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.UserForm }) .SelectFirstModule()) { explorer.ExecuteOpenDesignerCommand(); explorer.VbComponent.Verify(c => c.DesignerWindow(), Times.Once); Assert.IsTrue(explorer.VbComponent.Object.DesignerWindow().IsVisible); } }
public void ExportProject_TestCanExecute_ExpectTrue() { const string selected = @"C:\Users\Rubberduck\Desktop\ExportAll"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject) .ImplementExportAllCommand() .ConfigureFolderBrowser(selected, DialogResult.OK) .SelectFirstProject()) { Assert.IsTrue(explorer.ViewModel.ExportAllCommand.CanExecute(explorer.ViewModel.SelectedItem)); } }
public void ExportModule_CancelPressed_ExpectNoExecution() { const string path = @"C:\Users\Rubberduck\Desktop\StdModule1.bas"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject) .ConfigureSaveDialog(path, DialogResult.Cancel) .SelectFirstModule()) { explorer.ExecuteExportCommand(); explorer.VbComponent.Verify(c => c.Export(path), Times.Never); } }
public void ImportModule_Cancel() { const string path = @"C:\Users\Rubberduck\Desktop\StdModule1.bas"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject) .ConfigureOpenDialog(new[] { path }, DialogResult.Cancel) .SelectFirstProject()) { explorer.ExecuteImportCommand(); explorer.VbComponents.Verify(c => c.Import(path), Times.Never); } }
public void RemoveModule_Cancel() { using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.UserForm }) .ConfigureMessageBox(ConfirmationOutcome.Cancel) .SelectFirstModule()) { var removing = explorer.ViewModel.SelectedItem; var component = explorer.VbComponent.Object; explorer.ViewModel.RemoveCommand.Execute(removing); explorer.VbComponents.Verify(c => c.Remove(component), Times.Never); } }
public void ImportMultipleModules() { const string path1 = @"C:\Users\Rubberduck\Desktop\StdModule1.bas"; const string path2 = @"C:\Users\Rubberduck\Desktop\ClsModule1.bas"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject) .ConfigureOpenDialog(new[] { path1, path2 }, DialogResult.OK) .SelectFirstProject()) { explorer.ExecuteImportCommand(); explorer.VbComponents.Verify(c => c.Import(path1), Times.Once); explorer.VbComponents.Verify(c => c.Import(path2), Times.Once); } }
public void CompareByType_ReturnsClassModuleBelowDocument() { using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.ClassModule, ComponentType.Document }) .SelectFirstCustomFolder()) { var folder = explorer.ViewModel.SelectedItem; var clsNode = folder.Children.Single(s => s.Name == "ClassModule0"); var docNode = folder.Children.Single(s => s.Name == "Document1"); // this tests the logic I wrote to place docs above cls modules even though the parser calls them both cls modules Assert.AreEqual(-1, new CompareByDeclarationType().Compare(docNode, clsNode)); } }
public void ExpandAllNodes() { const string inputCode = @"Sub Foo() End Sub"; using (var explorer = new MockedCodeExplorer(inputCode) .SelectFirstProject()) { var node = explorer.ViewModel.SelectedItem; explorer.ViewModel.ExpandAllSubnodesCommand.Execute(node); Assert.IsTrue(GetNodeExpandedStates(node).All(state => state)); } }
public void RemoveCommand_RemovesModuleWhenPromptOk() { const string path = @"C:\Users\Rubberduck\Desktop\StdModule1.bas"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject) .ConfigureMessageBox(ConfirmationOutcome.Yes) .ConfigureSaveDialog(path, DialogResult.OK) .SelectFirstModule()) { var removing = explorer.ViewModel.SelectedItem; var component = explorer.VbComponent.Object; explorer.ViewModel.RemoveCommand.Execute(removing); explorer.VbComponents.Verify(c => c.Remove(component), Times.Once); } }
public void CompareByType_ReturnsEventAboveConst() { const string inputCode = @"Public Event Foo(ByVal arg1 As Integer, ByVal arg2 As String) Public Const Bar = 0"; using (var explorer = new MockedCodeExplorer(inputCode) .SelectFirstModule()) { var module = explorer.ViewModel.SelectedItem; var eventNode = module.Children.Single(s => s.Name == "Foo"); var constNode = module.Children.Single(s => s.Name == "Bar"); Assert.AreEqual(-1, new CompareByDeclarationType().Compare(eventNode, constNode)); } }
public void CompareByType_ReturnsConstAboveField() { const string inputCode = @"Public Const Foo = 0 Public Bar As Boolean"; using (var explorer = new MockedCodeExplorer(inputCode) .SelectFirstModule()) { var module = explorer.ViewModel.SelectedItem; var constNode = module.Children.Single(s => s.Name == "Foo"); var fieldNode = module.Children.Single(s => s.Name == "Bar"); Assert.AreEqual(-1, new CompareByDeclarationType().Compare(constNode, fieldNode)); } }
public void IndentProject_DisabledWhenAllModulesHaveNoIndentAnnotation() { const string inputCode = @"'@NoIndent Sub Foo() Dim d As Boolean d = True End Sub"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.StandardModule, ComponentType.ClassModule }, new[] { inputCode, inputCode }) .ImplementIndenterCommand() .SelectFirstProject()) { Assert.IsFalse(explorer.ViewModel.IndenterCommand.CanExecute(explorer.ViewModel.SelectedItem)); } }
public void RemoveCommand_CancelsWhenFilePromptCancels() { const string path = @"C:\Users\Rubberduck\Desktop\StdModule1.bas"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject) .ConfigureSaveDialog(path, DialogResult.Cancel) .SelectFirstModule()) { explorer.MessageBox.Setup(m => m.ConfirmYesNo(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>())).Returns(true); var removing = explorer.ViewModel.SelectedItem; var component = explorer.VbComponent.Object; explorer.ViewModel.RemoveCommand.Execute(removing); explorer.VbComponents.Verify(c => c.Remove(component), Times.Never); } }
public void IndentModule_DisabledWithNoIndentAnnotation() { const string inputCode = @"'@NoIndent Sub Foo() Dim d As Boolean d = True End Sub"; using (var explorer = new MockedCodeExplorer(inputCode) .ImplementIndenterCommand() .SelectFirstModule()) { Assert.IsFalse(explorer.ViewModel.IndenterCommand.CanExecute(explorer.ViewModel.SelectedItem)); } }
public void FoldersNamesAreCaseSensitive() { string[] folders = new[] { "foo", "Foo" }; var modules = folders.Select(folder => $@"'@Folder(""{folder}"")").ToArray(); var components = folders.Select(_ => ComponentType.StandardModule).ToArray(); using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, components, modules) .SelectFirstProject()) { var project = explorer.ViewModel.SelectedItem; Assert.AreEqual(3, project.Children.Count); } }
public void DefaultProjectFolderIsCreated() { const string inputCode = @"Sub Foo() Dim d As Boolean d = True End Sub"; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, ComponentType.StandardModule, inputCode) .SelectFirstProject()) { var project = explorer.ViewModel.SelectedItem; var folder = project.Children.OfType <CodeExplorerCustomFolderViewModel>().Single(); Assert.NotNull(folder); Assert.AreEqual(project.Declaration.IdentifierName, folder.Name); } }
public void CollapseAllNodes_StartingWithSubNode() { const string foo = @"'@Folder ""Foo"""; const string bar = @"'@Folder ""Bar"""; using (var explorer = new MockedCodeExplorer(ProjectType.HostProject, new[] { ComponentType.StandardModule, ComponentType.ClassModule }, new[] { foo, bar }) .SelectFirstProject()) { explorer.ViewModel.ExpandAllSubnodesCommand.Execute(explorer.ViewModel.SelectedItem); var expanded = explorer.ViewModel.Projects.Single().Children.Last(); explorer.SelectFirstCustomFolder(); var collapsed = explorer.ViewModel.SelectedItem; explorer.ViewModel.CollapseAllSubnodesCommand.Execute(collapsed); Assert.IsTrue(GetNodeExpandedStates(expanded).All(state => state)); Assert.IsFalse(GetNodeExpandedStates(collapsed).All(state => state)); } }
public void CompareByType_ReturnsFieldAbovePropertyGet() { const string inputCode = @"Private Bar As Boolean Public Property Get Foo() As Variant End Property "; using (var explorer = new MockedCodeExplorer(inputCode) .SelectFirstModule()) { var module = explorer.ViewModel.SelectedItem; var fieldNode = module.Children.Single(s => s.Name == "Bar"); var propertyGetNode = module.Children.Single(s => s.Name == "Foo (Get)"); Assert.AreEqual(-1, new CompareByDeclarationType().Compare(fieldNode, propertyGetNode)); } }
public void CompareByNodeType_ReturnsZeroForIdenticalNodes() { const string inputCode = @"Sub Foo() End Sub Sub Bar() Foo End Sub"; using (var explorer = new MockedCodeExplorer(inputCode) .SelectFirstModule()) { var module = explorer.ViewModel.SelectedItem; var node = module.Children.Single(s => s.Name == "Foo"); Assert.AreEqual(0, new CompareByNodeType().Compare(node, node)); } }