github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/gnovm/cmd/gno/testdata/gno_test/recover.txtar (about)

     1  # Test recovering
     2  
     3  gno test -v -run 'TestRecover$' .
     4  
     5  ! stdout .+
     6  stderr 'recovered bad panic!'
     7  stderr '--- PASS'
     8  stderr 'ok  '
     9  
    10  gno test -v -run 'TestRecoverSkip$' .
    11  
    12  ! stdout .+
    13  stderr 'skipped'
    14  ! stderr 'recovered.*testing.Recover'
    15  stderr '--- SKIP'
    16  stderr 'ok  '
    17  
    18  gno test -v -run 'TestBadRecoverSkip$' .
    19  
    20  ! stdout .+
    21  # should contain warning about using testing.Recover
    22  stderr 'recovered.*testing.Recover'
    23  # the test will still be marked as skipped
    24  stderr '--- SKIP'
    25  stderr 'ok  '
    26  
    27  -- recov.gno --
    28  package recov
    29  
    30  -- recov_test.gno --
    31  package recov
    32  
    33  import "testing"
    34  
    35  type RecoverySetter struct {
    36  	value interface{}
    37  }
    38  
    39  func (s *RecoverySetter) Set(v interface{}) {
    40  	s.value = v
    41  }
    42  
    43  func TestRecover(t *testing.T) {
    44  	var setter RecoverySetter
    45  	defer func() {
    46  		t.Log("recovered", setter.value)
    47  	}()
    48  	defer testing.Recover(&setter)
    49  
    50  	panic("bad panic!")
    51  }
    52  
    53  func TestRecoverSkip(t *testing.T) {
    54  	var setter RecoverySetter
    55  	defer func() {
    56  		t.Log("recovered", setter.value)
    57  	}()
    58  	defer testing.Recover(&setter)
    59  
    60  	t.Skip("skipped")
    61  	panic("bad panic!")
    62  }
    63  
    64  func TestBadRecoverSkip(t *testing.T) {
    65  	defer func() {
    66  		err := recover()
    67  		t.Log("recovered", err)
    68  	}()
    69  
    70  	t.Skip("skipped")
    71  	panic("bad panic!")
    72  }