Browse Source

Fixed null reference exception in the python forms designer when generating code for properties that have a null property value.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4625 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 16 years ago
parent
commit
a3afc53c60
  1. 10
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerComponent.cs
  2. 43
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/AppendNullPropertyValueTestFixture.cs
  3. 1
      src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj

10
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerComponent.cs

@ -543,7 +543,7 @@ namespace ICSharpCode.PythonBinding
} }
} else if (IsResourcePropertyValue(propertyValue)) { } else if (IsResourcePropertyValue(propertyValue)) {
AppendResourceProperty(codeBuilder, propertyName, propertyValue); AppendResourceProperty(codeBuilder, propertyName, propertyValue);
} else if (propertyValue.GetType().IsArray) { } else if (IsArray(propertyValue)) {
codeBuilder.AppendIndented(propertyName + " = "); codeBuilder.AppendIndented(propertyName + " = ");
AppendSystemArray(codeBuilder, GetArrayType(propertyValue).FullName, propertyValue as ICollection, false); AppendSystemArray(codeBuilder, GetArrayType(propertyValue).FullName, propertyValue as ICollection, false);
codeBuilder.AppendLine(); codeBuilder.AppendLine();
@ -891,5 +891,13 @@ namespace ICSharpCode.PythonBinding
Type type = obj.GetType(); Type type = obj.GetType();
return obj.GetType().GetElementType(); return obj.GetType().GetElementType();
} }
static bool IsArray(object obj)
{
if (obj != null) {
return obj.GetType().IsArray;
}
return false;
}
} }
} }

43
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/AppendNullPropertyValueTestFixture.cs

@ -0,0 +1,43 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.ComponentModel;
using ICSharpCode.PythonBinding;
using NUnit.Framework;
namespace PythonBinding.Tests.Designer
{
/// <summary>
/// Tests that a null property value does not cause a NullReferenceException in the
/// PythonControl's AppendProperty method.
/// </summary>
[TestFixture]
public class AppendNullPropertyValueTestFixture
{
string fooBar;
public string FooBar {
get { return fooBar; }
set { fooBar = value; }
}
[Test]
public void GeneratedCode()
{
string expectedCode = "self._myObject.FooBar = None\r\n";
PropertyDescriptor propertyDescriptor = TypeDescriptor.GetProperties(this).Find("FooBar", false);
PythonDesignerComponent designerComponent = new PythonDesignerComponent(null);
PythonCodeBuilder codeBuilder = new PythonCodeBuilder();
designerComponent.AppendProperty(codeBuilder, "self._myObject", this, propertyDescriptor);
string generatedCode = codeBuilder.ToString();
Assert.AreEqual(expectedCode, generatedCode, generatedCode);
}
}
}

1
src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj

@ -161,6 +161,7 @@
<Compile Include="Converter\WhileLoopConversionTestFixture.cs" /> <Compile Include="Converter\WhileLoopConversionTestFixture.cs" />
<Compile Include="Converter\XmlDocCommentConversionTestFixture.cs" /> <Compile Include="Converter\XmlDocCommentConversionTestFixture.cs" />
<Compile Include="DebugPythonCommandTestFixture.cs" /> <Compile Include="DebugPythonCommandTestFixture.cs" />
<Compile Include="Designer\AppendNullPropertyValueTestFixture.cs" />
<Compile Include="Designer\ConvertCustomClassUsingTypeConverterTestFixture.cs" /> <Compile Include="Designer\ConvertCustomClassUsingTypeConverterTestFixture.cs" />
<Compile Include="Designer\CreateDesignerComponentTests.cs" /> <Compile Include="Designer\CreateDesignerComponentTests.cs" />
<Compile Include="Designer\CursorTypeResolutionTestFixture.cs" /> <Compile Include="Designer\CursorTypeResolutionTestFixture.cs" />

Loading…
Cancel
Save