Browse Source

Update EnvDTE.CodeType unit tests.

Return correct value for InfoLocation on EnvDTE.CodeType.
pull/375/head
Matt Ward 12 years ago
parent
commit
22b2a6e177
  1. 5
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs
  2. 5
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs
  3. 31
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs
  4. 10
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs
  5. 45
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs
  6. 9
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeInterface.cs
  7. 28
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs
  8. 1
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs
  9. 36
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs
  10. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs
  11. 19
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
  12. 4
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs
  13. 88
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs
  14. 373
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs
  15. 35
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs
  16. 5
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/CodeElementsExtensions.cs

5
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs

@ -16,6 +16,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
} }
public CodeClass(CodeModelContext context, ITypeDefinition typeDefinition)
: base(context, typeDefinition)
{
}
public CodeClass() public CodeClass()
{ {
} }

5
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs

@ -15,6 +15,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
} }
public CodeClass2(CodeModelContext context, ITypeDefinition typeDefinition)
: base(context, typeDefinition)
{
}
public global::EnvDTE.CodeElements PartialClasses { public global::EnvDTE.CodeElements PartialClasses {
get { get {
var list = new CodeElementsList<CodeType>(); var list = new CodeElementsList<CodeType>();

31
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs

@ -13,6 +13,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
DTE dte; DTE dte;
protected CodeModelContext context; protected CodeModelContext context;
readonly ISymbolModel symbolModel; readonly ISymbolModel symbolModel;
IEntity entity;
public CodeElement() public CodeElement()
{ {
@ -32,7 +33,16 @@ namespace ICSharpCode.PackageManagement.EnvDTE
} }
} }
public static CodeElement CreateMember(CodeModelContext context, IMemberModel m) public CodeElement(CodeModelContext context, IEntity entity)
{
this.context = context;
this.entity = entity;
if (context.CurrentProject != null) {
this.Language = context.CurrentProject.GetCodeModelLanguage();
}
}
internal static CodeElement CreateMember(CodeModelContext context, IMemberModel m)
{ {
switch (m.SymbolKind) { switch (m.SymbolKind) {
case SymbolKind.Field: case SymbolKind.Field:
@ -54,7 +64,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
} }
public virtual string Name { public virtual string Name {
get { return symbolModel.Name; } get {
if (symbolModel != null)
return symbolModel.Name;
return entity.Name;
}
} }
public virtual string Language { get; protected set; } public virtual string Language { get; protected set; }
@ -99,16 +113,13 @@ namespace ICSharpCode.PackageManagement.EnvDTE
protected CodeElementsList<CodeAttribute2> GetAttributes(IEntityModel entityModel) protected CodeElementsList<CodeAttribute2> GetAttributes(IEntityModel entityModel)
{ {
var list = new CodeElementsList<CodeAttribute2>(); var attributes = new CodeElementsList<CodeAttribute2>();
IEntity td = entityModel.Resolve(); foreach (IAttribute attribute in entity.Attributes) {
if (td != null) { if (IsInFilter(attribute.Region)) {
foreach (IAttribute attr in td.Attributes) { attributes.Add(new CodeAttribute2(context, attribute));
if (IsInFilter(attr.Region)) {
list.Add(new CodeAttribute2(context, attr));
}
} }
} }
return list; return attributes;
} }
protected override bool GetIsDerivedFrom(string fullName) protected override bool GetIsDerivedFrom(string fullName)

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

@ -12,7 +12,7 @@ using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public class CodeElementsInNamespace : CodeElementsList2 public class CodeElementsInNamespace : CodeElementsList<CodeElement>
{ {
CodeModelContext context; CodeModelContext context;
NamespaceName namespaceName; NamespaceName namespaceName;
@ -55,16 +55,16 @@ namespace ICSharpCode.PackageManagement.EnvDTE
void AddCodeNamespace(INamespace ns) void AddCodeNamespace(INamespace ns)
{ {
AddCodeElement(new CodeNamespace(context, ns)); Add(new CodeNamespace(context, ns));
} }
void AddType(IType type) void AddType(IType type)
{ {
ITypeDefinitionModel typeDefinition = type.GetDefinition().GetModel(); ITypeDefinition typeDefinition = type.GetDefinition();
if (typeDefinition.TypeKind == TypeKind.Interface) { if (typeDefinition.Kind == TypeKind.Interface) {
} else { } else {
AddCodeElement(new CodeClass2(context, typeDefinition)); Add(new CodeClass2(context, typeDefinition));
} }
} }
} }

45
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs

@ -9,47 +9,6 @@ using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public class CodeElementsList2 : MarshalByRefObject, global::EnvDTE.CodeElements
{
List<CodeElement> elements = new List<CodeElement>();
public CodeElementsList2()
{
}
protected virtual void AddCodeElement(CodeElement element)
{
elements.Add(element);
}
public int Count {
get { return elements.Count; }
}
public IEnumerator GetEnumerator()
{
return elements.GetEnumerator();
}
public global::EnvDTE.CodeElement Item(object index)
{
if (index is int) {
return Item((int)index);
}
return Item((string)index);
}
global::EnvDTE.CodeElement Item(int index)
{
return elements[index - 1];
}
global::EnvDTE.CodeElement Item(string name)
{
return elements.Single(item => item.Name == name);
}
}
public class CodeElementsList<T> : MarshalByRefObject, global::EnvDTE.CodeElements, IList<T> public class CodeElementsList<T> : MarshalByRefObject, global::EnvDTE.CodeElements, IList<T>
where T : global::EnvDTE.CodeElement where T : global::EnvDTE.CodeElement
{ {
@ -59,7 +18,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
} }
#region EnvDTE.CodeElements implementation
public int Count { public int Count {
get { return elements.Count; } get { return elements.Count; }
} }
@ -86,9 +44,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
return elements.Single(item => item.Name == name); return elements.Single(item => item.Name == name);
} }
#endregion
#region IList<T>
public T this[int index] { public T this[int index] {
get { return elements[index]; } get { return elements[index]; }
set { elements[index] = value; } set { elements[index] = value; }
@ -142,6 +98,5 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
return elements.GetEnumerator(); return elements.GetEnumerator();
} }
#endregion
} }
} }

9
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeInterface.cs

@ -2,10 +2,9 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public class CodeInterface : CodeType, global::EnvDTE.CodeInterface public class CodeInterface : CodeType, global::EnvDTE.CodeInterface
@ -23,6 +22,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
// fullName = base.FullName; // fullName = base.FullName;
} }
public CodeInterface(CodeModelContext context, ITypeDefinition typeDefinition)
: base(context, typeDefinition)
{
// fullName = base.FullName;
}
// public CodeInterface(IProjectContent projectContent, IReturnType type, IClass c) // public CodeInterface(IProjectContent projectContent, IReturnType type, IClass c)
// : base(projectContent, c) // : base(projectContent, c)
// { // {

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

@ -31,38 +31,34 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public global::EnvDTE.CodeType CodeTypeFromFullName(string name) public global::EnvDTE.CodeType CodeTypeFromFullName(string name)
{ {
ITypeDefinitionModel typeDefinition = GetTypeDefinition(name); ITypeDefinition typeDefinition = GetTypeDefinition(name);
if (typeDefinition != null) { if (typeDefinition != null) {
return CreateCodeTypeForTypeDefinition(typeDefinition); return CreateCodeTypeForTypeDefinition(typeDefinition);
} }
return null; return null;
} }
ITypeDefinitionModel GetTypeDefinition(string name) ITypeDefinition GetTypeDefinition(string name)
{ {
ICompilation compilation = project.GetCompilationUnit(); ICompilation compilation = project.GetCompilationUnit();
var typeName = new TopLevelTypeName(name); var typeName = new TopLevelTypeName(name);
ITypeDefinitionModel typeDefinitionModel = project.MSBuildProject.AssemblyModel.TopLevelTypeDefinitions[typeName];
if (typeDefinitionModel != null) {
return typeDefinitionModel;
}
// foreach (IAssembly assembly in compilation.ReferencedAssemblies) { foreach (IAssembly assembly in compilation.Assemblies) {
// ITypeDefinition typeDefinition = assembly.GetTypeDefinition(typeName); ITypeDefinition typeDefinition = assembly.GetTypeDefinition(typeName);
// if (typeDefinition != null) { if (typeDefinition != null) {
// return typeDefinition.GetModel(); return typeDefinition;
// } }
// } }
return null; return null;
} }
CodeType CreateCodeTypeForTypeDefinition(ITypeDefinitionModel typeDefinition) CodeType CreateCodeTypeForTypeDefinition(ITypeDefinition typeDefinition)
{ {
if (typeDefinition.TypeKind == TypeKind.Interface) { if (typeDefinition.Kind == TypeKind.Interface) {
return new CodeInterface(null, typeDefinition); return new CodeInterface(context, typeDefinition);
} }
return new CodeClass2(null, typeDefinition); return new CodeClass2(context, typeDefinition);
} }
public string Language { public string Language {

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

@ -13,6 +13,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
INamespace ns; INamespace ns;
public CodeNamespace(CodeModelContext context, INamespace ns) public CodeNamespace(CodeModelContext context, INamespace ns)
: base(context)
{ {
this.ns = ns; this.ns = ns;
//this.InfoLocation = global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal; //this.InfoLocation = global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;

36
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs

@ -16,6 +16,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public class CodeType : CodeElement, global::EnvDTE.CodeType public class CodeType : CodeElement, global::EnvDTE.CodeType
{ {
protected readonly ITypeDefinitionModel typeModel; protected readonly ITypeDefinitionModel typeModel;
protected readonly ITypeDefinition typeDefinition;
CodeElementsList<CodeElement> members; CodeElementsList<CodeElement> members;
@ -55,10 +56,25 @@ namespace ICSharpCode.PackageManagement.EnvDTE
: base(context, typeModel) : base(context, typeModel)
{ {
this.typeModel = typeModel; this.typeModel = typeModel;
this.InfoLocation = GetInfoLocationOld();
}
public CodeType(CodeModelContext context, ITypeDefinition typeDefinition)
: base(context, typeDefinition)
{
this.typeDefinition = typeDefinition;
this.InfoLocation = GetInfoLocation(); this.InfoLocation = GetInfoLocation();
} }
global::EnvDTE.vsCMInfoLocation GetInfoLocation() global::EnvDTE.vsCMInfoLocation GetInfoLocation()
{
if (typeDefinition.ParentAssembly.IsMainAssembly) {
return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject;
}
return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;
}
global::EnvDTE.vsCMInfoLocation GetInfoLocationOld()
{ {
if (typeModel != null) { if (typeModel != null) {
return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject; return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject;
@ -71,9 +87,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE
} }
public virtual global::EnvDTE.vsCMAccess Access { public virtual global::EnvDTE.vsCMAccess Access {
get { return typeModel.Accessibility.ToAccess(); } get { return typeDefinition.Accessibility.ToAccess(); }
set { set {
ITypeDefinition typeDefinition = typeModel.Resolve();
if (typeDefinition != null) { if (typeDefinition != null) {
context.CodeGenerator.ChangeAccessibility(typeDefinition, value.ToAccessibility()); context.CodeGenerator.ChangeAccessibility(typeDefinition, value.ToAccessibility());
} }
@ -82,7 +97,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual string FullName { public virtual string FullName {
get { get {
FullTypeName fullTypeName = typeModel.FullTypeName; FullTypeName fullTypeName = GetFullTypeName();
var fullName = new StringBuilder(); var fullName = new StringBuilder();
if (!string.IsNullOrEmpty(fullTypeName.TopLevelTypeName.Namespace)) { if (!string.IsNullOrEmpty(fullTypeName.TopLevelTypeName.Namespace)) {
fullName.Append(fullTypeName.TopLevelTypeName.Namespace); fullName.Append(fullTypeName.TopLevelTypeName.Namespace);
@ -97,6 +112,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE
} }
} }
FullTypeName GetFullTypeName()
{
if (typeModel != null) {
return typeModel.FullTypeName;
}
return typeDefinition.FullTypeName;
}
public virtual global::EnvDTE.CodeElements Members { public virtual global::EnvDTE.CodeElements Members {
get { get {
if (members == null) { if (members == null) {
@ -151,7 +174,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.ProjectItem ProjectItem { public virtual global::EnvDTE.ProjectItem ProjectItem {
get { get {
if (context.CurrentProject != null) { if (context.CurrentProject != null) {
return EnvDTE.ProjectItem.FindByEntity(context.CurrentProject, typeModel); return EnvDTE.ProjectItem.FindByEntity(context.CurrentProject, typeDefinition);
} }
return null; return null;
} }
@ -163,8 +186,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE
/// </summary> /// </summary>
protected override bool GetIsDerivedFrom(string fullName) protected override bool GetIsDerivedFrom(string fullName)
{ {
ITypeDefinition typeDefinition = typeModel.Resolve(); return typeDefinition
return typeDefinition != null && typeDefinition.GetAllBaseTypeDefinitions().Any(baseType => baseType.FullName == fullName); .GetAllBaseTypeDefinitions()
.Any(baseType => baseType.FullName == fullName);
} }
} }
} }

6
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs

@ -314,11 +314,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
internal ProjectItem FindProjectItem(string fileName) internal ProjectItem FindProjectItem(string fileName)
{ {
SD.FileProjectItem item = MSBuildProject.FindFile(new FileName(fileName)); return ProjectItem.FindByFileName(MSBuildProject, fileName);
if (item != null) {
return new ProjectItem(this, item);
}
return null;
} }
internal IViewContent GetOpenFile(string fileName) internal IViewContent GetOpenFile(string fileName)

19
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs

@ -2,12 +2,11 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.ComponentModel;
using System.IO; using System.IO;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using SD = ICSharpCode.SharpDevelop.Project; using SD = ICSharpCode.SharpDevelop.Project;
@ -40,9 +39,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return new FileProjectItems(this); return new FileProjectItems(this);
} }
internal static ProjectItem FindByEntity(IProject project, IEntityModel entity) internal static ProjectItem FindByEntity(IProject project, IEntity entity)
{ {
throw new NotImplementedException(); if (entity.Region.FileName != null) {
return FindByFileName(project, entity.Region.FileName);
}
return null;
}
internal static ProjectItem FindByFileName(IProject project, string fileName)
{
SD.FileProjectItem item = project.FindFile(new FileName(fileName));
if (item != null) {
return new ProjectItem(new Project(project as MSBuildBasedProject), item);
}
return null;
} }
// internal ProjectItem(MSBuildBasedProject project, IClass c) // internal ProjectItem(MSBuildBasedProject project, IClass c)

4
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs

@ -22,8 +22,8 @@ namespace PackageManagement.Tests.EnvDTE
void CreateClass(string code) void CreateClass(string code)
{ {
AddCodeFile("class.cs", code); AddCodeFile("class.cs", code);
ITypeDefinitionModel typeModel = assemblyModel.TopLevelTypeDefinitions.Single(); ITypeDefinition typeDefinition = assemblyModel.TopLevelTypeDefinitions.Single().Resolve();
codeClass = new CodeClass2(codeModelContext, typeModel); codeClass = new CodeClass2(codeModelContext, typeDefinition);
} }
[Test] [Test]

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

@ -71,26 +71,6 @@ namespace PackageManagement.Tests.EnvDTE
AddCodeFile("class.cs", code); AddCodeFile("class.cs", code);
} }
// void AddClassToDifferentProjectContent(string className)
// {
// helper.AddClassToDifferentProjectContent(className);
// }
//
// void AddClassToProjectContent(string namespaceName, string className)
// {
// helper.AddClassToProjectContentAndCompletionEntries(namespaceName, className);
// }
//
// void AddInterfaceToProjectContent(string interfaceName)
// {
// helper.AddInterfaceToProjectContent(interfaceName);
// }
//
// void AddInterfaceToDifferentProjectContent(string interfaceName)
// {
// helper.AddInterfaceToDifferentProjectContent(interfaceName);
// }
//
[Test] [Test]
public void CodeTypeFromFullName_NoSuchTypeInProject_ReturnsNull() public void CodeTypeFromFullName_NoSuchTypeInProject_ReturnsNull()
{ {
@ -217,39 +197,40 @@ namespace PackageManagement.Tests.EnvDTE
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, codeClass.InfoLocation); Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, codeClass.InfoLocation);
} }
//
// [Test] [Test]
// public void CodeTypeFromFullName_ClassExistsInDifferentProject_InfoLocationIsExternal() public void CodeTypeFromFullName_ClassExistsInDifferentAssembly_InfoLocationIsExternal()
// { {
// CreateCodeModel(); CreateCodeModel();
// AddClassToDifferentProjectContent("Tests.TestClass");
// var codeClass = codeModel.CodeTypeFromFullName("System.String") as CodeClass2;
// var codeClass = codeModel.CodeTypeFromFullName("Tests.TestClass") as CodeClass2;
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeClass.InfoLocation);
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeClass.InfoLocation); }
// }
// [Test]
// [Test] public void CodeTypeFromFullName_InterfaceExistsInProject_InfoLocationIsLocalProject()
// public void CodeTypeFromFullName_InterfaceExistsInProject_InfoLocationIsLocalProject() {
// { CreateCodeModel();
// CreateCodeModel(); AddClassToProject(
// AddInterfaceToProjectContent("Tests.ITest"); "namespace Tests {\r\n" +
// " public interface ITest {} \r\n" +
// var codeInterface = codeModel.CodeTypeFromFullName("Tests.ITest") as CodeInterface; "}");
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, codeInterface.InfoLocation); var codeInterface = codeModel.CodeTypeFromFullName("Tests.ITest") as CodeInterface;
// }
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, codeInterface.InfoLocation);
// [Test] }
// public void CodeTypeFromFullName_InterfaceExistsInDifferentProject_InfoLocationIsExternal()
// { [Test]
// CreateCodeModel(); public void CodeTypeFromFullName_InterfaceExistsInDifferentAssembly_InfoLocationIsExternal()
// AddInterfaceToDifferentProjectContent("Tests.ITest"); {
// CreateCodeModel();
// var codeInterface = codeModel.CodeTypeFromFullName("Tests.ITest") as CodeInterface;
// var codeInterface = codeModel.CodeTypeFromFullName("System.IDisposable") as CodeInterface;
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeInterface.InfoLocation);
// } Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeInterface.InfoLocation);
}
[Test] [Test]
public void Language_CSharpProject_ReturnsCSharpProjectGuid() public void Language_CSharpProject_ReturnsCSharpProjectGuid()
@ -272,7 +253,6 @@ namespace PackageManagement.Tests.EnvDTE
} }
[Test] [Test]
[Ignore("TODO - Use NRefactory")]
public void CodeTypeFromFullName_SystemString_ReturnsCodeClass2() public void CodeTypeFromFullName_SystemString_ReturnsCodeClass2()
{ {
CreateCodeModel(); CreateCodeModel();

373
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs

@ -1,198 +1,175 @@
//// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // 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) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
//
//using System; using System;
//using ICSharpCode.PackageManagement.EnvDTE; using System.Linq;
//using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.Core;
//using SDProject = ICSharpCode.SharpDevelop.Project; using ICSharpCode.NRefactory.TypeSystem;
//using NUnit.Framework; using ICSharpCode.PackageManagement.EnvDTE;
//using PackageManagement.Tests.Helpers; using ICSharpCode.SharpDevelop.Dom;
// using FileProjectItem = ICSharpCode.SharpDevelop.Project.FileProjectItem;
//namespace PackageManagement.Tests.EnvDTE using NUnit.Framework;
//{ using PackageManagement.Tests.Helpers;
// [TestFixture] using Rhino.Mocks;
// public class CodeTypeTests using SDProject = ICSharpCode.SharpDevelop.Project;
// {
// CodeType codeType; namespace PackageManagement.Tests.EnvDTE
// ClassHelper helper; {
// [TestFixture]
// void CreateProjectContent() public class CodeTypeTests : CodeModelTestBase
// { {
// helper = new ClassHelper(); CodeType codeType;
// }
// void CreateCodeType(string code, string fileName = "class.cs")
// void CreateClass(string name) {
// { AddCodeFile(fileName, code);
// helper.CreateClass(name); ITypeDefinition typeDefinition = assemblyModel.TopLevelTypeDefinitions.Single().Resolve();
// } CreateCodeType(typeDefinition);
// }
// void CreateCodeType()
// { void CreateCodeType(ITypeDefinition typeDefinition)
// codeType = new CodeType(helper.ProjectContentHelper.ProjectContent, helper.Class); {
// } codeType = new CodeType(codeModelContext, typeDefinition);
// }
// TestableProject AddProjectToProjectContent()
// { FileProjectItem AddFileToProject(string fileName)
// TestableProject project = ProjectHelper.CreateTestProject(); {
// helper.ProjectContentHelper.SetProjectForProjectContent(project); var projectItem = new FileProjectItem(project, ICSharpCode.SharpDevelop.Project.ItemType.Compile);
// return project; project
// } .Stub(p => p.FindFile(new FileName(fileName)))
// .Return(projectItem);
// void AddAttributeToClass(string name)
// { project
// helper.AddAttributeToClass(name); .Stub(p => p.SyncRoot)
// } .Return(new object());
//
// SDProject.FileProjectItem AddFileToProjectAndProjectContent(TestableProject project, string fileName) return projectItem;
// { }
// helper.CompilationUnitHelper.SetFileName(fileName);
// return project.AddFile(fileName); [Test]
// } public void Attributes_ClassHasOneAttribute_ReturnsOneAttribute()
// {
// /// <summary> CreateCodeType("[TestAttribute] public class TestClass {}");
// /// Classes at the end of the array are at the top of the inheritance tree.
// /// </summary> global::EnvDTE.CodeElements attributes = codeType.Attributes;
// void AddClassInheritanceTree(params string[] classNames)
// { CodeAttribute2 attribute = attributes.Item(1) as CodeAttribute2;
// helper.AddClassInheritanceTreeClassesOnly(classNames); Assert.AreEqual(1, attributes.Count);
// } Assert.AreEqual("Test", attribute.Name);
// }
// [Test]
// public void Attributes_ClassHasOneAttribute_ReturnsOneAttribute() [Test]
// { public void ProjectItem_TypeNotFromProject_ReturnsNull()
// CreateProjectContent(); {
// CreateClass("TestClass"); AddCodeFile("class.cs", "public class TestClass {}");
// AddAttributeToClass("TestAttribute"); ITypeDefinition typeDefinition = projectContent
// CreateCodeType(); .CreateCompilation()
// .ReferencedAssemblies
// global::EnvDTE.CodeElements attributes = codeType.Attributes; .FirstOrDefault()
// .TopLevelTypeDefinitions.First();
// CodeAttribute2 attribute = attributes.Item(1) as CodeAttribute2; CreateCodeType(typeDefinition);
//
// Assert.AreEqual(1, attributes.Count); global::EnvDTE.ProjectItem item = codeType.ProjectItem;
// Assert.AreEqual("Test", attribute.Name);
// } Assert.IsNull(item);
// }
// [Test]
// public void ProjectItem_ProjectContentHasNullProject_ReturnsNull() [Test]
// { public void ProjectItem_TypeIsFromProject_ReturnsNonNullProjectItem()
// CreateProjectContent(); {
// CreateClass("Class1"); string fileName = @"d:\projects\MyProject\class1.cs";
// CreateCodeType(); CreateCodeType("public class TestClass {}", fileName);
// AddFileToProject(fileName);
// global::EnvDTE.ProjectItem item = codeType.ProjectItem;
// global::EnvDTE.ProjectItem item = codeType.ProjectItem;
// Assert.IsNull(item);
// } Assert.IsNotNull(item);
// }
// [Test]
// public void ProjectItem_ProjectContentHasProject_ReturnsNonNullProjectItem() [Test]
// { public void ProjectItem_TypeIsFromProject_ReturnsProjectItemThatUsesProject()
// CreateProjectContent(); {
// TestableProject project = AddProjectToProjectContent(); string fileName = @"d:\projects\MyProject\class1.cs";
// AddFileToProjectAndProjectContent(project, @"d:\projects\MyProject\class1.cs"); CreateCodeType("public class TestClass {}", fileName);
// CreateClass("Class1"); TestableProject testableProject = ProjectHelper.CreateTestProject();
// CreateCodeType(); testableProject.FileName = new FileName(@"d:\projects\MyProject\MyProject.csproj");
// codeModelContext.CurrentProject = testableProject;
// global::EnvDTE.ProjectItem item = codeType.ProjectItem; testableProject.AddFile(fileName);
//
// Assert.IsNotNull(item); global::EnvDTE.ProjectItem item = codeType.ProjectItem;
// }
// Assert.AreEqual(@"d:\projects\MyProject\MyProject.csproj", item.ContainingProject.FileName);
// [Test] }
// public void ProjectItem_ProjectContentHasProject_ReturnsProjectItemThatUsesProject()
// { [Test]
// CreateProjectContent(); public void ProjectItem_ProjectContentHasProject_ReturnsProjectItemThatUsesProjectFileItem()
// TestableProject project = AddProjectToProjectContent(); {
// project.FileName = @"d:\projects\MyProject\MyProject.csproj"; string fileName = @"d:\projects\MyProject\test.cs";
// AddFileToProjectAndProjectContent(project, @"d:\projects\MyProject\class1.cs"); CreateCodeType("public class TestClass {}", fileName);
// CreateClass("Class1"); TestableProject testableProject = ProjectHelper.CreateTestProject();
// CreateCodeType(); testableProject.FileName = new FileName(@"d:\projects\MyProject\MyProject.csproj");
// codeModelContext.CurrentProject = testableProject;
// global::EnvDTE.ProjectItem item = codeType.ProjectItem; testableProject.AddFile(fileName);
//
// Assert.AreEqual(@"d:\projects\MyProject\MyProject.csproj", item.ContainingProject.FileName); global::EnvDTE.ProjectItem item = codeType.ProjectItem;
// }
// Assert.AreEqual("test.cs", item.Name);
// [Test] }
// public void ProjectItem_ProjectContentHasProject_ReturnsProjectItemThatUsesProjectFileItem()
// { [Test]
// CreateProjectContent(); public void IsDerivedFrom_ClassFullyQualifiedNameMatchesTypeNameBeingChecked_ReturnsTrue()
// TestableProject project = AddProjectToProjectContent(); {
// string fileName = @"d:\projects\MyProject\test.cs"; CreateCodeType(
// SDProject.FileProjectItem fileProjectItem = AddFileToProjectAndProjectContent(project, fileName); "namespace System.Web.Mvc {\r\n" +
// " public class ActionResult {}\r\n" +
// CreateClass("Class1"); "}");
// CreateCodeType();
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
// global::EnvDTE.ProjectItem item = codeType.ProjectItem;
// Assert.IsTrue(derivedFrom);
// Assert.AreEqual("test.cs", item.Name); }
// }
// [Test]
// [Test] public void IsDerivedFrom_ClassFullyQualifiedNameDoesNotMatchTypeNameBeingChecked_ReturnsFalse()
// public void IsDerivedFrom_ClassFullyQualifiedNameMatchesTypeNameBeingChecked_ReturnsTrue() {
// { CreateCodeType("public class Test {}");
// CreateProjectContent();
// CreateClass("System.Web.Mvc.ActionResult"); bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
// CreateCodeType();
// Assert.IsFalse(derivedFrom);
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult"); }
//
// Assert.IsTrue(derivedFrom); [Test]
// } public void IsDerivedFrom_ClassBaseTypeFullyQualifiedNameMatchesTypeName_ReturnsTrue()
// {
// [Test] AddCodeFile(
// public void IsDerivedFrom_ClassFullyQualifiedNameDoesNotMatcheTypeNameBeingChecked_ReturnsFalse() "class.cs",
// { "namespace System.Web.Mvc {\r\n" +
// CreateProjectContent(); " public class CustomActionResult : ActionResult {}\r\n" +
// CreateClass("TestClass"); " public class ActionResult {}\r\n" +
// AddClassInheritanceTree("System.Object"); "}");
// CreateCodeType(); CreateCodeType(assemblyModel.TopLevelTypeDefinitions.First().Resolve());
//
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult"); bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
//
// Assert.IsFalse(derivedFrom); Assert.IsTrue(derivedFrom);
// } }
//
// [Test] [Test]
// public void IsDerivedFrom_ClassBaseTypeFullyQualifiedNameMatchesTypeName_ReturnsTrue() public void IsDerivedFrom_ClassHasTypeInClassInheritanceTreeButNotImmediateBaseType_ReturnsTrue()
// { {
// CreateProjectContent(); AddCodeFile(
// CreateClass("CustomActionResult"); "class.cs",
// helper.AddBaseTypeToClass("System.Web.Mvc.ActionResult"); "namespace System.Web.Mvc {\r\n" +
// CreateCodeType(); " public class CustomActionResult : CustomActionResultBase {}\r\n" +
// " public class CustomActionResultBase : ActionResult {}\r\n" +
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult"); " public class ActionResult {}\r\n" +
// "}");
// Assert.IsTrue(derivedFrom); CreateCodeType(assemblyModel.TopLevelTypeDefinitions.First().Resolve());
// }
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
// [Test]
// public void IsDerivedFrom_ClassHasTypeInClassInheritanceTreeButNotImmediateBaseType_ReturnsTrue() Assert.IsTrue(derivedFrom);
// { }
// CreateProjectContent(); }
// CreateClass("CustomActionResult"); }
// AddClassInheritanceTree("CustomActionResultBase", "System.Web.Mvc.ActionResult");
// CreateCodeType();
//
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
//
// Assert.IsTrue(derivedFrom);
// }
//
// [Test]
// public void IsDerivedFrom_ClassHasClassInInheritanceTreeButNotImmediateParentAndClassBaseTypePropertyIsNotNull_ReturnsTrue()
// {
// CreateProjectContent();
// CreateClass("CustomActionResult");
// helper.AddBaseTypeToClass("CustomActionResultBase");
// AddClassInheritanceTree("CustomActionResultBase", "System.Web.Mvc.ActionResult");
// CreateCodeType();
//
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
//
// Assert.IsTrue(derivedFrom);
// }
// }
//}

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

@ -44,16 +44,6 @@ namespace PackageManagement.Tests.EnvDTE
AddCodeFile("class.cs", code); AddCodeFile("class.cs", code);
} }
void SetProjectForProjectContent()
{
// helper.SetProjectForProjectContent(msbuildProject);
}
void SetDifferentProjectForProjectContent()
{
// helper.SetProjectForProjectContent(ProjectHelper.CreateTestProject());
}
void SetParentSolutionFileName(string fileName) void SetParentSolutionFileName(string fileName)
{ {
var solutionFileName = new FileName(fileName); var solutionFileName = new FileName(fileName);
@ -234,29 +224,30 @@ namespace PackageManagement.Tests.EnvDTE
} }
[Test] [Test]
[Ignore("TODO")] public void CodeModel_ClassExistsInProject_ReturnsClassWithLocationSetToInProject()
public void CodeModel_ClassExistsInProjectContentForProject_ReturnsClassWithLocationSetToInProject()
{ {
CreateProject(); CreateProject();
SetProjectForProjectContent(); AddClassToProject("public class MyClass {}");
//helper.AddClassToCompletionEntries(String.Empty, "MyClass");
//CodeElement element = project.CodeModel.CodeElements.FirstOrDefault(); CodeElement element = dteProject.CodeModel.CodeElements
.FindFirstOrDefault(e => e.Name == "MyClass");
//Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, element.InfoLocation); Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, element.InfoLocation);
} }
[Test] [Test]
[Ignore("TODO")] public void CodeModel_ClassExistsInDifferentAssembly_ReturnsClassWithLocationSetToExternal()
public void CodeModel_ClassExistsInProjectContentForDifferentProject_ReturnsClassWithLocationSetToExternal()
{ {
CreateProject(); CreateProject();
//SetProjectForProjectContent();
//helper.AddClassCompletionEntriesInDifferentProjectContent(String.Empty, "MyClass");
//CodeElement element = project.CodeModel.CodeElements.FirstOrDefault(); CodeElement element = dteProject
.CodeModel
.CodeElements
.FindFirstCodeNamespaceOrDefault(e => e.Name == "System")
.Members
.FindFirstOrDefault(e => e.Name == "String");
//Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, element.InfoLocation); Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, element.InfoLocation);
} }
[Test] [Test]

5
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/CodeElementsExtensions.cs

@ -19,6 +19,11 @@ namespace PackageManagement.Tests.Helpers
return list; return list;
} }
public static CodeElement FindFirstOrDefault(this global::EnvDTE.CodeElements codeElements, Func<CodeElement, bool> predicate)
{
return ToList(codeElements).FirstOrDefault(predicate);
}
public static CodeElement FirstOrDefault(this global::EnvDTE.CodeElements codeElements) public static CodeElement FirstOrDefault(this global::EnvDTE.CodeElements codeElements)
{ {
return ToList(codeElements).FirstOrDefault(); return ToList(codeElements).FirstOrDefault();

Loading…
Cancel
Save