Example #1
0
        public void Invoke()
        {
            var called   = false;
            var callback = new Action(() => called = true);

            using (var db = new DispatchBlock(callback)) {
                db.Invoke();
                Assert.IsTrue(called, "Called");
            }
        }
Example #2
0
        public void ExplicitActionConversionInvoke()
        {
            Assert.IsNull((Action)((DispatchBlock)null), "Null conversion");

            var called   = false;
            var callback = new Action(() => called = true);

            using (var db = new DispatchBlock(callback)) {
                ((Action)db)();
                Assert.IsTrue(called, "Called");
            }
        }
Example #3
0
        public void Cancellation()
        {
            var called   = false;
            var callback = new Action(() => called = true);

            using (var db = new DispatchBlock(callback)) {
                Assert.AreEqual(0, db.TestCancel(), "TestCancel 1");
                Assert.IsFalse(db.Cancelled, "Cancelled 1");
                db.Cancel();
                Assert.AreNotEqual(0, db.TestCancel(), "TestCancel 2");
                Assert.IsTrue(db.Cancelled, "Cancelled 2");
            }
        }
        public void NotifyWithDispatchBlock()
        {
            TestRuntime.AssertSystemVersion(PlatformName.iOS, 8, 0, throwIfOtherPlatform: false);
            TestRuntime.AssertSystemVersion(PlatformName.MacOSX, 10, 10, throwIfOtherPlatform: false);

            using (var dg = new DispatchGroup()) {
                var called   = false;
                var callback = new Action(() => called = true);
                using (var block = new DispatchBlock(callback)) {
                    dg.Notify(DispatchQueue.MainQueue, block);
                    TestRuntime.RunAsync(DateTime.Now.AddSeconds(5), () => { }, () => called);
                    Assert.IsTrue(called, "Called");
                }
            }
        }
Example #5
0
        public void NotifyAction()
        {
            var called       = false;
            var notified     = false;
            var callback     = new Action(() => called = true);
            var notification = new Action(() => notified = true);

            using (var db = new DispatchBlock(callback)) {
                Assert.Throws <ArgumentNullException> (() => db.Notify(null, notification), "Null 1");
                Assert.Throws <ArgumentNullException> (() => db.Notify(DispatchQueue.MainQueue, (Action)null), "Null 2");
                db.Notify(DispatchQueue.MainQueue, notification);
                DispatchQueue.MainQueue.DispatchAsync(db);
                TestRuntime.RunAsync(DateTime.Now.AddSeconds(5), () => { }, () => notified);
                Assert.IsTrue(called, "Called");
            }
        }
Example #6
0
        public void DispatchSync()
        {
            TestRuntime.AssertSystemVersion(PlatformName.iOS, 8, 0, throwIfOtherPlatform: false);
            TestRuntime.AssertSystemVersion(PlatformName.MacOSX, 10, 10, throwIfOtherPlatform: false);

            using (var queue = new DispatchQueue("DispatchSync")) {
                var called   = false;
                var callback = new Action(() => called = true);
                queue.DispatchSync(callback);
                Assert.IsTrue(called, "Called");

                called = false;
                using (var dg = new DispatchBlock(callback))
                    queue.DispatchSync(dg);
                Assert.IsTrue(called, "Called DispatchBlock");
            }
        }
Example #7
0
        public void DispatchBarrierAsync()
        {
            TestRuntime.AssertSystemVersion(PlatformName.iOS, 8, 0, throwIfOtherPlatform: false);
            TestRuntime.AssertSystemVersion(PlatformName.MacOSX, 10, 10, throwIfOtherPlatform: false);

            using (var queue = new DispatchQueue("DispatchBarrierAsync")) {
                var called   = false;
                var callback = new Action(() => called = true);
                queue.DispatchBarrierAsync(callback);
                TestRuntime.RunAsync(TimeSpan.FromSeconds(5), () => { }, () => called);
                Assert.IsTrue(called, "Called");

                called = false;
                using (var dg = new DispatchBlock(callback)) {
                    queue.DispatchBarrierAsync(dg);
                    dg.Wait(TimeSpan.FromSeconds(5));
                }
                Assert.IsTrue(called, "Called DispatchBlock");
            }
        }
Example #8
0
        public void Wait_DispatchTime()
        {
            TestRuntime.AssertXcodeVersion(8, 0);

            var called   = false;
            var callback = new Action(() => called = true);

            using (var db = new DispatchBlock(callback)) {
                using (var queue = new DispatchQueue("Background")) {
                    queue.Activate();
                    var rv = db.Wait(new DispatchTime(DispatchTime.Now, TimeSpan.FromSeconds(0.1)));
                    Assert.AreNotEqual(0, rv, "Timed Out");

                    queue.DispatchAsync(db);
                    rv = db.Wait(new DispatchTime(DispatchTime.Now, TimeSpan.FromSeconds(5)));
                    Assert.AreEqual(0, rv, "Timed Out 2");
                    Assert.IsTrue(called, "Called");
                }
            }
        }
Example #9
0
        public void Create()
        {
            TestRuntime.AssertXcodeVersion(8, 0);

            var called   = false;
            var callback = new Action(() => called = true);
            DispatchBlockFlags flags;

            Assert.Throws <ArgumentNullException> (() => DispatchBlock.Create(null), "ANE 1");
            Assert.Throws <ArgumentNullException> (() => DispatchBlock.Create(null, DispatchBlockFlags.AssignCurrent), "ANE 2");
            Assert.Throws <ArgumentNullException> (() => DispatchBlock.Create((Action)null, DispatchBlockFlags.AssignCurrent, DispatchQualityOfService.Background, 2), "ANE 3");
            Assert.Throws <ArgumentNullException> (() => DispatchBlock.Create((DispatchBlock)null, DispatchBlockFlags.AssignCurrent, DispatchQualityOfService.Background, 2), "ANE 4");
            // Invalid input results in NULL and an exception
            Assert.Throws <Exception> (() => DispatchBlock.Create(callback, (DispatchBlockFlags)12345678), "E 1");
            Assert.Throws <Exception> (() => DispatchBlock.Create(callback, (DispatchBlockFlags)12345678, DispatchQualityOfService.UserInteractive, 0), "E 2");
            Assert.Throws <Exception> (() => DispatchBlock.Create(callback, DispatchBlockFlags.None, (DispatchQualityOfService)12345678, 0), "E 3");
            Assert.Throws <Exception> (() => DispatchBlock.Create(callback, DispatchBlockFlags.None, DispatchQualityOfService.Default, 12345678), "E 4");

            called = false;
            using (var db = DispatchBlock.Create(callback)) {
                using (var queue = new DispatchQueue("Background")) {
                    queue.Activate();
                    queue.DispatchAsync(db);
                    var rv = db.Wait(new DispatchTime(DispatchTime.Now, TimeSpan.FromSeconds(5)));
                    Assert.AreEqual(0, rv, "Timed Out A");
                    Assert.IsTrue(called, "Called A");
                }
            }

            called = false;
            flags  = DispatchBlockFlags.None;
            using (var db = DispatchBlock.Create(callback, flags)) {
                using (var queue = new DispatchQueue("Background")) {
                    queue.Activate();
                    queue.DispatchAsync(db);
                    var rv = db.Wait(new DispatchTime(DispatchTime.Now, TimeSpan.FromSeconds(5)));
                    Assert.AreEqual(0, rv, "Timed Out " + flags);
                    Assert.IsTrue(called, "Called " + flags);
                }
            }

            called = false;
            flags  = DispatchBlockFlags.AssignCurrent;
            using (var db = DispatchBlock.Create(callback, flags)) {
                using (var queue = new DispatchQueue("Background")) {
                    queue.Activate();
                    queue.DispatchAsync(db);
                    var rv = db.Wait(new DispatchTime(DispatchTime.Now, TimeSpan.FromSeconds(5)));
                    Assert.AreEqual(0, rv, "Timed Out " + flags);
                    Assert.IsTrue(called, "Called " + flags);
                }
            }


            called = false;
            flags  = DispatchBlockFlags.Detached;
            using (var db = DispatchBlock.Create(callback, flags)) {
                using (var queue = new DispatchQueue("Background")) {
                    queue.Activate();
                    queue.DispatchAsync(db);
                    var rv = db.Wait(new DispatchTime(DispatchTime.Now, TimeSpan.FromSeconds(5)));
                    Assert.AreEqual(0, rv, "Timed Out " + flags);
                    Assert.IsTrue(called, "Called " + flags);
                }
            }

            called = false;
            flags  = DispatchBlockFlags.Detached;
            using (var db = DispatchBlock.Create(callback, flags, DispatchQualityOfService.Background, -8)) {
                using (var queue = new DispatchQueue("Background")) {
                    queue.Activate();
                    queue.DispatchAsync(db);
                    var rv = db.Wait(new DispatchTime(DispatchTime.Now, TimeSpan.FromSeconds(5)));
                    Assert.AreEqual(0, rv, "Timed Out Background 8" + flags);
                    Assert.IsTrue(called, "Called Background 8" + flags);
                }
            }

            called = false;
            flags  = DispatchBlockFlags.Detached;
            using (var db = DispatchBlock.Create(callback, flags, DispatchQualityOfService.Background, -8)) {
                using (var db2 = db.Create(DispatchBlockFlags.EnforceQosClass, DispatchQualityOfService.Unspecified, -7)) {
                    using (var queue = new DispatchQueue("Background")) {
                        queue.Activate();
                        queue.DispatchAsync(db2);
                        var rv = db2.Wait(new DispatchTime(DispatchTime.Now, TimeSpan.FromSeconds(5)));
                        Assert.AreEqual(0, rv, "Timed Out Background DB" + flags);
                        Assert.IsTrue(called, "Called Background DB" + flags);
                    }
                }
            }
        }