github.com/robertojrojas/docker@v1.9.1/pkg/integration/checker/checker.go (about) 1 // Package checker provide Docker specific implementations of the go-check.Checker interface. 2 package checker 3 4 import ( 5 "fmt" 6 "strings" 7 8 "github.com/go-check/check" 9 ) 10 11 // As a commodity, we bring all check.Checker variables into the current namespace to avoid having 12 // to think about check.X versus checker.X. 13 var ( 14 DeepEquals = check.DeepEquals 15 Equals = check.Equals 16 ErrorMatches = check.ErrorMatches 17 FitsTypeOf = check.FitsTypeOf 18 HasLen = check.HasLen 19 Implements = check.Implements 20 IsNil = check.IsNil 21 Matches = check.Matches 22 Not = check.Not 23 NotNil = check.NotNil 24 PanicMatches = check.PanicMatches 25 Panics = check.Panics 26 ) 27 28 // Contains checker verifies that string value contains a substring. 29 var Contains check.Checker = &containsChecker{ 30 &check.CheckerInfo{ 31 Name: "Contains", 32 Params: []string{"value", "substring"}, 33 }, 34 } 35 36 type containsChecker struct { 37 *check.CheckerInfo 38 } 39 40 func (checker *containsChecker) Check(params []interface{}, names []string) (bool, string) { 41 return contains(params[0], params[1]) 42 } 43 44 func contains(value, substring interface{}) (bool, string) { 45 substringStr, ok := substring.(string) 46 if !ok { 47 return false, "Substring must be a string" 48 } 49 valueStr, valueIsStr := value.(string) 50 if !valueIsStr { 51 if valueWithStr, valueHasStr := value.(fmt.Stringer); valueHasStr { 52 valueStr, valueIsStr = valueWithStr.String(), true 53 } 54 } 55 if valueIsStr { 56 return strings.Contains(valueStr, substringStr), "" 57 } 58 return false, "Obtained value is not a string and has no .String()" 59 }