12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package lumberjack
- import (
- "fmt"
- "path/filepath"
- "reflect"
- "runtime"
- "testing"
- )
- // assert will log the given message if condition is false.
- func assert(condition bool, t testing.TB, msg string, v ...interface{}) {
- assertUp(condition, t, 1, msg, v...)
- }
- // assertUp is like assert, but used inside helper functions, to ensure that
- // the file and line number reported by failures corresponds to one or more
- // levels up the stack.
- func assertUp(condition bool, t testing.TB, caller int, msg string, v ...interface{}) {
- if !condition {
- _, file, line, _ := runtime.Caller(caller + 1)
- v = append([]interface{}{filepath.Base(file), line}, v...)
- fmt.Printf("%s:%d: "+msg+"\n", v...)
- t.FailNow()
- }
- }
- // equals tests that the two values are equal according to reflect.DeepEqual.
- func equals(exp, act interface{}, t testing.TB) {
- equalsUp(exp, act, t, 1)
- }
- // equalsUp is like equals, but used inside helper functions, to ensure that the
- // file and line number reported by failures corresponds to one or more levels
- // up the stack.
- func equalsUp(exp, act interface{}, t testing.TB, caller int) {
- if !reflect.DeepEqual(exp, act) {
- _, file, line, _ := runtime.Caller(caller + 1)
- fmt.Printf("%s:%d: exp: %v (%T), got: %v (%T)\n",
- filepath.Base(file), line, exp, exp, act, act)
- t.FailNow()
- }
- }
- // isNil reports a failure if the given value is not nil. Note that values
- // which cannot be nil will always fail this check.
- func isNil(obtained interface{}, t testing.TB) {
- isNilUp(obtained, t, 1)
- }
- // isNilUp is like isNil, but used inside helper functions, to ensure that the
- // file and line number reported by failures corresponds to one or more levels
- // up the stack.
- func isNilUp(obtained interface{}, t testing.TB, caller int) {
- if !_isNil(obtained) {
- _, file, line, _ := runtime.Caller(caller + 1)
- fmt.Printf("%s:%d: expected nil, got: %v\n", filepath.Base(file), line, obtained)
- t.FailNow()
- }
- }
- // notNil reports a failure if the given value is nil.
- func notNil(obtained interface{}, t testing.TB) {
- notNilUp(obtained, t, 1)
- }
- // notNilUp is like notNil, but used inside helper functions, to ensure that the
- // file and line number reported by failures corresponds to one or more levels
- // up the stack.
- func notNilUp(obtained interface{}, t testing.TB, caller int) {
- if _isNil(obtained) {
- _, file, line, _ := runtime.Caller(caller + 1)
- fmt.Printf("%s:%d: expected non-nil, got: %v\n", filepath.Base(file), line, obtained)
- t.FailNow()
- }
- }
- // _isNil is a helper function for isNil and notNil, and should not be used
- // directly.
- func _isNil(obtained interface{}) bool {
- if obtained == nil {
- return true
- }
- switch v := reflect.ValueOf(obtained); v.Kind() {
- case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
- return v.IsNil()
- }
- return false
- }
|