public void InitialRouteData()
        {
            var routeData = TransitionableRouteFixture.GenerateRouteData(typeof(StubType1));

            new TransitionableRouteFixture()
            .Given.PrimaryTransitionableRoute()
            .And.SecondaryTransitionableRoute()
            .When.UpdateRoute(routeData)
            .Then.PrimaryRouteDataIs(routeData)
            .And.SecondaryRouteDataIs(null)
            .And.PrimaryRouteHasTransition()
            .And.SecondaryViewIsNotRendered();
        }
        public void SecondRouteData()
        {
            var firstRouteData  = TransitionableRouteFixture.GenerateRouteData(typeof(StubType1));
            var secondRouteData = TransitionableRouteFixture.GenerateRouteData(typeof(StubType2));

            new TransitionableRouteFixture()
            .Given.PrimaryTransitionableRoute()
            .And.SecondaryTransitionableRoute()
            .And.UpdateRoute(firstRouteData)
            .When.UpdateRoute(secondRouteData)
            .Then.PrimaryRouteDataIs(firstRouteData)
            .And.SecondaryRouteDataIs(secondRouteData)
            .And.SecondaryRouteHasTransition();
        }
        public void SameRouteWithDifferentRouteValues()
        {
            var routeDataVanilla = TransitionableRouteFixture.GenerateRouteData(typeof(StubType1));
            var routeDataCustom  = TransitionableRouteFixture.GenerateRouteData(typeof(StubType1));

            new TransitionableRouteFixture()
            .Given.PrimaryTransitionableRoute()
            .And.SecondaryTransitionableRoute()
            .And.UpdateRoute(routeDataVanilla)
            .When.UpdateRoute(routeDataCustom)
            .Then.PrimaryRouteDataIs(routeDataVanilla)
            .And.SecondaryRouteDataIs(routeDataCustom)
            .And.SecondaryRouteHasTransition();
        }
        public void InitialRouteDataSubsequentRouteIsSameAsInitial()
        {
            var firstRouteData = TransitionableRouteFixture.GenerateRouteData(typeof(StubType1));

            new TransitionableRouteFixture()
            .Given.PrimaryTransitionableRoute()
            .And.SecondaryTransitionableRoute()
            .And.UpdateRoute(firstRouteData)
            .And.RouteHasNotChanged()
            .When.UpdateRoute(firstRouteData)
            .Then.PrimaryRouteDataIs(firstRouteData)
            .And.SecondaryRouteDataIs(null)
            .And.PrimaryRouteHasTransition()
            .And.SecondaryViewIsNotRendered();
        }
        public void MoveBackToPreviousRoute()
        {
            var firstRouteData  = TransitionableRouteFixture.GenerateRouteData(typeof(StubType1));
            var secondRouteData = TransitionableRouteFixture.GenerateRouteData(typeof(StubType2));

            new TransitionableRouteFixture()
            .Given.PrimaryTransitionableRoute()
            .And.SecondaryTransitionableRoute()
            .And.OptionToForgetStateOnTransition()
            .And.UpdateRoute(firstRouteData)
            .And.UpdateRoute(secondRouteData)
            .And.NavigateBack()
            .And.UpdateRoute(firstRouteData)
            .Then.PrimaryRouteDataIs(firstRouteData)
            .And.SecondaryRouteDataIs(null)
            .And.PrimaryRouteHasTransition();
        }
        public void ThirdRouteData()
        {
            var firstRouteData  = TransitionableRouteFixture.GenerateRouteData(typeof(StubType1));
            var secondRouteData = TransitionableRouteFixture.GenerateRouteData(typeof(StubType2));
            var thirdRouteData  = TransitionableRouteFixture.GenerateRouteData(typeof(StubType3));

            new TransitionableRouteFixture()
            .Given.PrimaryTransitionableRoute()
            .And.SecondaryTransitionableRoute()
            .And.OptionToForgetStateOnTransition()
            .And.UpdateRoute(firstRouteData)
            .And.UpdateRoute(secondRouteData)
            .When.UpdateRoute(thirdRouteData)
            .Then.PrimaryRouteDataIs(thirdRouteData)
            .And.SecondaryRouteDataIs(null)
            .And.PrimaryRouteHasTransition();
        }
        public void RouteDataSubsequentRouteIsSame()
        {
            var firstRouteData  = TransitionableRouteFixture.GenerateRouteData(typeof(StubType1));
            var secondRouteData = TransitionableRouteFixture.GenerateRouteData(typeof(StubType2));

            new TransitionableRouteFixture()
            .Given.PrimaryTransitionableRoute()
            .And.SecondaryTransitionableRoute()
            .And.OptionToForgetStateOnTransition()
            .And.UpdateRoute(firstRouteData)
            .And.UpdateRoute(secondRouteData)
            .And.RouteHasNotChanged()
            .When.UpdateRoute(secondRouteData)
            .Then.PrimaryRouteDataIs(null)
            .And.SecondaryRouteDataIs(secondRouteData)
            .And.SecondaryRouteHasTransition();
        }
        public void MoveBackThenForwardOverPreviousRoutes()
        {
            var firstRouteData  = TransitionableRouteFixture.GenerateRouteData(typeof(StubType1));
            var secondRouteData = TransitionableRouteFixture.GenerateRouteData(typeof(StubType2));
            var thirdRouteData  = TransitionableRouteFixture.GenerateRouteData(typeof(StubType3));

            new TransitionableRouteFixture()
            .Given.PrimaryTransitionableRoute()
            .And.SecondaryTransitionableRoute()
            .And.UpdateRoute(firstRouteData)
            .And.UpdateRoute(secondRouteData)
            .And.UpdateRoute(thirdRouteData)
            .And.UpdateRoute(secondRouteData)
            .When.UpdateRoute(thirdRouteData)
            .Then.PrimaryRouteDataIs(thirdRouteData)
            .And.SecondaryRouteDataIs(secondRouteData)
            .And.PrimaryRouteHasTransition();
        }