Files
goutils/type/result_test.go

209 lines
4.9 KiB
Go

package Type
import (
"errors"
"reflect"
"testing"
Testing "git.nas-technologies.com/lbatuska/goutils/testing"
)
var (
r = Ok("something")
s = Ok(5)
errResult = Err_t(errors.New("some error"), 5)
nilResult = (*Result[int])(nil)
)
func Test_resultScan(t *testing.T) {
a := Ok("Not A!")
b := Ok(0)
c := Ok(0)
d := Err[*string](errors.New(""))
a.Scan("a")
b.Scan(1)
c.Scan("c")
d.Scan(Ptr("d"))
Testing.AssertEqual(t, a.Unwrap(), "a")
Testing.AssertEqual(t, b.Unwrap(), 1)
Testing.AssertError(t, c.UnwrapErr())
Testing.AssertEqual(t, *d.Unwrap(), "d")
}
func Test_resultConstructors(t *testing.T) {
err := errors.New("some error")
w := Err[int](err)
x := Err_t(err, 5)
Testing.AssertEqual(t, "something", r.value)
Testing.AssertEqual(t, 5, s.value)
Testing.AssertEqual(t, err, w.err)
Testing.AssertEqual(t, err, x.err)
}
func Test_resultFunctions(t *testing.T) {
Testing.AssertTrue(t, r.IsOk())
Testing.AssertTrue(t, s.IsOk())
Testing.AssertFalse(t, r.IsErr())
Testing.AssertFalse(t, s.IsErr())
Testing.AssertTrue(t, errResult.IsErr())
Testing.AssertTrue(t, nilResult.IsErr())
Testing.AssertFalse(t, errResult.IsOk())
Testing.AssertFalse(t, nilResult.IsOk())
Testing.AssertTrue(t, r.HasValue())
Testing.AssertTrue(t, s.HasValue())
Testing.AssertFalse(t, errResult.HasValue())
Testing.AssertFalse(t, nilResult.HasValue())
}
func Test_resultExpect(t *testing.T) {
noPanic := func() {
_ = r.Expect("test")
}
panic := func() {
_ = errResult.Expect("test")
}
panic2 := func() {
_ = nilResult.Expect("test")
}
Testing.AssertNotPanic(t, noPanic)
Testing.AssertPanicMessage(t, panic, "test")
Testing.AssertPanic(t, panic2)
Testing.AssertEqual(t, r.Unwrap(), "something")
}
func Test_resultUnwrap(t *testing.T) {
noPanic := func() {
_ = r.Unwrap()
}
panic := func() {
_ = errResult.Unwrap()
}
panic2 := func() {
_ = nilResult.Unwrap()
}
Testing.AssertNotPanic(t, noPanic)
Testing.AssertPanic(t, panic)
Testing.AssertPanic(t, panic2)
Testing.AssertEqual(t, r.Unwrap(), "something")
}
func Test_resultUnwrapOr(t *testing.T) {
noPanic := func() {
_ = r.UnwrapOr("test")
}
noPanic2 := func() {
_ = errResult.UnwrapOr(1)
}
noPanic3 := func() {
_ = nilResult.UnwrapOr(1)
}
Testing.AssertNotPanic(t, noPanic)
Testing.AssertNotPanic(t, noPanic2)
Testing.AssertNotPanic(t, noPanic3)
Testing.AssertEqual(t, r.UnwrapOr("test"), "something")
Testing.AssertEqual(t, errResult.UnwrapOr(1), 1)
Testing.AssertEqual(t, nilResult.UnwrapOr(1), 1)
}
func Test_resultUnwrapOrDefault(t *testing.T) {
noPanic := func() {
_ = r.UnwrapOrDefault()
}
noPanic2 := func() {
_ = errResult.UnwrapOrDefault()
}
noPanic3 := func() {
_ = nilResult.UnwrapOrDefault()
}
Testing.AssertNotPanic(t, noPanic)
Testing.AssertNotPanic(t, noPanic2)
Testing.AssertNotPanic(t, noPanic3)
Testing.AssertEqual(t, r.UnwrapOrDefault(), "something")
Testing.AssertEqual(t, errResult.UnwrapOrDefault(), 0)
Testing.AssertEqual(t, nilResult.UnwrapOrDefault(), 0)
}
func Test_resultUnwrapOrElse(t *testing.T) {
returnString := func() string {
return "this is a string"
}
returnInt := func() int {
return 10
}
noPanic := func() {
_ = r.UnwrapOrElse(returnString)
}
noPanic2 := func() {
_ = errResult.UnwrapOrElse(returnInt)
}
noPanic3 := func() {
_ = nilResult.UnwrapOrElse(returnInt)
}
Testing.AssertNotPanic(t, noPanic)
Testing.AssertNotPanic(t, noPanic2)
Testing.AssertNotPanic(t, noPanic3)
Testing.AssertEqual(t, r.UnwrapOrElse(returnString), "something")
Testing.AssertEqual(t, errResult.UnwrapOrElse(returnInt), 10)
Testing.AssertEqual(t, nilResult.UnwrapOrElse(returnInt), 10)
}
func Test_resultExpectErr(t *testing.T) {
panic := func() {
_ = r.ExpectErr("test")
}
noPanic := func() {
_ = errResult.ExpectErr("test")
}
noPanic2 := func() {
_ = nilResult.ExpectErr("test")
}
Testing.AssertPanic(t, panic)
Testing.AssertNotPanic(t, noPanic)
Testing.AssertNotPanic(t, noPanic2)
Testing.AssertEqual(t, errResult.err, errResult.ExpectErr("test"))
}
func Test_resultUnwrapErr(t *testing.T) {
panic := func() {
_ = r.UnwrapErr()
}
noPanic := func() {
_ = errResult.UnwrapErr()
}
noPanic2 := func() {
_ = nilResult.UnwrapErr()
}
Testing.AssertPanic(t, panic)
Testing.AssertNotPanic(t, noPanic)
Testing.AssertNotPanic(t, noPanic2)
Testing.AssertEqual(t, errResult.err, errResult.UnwrapErr())
}
func Test_resultOk(t *testing.T) {
Testing.AssertEqual(t, u, r.Ok())
Testing.AssertEqual(t, none, errResult.Ok())
Testing.AssertEqual(t, none, nilResult.Ok())
}
func Test_resultErr(t *testing.T) {
rOptional := r.Err()
errOptional := errResult.Err()
errOptional2 := nilResult.Err()
err := errors.New("some error")
Testing.AssertTrue(t, rOptional.IsNone())
Testing.AssertTrue(t, errOptional.IsSome())
Testing.AssertTrue(t, errOptional2.IsSome())
Testing.AssertEqual(t, reflect.TypeOf(err), reflect.TypeOf(errOptional.value))
Testing.AssertEqual(t, reflect.TypeOf(err), reflect.TypeOf(errOptional2.value))
}