Example #1
0
        protected SpecificationResult Compare(
            SpecificationValue left,
            SpecificationValue rigth,
            SpecificationEvaluationSettings settings)
        {
            if (left.ValueType != rigth.ValueType)
            {
                List <object> cast = new List <object>();
                foreach (object leftValue in left.Values)
                {
                    if (TypeHelper.HasMappingOrCast(leftValue, rigth.ValueType, settings.ValueSettings, out object leftCast))
                    {
                        cast.Add(leftCast);
                    }
                    else
                    {
                        if (settings.ThrowValueErrors)
                        {
                            throw new InvalidOperationException(
                                      string.Format(
                                          SpecAbsRes.KeyValueSpecificationTypeNotMatch,
                                          left.ValueType,
                                          this.Key,
                                          this.Value.ValueType));
                        }

                        return(SpecificationResult.Create(
                                   false,
                                   settings.IncludeDetails
                                ? string.Format(
                                       SpecAbsRes.KeyValueSpecificationTypeNotMatch,
                                       left.ValueType,
                                       this.Key,
                                       rigth.ValueType)
                                : null));
                    }
                }

                if (left.Values.Count == 1)
                {
                    left = SpecificationValue.Single(cast.Single());
                }
                if (left.ValueMultiplicity == SpecificationValue.Multiplicity.AnyOf)
                {
                    left = SpecificationValue.AnyOf(cast);
                }
                else if (left.ValueMultiplicity == SpecificationValue.Multiplicity.AllOf)
                {
                    left = SpecificationValue.AllOf(cast);
                }
                else
                {
                    throw new InvalidOperationException();
                }
            }

            return(this.CompareSafeTypes(left, rigth, settings));
        }
Example #2
0
        public void AllOfInt()
        {
            SpecificationValue value = SpecificationValue.AllOf(1, 2, 4);

            Assert.NotNull(value);
            Assert.Collection(value.Values.OfType <int>(), i => Assert.Equal(1, i), i => Assert.Equal(2, i), i => Assert.Equal(4, i));
            Assert.Equal(SpecificationValue.Multiplicity.AllOf, value.ValueMultiplicity);
            Assert.Equal(SpecificationValue.DataType.Int, value.ValueType);
            Assert.Equal("All of (1, 2, 4)", value.ToString());
        }
        public void SingleAll(int l, int r1, int r2, bool result)
        {
            EqualSpecification specification = new EqualSpecification(
                "key",
                SpecificationValue.AllOf(new List <int> {
                r1, r2
            }));

            Assert.Equal(result, specification.Evaluate(new Dictionary <string, object> {
                { "key", l }
            }).IsSatisfied);
            Assert.Equal(
                result,
                specification.Evaluate(new Dictionary <string, object> {
                { "key", SpecificationValue.Single(l) }
            })
                .IsSatisfied);
        }
        public void AnyAll(int l1, int l2, int r1, int r2, bool result)
        {
            EqualSpecification specification = new EqualSpecification("key", SpecificationValue.AllOf(r1, r2));

            Assert.Equal(
                result,
                specification.Evaluate(new Dictionary <string, object> {
                { "key", new List <int> {
                      l1, l2
                  } }
            })
                .IsSatisfied);
            Assert.Equal(
                result,
                specification.Evaluate(new Dictionary <string, object> {
                { "key", SpecificationValue.AnyOf(l1, l2) }
            })
                .IsSatisfied);
        }