Skip to content

Commit b3f1e42

Browse files
committed
Implement Equal on postgres.ParameterSet
Equal is one of the few expectations we can use in our test suite.
1 parent 9b0345d commit b3f1e42

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

internal/postgres/parameters.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,17 @@ func (ps *ParameterSet) DeepCopy() *ParameterSet {
106106
}
107107
}
108108

109+
func (ps *ParameterSet) Equal(other *ParameterSet) bool {
110+
if ps == nil && other == nil {
111+
return true
112+
}
113+
if ps == nil || other == nil {
114+
return false
115+
}
116+
117+
return maps.Equal(ps.values, other.values)
118+
}
119+
109120
// Add sets parameter name to value.
110121
func (ps *ParameterSet) Add(name, value string) {
111122
ps.values[ps.normalize(name)] = value

internal/postgres/parameters_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,43 @@ func TestParameterSetAppendToList(t *testing.T) {
9797
ps.AppendToList("full", "a", "cd", `"e"`)
9898
assert.Equal(t, ps.Value("full"), `a,b,a,cd,"e"`)
9999
}
100+
101+
func TestParameterSetEqual(t *testing.T) {
102+
var Nil *ParameterSet
103+
ps1 := NewParameterSet()
104+
ps2 := NewParameterSet()
105+
106+
// nil equals nil, and empty does not equal nil
107+
assert.Assert(t, Nil.Equal(nil))
108+
assert.Assert(t, !Nil.Equal(ps1))
109+
assert.Assert(t, !ps1.Equal(nil))
110+
111+
// empty equals empty
112+
assert.Assert(t, ps1.Equal(ps2))
113+
assert.Assert(t, ps2.Equal(ps1))
114+
115+
// different keys are not equal
116+
ps1.Add("a", "b")
117+
assert.Assert(t, !ps1.Equal(nil))
118+
assert.Assert(t, !Nil.Equal(ps1))
119+
assert.Assert(t, !ps1.Equal(ps2))
120+
assert.Assert(t, !ps2.Equal(ps1))
121+
122+
// different values are not equal
123+
ps2.Add("a", "c")
124+
assert.Assert(t, !ps1.Equal(ps2))
125+
assert.Assert(t, !ps2.Equal(ps1))
126+
127+
// normalized keys+values are equal
128+
ps1.Add("A", "c")
129+
assert.Assert(t, ps1.Equal(ps2))
130+
assert.Assert(t, ps2.Equal(ps1))
131+
132+
// [assert.DeepEqual] can only compare exported fields.
133+
// When present, the `(T) Equal(T) bool` method is used instead.
134+
//
135+
// https://pkg.go.dev/github.com/google/go-cmp/cmp#Equal
136+
t.Run("DeepEqual", func(t *testing.T) {
137+
assert.DeepEqual(t, NewParameterSet(), NewParameterSet())
138+
})
139+
}

0 commit comments

Comments
 (0)