| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- package messagediff
- import (
- "testing"
- "time"
- )
- type testStruct struct {
- A, b int
- C []int
- D [3]int
- }
- type RecursiveStruct struct {
- Key int
- Child *RecursiveStruct
- }
- func newRecursiveStruct(key int) *RecursiveStruct {
- a := &RecursiveStruct{
- Key: key,
- }
- b := &RecursiveStruct{
- Key: key,
- Child: a,
- }
- a.Child = b
- return a
- }
- type testCase struct {
- a, b interface{}
- diff string
- equal bool
- }
- func checkTestCases(t *testing.T, testData []testCase) {
- for i, td := range testData {
- diff, equal := PrettyDiff(td.a, td.b)
- if diff != td.diff {
- t.Errorf("%d. PrettyDiff(%#v, %#v) diff = %#v; not %#v", i, td.a, td.b, diff, td.diff)
- }
- if equal != td.equal {
- t.Errorf("%d. PrettyDiff(%#v, %#v) equal = %#v; not %#v", i, td.a, td.b, equal, td.equal)
- }
- }
- }
- func TestPrettyDiff(t *testing.T) {
- testData := []testCase{
- {
- true,
- false,
- "modified: = false\n",
- false,
- },
- {
- true,
- 0,
- "modified: = 0\n",
- false,
- },
- {
- []int{0, 1, 2},
- []int{0, 1, 2, 3},
- "added: [3] = 3\n",
- false,
- },
- {
- []int{0, 1, 2, 3},
- []int{0, 1, 2},
- "removed: [3] = 3\n",
- false,
- },
- {
- []int{0},
- []int{1},
- "modified: [0] = 1\n",
- false,
- },
- {
- &[]int{0},
- &[]int{1},
- "modified: [0] = 1\n",
- false,
- },
- {
- map[string]int{"a": 1, "b": 2},
- map[string]int{"b": 4, "c": 3},
- "added: [\"c\"] = 3\nmodified: [\"b\"] = 4\nremoved: [\"a\"] = 1\n",
- false,
- },
- {
- testStruct{1, 2, []int{1}, [3]int{4, 5, 6}},
- testStruct{1, 3, []int{1, 2}, [3]int{4, 5, 6}},
- "added: .C[1] = 2\nmodified: .b = 3\n",
- false,
- },
- {
- nil,
- nil,
- "",
- true,
- },
- {
- &struct{}{},
- nil,
- "modified: = <nil>\n",
- false,
- },
- {
- nil,
- &struct{}{},
- "modified: = &struct {}{}\n",
- false,
- },
- {
- time.Time{},
- time.Time{},
- "",
- true,
- },
- {
- time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC),
- time.Time{},
- "modified: .loc = (*time.Location)(nil)\nmodified: .sec = 0\n",
- false,
- },
- }
- checkTestCases(t, testData)
- }
- func TestPrettyDiffRecursive(t *testing.T) {
- testData := []testCase{
- {
- newRecursiveStruct(1),
- newRecursiveStruct(1),
- "",
- true,
- },
- {
- newRecursiveStruct(1),
- newRecursiveStruct(2),
- "modified: .Child.Key = 2\nmodified: .Key = 2\n",
- false,
- },
- }
- checkTestCases(t, testData)
- }
- func TestPathString(t *testing.T) {
- testData := []struct {
- in Path
- want string
- }{{
- Path{StructField("test"), SliceIndex(1), MapKey{"blue"}, MapKey{12.3}},
- ".test[1][\"blue\"][12.3]",
- }}
- for i, td := range testData {
- if out := td.in.String(); out != td.want {
- t.Errorf("%d. %#v.String() = %#v; not %#v", i, td.in, out, td.want)
- }
- }
- }
|