diff options
Diffstat (limited to 'vendor/github.com/magiconair/properties/assert')
-rw-r--r-- | vendor/github.com/magiconair/properties/assert/assert.go | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/vendor/github.com/magiconair/properties/assert/assert.go b/vendor/github.com/magiconair/properties/assert/assert.go new file mode 100644 index 00000000..cb1097ba --- /dev/null +++ b/vendor/github.com/magiconair/properties/assert/assert.go @@ -0,0 +1,90 @@ +// Copyright 2017 Frank Schroeder. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package assert provides helper functions for testing. +package assert + +import ( + "fmt" + "path/filepath" + "reflect" + "regexp" + "runtime" + "strings" + "testing" +) + +// skip defines the default call depth +const skip = 2 + +// Equal asserts that got and want are equal as defined by +// reflect.DeepEqual. The test fails with msg if they are not equal. +func Equal(t *testing.T, got, want interface{}, msg ...string) { + if x := equal(2, got, want, msg...); x != "" { + fmt.Println(x) + t.Fail() + } +} + +func equal(skip int, got, want interface{}, msg ...string) string { + if !reflect.DeepEqual(got, want) { + return fail(skip, "got %v want %v %s", got, want, strings.Join(msg, " ")) + } + return "" +} + +// Panic asserts that function fn() panics. +// It assumes that recover() either returns a string or +// an error and fails if the message does not match +// the regular expression in 'matches'. +func Panic(t *testing.T, fn func(), matches string) { + if x := doesPanic(2, fn, matches); x != "" { + fmt.Println(x) + t.Fail() + } +} + +func doesPanic(skip int, fn func(), expr string) (err string) { + defer func() { + r := recover() + if r == nil { + err = fail(skip, "did not panic") + return + } + var v string + switch r.(type) { + case error: + v = r.(error).Error() + case string: + v = r.(string) + } + err = matches(skip, v, expr) + }() + fn() + return "" +} + +// Matches asserts that a value matches a given regular expression. +func Matches(t *testing.T, value, expr string) { + if x := matches(2, value, expr); x != "" { + fmt.Println(x) + t.Fail() + } +} + +func matches(skip int, value, expr string) string { + ok, err := regexp.MatchString(expr, value) + if err != nil { + return fail(skip, "invalid pattern %q. %s", expr, err) + } + if !ok { + return fail(skip, "got %s which does not match %s", value, expr) + } + return "" +} + +func fail(skip int, format string, args ...interface{}) string { + _, file, line, _ := runtime.Caller(skip) + return fmt.Sprintf("\t%s:%d: %s\n", filepath.Base(file), line, fmt.Sprintf(format, args...)) +} |