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