public void SwipeInProgress_is_true_when_swipe_begins()
        {
            var recognizer = new PlatformSwipeRecognizerStub(new object(), SwipeDirection.Any, 1);

            recognizer.OnSwipeBegan(0, 0);
            recognizer.SwipeInProgress.Should().BeTrue("since the swipe has begun");
        }
        public void OnSwipeEnded_ignores_swipe_when_does_not_exceed_threshold(int x1, int y1, int x2, int y2)
        {
            var recognizer = new PlatformSwipeRecognizerStub(new object(), SwipeDirection.Any, 1);

            recognizer.OnSwipeBegan(x1, y1);
            recognizer.OnSwipeEnded(x2, y2).Should().BeFalse("because no swipe was detected");
        }
        public void OnSwipeEnded_ignores_swipe_when_does_not_match_direction_mask(int x1, int y1, int x2, int y2, SwipeDirection directionMask)
        {
            var recognizer = new PlatformSwipeRecognizerStub(new object(), directionMask, 1);

            recognizer.OnSwipeBegan(x1, y1);
            recognizer.OnSwipeEnded(x2, y2).Should().BeFalse("because no swipe was detected");
        }
        public void OnSwipeBegan_throws_if_swipe_already_in_progress()
        {
            var recognizer = new PlatformSwipeRecognizerStub(new object(), SwipeDirection.Any, 1);

            recognizer.OnSwipeBegan(0, 0);

            Assert.Throws <InvalidOperationException>(() => recognizer.OnSwipeBegan(0, 0));
        }
        public void SwipeInProgress_is_false_when_swipe_cancelled()
        {
            var recognizer = new PlatformSwipeRecognizerStub(new object(), SwipeDirection.Any, 1);

            recognizer.OnSwipeBegan(0, 0);
            recognizer.OnSwipeCancelled();
            recognizer.SwipeInProgress.Should().BeFalse("since the swipe has been cancelled");
        }
        public void Swiped_does_not_emit_if_swipe_does_not_match_direction_mask()
        {
            var recognizer = new PlatformSwipeRecognizerStub(new object(), SwipeDirection.Right, 1);
            var swiped     = default(SwipeDirection?);

            recognizer.Swiped.Take(1).Subscribe(direction => swiped = direction);

            recognizer.OnSwiped(SwipeDirection.Left).Should().BeFalse("because no swipe was detected");
            swiped.Should().Be(default, "because the swiped event did not fire");
        public void Swiped_emits_when_method_invoked()
        {
            var recognizer = new PlatformSwipeRecognizerStub(new object(), SwipeDirection.Any, 1);
            var swiped     = default(SwipeDirection?);

            recognizer.Swiped.Take(1).Subscribe(direction => swiped = direction);

            recognizer.OnSwiped(SwipeDirection.Left).Should().BeTrue("because a swipe was detected");
            swiped.Should().Be(SwipeDirection.Left, "because a swipe left occurred");
        }
        public void OnSwipeEnded_detects_swipe_when_matches_direction_mask_and_threshold(int x1, int y1, int x2, int y2, SwipeDirection expected)
        {
            var recognizer = new PlatformSwipeRecognizerStub(new object(), SwipeDirection.Any, 1);
            var swiped     = default(SwipeDirection?);

            recognizer.Swiped.Take(1).Subscribe(direction => swiped = direction);

            recognizer.OnSwipeBegan(x1, y1);
            recognizer.OnSwipeEnded(x2, y2).Should().BeTrue("because a swipe was detected");
            swiped.Should().Be(expected, $"because a swipe {swiped} occurred");
        }
        public void OnSwipeCancelled_throws_if_swipe_not_in_progress()
        {
            var recognizer = new PlatformSwipeRecognizerStub(new object(), SwipeDirection.Any, 1);

            Assert.Throws <InvalidOperationException>(() => recognizer.OnSwipeCancelled());
        }