public IEnumerator TM_ArbitraryStateAccess()
        {
            Setup();

            TutorialManager.Start(tutorialName1);
            yield return(null);

            // Step 1
            Assert.That(TutorialManager.stepId, Is.EqualTo(t1Step1), string.Format("currentStep should be {0}", t1Step1));
            Assert.AreEqual(0, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", 0));
            Assert.IsFalse(TutorialManager.complete, "complete should be false");
            Assert.That(TutorialManager.stepId, Is.EqualTo(t1Step1), string.Format("step one, fsm should be in state {0}", t1Step1));

            TutorialManager.StepStart(t1Step3);
            yield return(null);

            // Step 3
            Assert.That(TutorialManager.stepId, Is.EqualTo(t1Step3), string.Format("currentStep should be {0}", t1Step3));
            Assert.AreEqual(2, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", 2));
            Assert.IsFalse(TutorialManager.complete, "complete should be false");

            TutorialManager.StepStart(t1Step2);
            yield return(null);

            // Step 2
            Assert.That(TutorialManager.stepId, Is.EqualTo(t1Step2), string.Format("currentStep should be {0}", t1Step2));
            Assert.AreEqual(1, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", 1));
            Assert.IsFalse(TutorialManager.complete, "complete should be false");

            TutorialManager.StepComplete();
            yield return(null);

            // Back to 3
            Assert.IsFalse(TutorialManager.complete, "complete should be false");

            TutorialManager.StepComplete();
            yield return(null);

            // Tutorial resolved.
            Assert.That(TutorialManager.tutorialId, Is.EqualTo(tutorialName1), string.Format("tutorialId should be {0}", tutorialName1));
            Assert.IsNull(TutorialManager.stepId, "currentStep should be null");
            Assert.AreEqual(-1, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", -1));
            Assert.IsTrue(TutorialManager.complete, "complete should be true");
        }
        public IEnumerator TM_ManualStepThroughState()
        {
            Setup();

            TutorialManager.Start(tutorialName1, false);
            yield return(null);

            Assert.IsFalse(TutorialManager.autoAdvance, "autoAdvance should default to false");

            // Step 1
            Assert.That(TutorialManager.tutorialId, Is.EqualTo(tutorialName1), string.Format("tutorialId should be {0}", tutorialName1));
            Assert.That(TutorialManager.stepId, Is.EqualTo(t1Step1), string.Format("currentStep should be {0}", t1Step1));
            Assert.AreEqual(3, TutorialManager.tutorialLength, string.Format("tutorial length should be {0}", 3));
            Assert.AreEqual(0, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", 0));
            Assert.IsFalse(TutorialManager.complete, "complete should be false");

            TutorialManager.StepComplete();
            yield return(null);

            // Between steps 1 and 2
            Assert.That(TutorialManager.tutorialId, Is.EqualTo(tutorialName1), string.Format("tutorialId should be {0}", tutorialName1));
            Assert.IsNull(TutorialManager.stepId, "currentStep should be null");
            Assert.AreEqual(3, TutorialManager.tutorialLength, string.Format("tutorial length should be {0}", 3));
            Assert.AreEqual(-1, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", -1));
            Assert.IsFalse(TutorialManager.complete, "complete should be false");

            TutorialManager.StepStart();
            yield return(null);

            // Step 2
            Assert.That(TutorialManager.tutorialId, Is.EqualTo(tutorialName1), string.Format("tutorialId should be {0}", tutorialName1));
            Assert.That(TutorialManager.stepId, Is.EqualTo(t1Step2), string.Format("currentStep should be {0}", t1Step2));
            Assert.AreEqual(3, TutorialManager.tutorialLength, string.Format("tutorial length should be {0}", 3));
            Assert.AreEqual(1, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", 1));
            Assert.IsFalse(TutorialManager.complete, "complete should be false");

            TutorialManager.StepComplete();
            yield return(null);

            // Between steps 2 and 3
            Assert.That(TutorialManager.tutorialId, Is.EqualTo(tutorialName1), string.Format("tutorialId should be {0}", tutorialName1));
            Assert.IsNull(TutorialManager.stepId, "currentStep should be null");
            Assert.AreEqual(3, TutorialManager.tutorialLength, string.Format("tutorial length should be {0}", 3));
            Assert.AreEqual(-1, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", -1));
            Assert.IsFalse(TutorialManager.complete, "complete should be false");

            TutorialManager.StepStart();
            yield return(null);

            // Step 3
            Assert.That(TutorialManager.tutorialId, Is.EqualTo(tutorialName1), string.Format("tutorialId should be {0}", tutorialName1));
            Assert.That(TutorialManager.stepId, Is.EqualTo(t1Step3), string.Format("currentStep should be {0}", t1Step3));
            Assert.AreEqual(3, TutorialManager.tutorialLength, string.Format("tutorial length should be {0}", 3));
            Assert.AreEqual(2, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", 2));
            Assert.IsFalse(TutorialManager.complete, "complete should be false");

            TutorialManager.StepComplete();
            yield return(null);

            // Tutorial resolved.
            Assert.That(TutorialManager.tutorialId, Is.EqualTo(tutorialName1), string.Format("tutorialId should be {0}", tutorialName1));
            Assert.IsNull(TutorialManager.stepId, "currentStep should be null");
            Assert.AreEqual(3, TutorialManager.tutorialLength, string.Format("tutorial length should be {0}", 3));
            Assert.AreEqual(-1, TutorialManager.stepIndex, string.Format("stepIndex should be {0}", -1));
            Assert.IsTrue(TutorialManager.complete, "complete should be true");
        }