From 79307ebd003ef5c28df32827bf34c52e1fdb5688 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Fri, 25 May 2012 22:09:37 +0100 Subject: [PATCH] Switch to using IProjectContent.GetNamespaceContents in EnvDTE.CodeModel to simplify the implementation. --- .../Project/PackageManagement.csproj | 4 +- .../Project/Src/EnvDTE/ChildCodeNamespaces.cs | 54 --------- .../Src/EnvDTE/CodeElementsInNamespace.cs | 75 ++++++++++++ .../Project/Src/EnvDTE/CodeModel.cs | 4 +- .../Project/Src/EnvDTE/CodeNamespace.cs | 16 +-- .../Src/EnvDTE/CodeNamespaceMembers.cs | 50 -------- .../Project/Src/EnvDTE/NamespaceName.cs | 46 +++---- .../Project/Src/EnvDTE/ProjectCodeElements.cs | 53 -------- .../Test/PackageManagement.Tests.csproj | 2 + .../EnvDTE/CodeElementsInNamespaceTests.cs | 114 ++++++++++++++++++ .../Test/Src/EnvDTE/CodeModelTests.cs | 35 ++---- .../Test/Src/EnvDTE/CodeNamespaceTests.cs | 31 +---- .../Test/Src/EnvDTE/NamespaceNameTests.cs | 40 ++++++ .../Test/Src/Helpers/ProjectContentHelper.cs | 28 +++-- 14 files changed, 291 insertions(+), 261 deletions(-) delete mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildCodeNamespaces.cs create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs delete mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespaceMembers.cs delete mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectCodeElements.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index 15ae943328..2dce48c12c 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -74,7 +74,6 @@ - @@ -83,11 +82,11 @@ + - @@ -100,7 +99,6 @@ - diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildCodeNamespaces.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildCodeNamespaces.cs deleted file mode 100644 index 145010e56e..0000000000 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildCodeNamespaces.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Collections.Generic; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PackageManagement.EnvDTE -{ - public class ChildCodeNamespaces : List - { - IProjectContent projectContent; - CodeNamespace parentNamespace; - HashSet namespacesAdded = new HashSet(); - - public ChildCodeNamespaces(IProjectContent projectContent, CodeNamespace parentNamespace) - { - this.projectContent = projectContent; - this.parentNamespace = parentNamespace; - AddChildNamespaces(); - } - - void AddChildNamespaces() - { - foreach (string namespaceName in GetUniqueQualifiedChildNamespaceNames()) { - AddCodeNamespace(namespaceName); - } - } - - IEnumerable GetUniqueQualifiedChildNamespaceNames() - { - foreach (string namespaceName in projectContent.NamespaceNames) { - string qualifiedChildNamespaceName = parentNamespace.GetChildNamespaceName(namespaceName); - if (IsUniqueChildNamespaceName(qualifiedChildNamespaceName)) { - namespacesAdded.Add(qualifiedChildNamespaceName); - yield return qualifiedChildNamespaceName; - } - } - } - - bool IsUniqueChildNamespaceName(string name) - { - if (name != null) { - return !namespacesAdded.Contains(name); - } - return false; - } - - void AddCodeNamespace(string namespaceName) - { - Add(new CodeNamespace(projectContent, namespaceName)); - } - } -} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs new file mode 100644 index 0000000000..34958b0945 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs @@ -0,0 +1,75 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections; +using System.Collections.Generic; + +using ICSharpCode.SharpDevelop.Dom; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public class CodeElementsInNamespace : CodeElements + { + List codeElements = new List(); + IProjectContent projectContent; + NamespaceName namespaceName; + + public CodeElementsInNamespace(IProjectContent projectContent, string qualifiedNamespaceName) + : this(projectContent, new NamespaceName(qualifiedNamespaceName)) + { + } + + public CodeElementsInNamespace(IProjectContent projectContent, NamespaceName namespaceName) + { + this.projectContent = projectContent; + this.namespaceName = namespaceName; + GetCodeElements(); + } + + void GetCodeElements() + { + foreach (ICompletionEntry entry in projectContent.GetNamespaceContents(namespaceName.QualifiedName)) { + AddCodeElement(entry); + } + } + + void AddCodeElement(ICompletionEntry entry) + { + var namespaceEntry = entry as NamespaceEntry; + var classEntry = entry as IClass; + if (namespaceEntry != null) { + AddCodeNamespace(namespaceEntry); + } else if (classEntry != null) { + AddCodeClass(classEntry); + } + } + + void AddCodeNamespace(NamespaceEntry namespaceEntry) + { + if (!String.IsNullOrEmpty(namespaceEntry.Name)) { + NamespaceName childNamespaceName = namespaceName.CreateChildNamespaceName(namespaceEntry.Name); + AddCodeElement(new CodeNamespace(projectContent, childNamespaceName)); + } + } + + void AddCodeClass(IClass c) + { + AddCodeElement(new CodeClass2(c)); + } + + void AddCodeElement(CodeElement codeElement) + { + codeElements.Add(codeElement); + } + + public int Count { + get { return codeElements.Count; } + } + + public IEnumerator GetEnumerator() + { + return codeElements.GetEnumerator(); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs index c2450b50f9..28820f488d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs @@ -9,7 +9,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE public class CodeModel : MarshalByRefObject { IProjectContent projectContent; - ProjectCodeElements codeElements; + CodeElementsInNamespace codeElements; public CodeModel(IProjectContent projectContent) { @@ -19,7 +19,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE public CodeElements CodeElements { get { if (codeElements == null) { - codeElements = new ProjectCodeElements(projectContent); + codeElements = new CodeElementsInNamespace(projectContent, String.Empty); } return codeElements; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs index 7020452a2c..85251c46c6 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs @@ -10,13 +10,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE { NamespaceName namespaceName; IProjectContent projectContent; - CodeNamespaceMembers members; + CodeElementsInNamespace members; public CodeNamespace(IProjectContent projectContent, string qualifiedName) + : this(projectContent, new NamespaceName(qualifiedName)) + { + } + + public CodeNamespace(IProjectContent projectContent, NamespaceName namespaceName) : base(null) { this.projectContent = projectContent; - this.namespaceName = new NamespaceName(qualifiedName); + this.namespaceName = namespaceName; this.InfoLocation = vsCMInfoLocation.vsCMInfoLocationExternal; } @@ -39,15 +44,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE public CodeElements Members { get { if (members == null) { - members = new CodeNamespaceMembers(projectContent, this); + members = new CodeElementsInNamespace(projectContent, namespaceName); } return members; } } - - internal string GetChildNamespaceName(string qualifiedName) - { - return namespaceName.GetChildNamespaceName(qualifiedName); - } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespaceMembers.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespaceMembers.cs deleted file mode 100644 index ab31c1b3e3..0000000000 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespaceMembers.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Collections; -using System.Collections.Generic; - -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PackageManagement.EnvDTE -{ - public class CodeNamespaceMembers : CodeElements - { - List elements = new List(); - IProjectContent projectContent; - CodeNamespace codeNamespace; - - public CodeNamespaceMembers(IProjectContent projectContent, CodeNamespace codeNamespace) - { - this.projectContent = projectContent; - this.codeNamespace = codeNamespace; - GetMembers(); - } - - void GetMembers() - { - AddNamespaceMembers(); - AddTypesInNamespace(); - } - - void AddNamespaceMembers() - { - elements.AddRange(new ChildCodeNamespaces(projectContent, codeNamespace)); - } - - void AddTypesInNamespace() - { - elements.AddRange(new CodeTypesInNamespace(projectContent, codeNamespace)); - } - - public int Count { - get { return elements.Count; } - } - - public IEnumerator GetEnumerator() - { - return elements.GetEnumerator(); - } - } -} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs index fed788e2c9..8fea477cce 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs @@ -7,20 +7,23 @@ namespace ICSharpCode.PackageManagement.EnvDTE { public class NamespaceName { - public NamespaceName(string qualifiedName) + public NamespaceName(string parentNamespace, string name) + : this(GetQualifiedNamespaceName(parentNamespace, name)) { - this.QualifiedName = qualifiedName; - FirstPart = GetFirstPartOfNamespace(); - LastPart = GetLastPartOfNamespace(); } - string GetFirstPartOfNamespace() + static string GetQualifiedNamespaceName(string parentNamespace, string name) { - int index = QualifiedName.IndexOf('.'); - if (index >= 0) { - return QualifiedName.Substring(0, index); + if (String.IsNullOrEmpty(parentNamespace)) { + return name; } - return QualifiedName; + return String.Format("{0}.{1}", parentNamespace, name); + } + + public NamespaceName(string qualifiedName) + { + this.QualifiedName = qualifiedName; + LastPart = GetLastPartOfNamespace(); } string GetLastPartOfNamespace() @@ -29,33 +32,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE return QualifiedName.Substring(index + 1); } - public string FirstPart { get; private set; } public string LastPart { get; private set; } public string QualifiedName { get; private set; } - public string GetChildNamespaceName(string namespaceName) + public NamespaceName CreateChildNamespaceName(string name) { - if (QualifiedName == String.Empty) { - return GetChildNamespaceNameForRootNamespace(namespaceName); - } - - string dottedQualifiedName = QualifiedName + "."; - if (namespaceName.StartsWith(dottedQualifiedName)) { - int nextIndex = namespaceName.IndexOf('.', dottedQualifiedName.Length); - if (nextIndex >= 0) { - return namespaceName.Substring(0, nextIndex); - } - return namespaceName; - } - return null; - } - - string GetChildNamespaceNameForRootNamespace(string namespaceName) - { - if (!String.IsNullOrEmpty(namespaceName)) { - return new NamespaceName(namespaceName).FirstPart; - } - return null; + return new NamespaceName(QualifiedName, name); } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectCodeElements.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectCodeElements.cs deleted file mode 100644 index cc90945864..0000000000 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectCodeElements.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using ICSharpCode.SharpDevelop.Dom; - -namespace ICSharpCode.PackageManagement.EnvDTE -{ - public class ProjectCodeElements : CodeElements - { - List codeElements = new List(); - IProjectContent projectContent; - - public ProjectCodeElements(IProjectContent projectContent) - { - this.projectContent = projectContent; - AddCodeElements(); - } - - void AddCodeElements() - { - AddNamespaceCodeElements(); - AddClassesWithNoNamespace(); - } - - void AddNamespaceCodeElements() - { - codeElements.AddRange(CreateChildNodeNamespaces()); - } - - ChildCodeNamespaces CreateChildNodeNamespaces() - { - return new ChildCodeNamespaces(projectContent, new CodeNamespace(projectContent, String.Empty)); - } - - void AddClassesWithNoNamespace() - { - codeElements.AddRange(new CodeTypesInNamespace(projectContent, String.Empty)); - } - - public int Count { - get { return codeElements.Count; } - } - - public IEnumerator GetEnumerator() - { - return codeElements.GetEnumerator(); - } - } -} diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 5f9de9bcae..af950befe3 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -72,8 +72,10 @@ Properties\GlobalAssemblyInfo.cs + + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs new file mode 100644 index 0000000000..20f9f8258a --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs @@ -0,0 +1,114 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; +using System.Linq; +using ICSharpCode.PackageManagement.EnvDTE; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests.EnvDTE +{ + [TestFixture] + public class CodeElementsInNamespaceTests + { + CodeElementsInNamespace codeElements; + ProjectContentHelper helper; + + [SetUp] + public void Init() + { + helper = new ProjectContentHelper(); + } + + void CreateCodeElements(string namespaceName) + { + codeElements = new CodeElementsInNamespace(helper.FakeProjectContent, namespaceName); + } + + [Test] + public void Count_NoItemsInNamespace_ReturnsZero() + { + helper.NoCompletionItemsInNamespace("Test"); + CreateCodeElements("Test"); + + int count = codeElements.Count; + + Assert.AreEqual(0, count); + } + + [Test] + public void GetEnumerator_NoItemsInNamespace_ReturnsNoItems() + { + helper.NoCompletionItemsInNamespace("Test"); + CreateCodeElements("Test"); + + List codeElementsList = codeElements.ToList(); + + Assert.AreEqual(0, codeElementsList.Count); + } + + [Test] + public void GetEnumerator_OneNamespaceCompletionEntryInNamespace_ReturnsOneCodeNamespace() + { + helper.AddNamespaceCompletionEntryInNamespace("Parent", "Child"); + CreateCodeElements("Parent"); + + CodeNamespace codeNamespace = codeElements.ToList().FirstOrDefault() as CodeNamespace; + + Assert.AreEqual(1, codeElements.Count); + Assert.AreEqual("Child", codeNamespace.Name); + Assert.AreEqual("Child", codeNamespace.FullName); + } + + [Test] + public void GetEnumerator_OneClassCompletionEntryInNamespace_ReturnsOneCodeClass() + { + helper.AddClassToProjectContent("Test", "Test.MyClass"); + CreateCodeElements("Test"); + + CodeClass2 codeClass = codeElements.ToList().FirstOrDefault() as CodeClass2; + + Assert.AreEqual(1, codeElements.Count); + Assert.AreEqual("MyClass", codeClass.Name); + Assert.AreEqual("Test.MyClass", codeClass.FullName); + } + + [Test] + public void GetEnumerator_UnknownCompletionEntryInNamespace_ReturnsNoItems() + { + helper.AddUnknownCompletionEntryTypeToNamespace("Test"); + CreateCodeElements("Test"); + + List codeElementsList = codeElements.ToList(); + + Assert.AreEqual(0, codeElementsList.Count); + } + + [Test] + public void GetEnumerator_EmptyNamespaceEntry_ReturnsNoItems() + { + helper.AddNamespaceCompletionEntryInNamespace(String.Empty, String.Empty); + CreateCodeElements(String.Empty); + + List codeElementsList = codeElements.ToList(); + + Assert.AreEqual(0, codeElementsList.Count); + } + + [Test] + public void GetEnumerator_ParentChildAndGrandChildNamespaces_ReturnsOneCodeNamespaceWhichHasGrandChildNamespace() + { + helper.AddNamespaceCompletionEntryInNamespace("Parent", "Child"); + helper.AddNamespaceCompletionEntryInNamespace("Parent.Child", "GrandChild"); + helper.NoCompletionItemsInNamespace("Parent.Child.GrandChild"); + CreateCodeElements("Parent"); + + CodeNamespace codeNamespace = codeElements.ToList().FirstOrDefault() as CodeNamespace; + CodeNamespace grandChildNamespace = codeNamespace.Members.ToList().FirstOrDefault() as CodeNamespace; + + Assert.AreEqual("GrandChild", grandChildNamespace.Name); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs index 9e0c9de528..5603709e30 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs @@ -39,21 +39,6 @@ namespace PackageManagement.Tests.EnvDTE helper.AddInterfaceToProjectContent(interfaceName); } - void AddNamespaceToProjectContent(string name) - { - helper.AddNamespaceNameToProjectContent(name); - } - - void AddEmptyNamespaceContentsForRootNamespace() - { - helper.AddEmptyNamespaceContentsForRootNamespace(); - } - - void AddEmptyNamespaceContents(string namespaceName) - { - helper.AddEmptyNamespaceContents(namespaceName); - } - [Test] public void CodeTypeFromFullName_NoSuchTypeInProject_ReturnsNull() { @@ -102,8 +87,7 @@ namespace PackageManagement.Tests.EnvDTE public void CodeElements_OneNamespaceInProject_ReturnsOneCodeNamespaceItem() { CreateCodeModel(); - AddNamespaceToProjectContent("Test"); - AddEmptyNamespaceContentsForRootNamespace(); + helper.AddNamespaceCompletionEntryInNamespace(String.Empty, "Test"); CodeElements codeElements = codeModel.CodeElements; CodeNamespace codeNamespace = codeElements.FirstOrDefault() as CodeNamespace; @@ -117,8 +101,8 @@ namespace PackageManagement.Tests.EnvDTE public void CodeElements_OneNamespaceInProjectWithTwoPartsToName_ReturnsOneCodeNamespaceItemWithFirstPartOfNamespaceAsName() { CreateCodeModel(); - AddNamespaceToProjectContent("First.Second"); - AddEmptyNamespaceContentsForRootNamespace(); + helper.AddNamespaceCompletionEntryInNamespace(String.Empty, "First"); + helper.AddNamespaceCompletionEntryInNamespace("First", "Second"); CodeElements codeElements = codeModel.CodeElements; CodeNamespace codeNamespace = codeElements.FirstOrDefault() as CodeNamespace; @@ -145,10 +129,10 @@ namespace PackageManagement.Tests.EnvDTE public void CodeElements_TwoNamespacesInProjectWithFirstPartsTheName_ReturnsOneParentNamespaceWithTwoChildNamespaces() { CreateCodeModel(); - AddNamespaceToProjectContent("First.A"); - AddNamespaceToProjectContent("First.B"); - AddEmptyNamespaceContentsForRootNamespace(); - AddEmptyNamespaceContents("First"); + helper.AddNamespaceCompletionEntryInNamespace(String.Empty, "First"); + helper.AddNamespaceCompletionEntriesInNamespace("First", "A", "B"); + helper.NoCompletionItemsInNamespace("First.A"); + helper.NoCompletionItemsInNamespace("First.B"); CodeElements codeElements = codeModel.CodeElements; CodeNamespace codeNamespace = codeElements.FirstOrDefault() as CodeNamespace; @@ -168,10 +152,7 @@ namespace PackageManagement.Tests.EnvDTE public void CodeElements_ProjectHasEmptyNamespaceName_EmptyNamespaceNameNotIncludedInMembers() { CreateCodeModel(); - AddNamespaceToProjectContent(String.Empty); - AddNamespaceToProjectContent("Tests"); - AddEmptyNamespaceContentsForRootNamespace(); - AddEmptyNamespaceContents("Tests"); + helper.AddNamespaceCompletionEntriesInNamespace(String.Empty, String.Empty, "Tests"); CodeElements members = codeModel.CodeElements; CodeNamespace codeNamespace = members.ToList().FirstOrDefault() as CodeNamespace; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs index 8852afa4c5..1e45523b1c 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs @@ -29,16 +29,6 @@ namespace PackageManagement.Tests.EnvDTE { helper.AddClassToProjectContent(namespaceName, className); } - - void AddNamespaceToProjectContent(string name) - { - helper.AddNamespaceNameToProjectContent(name); - } - - void NoClassesInNamespace(string name) - { - helper.AddEmptyNamespaceContents(name); - } void AddUnknownCompletionEntryToNamespace(string namespaceName) { @@ -49,7 +39,6 @@ namespace PackageManagement.Tests.EnvDTE public void Members_NamespaceHasOneClass_ReturnsOneClass() { CreateProjectContent(); - AddNamespaceToProjectContent("Tests"); AddClassToProjectContent("Tests", "Tests.MyClass"); CreateCodeNamespace("Tests"); @@ -64,9 +53,7 @@ namespace PackageManagement.Tests.EnvDTE public void Members_NamespaceHasOneChildNamespace_ReturnsOneChildNamespace() { CreateProjectContent(); - AddNamespaceToProjectContent("First.Second"); - NoClassesInNamespace("First"); - NoClassesInNamespace("First.Second"); + helper.AddNamespaceCompletionEntryInNamespace("First", "Second"); CreateCodeNamespace("First"); CodeElements members = codeNamespace.Members; @@ -91,10 +78,9 @@ namespace PackageManagement.Tests.EnvDTE public void Members_NamespaceHasOneChildNamespaceWithThreeNamespaceParts_ReturnsOneChildNamespaceWhichHasOneChildNamespace() { CreateProjectContent(); - AddNamespaceToProjectContent("First.Second.Third"); - NoClassesInNamespace("First"); - NoClassesInNamespace("First.Second"); - NoClassesInNamespace("First.Second.Third"); + helper.AddNamespaceCompletionEntryInNamespace("First", "Second"); + helper.AddNamespaceCompletionEntryInNamespace("First.Second", "Third"); + helper.NoCompletionItemsInNamespace("First.Second.Third"); CreateCodeNamespace("First"); CodeElements members = codeNamespace.Members; @@ -114,12 +100,8 @@ namespace PackageManagement.Tests.EnvDTE public void Members_ProjectHasTwoNamespacesWithCommonFirstAndSecondPartOfThreePartNamespace_ReturnsOneChildNamespaceWhichHasOneChildNamespace() { CreateProjectContent(); - AddNamespaceToProjectContent("First.Second.Third"); - AddNamespaceToProjectContent("First.Second.Different"); - NoClassesInNamespace("First"); - NoClassesInNamespace("First.Second"); - NoClassesInNamespace("First.Second.Third"); - NoClassesInNamespace("First.Second.Different"); + helper.AddNamespaceCompletionEntryInNamespace("First", "Second"); + helper.AddNamespaceCompletionEntriesInNamespace("First.Second", "Third", "Different"); CreateCodeNamespace("First"); CodeElements members = codeNamespace.Members; @@ -136,7 +118,6 @@ namespace PackageManagement.Tests.EnvDTE public void Members_NamespaceHasUnknownNamespaceEntryType_ReturnsNoItems() { CreateProjectContent(); - AddNamespaceToProjectContent("Tests"); AddUnknownCompletionEntryToNamespace("Tests"); CreateCodeNamespace("Tests"); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs new file mode 100644 index 0000000000..9f067893bf --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs @@ -0,0 +1,40 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.PackageManagement.EnvDTE; +using NUnit.Framework; + +namespace PackageManagement.Tests.EnvDTE +{ + [TestFixture] + public class NamespaceNameTests + { + NamespaceName namespaceName; + + void CreateNamespaceName(string parent, string name) + { + namespaceName = new NamespaceName(parent, name); + } + + [Test] + public void QualifiedName_ParentNamespaceIsTest_ReturnsTestPrefix() + { + CreateNamespaceName("Test", "Child"); + + string name = namespaceName.QualifiedName; + + Assert.AreEqual("Test.Child", name); + } + + [Test] + public void QualifiedName_ParentNamespaceIsEmptyString_ReturnsJustChildNamespaceName() + { + CreateNamespaceName(String.Empty, "Child"); + + string name = namespaceName.QualifiedName; + + Assert.AreEqual("Child", name); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs index fc263ff622..6dfa0b46fb 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Linq; using ICSharpCode.SharpDevelop.Dom; using Rhino.Mocks; @@ -24,19 +25,19 @@ namespace PackageManagement.Tests.Helpers IClass fakeClass = AddClassToProjectContent(className); var namespaceContents = new List(); namespaceContents.Add(fakeClass); - AddNamespaceContents(namespaceName, namespaceContents); + AddCompletionEntriesToNamespace(namespaceName, namespaceContents); return fakeClass; } - public void AddNamespaceContents(string namespaceName, List namespaceContents) + public void AddCompletionEntriesToNamespace(string namespaceName, List namespaceContents) { FakeProjectContent.Stub(pc => pc.GetNamespaceContents(namespaceName)).Return(namespaceContents); } - public void AddEmptyNamespaceContents(string namespaceName) + public void NoCompletionItemsInNamespace(string namespaceName) { - AddNamespaceContents(namespaceName, new List()); + AddCompletionEntriesToNamespace(namespaceName, new List()); } public IClass AddClassToProjectContent(string className) @@ -67,9 +68,9 @@ namespace PackageManagement.Tests.Helpers NamespaceNames.Add(name); } - public void AddEmptyNamespaceContentsForRootNamespace() + public void NoCompletionEntriesForRootNamespace() { - AddEmptyNamespaceContents(String.Empty); + NoCompletionItemsInNamespace(String.Empty); } public void AddUnknownCompletionEntryTypeToNamespace(string namespaceName) @@ -77,7 +78,20 @@ namespace PackageManagement.Tests.Helpers var unknownEntry = MockRepository.GenerateStub(); var namespaceContents = new List(); namespaceContents.Add(unknownEntry); - AddNamespaceContents(namespaceName, namespaceContents); + AddCompletionEntriesToNamespace(namespaceName, namespaceContents); + } + + public void AddNamespaceCompletionEntryInNamespace(string parentNamespaceName, string namespaceName) + { + AddNamespaceCompletionEntriesInNamespace(parentNamespaceName, new string[] { namespaceName }); + } + + public void AddNamespaceCompletionEntriesInNamespace(string parentNamespaceName, params string[] childNamespaceNames) + { + List entries = childNamespaceNames + .Select(name => new NamespaceEntry(name) as ICompletionEntry) + .ToList(); + AddCompletionEntriesToNamespace(parentNamespaceName, entries); } } }