-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
DelegateArgumentConversionTests.cs
124 lines (108 loc) · 3.28 KB
/
DelegateArgumentConversionTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using NUnit.Framework;
using System;
using System.Linq;
using Tenray.Topaz.API;
namespace Tenray.Topaz.Test;
public sealed class DelegateArgumentConversionTests
{
private sealed class DelegateTester
{
public delegate void DelegateNoArgument();
public delegate int Delegate1(int x);
public delegate int Delegate2(int x, params int[] args);
public DelegateNoArgument TheDelegateNoArgument => Sum;
public Delegate1 TheDelegate1 => Sum;
public Delegate2 TheDelegate2 => Sum;
public int Counter1;
public void Sum()
{
++Counter1;
}
public int Sum(int x)
{
return x;
}
public int Sum(int x, params int[] args)
{
return x + args.Sum();
}
}
[Test]
public void TestDelegateCalls()
{
var engine = new TopazEngine();
dynamic model = new JsObject();
engine.SetValue("model", model);
engine.SetValue("delegateTester", new DelegateTester());
engine.ExecuteScript(@"
model.a = delegateTester.TheDelegate1(3)
model.b = delegateTester.TheDelegate2(5)
model.c = delegateTester.TheDelegate2(7, 5, 3)
model.d = delegateTester.Sum(7)
model.e = delegateTester.Sum(7, 6)
model.f = delegateTester.Sum(7,6,5,4,3,2,1,0)
model.g = delegateTester.Sum(7,6,5,4,3,2,1,0,'33')
model.h = delegateTester.TheDelegate2(7,6,5,4,3,2,1,0,'55')
");
Assert.AreEqual(3, model.a);
Assert.AreEqual(5, model.b);
Assert.AreEqual(15, model.c);
Assert.AreEqual(7, model.d);
Assert.AreEqual(13, model.e);
Assert.AreEqual(28, model.f);
Assert.AreEqual(61, model.g);
Assert.AreEqual(83, model.h);
}
[Test]
public void TestDelegateWithNoArgument()
{
var engine = new TopazEngine();
dynamic model = new JsObject();
engine.SetValue("model", model);
var delegateTester = new DelegateTester();
engine.SetValue("delegateTester", delegateTester);
var test1 = 0;
engine.SetValue("action1", new Action(() => test1 = 1));
engine.ExecuteScript(@"
var a = delegateTester.TheDelegateNoArgument
delegateTester.TheDelegateNoArgument()
a()
action1()
");
Assert.AreEqual(2, delegateTester.Counter1);
Assert.AreEqual(1, test1);
}
[Test]
public void TestActionConstruction()
{
var engine = new TopazEngine();
dynamic model = new JsObject();
engine.SetValue("model", model);
engine.AddType<Action>("Action");
engine.AddType(typeof(Action<>), "Action1d");
engine.AddType(typeof(Func<,>), "Func1d");
engine.ExecuteScript(@"
var b = 1;
var a = new Action(() => { b++; })
a()
a()
model.b = b
var c = new Action1d(b.GetType(), (x) => { model.c = x })
c(37)
var d = new Func1d(b.GetType(), b.GetType(), (x) => { return x * x } )
model.d = d(9)
");
Assert.AreEqual(3, model.b);
Assert.AreEqual(37, model.c);
Assert.AreEqual(81, model.d);
}
[Test]
public void TestLambdaFunction()
{
var engine = new TopazEngine();
bool isCalled = false;
engine.SetValue("print", (string text) => { isCalled = true; });
engine.ExecuteExpression("print('text')");
Assert.IsTrue(isCalled);
}
}