github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/errs/example_test.go (about) 1 package errs_test 2 3 import ( 4 "errors" 5 "fmt" 6 "runtime" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 11 "github.com/ActiveState/cli/internal/errs" 12 "github.com/ActiveState/cli/internal/locale" 13 ) 14 15 // Create our own error, but ALL errors should be funneled through errs to add stack traces (FOR NOW, due to legacy code) 16 type MyError struct{ *errs.WrapperError } 17 18 func TestExample(t *testing.T) { 19 errt := &MyError{} 20 var errx error = &MyError{errs.New("test1")} 21 errors.As(errx, &errt) 22 errs.Matches(errx, &MyError{}) 23 24 // Regular error 25 var err error = errs.New("Regular error message on %s", runtime.GOOS) 26 assert.Error(t, err) 27 assert.Equal(t, fmt.Sprintf("Regular error message on %s", runtime.GOOS), err.Error()) 28 29 // Localize on the fly 30 err = locale.NewError("err_localized", "Hello {{.V0}}!", "World!") 31 assert.Error(t, err) 32 assert.Equal(t, "Hello World!!", err.Error()) 33 assert.True(t, locale.IsError(err)) 34 assert.False(t, locale.IsInputError(err)) 35 36 var myError error = &MyError{errs.New("")} 37 myErrorCopy := &MyError{errs.New("")} 38 err = errs.Wrap(myError, "My WrappedErr!") 39 assert.Error(t, err) 40 assert.True(t, errors.As(err, &myErrorCopy), "Error can be accessed as myErrorCopy") 41 assert.True(t, errs.Matches(err, &MyError{}), "Error Matches") 42 assert.False(t, errs.Matches(errs.New("foo"), &MyError{}), "Error doesn't match") 43 assert.True(t, errors.Is(err, myError), "err is equivalent to myError") // ptrs same addr, non-ptrs struct equality 44 45 // Create user input error 46 err = locale.NewInputError("", "Invalid input!") 47 assert.Error(t, err) 48 assert.True(t, locale.IsError(err)) 49 assert.True(t, locale.IsInputError(err)) 50 51 // Join error messages 52 err = errs.New("One") 53 err = locale.WrapError(err, "", "Two") 54 err = errs.Wrap(err, "Three") 55 err = locale.WrapError(err, "", "Four") 56 assert.Equal(t, "Four:\n Three:\n Two: One", errs.JoinMessage(err)) 57 assert.Equal(t, "Four: Two", locale.JoinedErrorMessage(err)) 58 }