1
+ import { expect } from 'chai' ;
2
+
3
+ import diff from './' ;
4
+
5
+ describe ( '.diff' , ( ) => {
6
+
7
+ describe ( 'base case' , ( ) => {
8
+ describe ( 'equal' , ( ) => {
9
+ it ( 'returns empty object when given ints are equal' , ( ) => {
10
+ expect ( diff ( 1 , 1 ) ) . to . deep . equal ( { } ) ;
11
+ } ) ;
12
+
13
+ it ( 'returns empty object when given strings are equal' , ( ) => {
14
+ expect ( diff ( 'a' , 'a' ) ) . to . deep . equal ( { } ) ;
15
+ } ) ;
16
+
17
+ it ( 'returns empty object when given booleans are equal' , ( ) => {
18
+ expect ( diff ( true , true ) ) . to . deep . equal ( { } ) ;
19
+ } ) ;
20
+
21
+ it ( 'returns empty object when given parameters are null' , ( ) => {
22
+ expect ( diff ( null , null ) ) . to . deep . equal ( { } ) ;
23
+ } ) ;
24
+
25
+ it ( 'returns empty object when given parameters are undefined' , ( ) => {
26
+ expect ( diff ( undefined , undefined ) ) . to . deep . equal ( { } ) ;
27
+ } ) ;
28
+
29
+ it ( 'returns empty object when given objects are equal' , ( ) => {
30
+ expect ( diff ( { a : 1 } , { a : 1 } ) ) . to . deep . equal ( { } ) ;
31
+ } ) ;
32
+
33
+ it ( 'returns empty object when given arrays are equal' , ( ) => {
34
+ expect ( diff ( [ 1 ] , [ 1 ] ) ) . to . deep . equal ( { } ) ;
35
+ } ) ;
36
+ } ) ;
37
+
38
+ describe ( 'not equal and not object' , ( ) => {
39
+ it ( 'returns right hand side value when given ints are different' , ( ) => {
40
+ expect ( diff ( 1 , 2 ) ) . to . deep . equal ( 2 ) ;
41
+ } ) ;
42
+
43
+ it ( 'returns right hand side value when given strings are different' , ( ) => {
44
+ expect ( diff ( 'a' , 'b' ) ) . to . deep . equal ( 'b' ) ;
45
+ } ) ;
46
+
47
+ it ( 'returns right hand side value when given booleans are different' , ( ) => {
48
+ expect ( diff ( true , false ) ) . to . deep . equal ( false ) ;
49
+ } ) ;
50
+
51
+ it ( 'returns right hand side value when given values are not both null' , ( ) => {
52
+ expect ( diff ( 'hello' , null ) ) . to . deep . equal ( null ) ;
53
+ } ) ;
54
+
55
+ it ( 'returns right hand side value when given values are not both undefined' , ( ) => {
56
+ expect ( diff ( 'hello' , undefined ) ) . to . deep . equal ( undefined ) ;
57
+ } ) ;
58
+ } ) ;
59
+ } ) ;
60
+
61
+ describe ( 'recursive case' , ( ) => {
62
+ describe ( 'object' , ( ) => {
63
+ it ( 'returns right hand side value when given objects are different' , ( ) => {
64
+ expect ( diff ( { a : 1 } , { a : 2 } ) ) . to . deep . equal ( { a : 2 } ) ;
65
+ } ) ;
66
+
67
+ it ( 'returns subset of right hand side value when sibling objects differ' , ( ) => {
68
+ expect ( diff ( { a : { b : 1 } , c : 2 } , { a : { b : 1 } , c : 3 } ) ) . to . deep . equal ( { c : 3 } ) ;
69
+ } ) ;
70
+
71
+ it ( 'returns subset of right hand side value when nested values differ' , ( ) => {
72
+ expect ( diff ( { a : { b : 1 , c : 2 } } , { a : { b : 1 , c : 3 } } ) ) . to . deep . equal ( { a : { c : 3 } } ) ;
73
+ } ) ;
74
+
75
+ it ( 'returns subset of right hand side value when nested values differ at multiple paths' , ( ) => {
76
+ expect ( diff ( { a : { b : 1 } , c : 2 , d : { e : 100 } } , { a : { b : 99 } , c : 3 , d : { e : 100 } } ) ) . to . deep . equal ( { a : { b : 99 } , c : 3 } ) ;
77
+ } ) ;
78
+
79
+ it ( 'returns subset of right hand side value when a key value has been deleted' , ( ) => {
80
+ expect ( diff ( { a : { b : 1 } , c : 2 , d : { e : 100 } } , { a : { b : 1 } , c : 2 , d : { } } ) ) . to . deep . equal ( { d : { } } ) ;
81
+ } ) ;
82
+
83
+ it ( 'returns subset of right hand side value when a key value has been added' , ( ) => {
84
+ expect ( diff ( { a : 1 } , { a : 1 , b : 2 } ) ) . to . deep . equal ( { b : 2 } ) ;
85
+ } ) ;
86
+ } ) ;
87
+
88
+ describe ( 'arrays' , ( ) => {
89
+ it ( 'returns right hand side value as object of indices to value when arrays are different' , ( ) => {
90
+ expect ( diff ( [ 1 ] , [ 2 ] ) ) . to . deep . equal ( { 0 : 2 } ) ;
91
+ } ) ;
92
+
93
+ it ( 'returns subset of right hand side array as object of indices to value when arrays differs at multiple indicies' , ( ) => {
94
+ expect ( diff ( [ 1 , 2 , 3 ] , [ 9 , 8 , 3 ] ) ) . to . deep . equal ( { 0 : 9 , 1 : 8 } ) ;
95
+ } ) ;
96
+
97
+ it ( 'returns subset of right hand side array as object of indices to value when right hand side array has deletions' , ( ) => {
98
+ expect ( diff ( [ 1 , 2 , 3 ] , [ 1 , 3 ] ) ) . to . deep . equal ( { 1 : 3 } ) ;
99
+ } ) ;
100
+
101
+ it ( 'returns subset of right hand side array as object of indices to value when right hand side array has additions' , ( ) => {
102
+ expect ( diff ( [ 1 , 2 , 3 ] , [ 1 , 2 , 3 , 9 ] ) ) . to . deep . equal ( { 3 : 9 } ) ;
103
+ } ) ;
104
+ } ) ;
105
+ } ) ;
106
+ } ) ;
0 commit comments