checker.go 1.5 KB

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