Support for setting binary operations

This commit is contained in:
2019-09-12 15:21:32 +02:00
parent 8c3db0373b
commit ae2080f145
8 changed files with 212 additions and 6 deletions

View File

@@ -27,6 +27,18 @@ namespace PorygonSharpTests
{
return a + b;
}
public static UserDataTestObject operator + (UserDataTestObject a, UserDataTestObject b)
{
a.Foo += b.Foo;
return a;
}
public static UserDataTestObject operator + (UserDataTestObject a, int b)
{
a.Foo += b;
return a;
}
}
[Test]
@@ -311,5 +323,53 @@ end
Assert.AreEqual(347807, result.EvaluateInteger());
}
}
[Test]
public void CanUseBinaryOperations()
{
UserDataHandler.RegisterType("testObject", typeof(UserDataTestObject));
using (var script = new Script(@"
function test(testObject a, testObject b)
return a + b
end
"))
{
var diags = script.Diagnostics.GetDiagnostics();
foreach (var diag in diags)
{
throw new Exception(script.Diagnostics.GetFullDiagnosticMessage(diag));
}
script.Evaluate();
var a = new UserDataTestObject();
var b = new UserDataTestObject();
var result = script.CallFunction("test", a, b);
Assert.AreEqual(400, ((UserDataTestObject)result.GetObjectValue()).Foo);
}
}
[Test]
public void CanUseBinaryOperationsWithScriptTypes()
{
UserDataHandler.RegisterType("testObject", typeof(UserDataTestObject));
using (var script = new Script(@"
function test(testObject a)
return a + 500
end
"))
{
var diags = script.Diagnostics.GetDiagnostics();
foreach (var diag in diags)
{
throw new Exception(script.Diagnostics.GetFullDiagnosticMessage(diag));
}
script.Evaluate();
var a = new UserDataTestObject();
var result = script.CallFunction("test", a);
Assert.AreEqual(700, ((UserDataTestObject)result.GetObjectValue()).Foo);
}
}
}
}