Przeglądaj źródła

Add integration-cli/checker package

Add a `checker` package that adds some utility Checker implementation,
the first one being `checker.Contains`, as well as brining all go-check
provided Checker implementations in scope as a commodity.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
Arnaud Porterie 10 lat temu
rodzic
commit
c87cbd3862
1 zmienionych plików z 59 dodań i 0 usunięć
  1. 59 0
      integration-cli/checker/checker.go

+ 59 - 0
integration-cli/checker/checker.go

@@ -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()"
+}