github.com/livekit/protocol@v1.39.3/utils/promise_test.go (about)

     1  package utils
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestPromise(t *testing.T) {
    11  	t.Run("zero value is usable", func(t *testing.T) {
    12  		var p Promise[bool]
    13  
    14  		require.False(t, p.Resolved())
    15  		done := p.Done()
    16  		select {
    17  		case <-done:
    18  			require.FailNow(t, "unresolved done channel should block")
    19  		default:
    20  		}
    21  
    22  		p.Resolve(true, nil)
    23  
    24  		require.True(t, p.Resolved())
    25  		select {
    26  		case <-done:
    27  		default:
    28  			require.FailNow(t, "resolved done channel should not block")
    29  		}
    30  
    31  		require.True(t, p.Result)
    32  	})
    33  
    34  	t.Run("promise cannot be resolved twice", func(t *testing.T) {
    35  		p := NewPromise[bool]()
    36  		p.Resolve(false, errors.New("fail"))
    37  		p.Resolve(true, nil)
    38  
    39  		require.False(t, p.Result)
    40  		require.Error(t, p.Err)
    41  	})
    42  }