public static void TotalTimeOfTooLongConditionWait()
        {
            var success   = false;
            var stopwatch = new Stopwatch();
            var config    = new WaitConfiguration(5000, 250);

            stopwatch.Start();
            try
            {
                Wait.Until(() =>
                {
                    Thread.Sleep(TimeSpan.FromSeconds(10));
                    return(true);
                }, config);
            }
            catch (WaitTimeoutException)
            {
                success = true;
            }

            stopwatch.Stop();
            Assert.IsTrue(success);
            var passedSeconds = stopwatch.Elapsed.TotalMilliseconds;

            Assert.IsTrue(passedSeconds > 5000 && passedSeconds - 5000 < 1000);
        }
        public static void TotalTimeOfFailingWaitMethod()
        {
            var mock = new Mock <ICounter>();

            mock.Setup(foo => foo.GetCount()).Returns(10);

            var success   = false;
            var stopwatch = new Stopwatch();
            var config    = new WaitConfiguration(5000, 250, 10000);

            stopwatch.Start();
            try
            {
                Wait.Until(() => mock.Object.GetCount() == 5, config);
            }
            catch (WaitTimeoutException)
            {
                success = true;
            }

            stopwatch.Stop();
            Assert.IsTrue(success);
            var passedSeconds = stopwatch.Elapsed.TotalMilliseconds;

            Assert.IsTrue(passedSeconds > 10000 && passedSeconds - 10000 < 1000);
        }
        public static void WaitUntilOneCycleSuccess()
        {
            var mock = new Mock <ICounter>();

            mock.Setup(foo => foo.GetCount()).Returns(10);

            var config = new WaitConfiguration(1000, 250, 3000);
            var wait   = Wait.Until(() => mock.Object.GetCount() == 10, config);

            Assert.IsTrue(wait);
            mock.Verify(x => x.GetCount(), Times.Exactly(1));
        }
        public static void TotalTimeOfSuccessfulWait()
        {
            var mock = new Mock <ICounter>();

            mock.Setup(foo => foo.GetCount()).Returns(10);

            var stopwatch = new Stopwatch();
            var config    = new WaitConfiguration(10000, 250);

            stopwatch.Start();
            var wait = Wait.Until(() => mock.Object.GetCount() == 10, config);

            stopwatch.Stop();
            Assert.IsTrue(wait);
            var passedSeconds = stopwatch.Elapsed.TotalMilliseconds;

            Assert.IsTrue(passedSeconds < 1000);
        }
        public static void OneTimePolled()
        {
            var mock = new Mock <ICounter>();

            mock.Setup(foo => foo.GetCount()).Returns(10);

            var success = false;
            var config  = new WaitConfiguration(500, 1000);

            try
            {
                Wait.Until(() => mock.Object.GetCount() == 5, config);
            }
            catch (WaitTimeoutException)
            {
                success = true;
            }

            Assert.IsTrue(success);
            mock.Verify(x => x.GetCount(), Times.Exactly(1));
        }
        public static void AboutTenTimesPolled()
        {
            var mock = new Mock <ICounter>();

            mock.Setup(foo => foo.GetCount()).Returns(10);

            var success = false;
            var config  = new WaitConfiguration(1000, 100);

            try
            {
                Wait.Until(() => mock.Object.GetCount() == 5, config);
            }
            catch (WaitTimeoutException)
            {
                success = true;
            }

            Assert.IsTrue(success);
            mock.Verify(x => x.GetCount(), Times.Between(8, 10, Range.Inclusive));
        }
        public void ExceptionOnExtendedWait()
        {
            var mock = new Mock <ICounter>();

            mock.Setup(foo => foo.GetCount()).Returns(10);

            string exceptionMessage = null;

            try
            {
                var config = new WaitConfiguration(1000, 250, 3000);
                Wait.Until(() => mock.Object.GetCount() == 10, config);
            }
            catch (InvalidOperationException ex)
            {
                exceptionMessage = ex.Message;
            }

            Assert.IsNotNull(exceptionMessage);
            Assert.AreEqual("NUnit Framework must be referenced to use Extend On Timeout feature.", exceptionMessage);
            mock.Verify(x => x.GetCount(), Times.Exactly(0));
        }