Skip to content

Commit 90228d4

Browse files
committed
include testing for absence in checked diff
1 parent 4a1e756 commit 90228d4

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

patch/diff.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,13 @@ func (d Diff) calculate(left, right interface{}, tokens []Token) []Op {
6161
)
6262
}
6363
} else { // add new
64+
testOpTokens := append([]Token{}, newTokens...)
65+
testOpTokens = append(testOpTokens, KeyToken{Key: fmt.Sprintf("%s", k)})
6466
newTokens = append(newTokens, KeyToken{Key: fmt.Sprintf("%s", k), Optional: true})
65-
ops = append(ops, ReplaceOp{Path: NewPointer(newTokens), Value: typedRight[k]})
67+
ops = append(ops,
68+
TestOp{Path: NewPointer(testOpTokens), Absent: true},
69+
ReplaceOp{Path: NewPointer(newTokens), Value: typedRight[k]},
70+
)
6671
}
6772
}
6873
return ops
@@ -87,8 +92,13 @@ func (d Diff) calculate(left, right interface{}, tokens []Token) []Op {
8792
)
8893
// keep actualIndex the same
8994
case i >= len(typedLeft): // add new
95+
testOpTokens := append([]Token{}, newTokens...)
96+
testOpTokens = append(testOpTokens, IndexToken{Index: i}) // use actual index
9097
newTokens = append(newTokens, AfterLastIndexToken{})
91-
ops = append(ops, ReplaceOp{Path: NewPointer(newTokens), Value: typedRight[i]})
98+
ops = append(ops,
99+
TestOp{Path: NewPointer(testOpTokens), Absent: true},
100+
ReplaceOp{Path: NewPointer(newTokens), Value: typedRight[i]},
101+
)
92102
actualIndex++
93103
default:
94104
newTokens = append(newTokens, IndexToken{Index: actualIndex})

patch/diff_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ var _ = Describe("Diff.Calculate", func() {
8787
ReplaceOp{Path: MustNewPointerFromString("/a"), Value: 124},
8888
TestOp{Path: MustNewPointerFromString("/b"), Value: 456},
8989
RemoveOp{Path: MustNewPointerFromString("/b")},
90+
TestOp{Path: MustNewPointerFromString("/c"), Absent: true},
9091
ReplaceOp{Path: MustNewPointerFromString("/c?"), Value: 456},
9192
},
9293
)
@@ -130,6 +131,7 @@ var _ = Describe("Diff.Calculate", func() {
130131
ReplaceOp{Path: MustNewPointerFromString("/a"), Value: 124},
131132
TestOp{Path: MustNewPointerFromString("/b/b"), Value: 4056},
132133
RemoveOp{Path: MustNewPointerFromString("/b/b")},
134+
TestOp{Path: MustNewPointerFromString("/b/c"), Absent: true},
133135
ReplaceOp{Path: MustNewPointerFromString("/b/c?"), Value: 4056},
134136
},
135137
)
@@ -169,7 +171,9 @@ var _ = Describe("Diff.Calculate", func() {
169171
[]Op{
170172
TestOp{Path: MustNewPointerFromString("/0"), Value: "a"},
171173
ReplaceOp{Path: MustNewPointerFromString("/0"), Value: "b"},
174+
TestOp{Path: MustNewPointerFromString("/1"), Absent: true},
172175
ReplaceOp{Path: MustNewPointerFromString("/-"), Value: 123},
176+
TestOp{Path: MustNewPointerFromString("/2"), Absent: true},
173177
ReplaceOp{Path: MustNewPointerFromString("/-"), Value: 456},
174178
},
175179
)
@@ -204,6 +208,7 @@ var _ = Describe("Diff.Calculate", func() {
204208
[]Op{
205209
TestOp{Path: MustNewPointerFromString("/1"), Value: 456},
206210
ReplaceOp{Path: MustNewPointerFromString("/1"), Value: "a"},
211+
TestOp{Path: MustNewPointerFromString("/2"), Absent: true},
207212
ReplaceOp{Path: MustNewPointerFromString("/-"), Value: 456},
208213
},
209214
)

0 commit comments

Comments
 (0)