1
0
mirror of https://github.com/DNSCrypt/dnscrypt-proxy.git synced 2024-12-29 00:30:30 +01:00
dnscrypt-proxy/vendor/github.com/powerman/check/doc.go
2023-03-23 12:54:45 +01:00

158 lines
4.8 KiB
Go

// Package check provide helpers to complement Go testing package.
//
// # Features
//
// This package is like testify/assert on steroids. :)
//
// - Compelling output from failed tests:
// - Very easy-to-read dumps for expected and actual values.
// - Same text diff you loved in testify/assert.
// - Also visual diff in GoConvey web UI, if you use it (recommended).
// - Statistics with amount of passed/failed checks.
// - Colored output in terminal.
// - 100% compatible with testing package - check package just provide
// convenient wrappers for *testing.T methods and doesn't introduce
// new concepts like BDD, custom test suite or unusual execution flow.
// - All checks you may ever need! :)
// - Very easy to add your own check functions.
// - Concise, handy and consistent API, without dot-import!
//
// # Quickstart
//
// Just wrap each (including subtests) *testing.T using check.T() and write
// tests as usually with testing package. Call new methods provided by
// this package to have more clean/concise test code and cool dump/diff.
//
// import "github.com/powerman/check"
//
// func TestSomething(tt *testing.T) {
// t := check.T(tt)
// t.Equal(2, 2)
// t.Log("You can use new t just like usual *testing.T")
// t.Run("Subtests/Parallel example", func(tt *testing.T) {
// t := check.T(tt)
// t.Parallel()
// t.NotEqual(2, 3, "should not be 3!")
// obj, err := NewObj()
// if t.Nil(err) {
// t.Match(obj.field, `^\d+$`)
// }
// })
// }
//
// To get optional statistics about executed checkers add:
//
// func TestMain(m *testing.M) { check.TestMain(m) }
//
// When use goconvey tool, to get nice diff in web UI add:
//
// import _ "github.com/smartystreets/goconvey/convey"
//
// # Hints
//
// ★ How to check for errors:
//
// // If you just want nil:
// t.Nil(err)
// t.Err(err, nil)
//
// // Check for (absence of) concrete (possibly wrapped) error:
// t.Err(err, io.EOF)
// t.NotErr(err, io.EOF) // nil is not io.EOF, so it's ok too
//
// // When need to match by error's text:
// t.Match(err, "file.*permission")
//
// // Use Equal ONLY when checking for same instance:
// t.Equal(io.EOF, io.EOF) // this works
// t.Equal(io.EOF, errors.New("EOF")) // this doesn't work!
// t.Err(io.EOF, errors.New("EOF")) // this works
// t.DeepEqual(io.EOF, errors.New("EOF")) // this works too
//
// ★ Each check returns bool, so you can easily skip problematic code:
//
// if t.Nil(err) {
// t.Match(obj.field, `^\d+$`)
// }
//
// ★ You can turn any check into assertion to stop test immediately:
//
// t.Must(t.Nil(err))
//
// ★ You can turn all checks into assertions to stop test immediately:
//
// t = t.MustAll()
// t.Nil(err)
//
// ★ You can provide extra description to each check:
//
// t.Equal(got, want, "Just msg: will Print(), % isn't special")
// t.Equal(got, want, "Msg with args: will Printf(): %v", extra)
//
// ★ There are short synonyms for checks implementing usual ==, !=, etc.:
//
// t.EQ(got, want) // same as t.Equal
// t.NE(got, want) // same as t.NotEqual
// t.LT(got, want) // same as t.Less
// t.LE(got, want) // same as t.LessOrEqual
// t.GT(got, want) // same as t.Greater
// t.GE(got, want) // same as t.GreaterOrEqual
//
// ★ If you need custom check, which isn't available out-of-box - see
// Should checker, it'll let you plug in your own checker with ease.
//
// ★ It will panic when called with arg of wrong type - because this
// means bug in your test.
//
// ★ If you don't see colors in `go test` output it may happens because of
// two reasons: either your $TERM doesn't contain substring "color" or
// you're running `go test path/to/your/package`. To force colored output
// in last case just set this environment variable:
//
// export GO_TEST_COLOR=1
//
// # Contents
//
// There are few special functions (assertion, custom checkers, etc.).
//
// Error
// Must
// MustAll
// Should
// TODO
//
// Everything else are just trivial (mostly) checkers which works in
// obvious way and accept values of any types which makes sense (and
// panics on everything else).
//
// Nil NotNil
// Zero NotZero
// True False
//
// Equal NotEqual EQ NE
// DeepEqual NotDeepEqual
// Err NotErr
// BytesEqual NotBytesEqual
// JSONEqual
//
// Greater LessOrEqual GT LE
// Less GreaterOrEqual LT GE
// Between NotBetween
// BetweenOrEqual NotBetweenOrEqual
// InDelta NotInDelta
// InSMAPE NotInSMAPE
//
// Len NotLen
// Match NotMatch
// HasPrefix NotHasPrefix
// HasSuffix NotHasSuffix
// HasKey NotHasKey
// Contains NotContains
//
// HasType NotHasType
// Implements NotImplements
//
// Panic NotPanic
// PanicMatch PanicNotMatch
package check