-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathForeachActionTests.cs
85 lines (78 loc) · 2.71 KB
/
ForeachActionTests.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
using Microsoft.VisualStudio.TestTools.UnitTesting;
using DSM.Metadata.Actions;
using DSM.Metadata.States;
using System.Threading.Tasks;
namespace DSM.Tests
{
[TestClass]
public partial class ForeachActionTests : TestBase
{
public class TestData
{
public int[] Items;
public int Sum;
public int ArrayItem;
}
[TestMethod]
[TestScaffold]
public async Task Foreach(ScaffoldFactoryDelegate factory, string _)
{
var machine = new StateMachine<TestData>
{
Id = "test",
InitialState = "loop",
States =
{
new AtomicState<TestData>
{
Id = "loop",
OnEntry = new OnEntryExit<TestData>
{
Actions =
{
new Foreach<TestData>
{
CurrentItem = d => d.ArrayItem,
ValueFunction = data => data.Items,
Actions =
{
new Assign<TestData> { To = d => d.Sum, ValueFunction = d => d.Sum + d.ArrayItem },
new Log<TestData> { MessageFunction = d => $"item = {d.ArrayItem}" }
}
}
}
},
Transitions =
{
new Transition<TestData>
{
ConditionFunction = d => d.Sum >= 15,
Target = "done"
}
}
},
new FinalState<TestData>
{
Id = "done",
OnEntry = new OnEntryExit<TestData>
{
Actions =
{
new Log<TestData> { MessageFunction = d => $"item = {d.ArrayItem}" }
}
}
}
}
};
var data = new TestData
{
Items = new[] { 1, 2, 3, 4, 5 },
Sum = 0
};
var tuple = factory(machine, null, null);
var context = tuple.Item1;
await context.RunAsync(data);
Assert.AreEqual(15, data.Sum);
}
}
}