/// <summary>
        /// Compares a queryStructualValue to namedValues
        /// Throws a DataComparisonException if values don't match
        /// </summary>
        /// <param name="queryStructuralValue">QueryStructural Value to compare</param>
        /// <param name="namedValues">NamedValues to compare</param>
        /// <param name="scalarComparer">The comparer to use for scalar values</param>
        public void Compare(QueryStructuralValue queryStructuralValue, IEnumerable<NamedValue> namedValues, IQueryScalarValueToClrValueComparer scalarComparer)
        {
            ExceptionUtilities.CheckArgumentNotNull(queryStructuralValue, "queryStructuralValue");
            ExceptionUtilities.CheckArgumentNotNull(namedValues, "namedValues");
            ExceptionUtilities.CheckArgumentNotNull(scalarComparer, "scalarComparer");

            this.errors = new List<string>();
            this.unusedNamedValuePaths = new List<string>(namedValues.Select(s => s.Name).ToArray());
            this.comparer = scalarComparer;

            this.CompareValues(queryStructuralValue, namedValues, null);
            
            foreach (string propertyPath in this.unusedNamedValuePaths)
            {
                this.errors.Add(string.Format(CultureInfo.InvariantCulture, "Value for propertyPath {0} was not compared against queryStructuralValue", propertyPath));
            }

            string errorMessage = null;
            foreach (string error in this.errors)
            {
                if (errorMessage == null)
                {
                    errorMessage = error;
                }
                else
                {
                    errorMessage = errorMessage + ", \r\n" + error;
                }
            }

            if (errorMessage != null)
            {
                throw new DataComparisonException(errorMessage);
            }
        }
示例#2
0
        /// <summary>
        /// Compares a queryStructualValue to namedValues
        /// Throws a DataComparisonException if values don't match
        /// </summary>
        /// <param name="queryStructuralValue">QueryStructural Value to compare</param>
        /// <param name="namedValues">NamedValues to compare</param>
        /// <param name="scalarComparer">The comparer to use for scalar values</param>
        public void Compare(QueryStructuralValue queryStructuralValue, IEnumerable <NamedValue> namedValues, IQueryScalarValueToClrValueComparer scalarComparer)
        {
            ExceptionUtilities.CheckArgumentNotNull(queryStructuralValue, "queryStructuralValue");
            ExceptionUtilities.CheckArgumentNotNull(namedValues, "namedValues");
            ExceptionUtilities.CheckArgumentNotNull(scalarComparer, "scalarComparer");

            this.errors = new List <string>();
            this.unusedNamedValuePaths = new List <string>(namedValues.Select(s => s.Name).ToArray());
            this.comparer = scalarComparer;

            this.CompareValues(queryStructuralValue, namedValues, null);

            foreach (string propertyPath in this.unusedNamedValuePaths)
            {
                this.errors.Add(string.Format(CultureInfo.InvariantCulture, "Value for propertyPath {0} was not compared against queryStructuralValue", propertyPath));
            }

            string errorMessage = null;

            foreach (string error in this.errors)
            {
                if (errorMessage == null)
                {
                    errorMessage = error;
                }
                else
                {
                    errorMessage = errorMessage + ", \r\n" + error;
                }
            }

            if (errorMessage != null)
            {
                throw new DataComparisonException(errorMessage);
            }
        }
示例#3
0
        private void VerifyPropertyValues(ODataRequest request, IQueryScalarValueToClrValueComparer primitiveComparer, QueryStructuralValue afterUpdate)
        {
            var namedValues = this.ExtractNamedValues(request);

            this.Comparer.Compare(afterUpdate, namedValues, primitiveComparer);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="TextValuePrimitiveComparer"/> class.
 /// </summary>
 /// <param name="realComparer">The real comparer.</param>
 /// <param name="converter">The converter.</param>
 public TextValuePrimitiveComparer(IQueryScalarValueToClrValueComparer realComparer, IXmlPrimitiveConverter converter)
 {
     this.UnderlyingComparer = realComparer;
     this.converter = converter;
 }
 private void VerifyPropertyValues(ODataRequest request, IQueryScalarValueToClrValueComparer primitiveComparer, QueryStructuralValue afterUpdate)
 {
     var namedValues = this.ExtractNamedValues(request);
     this.Comparer.Compare(afterUpdate, namedValues, primitiveComparer);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="TextValuePrimitiveComparer"/> class.
 /// </summary>
 /// <param name="realComparer">The real comparer.</param>
 /// <param name="converter">The converter.</param>
 public TextValuePrimitiveComparer(IQueryScalarValueToClrValueComparer realComparer, IXmlPrimitiveConverter converter)
 {
     this.UnderlyingComparer = realComparer;
     this.converter          = converter;
 }
示例#7
0
 /// <summary>
 /// Compares a NamedValue to a QueryStructuralValue
 /// </summary>
 /// <param name="comparer">Comparer used to see if the specified values are equal</param>
 /// <param name="existing">Existing QueryStructualValue to compare to</param>
 /// <param name="namedValue">NamedValue to compare against</param>
 /// <param name="scalarComparer">Scalar comparer to use</param>
 public static void CompareStructuralValue(this IQueryStructuralValueToNamedValueComparer comparer, QueryStructuralValue existing, NamedValue namedValue, IQueryScalarValueToClrValueComparer scalarComparer)
 {
     comparer.Compare(existing, (new NamedValue[] { namedValue }).AsEnumerable(), scalarComparer);
 }