Browse Source

Fixed the generated C# with properties constructed from a returned value and a taken reference.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/696/head
Dimitar Dobrev 9 years ago
parent
commit
6ed05c2b5d
  1. 3
      src/Generator/Generators/CSharp/CSharpSources.cs
  2. 14
      tests/CSharp/CSharp.Tests.cs
  3. 20
      tests/CSharp/CSharp.cpp
  4. 11
      tests/CSharp/CSharp.h

3
src/Generator/Generators/CSharp/CSharpSources.cs

@ -901,6 +901,9 @@ namespace CppSharp.Generators.CSharp
param.QualifiedType = function.Parameters[0].QualifiedType; param.QualifiedType = function.Parameters[0].QualifiedType;
if (!property.Type.Equals(param.Type) && property.Type.IsEnumType())
param.Name = ctx.ArgName = "&" + param.Name;
var method = function as Method; var method = function as Method;
if (function.SynthKind == FunctionSynthKind.AbstractImplCall) if (function.SynthKind == FunctionSynthKind.AbstractImplCall)
GenerateVirtualPropertyCall(method, @class.BaseClass, property, GenerateVirtualPropertyCall(method, @class.BaseClass, property,

14
tests/CSharp/CSharp.Tests.cs

@ -595,6 +595,20 @@ public unsafe class CSharpTests : GeneratorTestFixture
} }
} }
[Test]
public void TestEnumProperty()
{
using (var proprietor = new Proprietor())
{
Assert.That(proprietor.Items, Is.EqualTo(Bar.Items.Item1));
proprietor.Items = Bar.Items.Item2;
Assert.That(proprietor.Items, Is.EqualTo(Bar.Items.Item2));
Assert.That(proprietor.ItemsByValue, Is.EqualTo(Bar.Items.Item1));
proprietor.ItemsByValue = Bar.Items.Item2;
Assert.That(proprietor.ItemsByValue, Is.EqualTo(Bar.Items.Item2));
}
}
[Test] [Test]
public void TestOverrideVirtualWithString() public void TestOverrideVirtualWithString()
{ {

20
tests/CSharp/CSharp.cpp

@ -262,6 +262,26 @@ long Proprietor::prop()
return m_property; return m_property;
} }
Bar::Items Proprietor::items() const
{
return _items;
}
void Proprietor::setItems(const Bar::Items& value)
{
_items = value;
}
Bar::Items Proprietor::itemsByValue() const
{
return _itemsByValue;
}
void Proprietor::setItemsByValue(Bar::Items value)
{
_itemsByValue = value;
}
void P::setValue(int value) void P::setValue(int value)
{ {
m_value = value + 10; m_value = value + 10;

11
tests/CSharp/CSharp.h

@ -159,9 +159,18 @@ public:
virtual void setValue(int value); virtual void setValue(int value);
virtual long prop(); virtual long prop();
Bar::Items items() const;
void setItems(const Bar::Items& value);
Bar::Items itemsByValue() const;
void setItemsByValue(Bar::Items value);
private:
Bar::Items _items;
Bar::Items _itemsByValue;
}; };
Proprietor::Proprietor() {} Proprietor::Proprietor() : _items(Bar::Items::Item1), _itemsByValue(Bar::Items::Item1) {}
template <typename T> template <typename T>
class DLL_API QFlags class DLL_API QFlags

Loading…
Cancel
Save