Пример #1
0
 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);
            }
        }
Пример #3
0
 public void AddTestModuleWithStubs_DisabledWhenParameterIsFolder()
 {
     using (var explorer = new MockedCodeExplorer(ProjectType.HostProject).ImplementAddTestModuleWithStubsCommand().SelectFirstCustomFolder())
     {
         Assert.IsFalse(explorer.ViewModel.AddTestModuleWithStubsCommand.CanExecute(explorer.ViewModel.SelectedItem));
     }
 }
Пример #4
0
        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());
            }
        }
Пример #5
0
        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);
            }
        }
Пример #7
0
 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);
            }
        }
Пример #9
0
 public void AddTestModuleWithStubs()
 {
     using (var explorer = new MockedCodeExplorer(ProjectType.HostProject).SelectFirstModule())
     {
         explorer.ExecuteAddTestModuleWithStubsCommand();
         explorer.VbComponents.Verify(c => c.Add(ComponentType.StandardModule), Times.Once);
     }
 }
Пример #10
0
 public void AddUserForm()
 {
     using (var explorer = new MockedCodeExplorer(ProjectType.HostProject).SelectFirstModule())
     {
         explorer.ExecuteAddUserFormCommand();
         explorer.VbComponents.Verify(c => c.Add(ComponentType.UserForm), Times.Once);
     }
 }
Пример #11
0
 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));
     }
 }
Пример #12
0
 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);
     }
 }
Пример #13
0
        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));
            }
        }
Пример #14
0
        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);
            }
        }
Пример #15
0
        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);
            }
        }
Пример #16
0
        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);
            }
        }
Пример #17
0
        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));
            }
        }
Пример #19
0
        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));
            }
        }
Пример #20
0
        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));
            }
        }
Пример #23
0
        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));
            }
        }
Пример #24
0
        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);
            }
        }
Пример #25
0
        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);
            }
        }
Пример #28
0
        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));
            }
        }