diff --git a/RubberduckTests/CodeExplorer/CodeExplorerFolderTests.cs b/RubberduckTests/CodeExplorer/CodeExplorerFolderTests.cs index 30feb46057..c5fafd1a04 100644 --- a/RubberduckTests/CodeExplorer/CodeExplorerFolderTests.cs +++ b/RubberduckTests/CodeExplorer/CodeExplorerFolderTests.cs @@ -6,6 +6,7 @@ using Rubberduck.VBEditor.SafeComWrappers; using Rubberduck.VBEditor.Utility; using System; +using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; @@ -89,6 +90,70 @@ Sub Foo() } } + [Category("Code Explorer")] + [Test] + 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().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()); + + declarations.Add(GetNewClassDeclaration(project.Declaration, "Foo", new IAnnotation [] { annotation, predeclared })); + + project.Synchronize(declarations); + var added = folder.Children.OfType().Single(); + + Assert.AreEqual(DeclarationType.ClassModule, added.Declaration.DeclarationType); + Assert.AreEqual("\"First\"", added.Declaration.CustomFolder); + } + } + + [Category("Code Explorer")] + [Test] + public void AddedModuleIsAtCorrectDepth_NotFirstAnnotation() + { + 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().First(); + var folder = (CodeExplorerCustomFolderViewModel)explorer.ViewModel.SelectedItem; + var declarations = project.State.AllUserDeclarations.ToList(); + + var annotation = new FolderAnnotation(new QualifiedSelection(project.Declaration.QualifiedModuleName, new Selection(2, 1)), null, new[] { "\"First\"" }); + var predeclared = new PredeclaredIdAnnotation(new QualifiedSelection(project.Declaration.QualifiedModuleName, new Selection(1, 1)), null, Enumerable.Empty()); + + declarations.Add(GetNewClassDeclaration(project.Declaration, "Foo", new IAnnotation[] { predeclared, annotation })); + + project.Synchronize(declarations); + var added = folder.Children.OfType().Single(); + + Assert.AreEqual(DeclarationType.ClassModule, added.Declaration.DeclarationType); + Assert.AreEqual("\"First\"", added.Declaration.CustomFolder); + } + } + [Category("Code Explorer")] [Test] public void AddedModuleIsAtCorrectDepth_RootNode() @@ -298,6 +363,11 @@ private static Declaration GetNewClassDeclaration(Declaration project, string na ? Enumerable.Empty() : new[] { new FolderAnnotation(new QualifiedSelection(project.QualifiedModuleName, new Selection(1, 1)), null, new[] { folder }) }; + return GetNewClassDeclaration(project, name, annotations); + } + + private static Declaration GetNewClassDeclaration(Declaration project, string name, IEnumerable annotations) + { var declaration = new ClassModuleDeclaration(new QualifiedMemberName(project.QualifiedModuleName, name), project, name, true, annotations, new Attributes());