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 }