gf/util/gutil/gutil_z_unit_goroutine_test.go
2023-09-11 10:18:44 +08:00

65 lines
1.3 KiB
Go

// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
package gutil_test
import (
"context"
"sync"
"testing"
"github.com/gogf/gf/v2/container/garray"
"github.com/gogf/gf/v2/test/gtest"
"github.com/gogf/gf/v2/util/gutil"
)
func Test_Go(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
var (
wg = sync.WaitGroup{}
array = garray.NewArray(true)
)
wg.Add(1)
gutil.Go(ctx, func(ctx context.Context) {
defer wg.Done()
array.Append(1)
}, nil)
wg.Wait()
t.Assert(array.Len(), 1)
})
// recover
gtest.C(t, func(t *gtest.T) {
var (
wg = sync.WaitGroup{}
array = garray.NewArray(true)
)
wg.Add(1)
gutil.Go(ctx, func(ctx context.Context) {
defer wg.Done()
panic("error")
array.Append(1)
}, nil)
wg.Wait()
t.Assert(array.Len(), 0)
})
gtest.C(t, func(t *gtest.T) {
var (
wg = sync.WaitGroup{}
array = garray.NewArray(true)
)
wg.Add(1)
gutil.Go(ctx, func(ctx context.Context) {
panic("error")
}, func(ctx context.Context, exception error) {
defer wg.Done()
array.Append(exception)
})
wg.Wait()
t.Assert(array.Len(), 1)
t.Assert(array.At(0), "error")
})
}