129 lines
2.3 KiB
Go
129 lines
2.3 KiB
Go
package collections
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestIsPresent(t *testing.T) {
|
|
tests := map[string]struct {
|
|
optional Optional[string]
|
|
expectedResult bool
|
|
}{
|
|
"not present": {
|
|
optional: Optional[string]{},
|
|
expectedResult: false,
|
|
},
|
|
"present": {
|
|
optional: Optional[string]{
|
|
present: true,
|
|
},
|
|
expectedResult: true,
|
|
},
|
|
}
|
|
|
|
for name, tc := range tests {
|
|
name, tc := name, tc
|
|
t.Run(name, func(t *testing.T) {
|
|
require.Equal(t, tc.expectedResult, tc.optional.IsPresent())
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGet(t *testing.T) {
|
|
tests := map[string]struct {
|
|
optional Optional[string]
|
|
expectedResult string
|
|
}{
|
|
"not present": {
|
|
optional: Optional[string]{},
|
|
expectedResult: "",
|
|
},
|
|
"present": {
|
|
optional: Optional[string]{
|
|
e: "foo",
|
|
present: true,
|
|
},
|
|
expectedResult: "foo",
|
|
},
|
|
}
|
|
|
|
for name, tc := range tests {
|
|
name, tc := name, tc
|
|
t.Run(name, func(t *testing.T) {
|
|
require.Equal(t, tc.expectedResult, tc.optional.Get())
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestOrElse(t *testing.T) {
|
|
tests := map[string]struct {
|
|
optional Optional[string]
|
|
expectedResult string
|
|
}{
|
|
"not present": {
|
|
optional: Optional[string]{},
|
|
expectedResult: "bar",
|
|
},
|
|
"present": {
|
|
optional: Optional[string]{
|
|
e: "foo",
|
|
present: true,
|
|
},
|
|
expectedResult: "foo",
|
|
},
|
|
}
|
|
|
|
for name, tc := range tests {
|
|
name, tc := name, tc
|
|
t.Run(name, func(t *testing.T) {
|
|
require.Equal(t, tc.expectedResult, tc.optional.OrElse("bar"))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestOrElseGet(t *testing.T) {
|
|
tests := map[string]struct {
|
|
optional Optional[string]
|
|
expectedResult string
|
|
}{
|
|
"not present": {
|
|
optional: Optional[string]{},
|
|
expectedResult: "bar",
|
|
},
|
|
"present": {
|
|
optional: Optional[string]{
|
|
e: "foo",
|
|
present: true,
|
|
},
|
|
expectedResult: "foo",
|
|
},
|
|
}
|
|
|
|
for name, tc := range tests {
|
|
name, tc := name, tc
|
|
t.Run(name, func(t *testing.T) {
|
|
require.Equal(t, tc.expectedResult, tc.optional.OrElseGet(func() string {
|
|
return "bar"
|
|
}))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestTransform(t *testing.T) {
|
|
given := &Optional[string]{
|
|
e: "foo",
|
|
present: true,
|
|
}
|
|
|
|
transformer := func(s string) string {
|
|
return strings.ToUpper(s)
|
|
}
|
|
|
|
result := MapOptional(given, transformer)
|
|
|
|
require.Equal(t, "FOO", result.Get())
|
|
}
|