From 7ff4e92ca97b8da0d9584639f74080f9a62fd2f0 Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Fri, 9 Dec 2022 09:53:04 -0500 Subject: [PATCH 1/7] Update changelog for v1.1.0 --- CHANGES.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 98f8c18..86d7a9c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,11 @@ # go-test/deep Changelog +## v1.1.0 released 2022-12-09 + +* Add optional flags: `Equal(a, b, flags..)` and `FLAG_IGNORE_SLICE_ORDER` (issue #28, PR #56) (@alenkacz) + +--- + ## v1.0.9 released 2022-12-09 * Fixed issue #45: Panic when comparing errors in unexported fields (PR #54) (@seveas) From 1127c8410de31c10a9ee65a3130cb9999222f888 Mon Sep 17 00:00:00 2001 From: Bartley Gillan Date: Thu, 18 May 2023 17:01:19 -0500 Subject: [PATCH 2/7] fix copy pasta test --- deep_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deep_test.go b/deep_test.go index bcb7d5a..0cc96cf 100644 --- a/deep_test.go +++ b/deep_test.go @@ -957,9 +957,9 @@ func TestNilSlicesAreEmpty(t *testing.T) { } func TestNilMapsAreEmpty(t *testing.T) { - defaultNilMapsAreEmpty := deep.NilSlicesAreEmpty + defaultNilMapsAreEmpty := deep.NilMapsAreEmpty deep.NilMapsAreEmpty = true - defer func() { deep.NilSlicesAreEmpty = defaultNilMapsAreEmpty }() + defer func() { deep.NilMapsAreEmpty = defaultNilMapsAreEmpty }() a := map[int]int{1: 1} b := map[int]int{} From 2b8252e0e2927def6d2e4b3da423773b7da0c593 Mon Sep 17 00:00:00 2001 From: Dennis Kaarsemaker Date: Tue, 14 Nov 2023 10:03:28 +0100 Subject: [PATCH 3/7] Add an option to consider nil pointers to be equivalent to zero values Similar to NilSlicesAreEmpty and NilStructsAreEmpty, this lets one consider nil pointers and zero values as equal. --- deep.go | 9 +++++++++ deep_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/deep.go b/deep.go index 4aab66a..4be3e1f 100644 --- a/deep.go +++ b/deep.go @@ -43,6 +43,9 @@ var ( // NilMapsAreEmpty causes a nil map to be equal to an empty map. NilMapsAreEmpty = false + + // NilPointersAreZero causes a nil pointer to be equal to a zero value. + NilPointersAreZero = false ) var ( @@ -190,6 +193,12 @@ func (c *cmp) equals(a, b reflect.Value, level int) { if bElem { b = b.Elem() } + if aElem && NilPointersAreZero && !a.IsValid() && b.IsValid() { + a = reflect.Zero(b.Type()) + } + if bElem && NilPointersAreZero && !b.IsValid() && a.IsValid() { + b = reflect.Zero(a.Type()) + } c.equals(a, b, level+1) return } diff --git a/deep_test.go b/deep_test.go index 0cc96cf..77c8b82 100644 --- a/deep_test.go +++ b/deep_test.go @@ -1581,3 +1581,27 @@ func TestSliceOrderStruct(t *testing.T) { t.Fatalf("expected 0 diff, got %d: %s", len(diff), diff) } } + +func TestNilPointersAreZero(t *testing.T) { + defaultNilPointersAreZero := deep.NilPointersAreZero + deep.NilPointersAreZero = true + defer func() { deep.NilPointersAreZero = defaultNilPointersAreZero }() + + type T struct { + S *string + } + + a := T{S: nil} + b := T{S: new(string)} + + diff := deep.Equal(a, b) + if len(diff) != 0 { + t.Fatalf("expected 0 diff, got %d: %s", len(diff), diff) + } + + *b.S = "hello" + diff = deep.Equal(a, b) + if len(diff) != 1 { + t.Fatalf("expected 1 diff, got %d: %s", len(diff), diff) + } +} From 2982c5cd7f0df7e1fc742be1c9647b4a93a4b69f Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Sun, 23 Jun 2024 11:24:29 -0400 Subject: [PATCH 4/7] Update test matrix to latest 3 Go versions --- .github/workflows/go.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index b2b5d29..c4b41d8 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -16,9 +16,9 @@ jobs: fail-fast: false matrix: go: - - '1.19' - - '1.18' - - '1.17' + - '1.22' + - '1.21' + - '1.20' steps: - uses: actions/checkout@v3 From 185886dcdbd18eef2db9c45ad3250df9c723776d Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Sun, 23 Jun 2024 11:31:08 -0400 Subject: [PATCH 5/7] Restore 100% test coverage (NilPointersAreZero case) --- deep_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/deep_test.go b/deep_test.go index 77c8b82..74377e1 100644 --- a/deep_test.go +++ b/deep_test.go @@ -1604,4 +1604,12 @@ func TestNilPointersAreZero(t *testing.T) { if len(diff) != 1 { t.Fatalf("expected 1 diff, got %d: %s", len(diff), diff) } + + a.S = new(string) + *a.S = "hi again" + b.S = nil + diff = deep.Equal(a, b) + if len(diff) != 1 { + t.Fatalf("expected 1 diff, got %d: %s", len(diff), diff) + } } From dc5b2f649f19df10b41b5f6ad46f62bc22d60341 Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Sun, 23 Jun 2024 11:33:04 -0400 Subject: [PATCH 6/7] Update SECURITY.md --- SECURITY.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 845584a..d007137 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,8 @@ For security patches, the latest release is supported: | Version | Supported | | ------- | ------------------ | -| 1.0.x | :white_check_mark: | +| 1.1.x | Yes | +| 1.0.x | No | ## Reporting a Vulnerability From 9e863ff5cf900f95c7e8a5e8248300939257744b Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Sun, 23 Jun 2024 12:27:04 -0400 Subject: [PATCH 7/7] Release v1.1.1 --- CHANGES.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 86d7a9c..163d6d5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,10 @@ # go-test/deep Changelog +## v1.1.1 released 2024-06-23 + +* Added `NilPointersAreZero` option: causes a nil pointer to be equal to a zero value (PR #61) (@seveas) +* Updated test matrix to go1.22, go1.21, and go1.20 + ## v1.1.0 released 2022-12-09 * Add optional flags: `Equal(a, b, flags..)` and `FLAG_IGNORE_SLICE_ORDER` (issue #28, PR #56) (@alenkacz) @@ -10,11 +15,11 @@ * Fixed issue #45: Panic when comparing errors in unexported fields (PR #54) (@seveas) * Fixed issue #46: Functions are handled differently from reflect.DeepEqual (PR #55) (@countcb) -* Updated matrix to go1.17, go1.18, and go1.19 and moved testing to GitHub Actions +* Updated test matrix to go1.17, go1.18, and go1.19 and moved testing to GitHub Actions ## v1.0.8 released 2021-10-13 -* Updated matrix to go1.15, go1.16, and go1.17 +* Updated test matrix to go1.15, go1.16, and go1.17 * Added SECURITY.md and GitHub code analysis ## v1.0.7 released 2020-07-11