summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/jessevdk/go-flags/assert_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/jessevdk/go-flags/assert_test.go')
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/jessevdk/go-flags/assert_test.go177
1 files changed, 177 insertions, 0 deletions
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/jessevdk/go-flags/assert_test.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/jessevdk/go-flags/assert_test.go
new file mode 100644
index 00000000000..8e06636b66d
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/jessevdk/go-flags/assert_test.go
@@ -0,0 +1,177 @@
+package flags
+
+import (
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path"
+ "runtime"
+ "testing"
+)
+
+func assertCallerInfo() (string, int) {
+ ptr := make([]uintptr, 15)
+ n := runtime.Callers(1, ptr)
+
+ if n == 0 {
+ return "", 0
+ }
+
+ mef := runtime.FuncForPC(ptr[0])
+ mefile, meline := mef.FileLine(ptr[0])
+
+ for i := 2; i < n; i++ {
+ f := runtime.FuncForPC(ptr[i])
+ file, line := f.FileLine(ptr[i])
+
+ if file != mefile {
+ return file, line
+ }
+ }
+
+ return mefile, meline
+}
+
+func assertErrorf(t *testing.T, format string, args ...interface{}) {
+ msg := fmt.Sprintf(format, args...)
+
+ file, line := assertCallerInfo()
+
+ t.Errorf("%s:%d: %s", path.Base(file), line, msg)
+}
+
+func assertFatalf(t *testing.T, format string, args ...interface{}) {
+ msg := fmt.Sprintf(format, args...)
+
+ file, line := assertCallerInfo()
+
+ t.Fatalf("%s:%d: %s", path.Base(file), line, msg)
+}
+
+func assertString(t *testing.T, a string, b string) {
+ if a != b {
+ assertErrorf(t, "Expected %#v, but got %#v", b, a)
+ }
+}
+
+func assertStringArray(t *testing.T, a []string, b []string) {
+ if len(a) != len(b) {
+ assertErrorf(t, "Expected %#v, but got %#v", b, a)
+ return
+ }
+
+ for i, v := range a {
+ if b[i] != v {
+ assertErrorf(t, "Expected %#v, but got %#v", b, a)
+ return
+ }
+ }
+}
+
+func assertBoolArray(t *testing.T, a []bool, b []bool) {
+ if len(a) != len(b) {
+ assertErrorf(t, "Expected %#v, but got %#v", b, a)
+ return
+ }
+
+ for i, v := range a {
+ if b[i] != v {
+ assertErrorf(t, "Expected %#v, but got %#v", b, a)
+ return
+ }
+ }
+}
+
+func assertParserSuccess(t *testing.T, data interface{}, args ...string) (*Parser, []string) {
+ parser := NewParser(data, Default&^PrintErrors)
+ ret, err := parser.ParseArgs(args)
+
+ if err != nil {
+ t.Fatalf("Unexpected parse error: %s", err)
+ return nil, nil
+ }
+
+ return parser, ret
+}
+
+func assertParseSuccess(t *testing.T, data interface{}, args ...string) []string {
+ _, ret := assertParserSuccess(t, data, args...)
+ return ret
+}
+
+func assertError(t *testing.T, err error, typ ErrorType, msg string) {
+ if err == nil {
+ assertFatalf(t, "Expected error: %s", msg)
+ return
+ }
+
+ if e, ok := err.(*Error); !ok {
+ assertFatalf(t, "Expected Error type, but got %#v", err)
+ } else {
+ if e.Type != typ {
+ assertErrorf(t, "Expected error type {%s}, but got {%s}", typ, e.Type)
+ }
+
+ if e.Message != msg {
+ assertErrorf(t, "Expected error message %#v, but got %#v", msg, e.Message)
+ }
+ }
+}
+
+func assertParseFail(t *testing.T, typ ErrorType, msg string, data interface{}, args ...string) []string {
+ parser := NewParser(data, Default&^PrintErrors)
+ ret, err := parser.ParseArgs(args)
+
+ assertError(t, err, typ, msg)
+ return ret
+}
+
+func diff(a, b string) (string, error) {
+ atmp, err := ioutil.TempFile("", "help-diff")
+
+ if err != nil {
+ return "", err
+ }
+
+ btmp, err := ioutil.TempFile("", "help-diff")
+
+ if err != nil {
+ return "", err
+ }
+
+ if _, err := io.WriteString(atmp, a); err != nil {
+ return "", err
+ }
+
+ if _, err := io.WriteString(btmp, b); err != nil {
+ return "", err
+ }
+
+ ret, err := exec.Command("diff", "-u", "-d", "--label", "got", atmp.Name(), "--label", "expected", btmp.Name()).Output()
+
+ os.Remove(atmp.Name())
+ os.Remove(btmp.Name())
+
+ if err.Error() == "exit status 1" {
+ return string(ret), nil
+ }
+
+ return string(ret), err
+}
+
+func assertDiff(t *testing.T, actual, expected, msg string) {
+ if actual == expected {
+ return
+ }
+
+ ret, err := diff(actual, expected)
+
+ if err != nil {
+ assertErrorf(t, "Unexpected diff error: %s", err)
+ assertErrorf(t, "Unexpected %s, expected:\n\n%s\n\nbut got\n\n%s", msg, expected, actual)
+ } else {
+ assertErrorf(t, "Unexpected %s:\n\n%s", msg, ret)
+ }
+}