1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00

test: add unit test for Promise

This commit is contained in:
dudaodong
2023-03-16 16:55:32 +08:00
parent 930bb9c839
commit 73ac9825e9
2 changed files with 150 additions and 3 deletions

View File

@@ -33,9 +33,10 @@ func New[T any](runnable func(resolve func(T), reject func(error))) *Promise[T]
}
p := &Promise[T]{
pending: true,
mu: &sync.Mutex{},
wg: &sync.WaitGroup{},
runnable: runnable,
pending: true,
mu: &sync.Mutex{},
wg: &sync.WaitGroup{},
}
defer p.run()

146
async/promise_test.go Normal file
View File

@@ -0,0 +1,146 @@
package async
import (
"errors"
"testing"
"github.com/duke-git/lancet/v2/internal"
)
func TestResolve(t *testing.T) {
assert := internal.NewAssert(t, "TestResolve")
p := Resolve("abc")
assert.Equal("abc", p.result)
assert.Equal(false, p.pending)
}
func TestReject(t *testing.T) {
assert := internal.NewAssert(t, "TestReject")
err := errors.New("error")
p := Reject[string](err)
assert.Equal("error", p.err.Error())
assert.Equal(false, p.pending)
}
func TestThen(t *testing.T) {
assert := internal.NewAssert(t, "TestThen")
p1 := New(func(resolve func(string), reject func(error)) {
resolve("abc")
})
p2 := Then(p1, func(data string) string {
return data + "de"
})
val, err := p1.Await()
assert.IsNil(err)
assert.Equal("abc", val)
val, err = p2.Await()
assert.IsNil(err)
assert.Equal("abcde", val)
}
func TestPromise_Then(t *testing.T) {
assert := internal.NewAssert(t, "TestPromise_Then")
p1 := New(func(resolve func(int), reject func(error)) {
resolve(1)
})
p2 := p1.Then(func(n int) int {
return n + 2
})
val, err := p1.Await()
assert.IsNil(err)
assert.Equal(1, val)
val, err = p2.Await()
assert.IsNil(err)
assert.Equal(3, val)
}
func TestCatch(t *testing.T) {
assert := internal.NewAssert(t, "TestCatch")
p1 := New(func(resolve func(string), reject func(error)) {
err := errors.New("error1")
reject(err)
})
p2 := Catch(p1, func(err error) error {
e := errors.New("error2")
return internal.JoinError(err, e)
})
val, err := p1.Await()
assert.Equal("", val)
assert.IsNotNil(err)
assert.Equal("error1", err.Error())
val, err = p2.Await()
assert.Equal("", val)
assert.IsNotNil(err)
assert.Equal("error1\nerror2", err.Error())
}
func TestPromise_Catch(t *testing.T) {
assert := internal.NewAssert(t, "TestPromise_Catch")
p1 := New(func(resolve func(string), reject func(error)) {
err := errors.New("error1")
reject(err)
})
p2 := p1.Catch(func(err error) error {
e := errors.New("error2")
return internal.JoinError(err, e)
})
val, err := p1.Await()
assert.Equal("", val)
assert.IsNotNil(err)
assert.Equal("error1", err.Error())
val, err = p2.Await()
assert.Equal("", val)
assert.IsNotNil(err)
assert.Equal("error1\nerror2", err.Error())
}
func TestAll(t *testing.T) {
assert := internal.NewAssert(t, "TestPromise_Catch")
t.Run("AllPromisesFullfilled", func(_ *testing.T) {
p1 := New(func(resolve func(string), reject func(error)) {
resolve("a")
})
p2 := New(func(resolve func(string), reject func(error)) {
resolve("b")
})
p3 := New(func(resolve func(string), reject func(error)) {
resolve("c")
})
p := All([]*Promise[string]{p1, p2, p3})
val, err := p.Await()
assert.Equal([]string{"a", "b", "c"}, val)
assert.IsNil(err)
})
// t.Run("AllPromisesEmpty", func(_ *testing.T) {
// var empty = []*Promise[any]{}
// p := All(empty)
// assert.IsNil(p)
// })
}