aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/smartystreets/assertions/internal
diff options
context:
space:
mode:
authorunknwon <u@gogs.io>2019-07-28 16:03:54 -0700
committerunknwon <u@gogs.io>2019-07-28 16:03:54 -0700
commit025972ef643fa7628551529c2fd145e2a184465b (patch)
tree1066a33af394fc4fb7bdbcaa2b2fe29875576877 /vendor/github.com/smartystreets/assertions/internal
parent00a3e368b482193f1a457586ab4152ffacc02fab (diff)
vendor: update missing test deps for ci
Diffstat (limited to 'vendor/github.com/smartystreets/assertions/internal')
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/go-render/render/render.go262
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/go-render/render/render_time.go26
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/all_of.go70
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/any.go32
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/contains.go2
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/elements_are.go91
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/error.go51
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/has_same_type_as.go37
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/has_substr.go46
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/identical_to.go134
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/matches_regexp.go69
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/new_matcher.go43
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/panics.go74
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/pointee.go65
-rw-r--r--vendor/github.com/smartystreets/assertions/internal/oglematchers/transform_description.go2
15 files changed, 236 insertions, 768 deletions
diff --git a/vendor/github.com/smartystreets/assertions/internal/go-render/render/render.go b/vendor/github.com/smartystreets/assertions/internal/go-render/render/render.go
index e070a6b3..313611ef 100644
--- a/vendor/github.com/smartystreets/assertions/internal/go-render/render/render.go
+++ b/vendor/github.com/smartystreets/assertions/internal/go-render/render/render.go
@@ -12,32 +12,46 @@ import (
"strconv"
)
-var implicitTypeMap = map[reflect.Kind]string{
+var builtinTypeMap = map[reflect.Kind]string{
reflect.Bool: "bool",
- reflect.String: "string",
- reflect.Int: "int",
- reflect.Int8: "int8",
+ reflect.Complex128: "complex128",
+ reflect.Complex64: "complex64",
+ reflect.Float32: "float32",
+ reflect.Float64: "float64",
reflect.Int16: "int16",
reflect.Int32: "int32",
reflect.Int64: "int64",
- reflect.Uint: "uint",
- reflect.Uint8: "uint8",
+ reflect.Int8: "int8",
+ reflect.Int: "int",
+ reflect.String: "string",
reflect.Uint16: "uint16",
reflect.Uint32: "uint32",
reflect.Uint64: "uint64",
- reflect.Float32: "float32",
- reflect.Float64: "float64",
- reflect.Complex64: "complex64",
- reflect.Complex128: "complex128",
+ reflect.Uint8: "uint8",
+ reflect.Uint: "uint",
+ reflect.Uintptr: "uintptr",
+}
+
+var builtinTypeSet = map[string]struct{}{}
+
+func init() {
+ for _, v := range builtinTypeMap {
+ builtinTypeSet[v] = struct{}{}
+ }
}
+var typeOfString = reflect.TypeOf("")
+var typeOfInt = reflect.TypeOf(int(1))
+var typeOfUint = reflect.TypeOf(uint(1))
+var typeOfFloat = reflect.TypeOf(10.1)
+
// Render converts a structure to a string representation. Unline the "%#v"
// format string, this resolves pointer types' contents in structs, maps, and
// slices/arrays and prints their field values.
func Render(v interface{}) string {
buf := bytes.Buffer{}
s := (*traverseState)(nil)
- s.render(&buf, 0, reflect.ValueOf(v))
+ s.render(&buf, 0, reflect.ValueOf(v), false)
return buf.String()
}
@@ -72,7 +86,7 @@ func (s *traverseState) forkFor(ptr uintptr) *traverseState {
return fs
}
-func (s *traverseState) render(buf *bytes.Buffer, ptrs int, v reflect.Value) {
+func (s *traverseState) render(buf *bytes.Buffer, ptrs int, v reflect.Value, implicit bool) {
if v.Kind() == reflect.Invalid {
buf.WriteString("nil")
return
@@ -107,49 +121,80 @@ func (s *traverseState) render(buf *bytes.Buffer, ptrs int, v reflect.Value) {
s = s.forkFor(pe)
if s == nil {
buf.WriteString("<REC(")
- writeType(buf, ptrs, vt)
+ if !implicit {
+ writeType(buf, ptrs, vt)
+ }
buf.WriteString(")>")
return
}
}
+ isAnon := func(t reflect.Type) bool {
+ if t.Name() != "" {
+ if _, ok := builtinTypeSet[t.Name()]; !ok {
+ return false
+ }
+ }
+ return t.Kind() != reflect.Interface
+ }
+
switch vk {
case reflect.Struct:
- writeType(buf, ptrs, vt)
+ if !implicit {
+ writeType(buf, ptrs, vt)
+ }
buf.WriteRune('{')
- for i := 0; i < vt.NumField(); i++ {
- if i > 0 {
- buf.WriteString(", ")
- }
- buf.WriteString(vt.Field(i).Name)
- buf.WriteRune(':')
+ if rendered, ok := renderTime(v); ok {
+ buf.WriteString(rendered)
+ } else {
+ structAnon := vt.Name() == ""
+ for i := 0; i < vt.NumField(); i++ {
+ if i > 0 {
+ buf.WriteString(", ")
+ }
+ anon := structAnon && isAnon(vt.Field(i).Type)
- s.render(buf, 0, v.Field(i))
+ if !anon {
+ buf.WriteString(vt.Field(i).Name)
+ buf.WriteRune(':')
+ }
+
+ s.render(buf, 0, v.Field(i), anon)
+ }
}
buf.WriteRune('}')
case reflect.Slice:
if v.IsNil() {
- writeType(buf, ptrs, vt)
- buf.WriteString("(nil)")
+ if !implicit {
+ writeType(buf, ptrs, vt)
+ buf.WriteString("(nil)")
+ } else {
+ buf.WriteString("nil")
+ }
return
}
fallthrough
case reflect.Array:
- writeType(buf, ptrs, vt)
+ if !implicit {
+ writeType(buf, ptrs, vt)
+ }
+ anon := vt.Name() == "" && isAnon(vt.Elem())
buf.WriteString("{")
for i := 0; i < v.Len(); i++ {
if i > 0 {
buf.WriteString(", ")
}
- s.render(buf, 0, v.Index(i))
+ s.render(buf, 0, v.Index(i), anon)
}
buf.WriteRune('}')
case reflect.Map:
- writeType(buf, ptrs, vt)
+ if !implicit {
+ writeType(buf, ptrs, vt)
+ }
if v.IsNil() {
buf.WriteString("(nil)")
} else {
@@ -158,14 +203,17 @@ func (s *traverseState) render(buf *bytes.Buffer, ptrs int, v reflect.Value) {
mkeys := v.MapKeys()
tryAndSortMapKeys(vt, mkeys)
+ kt := vt.Key()
+ keyAnon := typeOfString.ConvertibleTo(kt) || typeOfInt.ConvertibleTo(kt) || typeOfUint.ConvertibleTo(kt) || typeOfFloat.ConvertibleTo(kt)
+ valAnon := vt.Name() == "" && isAnon(vt.Elem())
for i, mk := range mkeys {
if i > 0 {
buf.WriteString(", ")
}
- s.render(buf, 0, mk)
+ s.render(buf, 0, mk, keyAnon)
buf.WriteString(":")
- s.render(buf, 0, v.MapIndex(mk))
+ s.render(buf, 0, v.MapIndex(mk), valAnon)
}
buf.WriteRune('}')
}
@@ -176,11 +224,9 @@ func (s *traverseState) render(buf *bytes.Buffer, ptrs int, v reflect.Value) {
case reflect.Interface:
if v.IsNil() {
writeType(buf, ptrs, v.Type())
- buf.WriteRune('(')
- fmt.Fprint(buf, "nil")
- buf.WriteRune(')')
+ buf.WriteString("(nil)")
} else {
- s.render(buf, ptrs, v.Elem())
+ s.render(buf, ptrs, v.Elem(), false)
}
case reflect.Chan, reflect.Func, reflect.UnsafePointer:
@@ -191,7 +237,7 @@ func (s *traverseState) render(buf *bytes.Buffer, ptrs int, v reflect.Value) {
default:
tstr := vt.String()
- implicit := ptrs == 0 && implicitTypeMap[vk] == tstr
+ implicit = implicit || (ptrs == 0 && builtinTypeMap[vk] == tstr)
if !implicit {
writeType(buf, ptrs, vt)
buf.WriteRune('(')
@@ -206,7 +252,7 @@ func (s *traverseState) render(buf *bytes.Buffer, ptrs int, v reflect.Value) {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
fmt.Fprintf(buf, "%d", v.Int())
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
fmt.Fprintf(buf, "%d", v.Uint())
case reflect.Float32, reflect.Float64:
@@ -288,40 +334,148 @@ func writeType(buf *bytes.Buffer, ptrs int, t reflect.Type) {
}
}
+type cmpFn func(a, b reflect.Value) int
+
type sortableValueSlice struct {
- kind reflect.Kind
+ cmp cmpFn
elements []reflect.Value
}
-func (s *sortableValueSlice) Len() int {
+func (s sortableValueSlice) Len() int {
return len(s.elements)
}
-func (s *sortableValueSlice) Less(i, j int) bool {
- switch s.kind {
+func (s sortableValueSlice) Less(i, j int) bool {
+ return s.cmp(s.elements[i], s.elements[j]) < 0
+}
+
+func (s sortableValueSlice) Swap(i, j int) {
+ s.elements[i], s.elements[j] = s.elements[j], s.elements[i]
+}
+
+// cmpForType returns a cmpFn which sorts the data for some type t in the same
+// order that a go-native map key is compared for equality.
+func cmpForType(t reflect.Type) cmpFn {
+ switch t.Kind() {
case reflect.String:
- return s.elements[i].String() < s.elements[j].String()
+ return func(av, bv reflect.Value) int {
+ a, b := av.String(), bv.String()
+ if a < b {
+ return -1
+ } else if a > b {
+ return 1
+ }
+ return 0
+ }
+
+ case reflect.Bool:
+ return func(av, bv reflect.Value) int {
+ a, b := av.Bool(), bv.Bool()
+ if !a && b {
+ return -1
+ } else if a && !b {
+ return 1
+ }
+ return 0
+ }
- case reflect.Int:
- return s.elements[i].Int() < s.elements[j].Int()
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ return func(av, bv reflect.Value) int {
+ a, b := av.Int(), bv.Int()
+ if a < b {
+ return -1
+ } else if a > b {
+ return 1
+ }
+ return 0
+ }
- default:
- panic(fmt.Errorf("unsupported sort kind: %s", s.kind))
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32,
+ reflect.Uint64, reflect.Uintptr, reflect.UnsafePointer:
+ return func(av, bv reflect.Value) int {
+ a, b := av.Uint(), bv.Uint()
+ if a < b {
+ return -1
+ } else if a > b {
+ return 1
+ }
+ return 0
+ }
+
+ case reflect.Float32, reflect.Float64:
+ return func(av, bv reflect.Value) int {
+ a, b := av.Float(), bv.Float()
+ if a < b {
+ return -1
+ } else if a > b {
+ return 1
+ }
+ return 0
+ }
+
+ case reflect.Interface:
+ return func(av, bv reflect.Value) int {
+ a, b := av.InterfaceData(), bv.InterfaceData()
+ if a[0] < b[0] {
+ return -1
+ } else if a[0] > b[0] {
+ return 1
+ }
+ if a[1] < b[1] {
+ return -1
+ } else if a[1] > b[1] {
+ return 1
+ }
+ return 0
+ }
+
+ case reflect.Complex64, reflect.Complex128:
+ return func(av, bv reflect.Value) int {
+ a, b := av.Complex(), bv.Complex()
+ if real(a) < real(b) {
+ return -1
+ } else if real(a) > real(b) {
+ return 1
+ }
+ if imag(a) < imag(b) {
+ return -1
+ } else if imag(a) > imag(b) {
+ return 1
+ }
+ return 0
+ }
+
+ case reflect.Ptr, reflect.Chan:
+ return func(av, bv reflect.Value) int {
+ a, b := av.Pointer(), bv.Pointer()
+ if a < b {
+ return -1
+ } else if a > b {
+ return 1
+ }
+ return 0
+ }
+
+ case reflect.Struct:
+ cmpLst := make([]cmpFn, t.NumField())
+ for i := range cmpLst {
+ cmpLst[i] = cmpForType(t.Field(i).Type)
+ }
+ return func(a, b reflect.Value) int {
+ for i, cmp := range cmpLst {
+ if rslt := cmp(a.Field(i), b.Field(i)); rslt != 0 {
+ return rslt
+ }
+ }
+ return 0
+ }
}
-}
-func (s *sortableValueSlice) Swap(i, j int) {
- s.elements[i], s.elements[j] = s.elements[j], s.elements[i]
+ return nil
}
func tryAndSortMapKeys(mt reflect.Type, k []reflect.Value) {
- // Try our stock sortable values.
- switch mt.Key().Kind() {
- case reflect.String, reflect.Int:
- vs := &sortableValueSlice{
- kind: mt.Key().Kind(),
- elements: k,
- }
- sort.Sort(vs)
+ if cmp := cmpForType(mt.Key()); cmp != nil {
+ sort.Sort(sortableValueSlice{cmp, k})
}
}
diff --git a/vendor/github.com/smartystreets/assertions/internal/go-render/render/render_time.go b/vendor/github.com/smartystreets/assertions/internal/go-render/render/render_time.go
new file mode 100644
index 00000000..990c75d0
--- /dev/null
+++ b/vendor/github.com/smartystreets/assertions/internal/go-render/render/render_time.go
@@ -0,0 +1,26 @@
+package render
+
+import (
+ "reflect"
+ "time"
+)
+
+func renderTime(value reflect.Value) (string, bool) {
+ if instant, ok := convertTime(value); !ok {
+ return "", false
+ } else if instant.IsZero() {
+ return "0", true
+ } else {
+ return instant.String(), true
+ }
+}
+
+func convertTime(value reflect.Value) (t time.Time, ok bool) {
+ if value.Type() == timeType {
+ defer func() { recover() }()
+ t, ok = value.Interface().(time.Time)
+ }
+ return
+}
+
+var timeType = reflect.TypeOf(time.Time{})
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/all_of.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/all_of.go
deleted file mode 100644
index d93a9740..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/all_of.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2011 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-import (
- "strings"
-)
-
-// AllOf accepts a set of matchers S and returns a matcher that follows the
-// algorithm below when considering a candidate c:
-//
-// 1. Return true if for every Matcher m in S, m matches c.
-//
-// 2. Otherwise, if there is a matcher m in S such that m returns a fatal
-// error for c, return that matcher's error message.
-//
-// 3. Otherwise, return false with the error from some wrapped matcher.
-//
-// This is akin to a logical AND operation for matchers.
-func AllOf(matchers ...Matcher) Matcher {
- return &allOfMatcher{matchers}
-}
-
-type allOfMatcher struct {
- wrappedMatchers []Matcher
-}
-
-func (m *allOfMatcher) Description() string {
- // Special case: the empty set.
- if len(m.wrappedMatchers) == 0 {
- return "is anything"
- }
-
- // Join the descriptions for the wrapped matchers.
- wrappedDescs := make([]string, len(m.wrappedMatchers))
- for i, wrappedMatcher := range m.wrappedMatchers {
- wrappedDescs[i] = wrappedMatcher.Description()
- }
-
- return strings.Join(wrappedDescs, ", and ")
-}
-
-func (m *allOfMatcher) Matches(c interface{}) (err error) {
- for _, wrappedMatcher := range m.wrappedMatchers {
- if wrappedErr := wrappedMatcher.Matches(c); wrappedErr != nil {
- err = wrappedErr
-
- // If the error is fatal, return immediately with this error.
- _, ok := wrappedErr.(*FatalError)
- if ok {
- return
- }
- }
- }
-
- return
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/any.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/any.go
deleted file mode 100644
index f6991ec1..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/any.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2011 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-// Any returns a matcher that matches any value.
-func Any() Matcher {
- return &anyMatcher{}
-}
-
-type anyMatcher struct {
-}
-
-func (m *anyMatcher) Description() string {
- return "is anything"
-}
-
-func (m *anyMatcher) Matches(c interface{}) error {
- return nil
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/contains.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/contains.go
index 2f326dbc..87f107d3 100644
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/contains.go
+++ b/vendor/github.com/smartystreets/assertions/internal/oglematchers/contains.go
@@ -28,7 +28,7 @@ func Contains(x interface{}) Matcher {
var ok bool
if result.elementMatcher, ok = x.(Matcher); !ok {
- result.elementMatcher = Equals(x)
+ result.elementMatcher = DeepEquals(x)
}
return &result
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/elements_are.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/elements_are.go
deleted file mode 100644
index 2941847c..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/elements_are.go
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2012 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-import (
- "errors"
- "fmt"
- "reflect"
- "strings"
-)
-
-// Given a list of arguments M, ElementsAre returns a matcher that matches
-// arrays and slices A where all of the following hold:
-//
-// * A is the same length as M.
-//
-// * For each i < len(A) where M[i] is a matcher, A[i] matches M[i].
-//
-// * For each i < len(A) where M[i] is not a matcher, A[i] matches
-// Equals(M[i]).
-//
-func ElementsAre(M ...interface{}) Matcher {
- // Copy over matchers, or convert to Equals(x) for non-matcher x.
- subMatchers := make([]Matcher, len(M))
- for i, x := range M {
- if matcher, ok := x.(Matcher); ok {
- subMatchers[i] = matcher
- continue
- }
-
- subMatchers[i] = Equals(x)
- }
-
- return &elementsAreMatcher{subMatchers}
-}
-
-type elementsAreMatcher struct {
- subMatchers []Matcher
-}
-
-func (m *elementsAreMatcher) Description() string {
- subDescs := make([]string, len(m.subMatchers))
- for i, sm := range m.subMatchers {
- subDescs[i] = sm.Description()
- }
-
- return fmt.Sprintf("elements are: [%s]", strings.Join(subDescs, ", "))
-}
-
-func (m *elementsAreMatcher) Matches(candidates interface{}) error {
- // The candidate must be a slice or an array.
- v := reflect.ValueOf(candidates)
- if v.Kind() != reflect.Slice && v.Kind() != reflect.Array {
- return NewFatalError("which is not a slice or array")
- }
-
- // The length must be correct.
- if v.Len() != len(m.subMatchers) {
- return errors.New(fmt.Sprintf("which is of length %d", v.Len()))
- }
-
- // Check each element.
- for i, subMatcher := range m.subMatchers {
- c := v.Index(i)
- if matchErr := subMatcher.Matches(c.Interface()); matchErr != nil {
- // Return an errors indicating which element doesn't match. If the
- // matcher error was fatal, make this one fatal too.
- err := errors.New(fmt.Sprintf("whose element %d doesn't match", i))
- if _, isFatal := matchErr.(*FatalError); isFatal {
- err = NewFatalError(err.Error())
- }
-
- return err
- }
- }
-
- return nil
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/error.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/error.go
deleted file mode 100644
index 8a078e36..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/error.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2011 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-// Error returns a matcher that matches non-nil values implementing the
-// built-in error interface for whom the return value of Error() matches the
-// supplied matcher.
-//
-// For example:
-//
-// err := errors.New("taco burrito")
-//
-// Error(Equals("taco burrito")) // matches err
-// Error(HasSubstr("taco")) // matches err
-// Error(HasSubstr("enchilada")) // doesn't match err
-//
-func Error(m Matcher) Matcher {
- return &errorMatcher{m}
-}
-
-type errorMatcher struct {
- wrappedMatcher Matcher
-}
-
-func (m *errorMatcher) Description() string {
- return "error " + m.wrappedMatcher.Description()
-}
-
-func (m *errorMatcher) Matches(c interface{}) error {
- // Make sure that c is an error.
- e, ok := c.(error)
- if !ok {
- return NewFatalError("which is not an error")
- }
-
- // Pass on the error text to the wrapped matcher.
- return m.wrappedMatcher.Matches(e.Error())
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/has_same_type_as.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/has_same_type_as.go
deleted file mode 100644
index 3b286f73..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/has_same_type_as.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2015 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-import (
- "fmt"
- "reflect"
-)
-
-// HasSameTypeAs returns a matcher that matches values with exactly the same
-// type as the supplied prototype.
-func HasSameTypeAs(p interface{}) Matcher {
- expected := reflect.TypeOf(p)
- pred := func(c interface{}) error {
- actual := reflect.TypeOf(c)
- if actual != expected {
- return fmt.Errorf("which has type %v", actual)
- }
-
- return nil
- }
-
- return NewMatcher(pred, fmt.Sprintf("has type %v", expected))
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/has_substr.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/has_substr.go
deleted file mode 100644
index bf5bd6ae..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/has_substr.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2011 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-import (
- "errors"
- "fmt"
- "reflect"
- "strings"
-)
-
-// HasSubstr returns a matcher that matches strings containing s as a
-// substring.
-func HasSubstr(s string) Matcher {
- return NewMatcher(
- func(c interface{}) error { return hasSubstr(s, c) },
- fmt.Sprintf("has substring \"%s\"", s))
-}
-
-func hasSubstr(needle string, c interface{}) error {
- v := reflect.ValueOf(c)
- if v.Kind() != reflect.String {
- return NewFatalError("which is not a string")
- }
-
- // Perform the substring search.
- haystack := v.String()
- if strings.Contains(haystack, needle) {
- return nil
- }
-
- return errors.New("")
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/identical_to.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/identical_to.go
deleted file mode 100644
index ae6460ed..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/identical_to.go
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2012 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-import (
- "errors"
- "fmt"
- "reflect"
-)
-
-// Is the type comparable according to the definition here?
-//
-// http://weekly.golang.org/doc/go_spec.html#Comparison_operators
-//
-func isComparable(t reflect.Type) bool {
- switch t.Kind() {
- case reflect.Array:
- return isComparable(t.Elem())
-
- case reflect.Struct:
- for i := 0; i < t.NumField(); i++ {
- if !isComparable(t.Field(i).Type) {
- return false
- }
- }
-
- return true
-
- case reflect.Slice, reflect.Map, reflect.Func:
- return false
- }
-
- return true
-}
-
-// Should the supplied type be allowed as an argument to IdenticalTo?
-func isLegalForIdenticalTo(t reflect.Type) (bool, error) {
- // Allow the zero type.
- if t == nil {
- return true, nil
- }
-
- // Reference types are always okay; we compare pointers.
- switch t.Kind() {
- case reflect.Slice, reflect.Map, reflect.Func, reflect.Chan:
- return true, nil
- }
-
- // Reject other non-comparable types.
- if !isComparable(t) {
- return false, errors.New(fmt.Sprintf("%v is not comparable", t))
- }
-
- return true, nil
-}
-
-// IdenticalTo(x) returns a matcher that matches values v with type identical
-// to x such that:
-//
-// 1. If v and x are of a reference type (slice, map, function, channel), then
-// they are either both nil or are references to the same object.
-//
-// 2. Otherwise, if v and x are not of a reference type but have a valid type,
-// then v == x.
-//
-// If v and x are both the invalid type (which results from the predeclared nil
-// value, or from nil interface variables), then the matcher is satisfied.
-//
-// This function will panic if x is of a value type that is not comparable. For
-// example, x cannot be an array of functions.
-func IdenticalTo(x interface{}) Matcher {
- t := reflect.TypeOf(x)
-
- // Reject illegal arguments.
- if ok, err := isLegalForIdenticalTo(t); !ok {
- panic("IdenticalTo: " + err.Error())
- }
-
- return &identicalToMatcher{x}
-}
-
-type identicalToMatcher struct {
- x interface{}
-}
-
-func (m *identicalToMatcher) Description() string {
- t := reflect.TypeOf(m.x)
- return fmt.Sprintf("identical to <%v> %v", t, m.x)
-}
-
-func (m *identicalToMatcher) Matches(c interface{}) error {
- // Make sure the candidate's type is correct.
- t := reflect.TypeOf(m.x)
- if ct := reflect.TypeOf(c); t != ct {
- return NewFatalError(fmt.Sprintf("which is of type %v", ct))
- }
-
- // Special case: two values of the invalid type are always identical.
- if t == nil {
- return nil
- }
-
- // Handle reference types.
- switch t.Kind() {
- case reflect.Slice, reflect.Map, reflect.Func, reflect.Chan:
- xv := reflect.ValueOf(m.x)
- cv := reflect.ValueOf(c)
- if xv.Pointer() == cv.Pointer() {
- return nil
- }
-
- return errors.New("which is not an identical reference")
- }
-
- // Are the values equal?
- if m.x == c {
- return nil
- }
-
- return errors.New("")
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/matches_regexp.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/matches_regexp.go
deleted file mode 100644
index 1ed63f30..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/matches_regexp.go
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2011 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-import (
- "errors"
- "fmt"
- "reflect"
- "regexp"
-)
-
-// MatchesRegexp returns a matcher that matches strings and byte slices whose
-// contents match the supplied regular expression. The semantics are those of
-// regexp.Match. In particular, that means the match is not implicitly anchored
-// to the ends of the string: MatchesRegexp("bar") will match "foo bar baz".
-func MatchesRegexp(pattern string) Matcher {
- re, err := regexp.Compile(pattern)
- if err != nil {
- panic("MatchesRegexp: " + err.Error())
- }
-
- return &matchesRegexpMatcher{re}
-}
-
-type matchesRegexpMatcher struct {
- re *regexp.Regexp
-}
-
-func (m *matchesRegexpMatcher) Description() string {
- return fmt.Sprintf("matches regexp \"%s\"", m.re.String())
-}
-
-func (m *matchesRegexpMatcher) Matches(c interface{}) (err error) {
- v := reflect.ValueOf(c)
- isString := v.Kind() == reflect.String
- isByteSlice := v.Kind() == reflect.Slice && v.Elem().Kind() == reflect.Uint8
-
- err = errors.New("")
-
- switch {
- case isString:
- if m.re.MatchString(v.String()) {
- err = nil
- }
-
- case isByteSlice:
- if m.re.Match(v.Bytes()) {
- err = nil
- }
-
- default:
- err = NewFatalError("which is not a string or []byte")
- }
-
- return
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/new_matcher.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/new_matcher.go
deleted file mode 100644
index c9d8398e..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/new_matcher.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2015 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-// Create a matcher with the given description and predicate function, which
-// will be invoked to handle calls to Matchers.
-//
-// Using this constructor may be a convenience over defining your own type that
-// implements Matcher if you do not need any logic in your Description method.
-func NewMatcher(
- predicate func(interface{}) error,
- description string) Matcher {
- return &predicateMatcher{
- predicate: predicate,
- description: description,
- }
-}
-
-type predicateMatcher struct {
- predicate func(interface{}) error
- description string
-}
-
-func (pm *predicateMatcher) Matches(c interface{}) error {
- return pm.predicate(c)
-}
-
-func (pm *predicateMatcher) Description() string {
- return pm.description
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/panics.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/panics.go
deleted file mode 100644
index d2cfc978..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/panics.go
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2011 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-import (
- "errors"
- "fmt"
- "reflect"
-)
-
-// Panics matches zero-arg functions which, when invoked, panic with an error
-// that matches the supplied matcher.
-//
-// NOTE(jacobsa): This matcher cannot detect the case where the function panics
-// using panic(nil), by design of the language. See here for more info:
-//
-// http://goo.gl/9aIQL
-//
-func Panics(m Matcher) Matcher {
- return &panicsMatcher{m}
-}
-
-type panicsMatcher struct {
- wrappedMatcher Matcher
-}
-
-func (m *panicsMatcher) Description() string {
- return "panics with: " + m.wrappedMatcher.Description()
-}
-
-func (m *panicsMatcher) Matches(c interface{}) (err error) {
- // Make sure c is a zero-arg function.
- v := reflect.ValueOf(c)
- if v.Kind() != reflect.Func || v.Type().NumIn() != 0 {
- err = NewFatalError("which is not a zero-arg function")
- return
- }
-
- // Call the function and check its panic error.
- defer func() {
- if e := recover(); e != nil {
- err = m.wrappedMatcher.Matches(e)
-
- // Set a clearer error message if the matcher said no.
- if err != nil {
- wrappedClause := ""
- if err.Error() != "" {
- wrappedClause = ", " + err.Error()
- }
-
- err = errors.New(fmt.Sprintf("which panicked with: %v%s", e, wrappedClause))
- }
- }
- }()
-
- v.Call([]reflect.Value{})
-
- // If we get here, the function didn't panic.
- err = errors.New("which didn't panic")
- return
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/pointee.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/pointee.go
deleted file mode 100644
index c5383f24..00000000
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/pointee.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2012 Aaron Jacobs. All Rights Reserved.
-// Author: aaronjjacobs@gmail.com (Aaron Jacobs)
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package oglematchers
-
-import (
- "errors"
- "fmt"
- "reflect"
-)
-
-// Return a matcher that matches non-nil pointers whose pointee matches the
-// wrapped matcher.
-func Pointee(m Matcher) Matcher {
- return &pointeeMatcher{m}
-}
-
-type pointeeMatcher struct {
- wrapped Matcher
-}
-
-func (m *pointeeMatcher) Matches(c interface{}) (err error) {
- // Make sure the candidate is of the appropriate type.
- cv := reflect.ValueOf(c)
- if !cv.IsValid() || cv.Kind() != reflect.Ptr {
- return NewFatalError("which is not a pointer")
- }
-
- // Make sure the candidate is non-nil.
- if cv.IsNil() {
- return NewFatalError("")
- }
-
- // Defer to the wrapped matcher. Fix up empty errors so that failure messages
- // are more helpful than just printing a pointer for "Actual".
- pointee := cv.Elem().Interface()
- err = m.wrapped.Matches(pointee)
- if err != nil && err.Error() == "" {
- s := fmt.Sprintf("whose pointee is %v", pointee)
-
- if _, ok := err.(*FatalError); ok {
- err = NewFatalError(s)
- } else {
- err = errors.New(s)
- }
- }
-
- return err
-}
-
-func (m *pointeeMatcher) Description() string {
- return fmt.Sprintf("pointee(%s)", m.wrapped.Description())
-}
diff --git a/vendor/github.com/smartystreets/assertions/internal/oglematchers/transform_description.go b/vendor/github.com/smartystreets/assertions/internal/oglematchers/transform_description.go
index f79d0c03..8ea2807c 100644
--- a/vendor/github.com/smartystreets/assertions/internal/oglematchers/transform_description.go
+++ b/vendor/github.com/smartystreets/assertions/internal/oglematchers/transform_description.go
@@ -23,7 +23,7 @@ func transformDescription(m Matcher, newDesc string) Matcher {
}
type transformDescriptionMatcher struct {
- desc string
+ desc string
wrappedMatcher Matcher
}