public void SameTypeWithTimeout_ReturnsWithoutCall()
        {
            var fake = new SynchronizedFake();
            var t    = new Thread(new ThreadStart(() => fake.Run(() => fake.LockedWithTimeout())));

            t.Start();
            while (!t.IsAlive)
            {
                Thread.Sleep(10);
            }
            if (!fake.CallCompleted.WaitOne(5000))
            {
                //normal end
                Assert.Fail("Should not be blocked!");
            }
            Assert.That(fake.ChildCalled, new FalseConstraint());
        }
        public void SameType_Blocks()
        {
            var fake = new SynchronizedFake();
            var t    = new Thread(new ThreadStart(() => fake.Run(() => fake.Locked())));

            t.Start();
            while (!t.IsAlive)
            {
                Thread.Sleep(10);
            }
            if (fake.CallCompleted.WaitOne(2000))
            {
                //normal end
                Assert.Fail("Should be blocked!");
            }
            t.Abort();
            Assert.That(fake.ChildCalled, new FalseConstraint());
        }