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);
}
}
}