public static void test_simple_with_object() { bool callbackCalled = false; Eina.Value receivedValue = null; Efl.Loop loop = Efl.App.AppMain; Eina.Promise promise = new Eina.Promise(); Eina.Future future = new Eina.Future(promise); future = future.Then((Eina.Value value) => { callbackCalled = true; receivedValue = new Eina.Value(value); return(value); }); Eina.Value referenceValue = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int32); referenceValue.Append(32); promise.Resolve(new Eina.Value(referenceValue)); loop.Iterate(); Test.Assert(callbackCalled, "Future callback should have been called."); Test.AssertEquals(receivedValue, referenceValue); }
public static void test_reject_on_disposal() { bool callbackCalled = false; Eina.Error received_error = Eina.Error.NO_ERROR; Efl.Loop loop = Efl.App.AppMain; Eina.Promise promise = new Eina.Promise(); Eina.Future future = new Eina.Future(promise); future = future.Then((Eina.Value value) => { callbackCalled = true; value.Get(out received_error); return(value); }); promise.Dispose(); loop.Iterate(); Test.Assert(callbackCalled, "Future callback should have been called."); Test.AssertEquals(received_error, Eina.Error.ECANCELED); Test.AssertRaises <ObjectDisposedException>(() => { promise.Resolve(null); }); Test.AssertRaises <ObjectDisposedException>(future.Cancel); }
public static void test_object_promise_cancel() { Efl.Loop loop = Efl.App.AppMain; var obj = new Dummy.TestObject(); Eina.Future future = obj.GetFuture(); bool callbackCalled = false; Eina.Error receivedError = -1; Eina.Error sentError = 120; future.Then((Eina.Value value) => { callbackCalled = true; Test.AssertEquals(value.GetValueType(), Eina.ValueType.Error); value.Get(out receivedError); return(value); }); obj.RejectPromise(sentError); loop.Iterate(); Test.Assert(callbackCalled, "Future callback must have been called."); Test.AssertEquals(receivedError, sentError); }
public static void test_object_promise() { Efl.Loop loop = Efl.App.AppMain; var obj = new Dummy.TestObject(); Eina.Future future = obj.GetFuture(); bool callbackCalled = false; int receivedValue = -1; int sentValue = 1984; future.Then((Eina.Value value) => { callbackCalled = true; Test.AssertEquals(value.GetValueType(), Eina.ValueType.Int32); value.Get(out receivedValue); return(value); }); obj.FulfillPromise(sentValue); loop.Iterate(); Test.Assert(callbackCalled, "Future callback must have been called."); Test.AssertEquals(receivedValue, sentValue); }
public static void test_simple_task_run() { Efl.Loop loop = Efl.App.AppMain; Eina.Future future = loop.Idle(); bool callbackCalled = false; int ret_code = 1992; future.Then((Eina.Value value) => { callbackCalled = true; Eina.Value v = new Eina.Value(Eina.ValueType.Int32); v.Set(ret_code); loop.Quit(v); return(value); }); Eina.Value ret_value = loop.Begin(); Test.Assert(callbackCalled, "Future loop callback must have been called."); Test.AssertEquals(ret_value.GetValueType(), Eina.ValueType.Int32); int ret_from_value; Test.Assert(ret_value.Get(out ret_from_value)); Test.AssertEquals(ret_from_value, ret_code); }
public static void test_then_chaining() { bool[] callbacksCalled = { false, false, false, false }; Eina.Value[] received_value = { null, null, null, null }; FutureCbGenerator genResolvedCb = (int i) => { return((Eina.Value value) => { callbacksCalled[i] = true; int x; value.Get(out x); value.Set(x + i); received_value[i] = value; return value; }); }; Efl.Loop loop = Efl.App.AppMain; Eina.Promise promise = new Eina.Promise(); Eina.Future future = new Eina.Future(promise); for (int i = 0; i < 4; i++) { future = future.Then(genResolvedCb(i)); } Eina.Value reference_value = new Eina.Value(Eina.ValueType.Int32); reference_value.Set(0); promise.Resolve(reference_value); loop.Iterate(); int current_value = 0; for (int i = 0; i < 4; i++) { current_value += i; Test.Assert(callbacksCalled[i], $"Future callback {i} should have been called."); int received; received_value[i].Get(out received); Test.AssertEquals(received, current_value); } Test.AssertRaises <ObjectDisposedException>(() => { promise.Resolve(null); }); Test.AssertRaises <ObjectDisposedException>(future.Cancel); reference_value.Dispose(); promise.Dispose(); }
public static void test_simple_future_cancel() { bool callbackCalled = false; bool promiseCallbackCalled = false; Eina.Error received_error = Eina.Error.NO_ERROR; Eina.Promise promise = new Eina.Promise(() => { promiseCallbackCalled = true; }); Eina.Future future = new Eina.Future(promise); future = future.Then((Eina.Value value) => { callbackCalled = true; value.Get(out received_error); return(value); }); future.Cancel(); Test.Assert(promiseCallbackCalled, "Promise cancel callback should have been called."); Test.Assert(callbackCalled, "Future callback should have been called."); Test.AssertEquals(received_error, Eina.Error.ECANCELED); }