mirror of
https://github.com/duke-git/lancet.git
synced 2025-10-05 15:36:52 +08:00

Utilize terminology from the Go SDK rather than introducing novel terms to describe concepts.
152 lines
3.4 KiB
Go
152 lines
3.4 KiB
Go
package optional
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/duke-git/lancet/v2/internal"
|
|
)
|
|
|
|
func TestDefault(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestEmpty")
|
|
opt := Default[int]()
|
|
|
|
assert.ShouldBeTrue(opt.IsNil())
|
|
}
|
|
|
|
func TestOf(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestOf")
|
|
value := 42
|
|
opt := Of(value)
|
|
|
|
assert.ShouldBeTrue(opt.IsNotNil())
|
|
assert.Equal(opt.Unwarp(), value)
|
|
}
|
|
|
|
func TestFromNillable(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestOfNullable")
|
|
var value *int = nil
|
|
opt := FromNillable(value)
|
|
|
|
assert.ShouldBeFalse(opt.IsNotNil())
|
|
|
|
value = new(int)
|
|
*value = 42
|
|
opt = FromNillable(value)
|
|
|
|
assert.ShouldBeTrue(opt.IsNotNil())
|
|
}
|
|
|
|
func TestOrElse(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestOrElse")
|
|
optDefault := Default[int]()
|
|
defaultValue := 100
|
|
|
|
val := optDefault.OrElse(defaultValue)
|
|
assert.Equal(val, defaultValue)
|
|
|
|
optWithValue := Of(42)
|
|
val = optWithValue.OrElse(defaultValue)
|
|
assert.Equal(val, 42)
|
|
}
|
|
|
|
func TestOrElseGetHappyPath(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestOrElseGetHappyPath")
|
|
optWithValue := Of(42)
|
|
action := func() int { return 100 }
|
|
|
|
val := optWithValue.OrElseGet(action)
|
|
assert.Equal(val, 42)
|
|
}
|
|
|
|
func TestOrElseGet(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestOrElseGet")
|
|
optDefault := Default[int]()
|
|
action := func() int { return 100 }
|
|
|
|
val := optDefault.OrElseGet(action)
|
|
assert.Equal(val, action())
|
|
}
|
|
|
|
func TestOrElseTrigger(t *testing.T) {
|
|
assert := internal.NewAssert(t, "OrElseTrigger")
|
|
optDefault := Default[int]()
|
|
_, err := optDefault.OrElseTrigger(func() error { return errors.New("no value") })
|
|
|
|
assert.Equal(err.Error(), "no value")
|
|
|
|
optWithValue := Of(42)
|
|
val, err := optWithValue.OrElseTrigger(func() error { return errors.New("no value") })
|
|
|
|
assert.IsNil(err)
|
|
assert.Equal(val, 42)
|
|
}
|
|
|
|
func TestIfNotNil(t *testing.T) {
|
|
assert := internal.NewAssert(t, "IfNotNil")
|
|
called := false
|
|
action := func(value int) { called = true }
|
|
|
|
optDefault := Default[int]()
|
|
optDefault.IfNotNil(action)
|
|
|
|
assert.ShouldBeFalse(called)
|
|
|
|
called = false // Reset for next test
|
|
optWithValue := Of(42)
|
|
optWithValue.IfNotNil(action)
|
|
|
|
assert.ShouldBeTrue(called)
|
|
}
|
|
|
|
func TestIfNotNilOrElse(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestIfNotNilOrElse")
|
|
|
|
// Test when value is present
|
|
calledWithValue := false
|
|
valueAction := func(value int) { calledWithValue = true }
|
|
fallbackAction := func() { t.Errorf("Empty action should not be called when value is present") }
|
|
|
|
optWithValue := Of(42)
|
|
optWithValue.IfNotNilOrElse(valueAction, fallbackAction)
|
|
|
|
assert.ShouldBeTrue(calledWithValue)
|
|
|
|
// Test when value is not present
|
|
calledWithEmpty := false
|
|
valueAction = func(value int) { t.Errorf("Value action should not be called when value is not present") }
|
|
fallbackAction = func() { calledWithEmpty = true }
|
|
|
|
optDefault := Default[int]()
|
|
optDefault.IfNotNilOrElse(valueAction, fallbackAction)
|
|
|
|
assert.ShouldBeTrue(calledWithEmpty)
|
|
}
|
|
|
|
func TestGetWithPanicStandard(t *testing.T) {
|
|
assert := internal.NewAssert(t, "TestGetWithPanicStandard")
|
|
|
|
// Test when value is present
|
|
optWithValue := Of(42)
|
|
func() {
|
|
defer func() {
|
|
r := recover()
|
|
assert.IsNil(r)
|
|
}()
|
|
val := optWithValue.Unwarp()
|
|
if val != 42 {
|
|
t.Errorf("Expected Unwarp to return 42, got %v", val)
|
|
}
|
|
}()
|
|
|
|
// Test when value is not present
|
|
optDefault := Default[int]()
|
|
func() {
|
|
defer func() {
|
|
r := recover()
|
|
assert.IsNotNil(r)
|
|
}()
|
|
_ = optDefault.Unwarp()
|
|
}()
|
|
}
|