public void InvalidBoundSyncedFunc_Invoked_DoesSync()
        {
            bool sawSync = false;

            using (CallbackContext context = new CallbackContext())
                using (ActionThread thread = new ActionThread())
                {
                    thread.Start();

                    // Capture the thread's SynchronizationContext and signal this thread when it's captured.
                    SynchronizationContext actionThreadSyncContext = thread.DoGet(() => { return(SynchronizationContext.Current); });

                    var syncContext = new Util.LoggingSynchronizationContext(actionThreadSyncContext)
                    {
                        OnPost = () => { sawSync = true; },
                        OnSend = () => { sawSync = true; }
                    };

                    var action = context.Bind(() => { return(13); }, syncContext, false);
                    context.Reset();
                    int result = action();

                    Assert.IsTrue(sawSync, "Context did not use SyncContext for sync");
                }
        }
 public void CallbackContext_ResetAfterBindingFunc_IsInvalid()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var action = context.Bind(() => { return(13); });
         context.Reset();
         Assert.IsTrue(context.Invalidated, "Bound action should be invalid");
     }
 }
 public void CallbackContext_AfterInvokingInvalidAction_IsInvalid()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var action = context.Bind(() => { });
         context.Reset();
         action();
         Assert.IsTrue(context.Invalidated, "Bound action should be invalid");
     }
 }
 public void InvalidFunc_Invoked_ReturnsDefault()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var action = context.Bind(() => { return(13); });
         context.Reset();
         int result = action();
         Assert.AreEqual(default(int), result, "Invalid func had a non-default return value");
     }
 }
 public void InvalidBoundObjectsyncedFunc_Invoked_SynchronizesWithSyncObject()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var syncObject = new FakeFuncSynchronizingObject(true);
         var action     = context.Bind(() => { return(13); }, syncObject);
         context.Reset();
         int result = action();
         Assert.IsTrue(syncObject.sawInvoke, "Bound action did not run through synchronizing object");
     }
 }
 public void InvalidBoundObjectsyncedFunc_Invoked_ReturnsDefault()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var syncObject = new FakeFuncSynchronizingObject(true);
         var action     = context.Bind(() => { return(13); }, syncObject);
         context.Reset();
         int result = action();
         Assert.AreEqual(0, result, "Invalid func returned non-default value");
     }
 }
        public void InvalidAction_Invoked_DoesNotExecute()
        {
            bool sawAction = false;

            using (CallbackContext context = new CallbackContext())
            {
                var action = context.Bind(() => { sawAction = true; });
                context.Reset();
                action();
                Assert.IsFalse(sawAction, "Invalid action did execute");
            }
        }
        public void InvalidBoundObjectsyncedFunc_Invoked_DoesNotExecute()
        {
            int sawActionThread = Thread.CurrentThread.ManagedThreadId;

            using (CallbackContext context = new CallbackContext())
            {
                var syncObject = new FakeFuncSynchronizingObject(true);
                var action     = context.Bind(() => { sawActionThread = Thread.CurrentThread.ManagedThreadId; return(13); }, syncObject);
                context.Reset();
                int result = action();
                Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, sawActionThread, "Bound action was executed");
            }
        }
        public void InvalidBoundSyncedFunc_Invoked_ReturnsDefault()
        {
            using (CallbackContext context = new CallbackContext())
                using (ActionThread thread = new ActionThread())
                {
                    thread.Start();

                    // Capture the thread's SynchronizationContext and signal this thread when it's captured.
                    SynchronizationContext actionThreadSyncContext = thread.DoGet(() => { return(SynchronizationContext.Current); });

                    var action = context.Bind(() => { return(13); }, actionThreadSyncContext, false);
                    context.Reset();
                    int result = action();

                    Assert.AreEqual(0, result, "Invalid Func returned a non-default value");
                }
        }
        public void CallbackContext_Reset_InvalidatesAllActions()
        {
            bool sawAction1 = false;
            bool sawAction2 = false;

            using (CallbackContext context = new CallbackContext())
            {
                var action1 = context.Bind(() => { sawAction1 = true; });
                var action2 = context.Bind(() => { sawAction2 = true; });

                context.Reset();
                action1();
                action2();
                Assert.IsFalse(sawAction1, "Invalid action did execute");
                Assert.IsFalse(sawAction2, "Invalid action did execute");
            }
        }
        public void InvalidBoundSyncedFunc_Invoked_DoesNotExecute()
        {
            int sawActionThread = Thread.CurrentThread.ManagedThreadId;

            using (CallbackContext context = new CallbackContext())
                using (ActionThread thread = new ActionThread())
                {
                    thread.Start();

                    // Capture the thread's SynchronizationContext and signal this thread when it's captured.
                    SynchronizationContext actionThreadSyncContext = thread.DoGet(() => { return(SynchronizationContext.Current); });

                    var action = context.Bind(() => { sawActionThread = Thread.CurrentThread.ManagedThreadId; return(13); }, actionThreadSyncContext, false);
                    context.Reset();
                    int result = action();

                    Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, sawActionThread, "Invalid action should not run");
                }
        }
        public void InvalidBoundSyncedFunc_Invoked_ReturnsDefault()
        {
            using (CallbackContext context = new CallbackContext())
            using (ActionThread thread = new ActionThread())
            {
                thread.Start();

                // Capture the thread's SynchronizationContext and signal this thread when it's captured.
                SynchronizationContext actionThreadSyncContext = thread.DoGet(() => { return SynchronizationContext.Current; });

                var action = context.Bind(() => { return 13; }, actionThreadSyncContext, false);
                context.Reset();
                int result = action();

                Assert.AreEqual(0, result, "Invalid Func returned a non-default value");
            }
        }
        public void InvalidBoundSyncedFunc_Invoked_DoesSync()
        {
            bool sawSync = false;

            using (CallbackContext context = new CallbackContext())
            using (ActionThread thread = new ActionThread())
            {
                thread.Start();

                // Capture the thread's SynchronizationContext and signal this thread when it's captured.
                SynchronizationContext actionThreadSyncContext = thread.DoGet(() => { return SynchronizationContext.Current; });

                var syncContext = new LoggingSynchronizationContext(actionThreadSyncContext)
                {
                    OnPost = () => { sawSync = true; },
                    OnSend = () => { sawSync = true; }
                };

                var action = context.Bind(() => { return 13; }, syncContext, false);
                context.Reset();
                int result = action();

                Assert.IsTrue(sawSync, "Context did not use SyncContext for sync");
            }
        }
        public void InvalidBoundSyncedFunc_Invoked_DoesNotExecute()
        {
            int sawActionThread = Thread.CurrentThread.ManagedThreadId;

            using (CallbackContext context = new CallbackContext())
            using (ActionThread thread = new ActionThread())
            {
                thread.Start();

                // Capture the thread's SynchronizationContext and signal this thread when it's captured.
                SynchronizationContext actionThreadSyncContext = thread.DoGet(() => { return SynchronizationContext.Current; });

                var action = context.Bind(() => { sawActionThread = Thread.CurrentThread.ManagedThreadId; return 13; }, actionThreadSyncContext, false);
                context.Reset();
                int result = action();

                Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, sawActionThread, "Invalid action should not run");
            }
        }
 public void InvalidBoundObjectsyncedFunc_Invoked_SynchronizesWithSyncObject()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var syncObject = new FakeFuncSynchronizingObject(true);
         var action = context.Bind(() => { return 13; }, syncObject);
         context.Reset();
         int result = action();
         Assert.IsTrue(syncObject.sawInvoke, "Bound action did not run through synchronizing object");
     }
 }
 public void InvalidBoundObjectsyncedFunc_Invoked_ReturnsDefault()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var syncObject = new FakeFuncSynchronizingObject(true);
         var action = context.Bind(() => { return 13; }, syncObject);
         context.Reset();
         int result = action();
         Assert.AreEqual(0, result, "Invalid func returned non-default value");
     }
 }
        public void InvalidBoundObjectsyncedFunc_Invoked_DoesNotExecute()
        {
            int sawActionThread = Thread.CurrentThread.ManagedThreadId;

            using (CallbackContext context = new CallbackContext())
            {
                var syncObject = new FakeFuncSynchronizingObject(true);
                var action = context.Bind(() => { sawActionThread = Thread.CurrentThread.ManagedThreadId; return 13; }, syncObject);
                context.Reset();
                int result = action();
                Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, sawActionThread, "Bound action was executed");
            }
        }
        public void CallbackContext_Reset_InvalidatesAllFuncs()
        {
            bool sawAction1 = false;
            bool sawAction2 = false;

            using (CallbackContext context = new CallbackContext())
            {
                var action1 = context.Bind(() => { sawAction1 = true; return 13; });
                var action2 = context.Bind(() => { sawAction2 = true; return 17; });

                context.Reset();
                int result1 = action1();
                int result2 = action2();

                Assert.IsFalse(sawAction1, "Invalid action did execute");
                Assert.IsFalse(sawAction2, "Invalid action did execute");
            }
        }
 public void CallbackContext_ResetAfterBindingFunc_IsInvalid()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var action = context.Bind(() => { return 13; });
         context.Reset();
         Assert.IsTrue(context.Invalidated, "Bound action should be invalid");
     }
 }
        public void InvalidFunc_Invoked_DoesNotExecute()
        {
            bool sawAction = false;

            using (CallbackContext context = new CallbackContext())
            {
                var action = context.Bind(() => { sawAction = true;  return 13; });
                context.Reset();
                int result = action();
                Assert.IsFalse(sawAction, "Invalid action did execute");
            }
        }
 public void InvalidFunc_Invoked_ReturnsDefault()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var action = context.Bind(() => { return 13; });
         context.Reset();
         int result = action();
         Assert.AreEqual(default(int), result, "Invalid func had a non-default return value");
     }
 }
 public void CallbackContext_AfterInvokingInvalidAction_IsInvalid()
 {
     using (CallbackContext context = new CallbackContext())
     {
         var action = context.Bind(() => { });
         context.Reset();
         action();
         Assert.IsTrue(context.Invalidated, "Bound action should be invalid");
     }
 }