Documentation
¶
Overview ¶
Vendored copy of https://github.com/carlmjohnson/be/tree/d3d9b39d71dd594af2ce96ba7fb599233e82377c
Example ¶
package main
import (
"errors"
"fmt"
"testing"
"github.com/carlmjohnson/requests/internal/be"
)
type mockingT struct{ *testing.T }
func (_ mockingT) Helper() {}
func (_ mockingT) Fatalf(format string, args ...any) {
fmt.Printf(format+"\n", args...)
}
func main() {
// mock *testing.T for example purposes
var t mockingT
be.Equal(t, "hello", "world") // bad
be.Equal(t, "goodbye", "goodbye") // good
be.Unequal(t, "hello", "world") // good
be.Unequal(t, "goodbye", "goodbye") // bad
s := []int{1, 2, 3}
be.AllEqual(t, []int{1, 2, 3}, s) // good
be.AllEqual(t, []int{3, 2, 1}, s) // bad
var err error
be.NilErr(t, err) // good
be.Nonzero(t, err) // bad
err = errors.New("(O_o)")
be.NilErr(t, err) // bad
be.Nonzero(t, err) // good
type mytype string
var mystring mytype = "hello, world"
be.In(t, "world", mystring) // good
be.In(t, "World", mystring) // bad
be.NotIn(t, "\x01", []byte("\a\b\x00\r\t")) // good
be.NotIn(t, "\x00", []byte("\a\b\x00\r\t")) // bad
}
Output: want: hello; got: world got: goodbye want: [3 2 1]; got: [1 2 3] got: <nil> got: (O_o) "World" not in "hello, world" "\x00" in "\a\b\x00\r\t"
Index ¶
- func AllEqual[T comparable](t testing.TB, want, got []T)
- func Debug(t testing.TB, f func())
- func DebugLog(t testing.TB, format string, args ...any)
- func DeepEqual[T any](t testing.TB, want, got T)
- func Equal[T comparable](t testing.TB, want, got T)
- func False(t testing.TB, value bool)
- func In[byteseq ~string | ~[]byte](t testing.TB, needle string, haystack byteseq)
- func NilErr(t testing.TB, err error)
- func Nonzero[T any](t testing.TB, value T)
- func NotIn[byteseq ~string | ~[]byte](t testing.TB, needle string, haystack byteseq)
- func True(t testing.TB, value bool)
- func Unequal[T comparable](t testing.TB, bad, got T)
- func Zero[T any](t testing.TB, value T)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AllEqual ¶
func AllEqual[T comparable](t testing.TB, want, got []T)
AllEqual calls t.Fatalf if want != got.
func Debug ¶
Debug takes a callback that will only be run after the test fails.
Example ¶
package main
import (
"fmt"
"testing"
"github.com/carlmjohnson/requests/internal/be"
)
type mockDebug struct {
testing.T
failed bool
cleanups []func()
}
func (m *mockDebug) Run(name string, f func(t *testing.T)) {
defer func() {
for _, f := range m.cleanups {
defer f()
}
}()
f(&m.T)
}
func (m *mockDebug) Cleanup(f func()) {
m.cleanups = append(m.cleanups, f)
}
func (_ *mockDebug) Log(args ...any) {
fmt.Println(args...)
}
func (_ *mockDebug) Helper() {}
func (m *mockDebug) Fatalf(format string, args ...any) {
m.failed = true
fmt.Printf(format+"\n", args...)
}
func (m *mockDebug) Failed() bool { return m.failed }
func main() {
t := &mockDebug{}
// If a test fails, the callbacks will be replayed in LIFO order
t.Run("logging-example", func(_ *testing.T) {
x := 1
x1 := x
be.Debug(t, func() {
// record some debug information about x1
fmt.Println("x1:", x1)
})
x = 2
x2 := x
be.Debug(t, func() {
// record some debug information about x2
fmt.Println("x2:", x2)
})
be.Equal(t, x, 3)
})
t = &mockDebug{}
// If a test succeeds, nothing will be replayed
t.Run("silent-example", func(_ *testing.T) {
y := 1
y1 := y
be.Debug(t, func() {
// record some debug information about y1
fmt.Println("y1:", y1)
})
y = 2
y2 := y
be.Debug(t, func() {
// record some debug information about y2
fmt.Println("y2:", y2)
})
be.Unequal(t, y, 3)
})
}
Output: want: 2; got: 3 x2: 2 x1: 1
func DebugLog ¶
DebugLog records a message that will only be logged after the test fails.
Example ¶
package main
import (
"fmt"
"testing"
"github.com/carlmjohnson/requests/internal/be"
)
type mockDebug struct {
testing.T
failed bool
cleanups []func()
}
func (m *mockDebug) Run(name string, f func(t *testing.T)) {
defer func() {
for _, f := range m.cleanups {
defer f()
}
}()
f(&m.T)
}
func (m *mockDebug) Cleanup(f func()) {
m.cleanups = append(m.cleanups, f)
}
func (_ *mockDebug) Log(args ...any) {
fmt.Println(args...)
}
func (_ *mockDebug) Helper() {}
func (m *mockDebug) Fatalf(format string, args ...any) {
m.failed = true
fmt.Printf(format+"\n", args...)
}
func (m *mockDebug) Failed() bool { return m.failed }
func main() {
t := &mockDebug{}
// If a test fails, the logs will be replayed in LIFO order
t.Run("logging-example", func(_ *testing.T) {
x := 1
be.DebugLog(t, "x: %d", x)
x = 2
be.DebugLog(t, "x: %d", x)
be.Equal(t, x, 3)
})
t = &mockDebug{}
// If a test succeeds, nothing will be replayed
t.Run("silent-example", func(_ *testing.T) {
y := 1
be.DebugLog(t, "y: %d", y)
y = 2
be.DebugLog(t, "y: %d", y)
be.Unequal(t, y, 3)
})
}
Output: want: 2; got: 3 x: 2 x: 1
func DeepEqual ¶
DeepEqual calls t.Fatalf if want and got are different according to reflect.DeepEqual.
Example ¶
var t mockingT
// good
m1 := map[int]bool{1: true, 2: false}
m2 := map[int]bool{1: true, 2: false}
be.DeepEqual(t, m1, m2)
// bad
var s1 []int
s2 := []int{}
be.DeepEqual(t, s1, s2) // DeepEqual is picky about nil vs. len 0
Output: reflect.DeepEqual([]int(nil), []int{}) == false
func Equal ¶
func Equal[T comparable](t testing.TB, want, got T)
Equal calls t.Fatalf if want != got.
func Unequal ¶
func Unequal[T comparable](t testing.TB, bad, got T)
Unequal calls t.Fatalf if got == bad.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.