Skip to content

Commit

Permalink
assert: more unsafe.Pointer tests
Browse files Browse the repository at this point in the history
1. Isolate tests that use the "unsafe" package in a separate package
   assert/internal/unsafetests. That way the assert package is not
   tainted with unsafe.
2. Remove one reference to the private assert.isNil() in assert tests.
3. Add more tests of assert.Nil and assert.NotNil with unsafe.Pointer.
  • Loading branch information
dolmen committed Nov 9, 2023
1 parent 331c520 commit 8850949
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 8 deletions.
8 changes: 0 additions & 8 deletions assert/assertions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import (
"strings"
"testing"
"time"
"unsafe"
)

var (
Expand Down Expand Up @@ -3138,10 +3137,3 @@ func TestErrorAs(t *testing.T) {
})
}
}

func TestIsNil(t *testing.T) {
var n unsafe.Pointer = nil
if !isNil(n) {
t.Fatal("fail")
}
}
4 changes: 4 additions & 0 deletions assert/internal/unsafetests/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// This package exists just to isolate tests that reference the [unsafe] package.
//
// The tests in this package are totally safe.
package unsafetests
34 changes: 34 additions & 0 deletions assert/internal/unsafetests/unsafetests_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package unsafetests_test

import (
"fmt"
"testing"
"unsafe"

"github.com/stretchr/testify/assert"
)

type ignoreTestingT struct{}

var _ assert.TestingT = ignoreTestingT{}

func (ignoreTestingT) Helper() {}

func (ignoreTestingT) Errorf(format string, args ...interface{}) {
// Run the formatting, but ignore the result
msg := fmt.Sprintf(format, args...)
_ = msg
}

func TestUnsafePointers(t *testing.T) {
var ignore ignoreTestingT

assert.True(t, assert.Nil(t, unsafe.Pointer(nil), "unsafe.Pointer(nil) is nil"))
assert.False(t, assert.NotNil(ignore, unsafe.Pointer(nil), "unsafe.Pointer(nil) is nil"))

assert.True(t, assert.Nil(t, unsafe.Pointer((*int)(nil)), "unsafe.Pointer((*int)(nil)) is nil"))
assert.False(t, assert.NotNil(ignore, unsafe.Pointer((*int)(nil)), "unsafe.Pointer((*int)(nil)) is nil"))

assert.False(t, assert.Nil(ignore, unsafe.Pointer(new(int)), "unsafe.Pointer(new(int)) is NOT nil"))
assert.True(t, assert.NotNil(t, unsafe.Pointer(new(int)), "unsafe.Pointer(new(int)) is NOT nil"))
}

0 comments on commit 8850949

Please sign in to comment.