14 changed files with 291 additions and 261 deletions
@ -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)); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -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(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -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(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -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(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -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); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -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); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue