Пример #1
0
        public void OnContinueRethrowCancelReasonWhenPromiseIsCanceled0()
        {
            CancelationSource cancelationSource1 = CancelationSource.New();
            var deferred = Promise.NewDeferred(cancelationSource1.Token);
            CancelationSource cancelationSource2 = CancelationSource.New();
            var deferredInt = Promise.NewDeferred <int>(cancelationSource2.Token);

            int    cancelations = 0;
            string cancelation  = "Cancel";

            Promise.ResultContainer        voidContainer = default(Promise.ResultContainer);
            Promise <int> .ResultContainer intContainer  = default(Promise <int> .ResultContainer);

            TestHelper.AddContinueCallbacks <int, string>(deferred.Promise,
                                                          onContinue: r => voidContainer = r,
                                                          promiseToVoid: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); voidContainer.RethrowIfCanceled(); },
                                                          promiseToConvert: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); voidContainer.RethrowIfCanceled(); return(0); },
                                                          promiseToPromise: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); voidContainer.RethrowIfCanceled(); return(null); },
                                                          promiseToPromiseConvert: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); voidContainer.RethrowIfCanceled(); return(null); }
                                                          );
            TestHelper.AddContinueCallbacks <int, int, string>(deferredInt.Promise,
                                                               onContinue: r => intContainer = r,
                                                               promiseToVoid: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); intContainer.RethrowIfCanceled(); },
                                                               promiseToConvert: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); intContainer.RethrowIfCanceled(); return(0); },
                                                               promiseToPromise: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); intContainer.RethrowIfCanceled(); return(null); },
                                                               promiseToPromiseConvert: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); intContainer.RethrowIfCanceled(); return(null); }
                                                               );

            cancelationSource1.Cancel(cancelation);
            cancelationSource2.Cancel(cancelation);

            Promise.Manager.HandleCompletes();

            Assert.AreEqual(
                (TestHelper.continueVoidCallbacks + TestHelper.continueTCallbacks) * 2,
                cancelations
                );

            cancelationSource1.Dispose();
            cancelationSource2.Dispose();
            TestHelper.Cleanup();
        }
        public void OnContinueRethrowCancelReasonWhenPromiseIsCanceled0()
        {
            var deferred    = Promise.NewDeferred();
            var deferredInt = Promise.NewDeferred <int>();

            int    cancelations = 0;
            string cancelation  = "Cancel";

            Promise.ResultContainer        voidContainer = default(Promise.ResultContainer);
            Promise <int> .ResultContainer intContainer  = default(Promise <int> .ResultContainer);

            TestHelper.AddContinueCallbacks <int, string>(deferred.Promise,
                                                          onContinue: r => voidContainer = r,
                                                          promiseToVoid: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); voidContainer.RethrowIfCanceled(); },
                                                          promiseToConvert: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); voidContainer.RethrowIfCanceled(); return(0); },
                                                          promiseToPromise: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); voidContainer.RethrowIfCanceled(); return(null); },
                                                          promiseToPromiseConvert: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); voidContainer.RethrowIfCanceled(); return(null); }
                                                          );
            TestHelper.AddContinueCallbacks <int, int, string>(deferredInt.Promise,
                                                               onContinue: r => intContainer = r,
                                                               promiseToVoid: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); intContainer.RethrowIfCanceled(); },
                                                               promiseToConvert: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); intContainer.RethrowIfCanceled(); return(0); },
                                                               promiseToPromise: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); intContainer.RethrowIfCanceled(); return(null); },
                                                               promiseToPromiseConvert: p => { p.CatchCancelation(e => { Assert.AreEqual(cancelation, e.Value); ++cancelations; }); intContainer.RethrowIfCanceled(); return(null); }
                                                               );

            deferred.Cancel(cancelation);
            deferredInt.Cancel(cancelation);

            Promise.Manager.HandleCompletes();

            Assert.AreEqual(TestHelper.continueVoidCallbacks + TestHelper.continueTCallbacks,
                            cancelations);

            // Clean up.
            GC.Collect();
            Promise.Manager.HandleCompletesAndProgress();
            LogAssert.NoUnexpectedReceived();
        }
Пример #3
0
        public void OnContinueRethrowRejectReasonWhenPromiseIsRejected()
        {
            var deferred    = Promise.NewDeferred();
            var deferredInt = Promise.NewDeferred <int>();

            int    rejections = 0;
            string rejection  = "Reject";

            Promise.ResultContainer        voidContainer = default(Promise.ResultContainer);
            Promise <int> .ResultContainer intContainer  = default(Promise <int> .ResultContainer);

            TestHelper.AddContinueCallbacks <int, string>(deferred.Promise,
                                                          onContinue: r => voidContainer = r,
                                                          promiseToVoid: p => { p.Catch((object e) => { Assert.AreEqual(rejection, e); ++rejections; }); voidContainer.RethrowIfRejected(); },
                                                          promiseToConvert: p => { p.Catch((object e) => { Assert.AreEqual(rejection, e); ++rejections; }); voidContainer.RethrowIfRejected(); return(0); },
                                                          promiseToPromise: p => { p.Catch((object e) => { Assert.AreEqual(rejection, e); ++rejections; }); voidContainer.RethrowIfRejected(); return(null); },
                                                          promiseToPromiseConvert: p => { p.Catch((object e) => { Assert.AreEqual(rejection, e); ++rejections; }); voidContainer.RethrowIfRejected(); return(null); }
                                                          );
            TestHelper.AddContinueCallbacks <int, int, string>(deferredInt.Promise,
                                                               onContinue: r => intContainer = r,
                                                               promiseToVoid: p => { p.Catch((object e) => { Assert.AreEqual(rejection, e); ++rejections; }); intContainer.RethrowIfRejected(); },
                                                               promiseToConvert: p => { p.Catch((object e) => { Assert.AreEqual(rejection, e); ++rejections; }); intContainer.RethrowIfRejected(); return(0); },
                                                               promiseToPromise: p => { p.Catch((object e) => { Assert.AreEqual(rejection, e); ++rejections; }); intContainer.RethrowIfRejected(); return(null); },
                                                               promiseToPromiseConvert: p => { p.Catch((object e) => { Assert.AreEqual(rejection, e); ++rejections; }); intContainer.RethrowIfRejected(); return(null); }
                                                               );

            deferred.Reject(rejection);
            deferredInt.Reject(rejection);

            Promise.Manager.HandleCompletes();

            Assert.AreEqual(
                (TestHelper.continueVoidCallbacks + TestHelper.continueTCallbacks) * 2,
                rejections
                );

            TestHelper.Cleanup();
        }