...

Source file src/gotest.tools/v3/skip/skip_test.go

Documentation: gotest.tools/v3/skip

     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