...

Source file src/oss.terrastruct.com/util-go/xdefer/xdefer_test.go

Documentation: oss.terrastruct.com/util-go/xdefer

     1  package xdefer_test
     2  
     3  import (
     4  	"fmt"
     5  	"runtime"
     6  	"testing"
     7  
     8  	"golang.org/x/xerrors"
     9  
    10  	"oss.terrastruct.com/util-go/assert"
    11  	"oss.terrastruct.com/util-go/xdefer"
    12  )
    13  
    14  func TestErrorf(t *testing.T) {
    15  	t.Parallel()
    16  
    17  	err := func() (err error) {
    18  		defer xdefer.Errorf(&err, "second wrap %#v", []int{99, 3})
    19  
    20  		err = xerrors.New("ola amigo")
    21  		if err != nil {
    22  			// This is the first line that should be reported on xdefer.
    23  			return xerrors.Errorf("first wrap: %w", err)
    24  		}
    25  
    26  		return nil
    27  	}()
    28  
    29  	_, fp, _, ok := runtime.Caller(0)
    30  	if !ok {
    31  		t.Fatal("runtime.Caller failed")
    32  	}
    33  	exp := fmt.Sprintf(`second wrap []int{99, 3}:
    34    - first wrap:
    35      oss.terrastruct.com/util-go/xdefer_test.TestErrorf.func1
    36          %v:23
    37    - ola amigo:
    38      oss.terrastruct.com/util-go/xdefer_test.TestErrorf.func1
    39          %[1]v:20`,
    40  		fp,
    41  	)
    42  
    43  	got := fmt.Sprintf("%+v", err)
    44  	assert.String(t, exp, got)
    45  }
    46  
    47  func TestEmptyErrorf(t *testing.T) {
    48  	t.Parallel()
    49  
    50  	err := func() (err error) {
    51  		defer xdefer.Errorf(&err, "")
    52  
    53  		err = xerrors.New("ola amigo")
    54  		if err != nil {
    55  			return err
    56  		}
    57  
    58  		return nil
    59  	}()
    60  
    61  	_, fp, _, ok := runtime.Caller(0)
    62  	if !ok {
    63  		t.Fatal("runtime.Caller failed")
    64  	}
    65  	exp := fmt.Sprintf(`oss.terrastruct.com/util-go/xdefer_test.TestEmptyErrorf.func1
    66          %v:55
    67    - ola amigo:
    68      oss.terrastruct.com/util-go/xdefer_test.TestEmptyErrorf.func1
    69          %[1]v:53`,
    70  		fp,
    71  	)
    72  
    73  	got := fmt.Sprintf("%+v", err)
    74  	assert.String(t, exp, got)
    75  
    76  	exp = err.Error()
    77  	got = "oss.terrastruct.com/util-go/xdefer_test.TestEmptyErrorf.func1: ola amigo"
    78  	assert.String(t, exp, got)
    79  }
    80  

View as plain text