mediocre-go-lib/mctx/ctx_test.go
2018-11-30 15:11:41 -05:00

80 lines
1.9 KiB
Go

package mctx
import (
. "testing"
"github.com/mediocregopher/mediocre-go-lib/mtest/massert"
)
func TestInheritance(t *T) {
ctx := New()
ctx1 := ChildOf(ctx, "1")
ctx1a := ChildOf(ctx1, "a")
ctx1b := ChildOf(ctx1, "b")
ctx2 := ChildOf(ctx, "2")
massert.Fatal(t, massert.All(
massert.Len(Path(ctx), 0),
massert.Equal(Path(ctx1), []string{"1"}),
massert.Equal(Path(ctx1a), []string{"1", "a"}),
massert.Equal(Path(ctx1b), []string{"1", "b"}),
massert.Equal(Path(ctx2), []string{"2"}),
))
massert.Fatal(t, massert.All(
massert.Equal(
map[string]Context{"1": ctx1, "2": ctx2},
Children(ctx),
),
massert.Equal(
map[string]Context{"a": ctx1a, "b": ctx1b},
Children(ctx1),
),
massert.Equal(
map[string]Context{},
Children(ctx2),
),
))
massert.Fatal(t, massert.All(
massert.Nil(Parent(ctx)),
massert.Equal(Parent(ctx1), ctx),
massert.Equal(Parent(ctx1a), ctx1),
massert.Equal(Parent(ctx1b), ctx1),
massert.Equal(Parent(ctx2), ctx),
))
massert.Fatal(t, massert.All(
massert.Equal(Root(ctx), ctx),
massert.Equal(Root(ctx1), ctx),
massert.Equal(Root(ctx1a), ctx),
massert.Equal(Root(ctx1b), ctx),
massert.Equal(Root(ctx2), ctx),
))
}
func TestMutableValues(t *T) {
fn := func(v interface{}) interface{} {
if v == nil {
return 0
}
return v.(int) + 1
}
var aa []massert.Assertion
ctx := New()
aa = append(aa, massert.Equal(GetSetMutableValue(ctx, false, 0, fn), 0))
aa = append(aa, massert.Equal(GetSetMutableValue(ctx, false, 0, fn), 1))
aa = append(aa, massert.Equal(GetSetMutableValue(ctx, true, 0, fn), 1))
aa = append(aa, massert.Equal(MutableValue(ctx, 0), 1))
ctx1 := ChildOf(ctx, "one")
aa = append(aa, massert.Equal(GetSetMutableValue(ctx1, true, 0, fn), 0))
aa = append(aa, massert.Equal(GetSetMutableValue(ctx1, false, 0, fn), 1))
aa = append(aa, massert.Equal(GetSetMutableValue(ctx1, true, 0, fn), 1))
massert.Fatal(t, massert.All(aa...))
}