Browse Source

Fix null reference when accessing the InfoLocation of a EnvDTE CodeProperty's Type.

pull/28/head
Matt Ward 14 years ago
parent
commit
baa60e5fb4
  1. 2
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs
  2. 36
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs
  3. 5
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ClassHelper.cs
  4. 2
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs
  5. 9
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs
  6. 2
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs

2
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs

@ -38,7 +38,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
} }
public virtual CodeTypeRef Type { public virtual CodeTypeRef Type {
get { return new CodeTypeRef2(null, this, Property.ReturnType); } get { return new CodeTypeRef2(Property.ProjectContent, this, Property.ReturnType); }
} }
public virtual CodeFunction Getter { public virtual CodeFunction Getter {

36
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs

@ -267,6 +267,42 @@ namespace PackageManagement.Tests.EnvDTE
Assert.AreEqual(property, parent); Assert.AreEqual(property, parent);
} }
[Test]
public void Type_PropertyTypeIsSystemString_TypeRefTypeInfoLocationIsExternal()
{
helper.CreatePublicProperty("MyProperty");
helper.SetPropertyReturnType("System.String");
helper.CreateProjectForProjectContent();
var classHelper = new ClassHelper();
classHelper.CreateClass("System.String");
classHelper.SetProjectForProjectContent(null);
helper.ReturnTypeHelper.AddUnderlyingClass(classHelper.Class);
CreateCodeProperty2();
CodeTypeRef typeRef = property.Type;
vsCMInfoLocation location = typeRef.CodeType.InfoLocation;
Assert.AreEqual(vsCMInfoLocation.vsCMInfoLocationExternal, location);
}
[Test]
public void Type_PropertyTypeExistsInProject_TypeRefTypeInfoLocationIsProject()
{
helper.CreatePublicProperty("MyProperty");
helper.SetPropertyReturnType("MyType");
helper.CreateProjectForProjectContent();
var classHelper = new ClassHelper();
classHelper.CreateClass("MyType");
classHelper.SetProjectForProjectContent(helper.Project);
helper.ReturnTypeHelper.AddUnderlyingClass(classHelper.Class);
CreateCodeProperty2();
CodeTypeRef typeRef = property.Type;
vsCMInfoLocation location = typeRef.CodeType.InfoLocation;
Assert.AreEqual(vsCMInfoLocation.vsCMInfoLocationProject, location);
}
[Test] [Test]
public void Kind_PublicProperty_ReturnsProperty() public void Kind_PublicProperty_ReturnsProperty()
{ {

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

@ -157,5 +157,10 @@ namespace PackageManagement.Tests.Helpers
{ {
Class.Stub(c => c.ClassType).Return(type); Class.Stub(c => c.ClassType).Return(type);
} }
public void SetProjectForProjectContent(object project)
{
ProjectContentHelper.SetProjectForProjectContent(project);
}
} }
} }

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

@ -22,7 +22,7 @@ namespace PackageManagement.Tests.Helpers
ProjectContent.Stub(pc => pc.NamespaceNames).Return(NamespaceNames); ProjectContent.Stub(pc => pc.NamespaceNames).Return(NamespaceNames);
} }
public void SetProjectForProjectContent(IProject project) public void SetProjectForProjectContent(object project)
{ {
ProjectContent.Stub(pc => pc.Project).Return(project); ProjectContent.Stub(pc => pc.Project).Return(project);
} }

9
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs

@ -122,5 +122,14 @@ namespace PackageManagement.Tests.Helpers
ReturnTypeHelper.AddDotNetName(fullName); ReturnTypeHelper.AddDotNetName(fullName);
Property.Stub(p => p.ReturnType).Return(ReturnTypeHelper.ReturnType); Property.Stub(p => p.ReturnType).Return(ReturnTypeHelper.ReturnType);
} }
public object Project {
get { return ProjectContentHelper.ProjectContent.Project; }
}
public void CreateProjectForProjectContent()
{
ProjectContentHelper.SetProjectForProjectContent(ProjectHelper.CreateTestProject());
}
} }
} }

2
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs

@ -32,7 +32,5 @@ namespace PackageManagement.Tests.Helpers
{ {
ReturnType.Stub(t => t.GetUnderlyingClass()).Return(c); ReturnType.Stub(t => t.GetUnderlyingClass()).Return(c);
} }
} }
} }

Loading…
Cancel
Save