Browse Source

types/opt: add Bool.EqualBool method

Signed-off-by: Brad Fitzpatrick <[email protected]>
Brad Fitzpatrick 5 years ago
parent
commit
0071888a17
2 changed files with 30 additions and 0 deletions
  1. 7 0
      types/opt/bool.go
  2. 23 0
      types/opt/bool_test.go

+ 7 - 0
types/opt/bool.go

@@ -29,6 +29,13 @@ func (b Bool) Get() (v bool, ok bool) {
 	return v, err == nil
 }
 
+// EqualBool reports whether b is equal to v.
+// If b is empty or not a valid bool, it reports false.
+func (b Bool) EqualBool(v bool) bool {
+	p, ok := b.Get()
+	return ok && p == v
+}
+
 var (
 	trueBytes  = []byte("true")
 	falseBytes = []byte("false")

+ 23 - 0
types/opt/bool_test.go

@@ -64,3 +64,26 @@ func TestBool(t *testing.T) {
 		})
 	}
 }
+
+func TestBoolEqualBool(t *testing.T) {
+	tests := []struct {
+		b    Bool
+		v    bool
+		want bool
+	}{
+		{"", true, false},
+		{"", false, false},
+		{"sdflk;", true, false},
+		{"sldkf;", false, false},
+		{"true", true, true},
+		{"true", false, false},
+		{"false", true, false},
+		{"false", false, true},
+	}
+	for _, tt := range tests {
+		if got := tt.b.EqualBool(tt.v); got != tt.want {
+			t.Errorf("(%q).EqualBool(%v) = %v; want %v", string(tt.b), tt.v, got, tt.want)
+		}
+	}
+
+}