コード例 #1
0
        private static void HandleKeyDiscrepancies(
            List <string> discrepancyKeys,
            JObject discrepancyJObject,
            bool ignoreDefaultValues,
            string errorMessageFormat,
            string description)
        {
            if (discrepancyKeys != null && discrepancyKeys.Any())
            {
                if (ignoreDefaultValues)
                {
                    // Ignore discrepancies where the missing/unexpected value is the default type value.
                    for (int i = discrepancyKeys.Count - 1; i >= 0; i--)
                    {
                        string discrepancyKey   = discrepancyKeys[i];
                        JToken discrepancyToken = discrepancyJObject[discrepancyKey];
                        if (JsonComparer.IsDefaultValue(discrepancyToken) ||
                            String.Equals(discrepancyKey, "hubName", StringComparison.OrdinalIgnoreCase))
                        {
                            discrepancyKeys.RemoveAt(i);
                        }
                    }
                }

                Assert.False(discrepancyKeys.Any(), string.Format(
                                 CultureInfo.InvariantCulture,
                                 errorMessageFormat,
                                 description,
                                 string.Join(",", discrepancyKeys)));
            }
        }
コード例 #2
0
        public static void ValidateAreSame(JToken expected, JToken actual, string description = null, bool ignoreCase = false, bool ignoreDefaultValues = false)
        {
            if (JsonComparer.IsDefaultValue(expected) && JsonComparer.IsDefaultValue(actual))
            {
                return;
            }
            if ((expected == null) != (actual == null))
            {
                Assert.Equal(expected, actual);
            }

            Action validateTypesAreEqual = () =>
            {
                Assert.Equal(expected.Type, actual.Type);
            };

            switch (expected.Type)
            {
            case JTokenType.Object:
                validateTypesAreEqual();
                JsonComparer.ValidateAreSame((JObject)expected, (JObject)actual, description, ignoreCase, ignoreDefaultValues);
                break;

            case JTokenType.Array:
                validateTypesAreEqual();
                JsonComparer.ValidateAreSame((JArray)expected, (JArray)actual, description, ignoreCase, ignoreDefaultValues);
                break;

            case JTokenType.Boolean:
            case JTokenType.Bytes:
            case JTokenType.Comment:
            case JTokenType.Date:
            case JTokenType.Float:
            case JTokenType.Guid:
            case JTokenType.Integer:
            case JTokenType.Raw:
            case JTokenType.String:
            case JTokenType.TimeSpan:
            case JTokenType.Uri:
                if (!(actual is JValue))
                {
                    validateTypesAreEqual();
                }
                JsonComparer.ValidateAreSame((JValue)expected, (JValue)actual, description, ignoreCase);
                break;

            case JTokenType.Property:
                validateTypesAreEqual();
                JsonComparer.ValidateAreSame((JProperty)expected, (JProperty)actual, description, ignoreCase, ignoreDefaultValues);
                break;

            case JTokenType.Null:
                validateTypesAreEqual();
                break;

            case JTokenType.Constructor:
            case JTokenType.None:
            case JTokenType.Undefined:
            default:
                throw new NotImplementedException("Validation logic not implemented for JTokenType " + expected.Type);
            }
        }