1 package skip
2
3 import (
4 "bytes"
5 "fmt"
6 "testing"
7
8 "gotest.tools/v3/assert"
9 "gotest.tools/v3/assert/cmp"
10 )
11
12 type fakeSkipT struct {
13 reason string
14 logs []string
15 }
16
17 func (f *fakeSkipT) Skip(args ...interface{}) {
18 buf := new(bytes.Buffer)
19 for _, arg := range args {
20 buf.WriteString(fmt.Sprintf("%s", arg))
21 }
22 f.reason = buf.String()
23 }
24
25 func (f *fakeSkipT) Log(args ...interface{}) {
26 f.logs = append(f.logs, fmt.Sprintf("%s", args[0]))
27 }
28
29 func (f *fakeSkipT) Helper() {}
30
31 func version(v string) string {
32 return v
33 }
34
35 func TestIfCondition(t *testing.T) {
36 skipT := &fakeSkipT{}
37 apiVersion := "v1.4"
38 If(skipT, apiVersion < version("v1.6"))
39
40 assert.Equal(t, `apiVersion < version("v1.6")`, skipT.reason)
41 assert.Assert(t, cmp.Len(skipT.logs, 0))
42 }
43
44 func TestIfConditionWithMessage(t *testing.T) {
45 skipT := &fakeSkipT{}
46 apiVersion := "v1.4"
47 If(skipT, apiVersion < "v1.6", "see notes")
48
49 assert.Equal(t, `apiVersion < "v1.6": see notes`, skipT.reason)
50 assert.Assert(t, cmp.Len(skipT.logs, 0))
51 }
52
53 func TestIfConditionMultiline(t *testing.T) {
54 skipT := &fakeSkipT{}
55 apiVersion := "v1.4"
56 If(
57 skipT,
58 apiVersion < "v1.6")
59
60 assert.Equal(t, `apiVersion < "v1.6"`, skipT.reason)
61 assert.Assert(t, cmp.Len(skipT.logs, 0))
62 }
63
64 func TestIfConditionMultilineWithMessage(t *testing.T) {
65 skipT := &fakeSkipT{}
66 apiVersion := "v1.4"
67 If(
68 skipT,
69 apiVersion < "v1.6",
70 "see notes")
71
72 assert.Equal(t, `apiVersion < "v1.6": see notes`, skipT.reason)
73 assert.Assert(t, cmp.Len(skipT.logs, 0))
74 }
75
76 func TestIfConditionNoSkip(t *testing.T) {
77 skipT := &fakeSkipT{}
78 If(skipT, false)
79
80 assert.Equal(t, "", skipT.reason)
81 assert.Assert(t, cmp.Len(skipT.logs, 0))
82 }
83
84 func SkipBecauseISaidSo() bool {
85 return true
86 }
87
88 func TestIf(t *testing.T) {
89 skipT := &fakeSkipT{}
90 If(skipT, SkipBecauseISaidSo)
91
92 assert.Equal(t, "SkipBecauseISaidSo", skipT.reason)
93 }
94
95 func TestIfWithMessage(t *testing.T) {
96 skipT := &fakeSkipT{}
97 If(skipT, SkipBecauseISaidSo, "see notes")
98
99 assert.Equal(t, "SkipBecauseISaidSo: see notes", skipT.reason)
100 }
101
102 func TestIf_InvalidCondition(t *testing.T) {
103 skipT := &fakeSkipT{}
104 assert.Assert(t, cmp.Panics(func() {
105 If(skipT, "just a string")
106 }))
107 }
108
109 func TestIfWithSkipResultFunc(t *testing.T) {
110 t.Run("no extra message", func(t *testing.T) {
111 skipT := &fakeSkipT{}
112 If(skipT, alwaysSkipWithMessage)
113
114 assert.Equal(t, "alwaysSkipWithMessage: skip because I said so!", skipT.reason)
115 })
116 t.Run("with extra message", func(t *testing.T) {
117 skipT := &fakeSkipT{}
118 If(skipT, alwaysSkipWithMessage, "also %v", 4)
119
120 assert.Equal(t, "alwaysSkipWithMessage: skip because I said so!: also 4", skipT.reason)
121 })
122 }
123
124 func alwaysSkipWithMessage() Result {
125 return skipResult{}
126 }
127
128 type skipResult struct{}
129
130 func (s skipResult) Skip() bool {
131 return true
132 }
133
134 func (s skipResult) Message() string {
135 return "skip because I said so!"
136 }
137
View as plain text