public void AndSpecification_IsValid_1of2SpecsIsTrue_thrValidationException()
        {
            ISpecification <string>   isNotEmptySpec = new IsNotEmptySpecification();
            ISpecification <string>   isNullSpec     = new IsNullSpecification <string>();
            AndSpecification <string> andSpec        = new AndSpecification <string>(isNotEmptySpec, isNullSpec);

            Assert.Throws <ValidationException>(() => { andSpec.IsValid(""); });
        }
		public void Test_IsNull()
		{
			IsNullSpecification s = new IsNullSpecification();
			Assert.IsTrue(s.Test(null).Success);
			Assert.IsTrue(s.Test("").Success);	// treat empty string as null
			Assert.IsFalse(s.Test(new object()).Success);
			Assert.IsFalse(s.Test(0).Success);
		}
    public override bool IsSatisfiedBy(string s)
    {
        Specification <string> length = new LengthSpecification(MIN_LENGTH, MAX_LENGTH);
        Specification <string> isNull = new IsNullSpecification <string>();
        Specification <string> spec   = length && !isNull;

        return(spec.IsSatisfiedBy(s));
    }
        public void Test_IsNull()
        {
            IsNullSpecification s = new IsNullSpecification();

            Assert.IsTrue(s.Test(null).Success);
            Assert.IsTrue(s.Test("").Success);                  // treat empty string as null
            Assert.IsFalse(s.Test(new object()).Success);
            Assert.IsFalse(s.Test(0).Success);
        }