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  }