blob: 49b4ddad34213539b1dedb0d5c18558cbddea4f5 [file] [log] [blame]
package skip
import (
"bytes"
"fmt"
"testing"
"gotest.tools/v3/assert"
"gotest.tools/v3/assert/cmp"
)
type fakeSkipT struct {
reason string
logs []string
}
func (f *fakeSkipT) Skip(args ...interface{}) {
buf := new(bytes.Buffer)
for _, arg := range args {
buf.WriteString(fmt.Sprintf("%s", arg))
}
f.reason = buf.String()
}
func (f *fakeSkipT) Log(args ...interface{}) {
f.logs = append(f.logs, fmt.Sprintf("%s", args[0]))
}
func (f *fakeSkipT) Helper() {}
func version(v string) string {
return v
}
func TestIfCondition(t *testing.T) {
skipT := &fakeSkipT{}
apiVersion := "v1.4"
If(skipT, apiVersion < version("v1.6"))
assert.Equal(t, `apiVersion < version("v1.6")`, skipT.reason)
assert.Assert(t, cmp.Len(skipT.logs, 0))
}
func TestIfConditionWithMessage(t *testing.T) {
skipT := &fakeSkipT{}
apiVersion := "v1.4"
If(skipT, apiVersion < "v1.6", "see notes")
assert.Equal(t, `apiVersion < "v1.6": see notes`, skipT.reason)
assert.Assert(t, cmp.Len(skipT.logs, 0))
}
func TestIfConditionMultiline(t *testing.T) {
skipT := &fakeSkipT{}
apiVersion := "v1.4"
If(
skipT,
apiVersion < "v1.6")
assert.Equal(t, `apiVersion < "v1.6"`, skipT.reason)
assert.Assert(t, cmp.Len(skipT.logs, 0))
}
func TestIfConditionMultilineWithMessage(t *testing.T) {
skipT := &fakeSkipT{}
apiVersion := "v1.4"
If(
skipT,
apiVersion < "v1.6",
"see notes")
assert.Equal(t, `apiVersion < "v1.6": see notes`, skipT.reason)
assert.Assert(t, cmp.Len(skipT.logs, 0))
}
func TestIfConditionNoSkip(t *testing.T) {
skipT := &fakeSkipT{}
If(skipT, false)
assert.Equal(t, "", skipT.reason)
assert.Assert(t, cmp.Len(skipT.logs, 0))
}
func SkipBecauseISaidSo() bool {
return true
}
func TestIf(t *testing.T) {
skipT := &fakeSkipT{}
If(skipT, SkipBecauseISaidSo)
assert.Equal(t, "SkipBecauseISaidSo", skipT.reason)
}
func TestIfWithMessage(t *testing.T) {
skipT := &fakeSkipT{}
If(skipT, SkipBecauseISaidSo, "see notes")
assert.Equal(t, "SkipBecauseISaidSo: see notes", skipT.reason)
}
func TestIf_InvalidCondition(t *testing.T) {
skipT := &fakeSkipT{}
assert.Assert(t, cmp.Panics(func() {
If(skipT, "just a string")
}))
}
func TestIfWithSkipResultFunc(t *testing.T) {
t.Run("no extra message", func(t *testing.T) {
skipT := &fakeSkipT{}
If(skipT, alwaysSkipWithMessage)
assert.Equal(t, "alwaysSkipWithMessage: skip because I said so!", skipT.reason)
})
t.Run("with extra message", func(t *testing.T) {
skipT := &fakeSkipT{}
If(skipT, alwaysSkipWithMessage, "also %v", 4)
assert.Equal(t, "alwaysSkipWithMessage: skip because I said so!: also 4", skipT.reason)
})
}
func alwaysSkipWithMessage() Result {
return skipResult{}
}
type skipResult struct{}
func (s skipResult) Skip() bool {
return true
}
func (s skipResult) Message() string {
return "skip because I said so!"
}