|
@@ -0,0 +1,59 @@
|
|
|
+// Checker provide Docker specific implementations of the go-check.Checker interface.
|
|
|
+package checker
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ "github.com/go-check/check"
|
|
|
+)
|
|
|
+
|
|
|
+// As a commodity, we bring all check.Checker variables into the current namespace to avoid having
|
|
|
+// to think about check.X versus checker.X.
|
|
|
+var (
|
|
|
+ DeepEquals = check.DeepEquals
|
|
|
+ Equals = check.Equals
|
|
|
+ ErrorMatches = check.ErrorMatches
|
|
|
+ FitsTypeOf = check.FitsTypeOf
|
|
|
+ HasLen = check.HasLen
|
|
|
+ Implements = check.Implements
|
|
|
+ IsNil = check.IsNil
|
|
|
+ Matches = check.Matches
|
|
|
+ Not = check.Not
|
|
|
+ NotNil = check.NotNil
|
|
|
+ PanicMatches = check.PanicMatches
|
|
|
+ Panics = check.Panics
|
|
|
+)
|
|
|
+
|
|
|
+// Contains checker verifies that string value contains a substring.
|
|
|
+var Contains check.Checker = &containsChecker{
|
|
|
+ &check.CheckerInfo{
|
|
|
+ Name: "Contains",
|
|
|
+ Params: []string{"value", "substring"},
|
|
|
+ },
|
|
|
+}
|
|
|
+
|
|
|
+type containsChecker struct {
|
|
|
+ *check.CheckerInfo
|
|
|
+}
|
|
|
+
|
|
|
+func (checker *containsChecker) Check(params []interface{}, names []string) (bool, string) {
|
|
|
+ return contains(params[0], params[1])
|
|
|
+}
|
|
|
+
|
|
|
+func contains(value, substring interface{}) (bool, string) {
|
|
|
+ substringStr, ok := substring.(string)
|
|
|
+ if !ok {
|
|
|
+ return false, "Substring must be a string"
|
|
|
+ }
|
|
|
+ valueStr, valueIsStr := value.(string)
|
|
|
+ if !valueIsStr {
|
|
|
+ if valueWithStr, valueHasStr := value.(fmt.Stringer); valueHasStr {
|
|
|
+ valueStr, valueIsStr = valueWithStr.String(), true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if valueIsStr {
|
|
|
+ return strings.Contains(valueStr, substringStr), ""
|
|
|
+ }
|
|
|
+ return false, "Obtained value is not a string and has no .String()"
|
|
|
+}
|