17
using System.Threading.Tasks;
18
using System.Threading;
25
public static void test_simple_task_run()
27
Efl.Loop loop = Efl.App.AppMain;
28
Eina.Future future = loop.Idle();
30
bool callbackCalled = false;
33
future.Then((Eina.Value value) => {
34
callbackCalled = true;
35
Eina.Value v = new Eina.Value(Eina.ValueType.Int32);
40
Eina.Value ret_value = loop.Begin();
42
Test.Assert(callbackCalled, "Future loop callback must have been called.");
44
Test.AssertEquals(ret_value.GetValueType(), Eina.ValueType.Int32);
47
Test.Assert(ret_value.Get(out ret_from_value));
48
Test.AssertEquals(ret_from_value, ret_code);
52
public static void test_object_promise()
54
Efl.Loop loop = Efl.App.AppMain;
55
var obj = new Dummy.TestObject();
57
Eina.Future future = obj.GetFuture();
59
bool callbackCalled = false;
60
int receivedValue = -1;
62
future.Then((Eina.Value value) => {
63
callbackCalled = true;
64
Test.AssertEquals(value.GetValueType(), Eina.ValueType.Int32);
65
value.Get(out receivedValue);
70
obj.FulfillPromise(sentValue);
73
Test.Assert(callbackCalled, "Future callback must have been called.");
74
Test.AssertEquals(receivedValue, sentValue);
78
public static void test_object_promise_cancel()
80
Efl.Loop loop = Efl.App.AppMain;
81
var obj = new Dummy.TestObject();
83
Eina.Future future = obj.GetFuture();
85
bool callbackCalled = false;
86
Eina.Error receivedError = -1;
87
Eina.Error sentError = 120;
88
future.Then((Eina.Value value) => {
89
callbackCalled = true;
90
Test.AssertEquals(value.GetValueType(), Eina.ValueType.Error);
91
value.Get(out receivedError);
96
obj.RejectPromise(sentError);
99
Test.Assert(callbackCalled, "Future callback must have been called.");
100
Test.AssertEquals(receivedError, sentError);
108
public static async Task Consume(Efl.Loop loop)
110
Task<Eina.Value> task = loop.IdleAsync();
111
Eina.Value v = await task.ConfigureAwait(false);
116
class TestLoopEoAsyncMethods
118
public static void test_simple_async()
120
Efl.Loop loop = Efl.App.AppMain;
121
Task t = LoopConsumer.Consume(loop);
124
Test.Assert(t.Wait(1000), "Task should have been completed in time.");
128
class TestEoAsyncMethods
131
public static void test_async_fulfill()
133
Efl.Loop loop = Efl.App.AppMain;
134
var obj = new Dummy.TestObject();
136
Task<Eina.Value> task = obj.GetFutureAsync();
138
int sentValue = 1337;
140
obj.FulfillPromise(sentValue);
143
Eina.Value v = task.Result;
144
Test.AssertEquals(v.GetValueType(), Eina.ValueType.Int32);
147
v.Get(out receivedValue);
148
Test.AssertEquals(receivedValue, sentValue);
152
public static void test_async_cancel()
154
Efl.Loop loop = Efl.App.AppMain;
155
var obj = new Dummy.TestObject();
157
CancellationTokenSource cancelSrc = new CancellationTokenSource();
158
Task<Eina.Value> task = obj.GetFutureAsync(cancelSrc.Token);
166
Eina.Value v = task.Result;
168
catch (AggregateException ae)
173
Test.Assert(x is TaskCanceledException, "AggregateException must have been TaskCanceledException");
178
Test.Assert(raised, "AggregateException must have been raised.");
183
public static void test_async_reject()
185
Efl.Loop loop = Efl.App.AppMain;
186
var obj = new Dummy.TestObject();
188
Task<Eina.Value> task = obj.GetFutureAsync();
190
Eina.Error sentError = 1337;
191
obj.RejectPromise(sentError);
198
Eina.Value v = task.Result;
200
catch (AggregateException ae)
205
Test.Assert(x is Efl.FutureException, "AggregateException must have been TaskCanceledException");
206
Efl.FutureException ex = x as Efl.FutureException;
207
Test.AssertEquals(ex.Error, sentError);
212
Test.Assert(raised, "AggregateException must have been raised.");