/// <summary>
        /// Determines if two objects have the same exact values for
        /// all of their corresponding properties, excluding the properties
        /// associated with pathsToIgnore.  This method will print side-by-side
        /// comparisons if the two objects are not equal.
        /// NOTE: Requires Xunit
        /// NOTE: The current object should be the "actual" object
        /// </summary>
        /// <typeparam name="T">The type of the current object</typeparam>
        /// <param name="obj1">The current object</param>
        /// <param name="obj2">The object to compare</param>
        /// <param name="propertiesToIgnore">a string array of
        /// property names that will be ignored.</param>
        /// <param name="output">object used by Xunit to print to console</param>
        /// <param name="ignoreArrayElementOrder">Whether to ignore the order of array elements</param>
        /// <returns>true, if equal; false, otherwise</returns>
        /// <seealso cref="IsEqualOrWrite{T}(object, T)"/>
        /// <see href="https://github.com/json-path/JsonPath"/>
        public static bool IsEqualOrWrite <T>(this object obj1, T obj2,
                                              string[] propertiesToIgnore, ITestOutputHelper output, bool ignoreArrayElementOrder = false)
        {
            string json1 = JsonConvert.SerializeObject(obj1,
                                                       Formatting.Indented, new SafeJsonSerializerSettings(
                                                           DEFAULT_MAXDEPTH, propertiesToIgnore));
            string json2 = JsonConvert.SerializeObject(obj2,
                                                       Formatting.Indented, new SafeJsonSerializerSettings(
                                                           DEFAULT_MAXDEPTH, propertiesToIgnore));

            if (ignoreArrayElementOrder)
            {
                json1 = JsonSorter.Sort(json1);
                json2 = JsonSorter.Sort(json2);
            }

            var isEqual = (json1 == json2);

            if (!isEqual)
            {
                output.WriteLine(FileStringComparer.GetSideBySideFileStrings(json2, json1, "EXPECTED", "ACTUAL"));
            }

            return(isEqual);
        }
        public void Sort(string testCase)
        {
            var expected = File.ReadAllText($"Sort\\expected{testCase}.json");
            var input    = File.ReadAllText($"Sort\\input{testCase}.json");
            var actual   = JsonSorter.Sort(input);

            _output.WriteLine(actual);

            var expectedJToken = JToken.Parse(expected);
            var actualJToken   = JToken.Parse(actual);

            Assert.Equal(expectedJToken.ToString(), actualJToken.ToString());
        }
        /// <summary>
        /// Determines if two objects have the same exact values for
        /// all of their corresponding properties.  Note: this is a
        /// deep comparison.
        /// </summary>
        /// <typeparam name="T">The type of the current object</typeparam>
        /// <param name="obj1">The current object</param>
        /// <param name="obj2">The object to compare</param>
        /// <param name="ignoreArrayElementOrder">Whether to ignore the order of array elements</param>
        /// <returns>true, if equal; false, otherwise</returns>
        /// <seealso cref="IsEqual{T}(object, T, string[])"/>
        public static bool IsEqual <T>(this object obj1, T obj2, bool ignoreArrayElementOrder = false)
        {
            string json1 = JsonConvert.SerializeObject(obj1,
                                                       Formatting.Indented, new SafeJsonSerializerSettings());
            string json2 = JsonConvert.SerializeObject(obj2,
                                                       Formatting.Indented, new SafeJsonSerializerSettings());

            if (ignoreArrayElementOrder)
            {
                json1 = JsonSorter.Sort(json1);
                json2 = JsonSorter.Sort(json2);
            }

            return(json1 == json2);
        }
        /// <summary>
        /// Determines if two objects have the same exact values for
        /// all of their corresponding properties, excluding the properties
        /// associated with pathsToIgnore.
        /// </summary>
        /// <typeparam name="T">The type of the current object</typeparam>
        /// <param name="obj1">The current object</param>
        /// <param name="obj2">The object to compare</param>
        /// <param name="maxDepth">The maximum depth of the object graph to serialize (1=flat)</param>
        /// <param name="propertiesToIgnore">a string array of
        /// <param name="ignoreArrayElementOrder">Whether to ignore the order of array elements</param>
        /// property names that will be ignored.</param>
        /// <returns>true, if equal; false, otherwise</returns>
        /// <seealso cref="IsEqual{T}(object, T)"/>
        /// <see href="https://github.com/json-path/JsonPath"/>
        public static bool IsEqual <T>(this object obj1, T obj2,
                                       int maxDepth, string[] propertiesToIgnore, bool ignoreArrayElementOrder = false)
        {
            CheckDepth(obj1, maxDepth);

            string json1 = JsonConvert.SerializeObject(obj1,
                                                       Formatting.Indented, new SafeJsonSerializerSettings(
                                                           maxDepth, propertiesToIgnore));
            string json2 = JsonConvert.SerializeObject(obj2,
                                                       Formatting.Indented, new SafeJsonSerializerSettings(
                                                           maxDepth, propertiesToIgnore));

            if (ignoreArrayElementOrder)
            {
                json1 = JsonSorter.Sort(json1);
                json2 = JsonSorter.Sort(json2);
            }

            return(json1 == json2);
        }
Beispiel #5
0
 public Comparer(JsonSorter owner)
 {
     Owner = owner;
 }