Skip to content

Commit 7b7a28f

Browse files
Ordering fix comparejson (#23)
* fix: ordering fix for colorized and compare Signed-off-by: Harshita Shankar <harshitashankar@yahoo.com> * fix hash for deeply_nested_mixed_structures Signed-off-by: Harshita Shankar <harshitashankar@yahoo.com> * fix hash for tests Signed-off-by: Harshita Shankar <harshitashankar@yahoo.com> * remove prints Signed-off-by: Harshita Shankar <harshitashankar@yahoo.com> --------- Signed-off-by: Harshita Shankar <harshitashankar@yahoo.com>
1 parent 117b584 commit 7b7a28f

File tree

2 files changed

+39
-23
lines changed

2 files changed

+39
-23
lines changed

jsonDiff_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func TestSprintJSONDiff(t *testing.T) {
116116
expectedStringA: []string{
117117
"30aef022f108468def1ab4e9c2f7bc955dd88234b7fa6d6b4fa36584b9373830",
118118
"4e749ff18c8ee678247126d751bb1a6309a22e5e754c8b1d4cac0c7701cd96c0",
119-
"7470cc614de3e68eb00d38f087b208d73822244dca550c3103caa61d7bc16f3f",
119+
"27d4343ebcc5f8354709cecc05b0e4001085233f82fb6424fe176f44f59f1e9a",
120120
"7fb2c228f44a66eb262804bd7c21049dcfbb265173cf24deb4842e521ee983b2",
121121
"93639a34e7bd6dd08cc716ed1715bfd6207cc5f8768525dad30564c6a843f32a",
122122
"d90a8ef41e08f7d80ccee8b2c69d43291933a7eeb57f517469f3a7f14cc1a313",
@@ -125,7 +125,7 @@ func TestSprintJSONDiff(t *testing.T) {
125125
"c3e49694ce1509a2bf9f6557c4fc643d1efc1ef98dd9a7c18cbe2fb96bdc5109",
126126
},
127127
expectedStringB: []string{
128-
"fb916cbcb8a9c8accb60f436b7ae49d404a6815d81cb67aae9236d41713ecb2c",
128+
"21496320cfc4ca51f19b717d80dc325a4f598b3537b023c5026aee06c227353d",
129129
"8211a861b8ec0d7ce838850e29a9a31a352abcccdb045cb86cd8c8d8721dcd20",
130130
"ca4aa97a9cd8a928eb843ba02d7a1b8eac3014ed92e7d934fa996c6cf829aa05",
131131
"32ed13ed95fd695d63687876616d3a2e395137ef5c09d96cff18458eec33e8f3",
@@ -146,7 +146,7 @@ func TestSprintJSONDiff(t *testing.T) {
146146
"f71cbcb39804b502c41125d03be6c699baafa15efba8bbb5aef0b111039b2a87",
147147
"fa012aa280e519ccb558663c5728faea94ed020988c83653a796926c35902ec0",
148148
"ef0a5b31ffc0a36df02dcc08898cad0b92857cd1405cad0feefc18d888bf57d0",
149-
"e0236118ff8532288842ad67be5bca9f81b15191ee2efc2eee077406fabf8bbd",
149+
"f8372dde292cf76ca84f07227882caa214ad034e6d3a80e5365af78dc3f21e81",
150150
"c828a0590dbd6e6eefbee21c5855b19a8bff98930f0219816fe6f24c3705c5cb",
151151
"17f1dc518cda544ae5ff4b2479e94d5ef811e542b387608dfe7b44e42937e452",
152152
},
@@ -155,7 +155,7 @@ func TestSprintJSONDiff(t *testing.T) {
155155
"8fe4e8830eb84cdacd2cbd60f62fc5d50dcecf3a5cc439ea7e24d87d4257c6a8",
156156
"e765848380611cb81996ea9908ade2ee8940c21d72a84fd19ce1d1d6ddfa8e2a",
157157
"001ff4d6bf9821bb067c73812ba5900574dd161d813f10623ba2515fdbed0f88",
158-
"19018c74ffe402eb59202aadc1cab4f5c8171c96ba50f4621ab9d72f3b18914e",
158+
"c9da677f57ff1bf284a8108868c6cf1d9daa2ec3587c8a95b4e4542c00cef5dd",
159159
"0bd78116662eba5d4fa8bbc64f81afbd879fb2e73cd6d85105e1f9bf3a658ae0",
160160
"d11e6a5e5047d70f5e5633650bc4b3fd7a588d126fb785e5ac42b92fbf3e44f6",
161161
},
@@ -289,7 +289,7 @@ func TestSprintJSONDiff(t *testing.T) {
289289
},
290290
{
291291
expectedStringA: []string{
292-
"7fb2c228f44a66eb262804bd7c21049dcfbb265173cf24deb4842e521ee983b2",
292+
"27d4343ebcc5f8354709cecc05b0e4001085233f82fb6424fe176f44f59f1e9a",
293293
"30aef022f108468def1ab4e9c2f7bc955dd88234b7fa6d6b4fa36584b9373830",
294294
"c3e49694ce1509a2bf9f6557c4fc643d1efc1ef98dd9a7c18cbe2fb96bdc5109",
295295
"7470cc614de3e68eb00d38f087b208d73822244dca550c3103caa61d7bc16f3f",
@@ -304,7 +304,7 @@ func TestSprintJSONDiff(t *testing.T) {
304304
expectedStringB: []string{
305305
"fb916cbcb8a9c8accb60f436b7ae49d404a6815d81cb67aae9236d41713ecb2c",
306306
"56d4dd69bc7d542a099e6200f2b6d5d024f747e8fc8f493ca9d0a449cc63d1c3",
307-
"d458672f27aa045490d25f180b1e5b81d8d6da09035731127ffb27eca9002942",
307+
"21496320cfc4ca51f19b717d80dc325a4f598b3537b023c5026aee06c227353d",
308308
"8211a861b8ec0d7ce838850e29a9a31a352abcccdb045cb86cd8c8d8721dcd20",
309309
"b54c3ce37beedd7f27b98563770c930887474a00f8471252a95a4fd8e4b8b1fa",
310310
"70e5515e928a51a26c2d78315c677bd841b6118ca4f8f9843b349257a0fafa1e",
@@ -322,7 +322,7 @@ func TestSprintJSONDiff(t *testing.T) {
322322
"8317e30c64967ec9a7d82332831630315a64ab03496dc11851984693ccc6ef3c",
323323
"507d00b6db2ba429d7bb6fd7cf422e145806761748690714ae4bd7672bb2e41a",
324324
"e61a886b811b80831b9a69293200addfefea3ac0a4fbc401422c32b0815353f7",
325-
"689295d50d283dfb54cef114968a0b5eebd44613ae313bc9d1719e8a18e4c83d",
325+
"897eb927925bc216402ad7206e3a8ac49c834e3958900786667bd714ef1b8f1f",
326326
"2622053f90dead9c5bbad099944c3736877f2d65ce9bb716b782b2467936b27c",
327327
"e94990f2032dca084904454bdd78da23ae7de904aea3620b4b6e3a0b0ff85f96",
328328
"52c0d440ad1a7658e150f9fd60328042f32cff5695290d00af86b915f814d55b",
@@ -338,7 +338,7 @@ func TestSprintJSONDiff(t *testing.T) {
338338
expectedStringB: []string{
339339
"82ef5e26330856df883b55e13725a1b71c56f787ab8b8e1d47d6df69ddf7121d",
340340
"275e4bec238e61b624affaf51ece1beaa5e1d3cb08d875a501e6f0a32e6b6474",
341-
"5b43d1d31702c9e74b93420fe30a3e64988edeb18b5aa7c6030108ab5ca43ccc",
341+
"22fb469d471af3159f3a84a94179b36b27af4eb51bcbc07dec399d4dd502d624",
342342
"7112d7ed41c984911e7716bf7791972e4d4712e59578a9a6efe565632c162076",
343343
"cf358de4037ee1daf5a36d4b6b89ded7aced41b6ac1a8ec0bcc9e063607eb194",
344344
"78970da2cca7e3dfa6c46b4136603259b56eccc3083d51cd2bc190648e7f9dc1",
@@ -358,20 +358,20 @@ func TestSprintJSONDiff(t *testing.T) {
358358
"ef4dd42bb9dc629bbfade57743e72663c9a5d236c0e92cb4ce8c80e0d1304350",
359359
"ef0a5b31ffc0a36df02dcc08898cad0b92857cd1405cad0feefc18d888bf57d0",
360360
"f71cbcb39804b502c41125d03be6c699baafa15efba8bbb5aef0b111039b2a87",
361-
"e0236118ff8532288842ad67be5bca9f81b15191ee2efc2eee077406fabf8bbd",
361+
"f8372dde292cf76ca84f07227882caa214ad034e6d3a80e5365af78dc3f21e81",
362362
"17f1dc518cda544ae5ff4b2479e94d5ef811e542b387608dfe7b44e42937e452",
363363
},
364364
expectedStringB: []string{
365365
"8fe4e8830eb84cdacd2cbd60f62fc5d50dcecf3a5cc439ea7e24d87d4257c6a8",
366366
"e765848380611cb81996ea9908ade2ee8940c21d72a84fd19ce1d1d6ddfa8e2a",
367367
"d79b35acf01b0f5138699ff1cc49ea89373b8ebf7e96118b839586a28c28bbee",
368368
"001ff4d6bf9821bb067c73812ba5900574dd161d813f10623ba2515fdbed0f88",
369-
"19018c74ffe402eb59202aadc1cab4f5c8171c96ba50f4621ab9d72f3b18914e",
369+
"c9da677f57ff1bf284a8108868c6cf1d9daa2ec3587c8a95b4e4542c00cef5dd",
370370
"d11e6a5e5047d70f5e5633650bc4b3fd7a588d126fb785e5ac42b92fbf3e44f6",
371371
},
372372
json1: "{\"books\":[{\"title\":\"Book A\",\"author\":{\"name\":\"Author 1\"}},{\"title\":\"Book B\",\"author\":{\"name\":\"Author 2\"}}]}",
373373
json2: "{\"books\":[{\"title\":\"Book B\",\"author\":{\"name\":\"Author 2\"}},{\"title\":\"Book A\",\"author\":{\"name\":\"Author 1\"}}]}",
374-
name: "different arrays with nested objects",
374+
name: "different arrays with nested objects2",
375375
},
376376
{
377377
expectedStringA: []string{
@@ -654,7 +654,7 @@ func TestSprintJSONDiff(t *testing.T) {
654654
expectedStringA: []string{
655655
"912c9262d67b66c88213a4852e320d9b8510756699fe6ee449ee88dbf8426194",
656656
"7276fdfc263d1cc56e82703e3010ee8537faa23d8ad824e6920c96b30a47da04",
657-
"b5569dffab784f8cd870abad4b63dd22ba0c2b8b9859bfed3c480a9aed116401",
657+
"225753634629e212ae856780142e39ba2a2a8607e1f7ef352ff1527ce71d5954",
658658
"5a1757013adc054b5c39f94fa645d620089a217630352a411c9dbee947a71763",
659659
"a7e01095237d895cb826f0253e0d826f1c9f08ec8c06872da68e08af06a7bfa7",
660660
"8c716c74148982037debf428df67b70b4b87c256760c3ece8e05c26b3b86cb32",
@@ -665,7 +665,7 @@ func TestSprintJSONDiff(t *testing.T) {
665665
expectedStringB: []string{
666666
"d4d0e98483b84858b909008fc80feb15ea1be34f3d8f08a4fba2256d3297cda4",
667667
"75c41d6b1061be75ba87dfa384bebf58f157b135cb30c2138804811188a150aa",
668-
"49a5be54a87c48e0f54e7d4b977d108e7eba92a65f49cd59955e4d20b7145ec0",
668+
"dca54c9e5cb4d08318a33d0067d071d6a6e63e350db7beab7fbfe0f8f761b8be",
669669
"875ba3013d34c16df7151d3b8df14e72a02aa69183051a48879dc1ae4b1b5b4b",
670670
"8d682e6444c028e9069ce1aafba947e5200bbb1d5bdb670bd7ca01db01536b9d",
671671
"3edb3572889e9ca3ba8fdcbcff05ed25daa8197d4f271022e1232eb6a89ed2b2",

jsondiff.go

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -824,8 +824,16 @@ func compareAndColorizeMaps(a, b map[string]interface{}, indent string, red, gre
824824
expectedOutput.WriteString("{\n") // Start the expected output with an opening brace and newline.
825825
actualOutput.WriteString("{\n") // Start the actual output with an opening brace and newline.
826826

827-
// Iterate over each key-value pair in the first map.
828-
for key, aValue := range a {
827+
// Get all keys and sort them
828+
keys := make([]string, 0, len(a))
829+
for key := range a {
830+
keys = append(keys, key)
831+
}
832+
sort.Strings(keys)
833+
834+
// Iterate over each key-value pair in the first map in sorted order
835+
for _, key := range keys {
836+
aValue := a[key]
829837
bValue, bHasKey := b[key] // Get the corresponding value from the second map and check if the key exists.
830838
if aValue == nil && !bHasKey {
831839
actualOutput.WriteString(fmt.Sprintf("%s\"%s\": \"Unsupported Type\",\n", indent+" ", red(key)))
@@ -843,16 +851,24 @@ func compareAndColorizeMaps(a, b map[string]interface{}, indent string, red, gre
843851
compare(key, aValue, bValue, indent+" ", &expectedOutput, &actualOutput, red, green, jsonPath, noise)
844852
}
845853

846-
// Iterate over each key-value pair in the second map.
847-
for key, bValue := range b {
848-
if _, aHasKey := a[key]; !aHasKey { // If the key does not exist in the first map.
849-
jsonPath = jsonPath + "." + key
854+
// Get all keys from second map that aren't in first map
855+
extraKeys := make([]string, 0)
856+
for key := range b {
857+
if _, exists := a[key]; !exists {
858+
extraKeys = append(extraKeys, key)
859+
}
860+
}
861+
sort.Strings(extraKeys)
862+
863+
// Iterate over each key-value pair in the second map that wasn't in the first map
864+
for _, key := range extraKeys {
865+
bValue := b[key]
866+
jsonPath = jsonPath + "." + key
850867

851-
isNoised := checkNoise(jsonPath, noise)
868+
isNoised := checkNoise(jsonPath, noise)
852869

853-
if !isNoised {
854-
writeKeyValuePair(&actualOutput, green(key), bValue, indent+" ", green) // Write the key-value pair with green color.
855-
}
870+
if !isNoised {
871+
writeKeyValuePair(&actualOutput, green(key), bValue, indent+" ", green) // Write the key-value pair with green color.
856872
}
857873
}
858874

0 commit comments

Comments
 (0)