github.com/tetratelabs/wazero@v1.2.1/internal/testing/require/require_errno_test.go (about)

     1  package require
     2  
     3  import (
     4  	"io"
     5  	"runtime"
     6  	"syscall"
     7  	"testing"
     8  )
     9  
    10  func TestEqualErrno(t *testing.T) {
    11  	// This specifically chooses ENOENT and EIO as outside windows, they tend
    12  	// to have the same errno literal and text message.
    13  	if runtime.GOOS == "windows" {
    14  		t.Skipf("error literals are different on windows")
    15  	}
    16  
    17  	tests := []struct {
    18  		name        string
    19  		require     func(TestingT)
    20  		expectedLog string
    21  	}{
    22  		{
    23  			name: "EqualErrno passes on equal",
    24  			require: func(t TestingT) {
    25  				EqualErrno(t, syscall.ENOENT, syscall.ENOENT)
    26  			},
    27  		},
    28  		{
    29  			name: "EqualErrno fails on nil",
    30  			require: func(t TestingT) {
    31  				EqualErrno(t, syscall.ENOENT, nil)
    32  			},
    33  			expectedLog: "expected a syscall.Errno, but was nil",
    34  		},
    35  		{
    36  			name: "EqualErrno fails on not Errno",
    37  			require: func(t TestingT) {
    38  				EqualErrno(t, syscall.ENOENT, io.EOF)
    39  			},
    40  			expectedLog: `expected EOF to be a syscall.Errno`,
    41  		},
    42  		{
    43  			name: "EqualErrno fails on not equal",
    44  			require: func(t TestingT) {
    45  				EqualErrno(t, syscall.ENOENT, syscall.EIO)
    46  			},
    47  			expectedLog: `expected Errno 0x2(no such file or directory), but was 0x5(input/output error)`,
    48  		},
    49  		{
    50  			name: "EqualErrno fails on not equal with format",
    51  			require: func(t TestingT) {
    52  				EqualErrno(t, syscall.ENOENT, syscall.EIO, "pay me %d", 5)
    53  			},
    54  			expectedLog: `expected Errno 0x2(no such file or directory), but was 0x5(input/output error): pay me 5`,
    55  		},
    56  	}
    57  
    58  	for _, tt := range tests {
    59  		tc := tt
    60  		t.Run(tc.name, func(t *testing.T) {
    61  			m := &mockT{t: t}
    62  			tc.require(m)
    63  			m.require(tc.expectedLog)
    64  		})
    65  	}
    66  }