public void should_build_value_for_parameter_using_parameter_type_and_token(ParameterValueTuner forParameter)
        {
            const string token    = "token398";
            const string expected = "expected 398752";

            // --arrange
            var target = CreateTarget();

            target
            .Treat <LevelOne>()
            .AsIs()
            .UsingParameters(forParameter.UseToken(token), "bad");

            target
            .Treat <string>(token)
            .AsInstance(expected);

            target
            .Treat <string>("bad_token")
            .AsInstance("bad");

            target
            .Treat <string>()
            .AsInstance("bad");

            // --act
            var actual = target.Build <LevelOne>();

            // --assert
            actual.Text.Should().Be(expected);
        }
        public void should_pass_null_as_parameter_value(ParameterValueTuner forParameter)
        {
            // --arrange
            var target = CreateTarget();

            target
            .Treat <string>()
            .AsInstance("938754");

            target
            .Treat <LevelOne>()
            .AsIs()
            .UsingParameters(forParameter.UseValue(null));

            // --act
            var actual = target.Build <LevelOne>();

            // --assert
            actual.Text.Should().BeNull();
        }
        public void should_use_factory_method(ParameterValueTuner forParameter)
        {
            const int expectedInt = 392;

            // --arrange
            var target = CreateTarget();

            target.Treat <int>().AsInstance(expectedInt);

            target
            .Treat <LevelOne>()
            .AsIs()
            .UsingParameters(forParameter.UseFactoryMethod <int>(intValue => intValue.ToString()));

            // --act
            var actual = target.Build <LevelOne>();

            // --assert
            actual.Text.Should().Be(expectedInt.ToString());
        }
        public void should_fail_if_there_is_no_value_w_token_registered(ParameterValueTuner forParameter)
        {
            // --arrange
            var target = CreateTarget();

            target
            .Treat <string>()
            .AsInstance("09765");

            target
            .Treat <LevelOne>()
            .AsIs()
            .UsingParameters(forParameter.UseToken("token"));

            // --act
            Action actual = () => target.Build <LevelOne>();

            // --assert
            actual.Should().ThrowExactly <ArmatureException>();
        }
        public void should_use_value_for_parameter(ParameterValueTuner forParameter)
        {
            const string expected = "expected";

            // --arrange
            var target = CreateTarget();

            target.Treat <string>().AsInstance("bad");

            target
            .Treat <LevelOne>()
            .AsIs()
            .UsingParameters(forParameter.UseValue(expected), "bad");

            // --act
            var actual = target.Build <LevelOne>();

            // --assert
            actual.Text.Should().Be(expected);
        }