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 }