mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2026-02-13 21:00:00 +00:00
100 lines
2.2 KiB
Go
100 lines
2.2 KiB
Go
// Copyright 2025 Woodpecker Authors.
|
|
// Copyright 2024 The Gitea Authors.
|
|
//
|
|
// Licensed under the MIT License.
|
|
|
|
package optional_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"go.woodpecker-ci.org/woodpecker/v3/shared/optional"
|
|
)
|
|
|
|
func TestOption(t *testing.T) {
|
|
var uninitialized optional.Option[int]
|
|
assert.False(t, uninitialized.Has())
|
|
assert.Equal(t, int(0), uninitialized.Value())
|
|
assert.Equal(t, int(1), uninitialized.ValueOrDefault(1))
|
|
|
|
none := optional.None[int]()
|
|
assert.False(t, none.Has())
|
|
assert.Equal(t, int(0), none.Value())
|
|
assert.Equal(t, int(1), none.ValueOrDefault(1))
|
|
|
|
some := optional.Some[int](1)
|
|
assert.True(t, some.Has())
|
|
assert.Equal(t, int(1), some.Value())
|
|
assert.Equal(t, int(1), some.ValueOrDefault(2))
|
|
|
|
var ptr *int
|
|
assert.False(t, optional.FromPtr(ptr).Has())
|
|
|
|
var boolPtr *bool
|
|
assert.Equal(t, boolPtr, optional.None[bool]().ToPtr())
|
|
|
|
boolPtr = optional.Some[bool](false).ToPtr()
|
|
assert.Equal(t, toPtr(false), boolPtr)
|
|
|
|
opt1 := optional.FromPtr(toPtr(1))
|
|
assert.True(t, opt1.Has())
|
|
assert.Equal(t, int(1), opt1.Value())
|
|
|
|
assert.False(t, optional.FromNonDefault("").Has())
|
|
|
|
opt2 := optional.FromNonDefault("test")
|
|
assert.True(t, opt2.Has())
|
|
assert.Equal(t, "test", opt2.Value())
|
|
|
|
assert.False(t, optional.FromNonDefault(0).Has())
|
|
|
|
opt3 := optional.FromNonDefault(1)
|
|
assert.True(t, opt3.Has())
|
|
assert.Equal(t, int(1), opt3.Value())
|
|
}
|
|
|
|
func TestExtractValue(t *testing.T) {
|
|
val, ok := optional.ExtractValue("aaaa")
|
|
assert.False(t, ok)
|
|
assert.Nil(t, val)
|
|
|
|
val, ok = optional.ExtractValue(optional.Some("aaaa"))
|
|
assert.True(t, ok)
|
|
if assert.NotNil(t, val) {
|
|
val, ok := val.(string)
|
|
assert.True(t, ok)
|
|
assert.EqualValues(t, "aaaa", val)
|
|
}
|
|
|
|
val, ok = optional.ExtractValue(optional.None[float64]())
|
|
assert.True(t, ok)
|
|
assert.Nil(t, val)
|
|
|
|
val, ok = optional.ExtractValue(&fakeHas{})
|
|
assert.False(t, ok)
|
|
assert.Nil(t, val)
|
|
|
|
wrongType := make(fakeHas2, 0, 1)
|
|
val, ok = optional.ExtractValue(wrongType)
|
|
assert.False(t, ok)
|
|
assert.Nil(t, val)
|
|
}
|
|
|
|
func toPtr[T any](val T) *T {
|
|
return &val
|
|
}
|
|
|
|
type fakeHas struct{}
|
|
|
|
func (fakeHas) Has() bool {
|
|
return true
|
|
}
|
|
|
|
type fakeHas2 []string
|
|
|
|
func (fakeHas2) Has() bool {
|
|
return true
|
|
}
|