public void TestObserve()
        {
            Engine.Ability observe = new Engine.Observe();
            Engine.Ability basic   = new Engine.BasicSynthesis();

            State state = Utility.CreateDefaultState();

            // Test that Observe can't be used first.
            Assert.IsFalse(observe.CanUse(state));

            // Use Basic Synthesis so that observe becomes useable.
            state = basic.Activate(state, true);

            // Test the condition requirement for Observe
            state.Condition = Condition.Poor;
            Assert.IsTrue(observe.CanUse(state));
            state.Condition = Condition.Normal;
            Assert.IsFalse(observe.CanUse(state));
            state.Condition = Condition.Good;
            Assert.IsFalse(observe.CanUse(state));
            state.Condition = Condition.Excellent;
            Assert.IsFalse(observe.CanUse(state));

            // Test that observe can't be run twice in a row.
            state.Condition = Condition.Poor;
            Assert.IsTrue(observe.CanUse(state));
            State newState = observe.Activate(state, true);

            // Make sure Observe uses the right amount of CP.
            Assert.AreEqual <uint>(state.CP - observe.RequiredCP, newState.CP);
        }
        public void TestStepIncrement()
        {
            Engine.Ability action = new Engine.BasicSynthesis();
            State          state  = Utility.CreateDefaultState();

            Assert.AreEqual <uint>(1, state.Step);

            State success = action.Activate(state, true);
            State failure = action.Activate(state, false);

            Assert.AreEqual <uint>(2, success.Step);
            Assert.AreEqual <uint>(2, failure.Step);
        }
        public void TestSteadyHandCanBeUsedWhenMightAsWell()
        {
            Engine.Ability basicSynth = new Engine.BasicSynthesis();
            Engine.Ability basicTouch = new Engine.BasicSynthesis();
            Engine.Ability steadyHand = new Engine.SteadyHand();

            State state = Utility.CreateDefaultState();

            state.Quality       = 142;
            state.MaxQuality    = 726;
            state.Progress      = 0;
            state.MaxProgress   = 27;
            state.Durability    = 20;
            state.MaxDurability = 40;
            state.CrafterLevel  = 16;
            state.SynthLevel    = 13;
            state.Craftsmanship = 105;
            state.Control       = 102;
            state.Condition     = Condition.Normal;
            state.CP            = 55;
            state.MaxCP         = 233;

            Assert.IsTrue(steadyHand.CanUse(state));
        }