Browse Source

Switch to using IProjectContent.GetNamespaceContents in EnvDTE.CodeModel to simplify the implementation.

pull/28/head
Matt Ward 14 years ago
parent
commit
79307ebd00
  1. 4
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 54
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildCodeNamespaces.cs
  3. 75
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs
  4. 4
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs
  5. 16
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs
  6. 50
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespaceMembers.cs
  7. 46
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs
  8. 53
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectCodeElements.cs
  9. 2
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  10. 114
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs
  11. 35
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs
  12. 31
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs
  13. 40
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs
  14. 28
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs

4
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -74,7 +74,6 @@ @@ -74,7 +74,6 @@
<Compile Include="Src\Design\DesignTimeSelectProjectsViewModel.cs" />
<Compile Include="Src\Design\FakePackageOperation.cs" />
<Compile Include="Src\Design\FakeSelectedProject.cs" />
<Compile Include="Src\EnvDTE\ChildCodeNamespaces.cs" />
<Compile Include="Src\EnvDTE\CodeAttribute.cs" />
<Compile Include="Src\EnvDTE\CodeAttribute2.cs" />
<Compile Include="Src\EnvDTE\CodeAttributeArgument.cs" />
@ -83,11 +82,11 @@ @@ -83,11 +82,11 @@
<Compile Include="Src\EnvDTE\CodeDelegate.cs" />
<Compile Include="Src\EnvDTE\CodeElement.cs" />
<Compile Include="Src\EnvDTE\CodeElements.cs" />
<Compile Include="Src\EnvDTE\CodeElementsInNamespace.cs" />
<Compile Include="Src\EnvDTE\CodeFunction.cs" />
<Compile Include="Src\EnvDTE\CodeInterface.cs" />
<Compile Include="Src\EnvDTE\CodeModel.cs" />
<Compile Include="Src\EnvDTE\CodeNamespace.cs" />
<Compile Include="Src\EnvDTE\CodeNamespaceMembers.cs" />
<Compile Include="Src\EnvDTE\CodeProperty.cs" />
<Compile Include="Src\EnvDTE\CodeProperty2.cs" />
<Compile Include="Src\EnvDTE\CodeStruct.cs" />
@ -100,7 +99,6 @@ @@ -100,7 +99,6 @@
<Compile Include="Src\EnvDTE\Constants.cs" />
<Compile Include="Src\EnvDTE\EditPoint.cs" />
<Compile Include="Src\EnvDTE\NamespaceName.cs" />
<Compile Include="Src\EnvDTE\ProjectCodeElements.cs" />
<Compile Include="Src\EnvDTE\ProjectKind.cs" />
<Compile Include="Src\EnvDTE\Projects.cs" />
<Compile Include="Src\EnvDTE\SourceControl.cs" />

54
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ChildCodeNamespaces.cs

@ -1,54 +0,0 @@ @@ -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<CodeNamespace>
{
IProjectContent projectContent;
CodeNamespace parentNamespace;
HashSet<string> namespacesAdded = new HashSet<string>();
public ChildCodeNamespaces(IProjectContent projectContent, CodeNamespace parentNamespace)
{
this.projectContent = projectContent;
this.parentNamespace = parentNamespace;
AddChildNamespaces();
}
void AddChildNamespaces()
{
foreach (string namespaceName in GetUniqueQualifiedChildNamespaceNames()) {
AddCodeNamespace(namespaceName);
}
}
IEnumerable<string> 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));
}
}
}

75
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs

@ -0,0 +1,75 @@ @@ -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<CodeElement> codeElements = new List<CodeElement>();
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();
}
}
}

4
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs

@ -9,7 +9,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -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 @@ -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;
}

16
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs

@ -10,13 +10,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -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 @@ -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);
}
}
}

50
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespaceMembers.cs

@ -1,50 +0,0 @@ @@ -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<CodeElement> elements = new List<CodeElement>();
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();
}
}
}

46
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs

@ -7,20 +7,23 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -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 @@ -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);
}
}
}

53
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectCodeElements.cs

@ -1,53 +0,0 @@ @@ -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<CodeElement> codeElements = new List<CodeElement>();
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();
}
}
}

2
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -72,8 +72,10 @@ @@ -72,8 +72,10 @@
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Src\EnvDTE\CodeElementsInNamespaceTests.cs" />
<Compile Include="Src\EnvDTE\CodeModelTests.cs" />
<Compile Include="Src\EnvDTE\CodeNamespaceTests.cs" />
<Compile Include="Src\EnvDTE\NamespaceNameTests.cs" />
<Compile Include="Src\EnvDTE\SolutionTests.cs" />
<Compile Include="Src\Helpers\CodeElementsHelpers.cs" />
<Compile Include="Src\Helpers\FakeSelectProjectsService.cs" />

114
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs

@ -0,0 +1,114 @@ @@ -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<CodeElement> 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<CodeElement> codeElementsList = codeElements.ToList();
Assert.AreEqual(0, codeElementsList.Count);
}
[Test]
public void GetEnumerator_EmptyNamespaceEntry_ReturnsNoItems()
{
helper.AddNamespaceCompletionEntryInNamespace(String.Empty, String.Empty);
CreateCodeElements(String.Empty);
List<CodeElement> 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);
}
}
}

35
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs

@ -39,21 +39,6 @@ namespace PackageManagement.Tests.EnvDTE @@ -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 @@ -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 @@ -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 @@ -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 @@ -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;

31
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs

@ -29,16 +29,6 @@ namespace PackageManagement.Tests.EnvDTE @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -136,7 +118,6 @@ namespace PackageManagement.Tests.EnvDTE
public void Members_NamespaceHasUnknownNamespaceEntryType_ReturnsNoItems()
{
CreateProjectContent();
AddNamespaceToProjectContent("Tests");
AddUnknownCompletionEntryToNamespace("Tests");
CreateCodeNamespace("Tests");

40
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs

@ -0,0 +1,40 @@ @@ -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);
}
}
}

28
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs

@ -3,6 +3,7 @@ @@ -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 @@ -24,19 +25,19 @@ namespace PackageManagement.Tests.Helpers
IClass fakeClass = AddClassToProjectContent(className);
var namespaceContents = new List<ICompletionEntry>();
namespaceContents.Add(fakeClass);
AddNamespaceContents(namespaceName, namespaceContents);
AddCompletionEntriesToNamespace(namespaceName, namespaceContents);
return fakeClass;
}
public void AddNamespaceContents(string namespaceName, List<ICompletionEntry> namespaceContents)
public void AddCompletionEntriesToNamespace(string namespaceName, List<ICompletionEntry> namespaceContents)
{
FakeProjectContent.Stub(pc => pc.GetNamespaceContents(namespaceName)).Return(namespaceContents);
}
public void AddEmptyNamespaceContents(string namespaceName)
public void NoCompletionItemsInNamespace(string namespaceName)
{
AddNamespaceContents(namespaceName, new List<ICompletionEntry>());
AddCompletionEntriesToNamespace(namespaceName, new List<ICompletionEntry>());
}
public IClass AddClassToProjectContent(string className)
@ -67,9 +68,9 @@ namespace PackageManagement.Tests.Helpers @@ -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 @@ -77,7 +78,20 @@ namespace PackageManagement.Tests.Helpers
var unknownEntry = MockRepository.GenerateStub<ICompletionEntry>();
var namespaceContents = new List<ICompletionEntry>();
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<ICompletionEntry> entries = childNamespaceNames
.Select(name => new NamespaceEntry(name) as ICompletionEntry)
.ToList();
AddCompletionEntriesToNamespace(parentNamespaceName, entries);
}
}
}

Loading…
Cancel
Save