github.com/tetratelabs/wazero@v1.7.3-0.20240513003603-48f702e154b5/internal/testing/require/require_errno_test.go (about)

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