public void OnStepDoable()
        {
            var d         = new Doable();
            var navigator = FeatureTour.GetNavigator();

            navigator.ForStep("ID1").AttachDoable(s => d.do1++);
            navigator.ForStep("ID2").AttachDoable(s => d.do2++, s => true);
            navigator.ForStep("ID3").AttachDoable(s => d.do3++, s => false);

            var tour = new Tour();

            tour.Steps = new[]
            {
                new Step("1", "Header1", "Content1", "ID1"),
                new Step("2", "Header2", "Content2", "ID2"),
                new Step("3", "Header3", "Content3", "ID3"),
                new Step("4", "Header4", "Content4", "ID4"),
            };

            var manager = new VisualElementManagerMock(tour.Steps);
            var tourRun = new TourRun(tour, manager, new WindowManagerMock(), new PopupNavigatorMock());

            tourRun.Start();

            AssertIsDoable(d, 0, 0, 0);
            Assert.IsTrue(tourRun.ShowDoIt());
            Assert.IsTrue(tourRun.CanDoIt());
            tourRun.DoIt();
            AssertIsDoable(d, 1, 0, 0);

            tourRun.NextStep();
            Assert.IsTrue(tourRun.ShowDoIt());
            Assert.IsTrue(tourRun.CanDoIt());
            tourRun.DoIt();
            AssertIsDoable(d, 1, 1, 0);

            tourRun.NextStep();
            Assert.IsTrue(tourRun.ShowDoIt());
            Assert.IsFalse(tourRun.CanDoIt());
            tourRun.DoIt();
            AssertIsDoable(d, 1, 1, 1);

            tourRun.NextStep();
            Assert.IsFalse(tourRun.ShowDoIt());
            Assert.IsFalse(tourRun.CanDoIt());
            tourRun.DoIt();
            AssertIsDoable(d, 1, 1, 1);
        }
 private void AssertIsDoable(Doable d, int do1, int do2, int do3)
 {
     Assert.AreEqual(do1, d.do1);
     Assert.AreEqual(do2, d.do2);
     Assert.AreEqual(do3, d.do3);
 }