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))); } }
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); } }