gomu/anko/anko_test.go

277 lines
4.8 KiB
Go
Raw Normal View History

package anko
2021-02-15 20:28:06 +08:00
import (
2021-02-17 17:08:39 +08:00
"fmt"
2021-02-15 20:28:06 +08:00
"testing"
2021-02-17 17:08:39 +08:00
"github.com/gdamore/tcell/v2"
2021-02-15 20:28:06 +08:00
"github.com/stretchr/testify/assert"
)
2021-02-15 21:46:33 +08:00
func TestDefine(t *testing.T) {
a := NewAnko()
2021-03-21 16:05:23 +08:00
err := a.DefineGlobal("x", 12)
2021-02-15 21:46:33 +08:00
if err != nil {
t.Error(err)
}
}
func TestSet(t *testing.T) {
a := NewAnko()
2021-03-21 16:05:23 +08:00
err := a.DefineGlobal("x", 12)
2021-02-15 21:46:33 +08:00
if err != nil {
t.Error(err)
}
err = a.Set("x", 12)
if err != nil {
t.Error(err)
}
}
func TestGet(t *testing.T) {
a := NewAnko()
2021-02-15 21:46:33 +08:00
expect := 12
2021-03-21 16:05:23 +08:00
err := a.DefineGlobal("x", expect)
2021-02-15 21:46:33 +08:00
if err != nil {
t.Error(err)
}
got, err := a.Get("x")
if err != nil {
t.Error(err)
}
assert.Equal(t, expect, got)
if err != nil {
t.Error(err)
}
}
func TestGetInt(t *testing.T) {
expect := 10
a := NewAnko()
2021-02-15 21:46:33 +08:00
_, err := a.Execute(`x = 10`)
if err != nil {
t.Error(err)
}
got := a.GetInt("x")
assert.Equal(t, expect, got)
_, err = a.Execute(`module S { x = 10 }`)
if err != nil {
t.Error(err)
}
got = a.GetInt("S.x")
assert.Equal(t, expect, got)
got = a.GetInt("S.y")
assert.Equal(t, 0, got)
2021-03-21 16:05:23 +08:00
a.DefineGlobal("z", expect)
2021-02-15 21:46:33 +08:00
val := a.GetInt("z")
assert.Equal(t, expect, val)
}
func TestGetString(t *testing.T) {
expect := "bruhh"
a := NewAnko()
2021-02-15 21:46:33 +08:00
_, err := a.Execute(`x = "bruhh"`)
if err != nil {
t.Error(err)
}
2021-02-15 20:28:06 +08:00
2021-02-15 21:46:33 +08:00
got := a.GetString("x")
assert.Equal(t, expect, got)
2021-02-15 20:28:06 +08:00
_, err = a.Execute(`module S { x = "bruhh" }`)
if err != nil {
t.Error(err)
}
got = a.GetString("S.x")
assert.Equal(t, expect, got)
got = a.GetString("S.y")
assert.Equal(t, "", got)
2021-03-21 16:05:23 +08:00
a.DefineGlobal("z", expect)
2021-02-15 21:46:33 +08:00
val := a.GetString("z")
assert.Equal(t, expect, val)
}
func TestGetBool(t *testing.T) {
2021-02-15 20:28:06 +08:00
expect := true
a := NewAnko()
2021-03-21 16:05:23 +08:00
a.DefineGlobal("x", expect)
2021-02-15 20:28:06 +08:00
_, err := a.Execute(`module S { x = true }`)
if err != nil {
t.Error(err)
}
got := a.GetBool("S.x")
assert.Equal(t, expect, got)
got = a.GetBool("S.y")
assert.Equal(t, false, got)
2021-02-15 20:28:06 +08:00
result := a.GetBool("x")
assert.Equal(t, expect, result)
}
2021-02-15 21:46:33 +08:00
func TestExecute(t *testing.T) {
expect := 12
a := NewAnko()
2021-02-15 21:46:33 +08:00
_, err := a.Execute(`x = 6 + 6`)
if err != nil {
t.Error(err)
}
got := a.GetInt("x")
assert.Equal(t, expect, got)
}
2021-02-16 11:06:41 +08:00
func TestExtractCtrlRune(t *testing.T) {
tests := []struct {
in string
out rune
}{
{in: "Ctrl+x", out: 'x'},
{in: "Ctrl+]", out: ']'},
{in: "Ctrl+%", out: '%'},
{in: "Ctrl+^", out: '^'},
{in: "Ctrl+7", out: '7'},
{in: "Ctrl+B", out: 'B'},
2021-02-16 11:06:41 +08:00
}
for _, test := range tests {
got := extractCtrlRune(test.in)
assert.Equal(t, test.out, got)
2021-02-16 11:06:41 +08:00
}
}
func TestExtractAltRune(t *testing.T) {
tests := []struct {
in string
out rune
}{
{in: "Alt+Rune[x]", out: 'x'},
{in: "Alt+Rune[]]", out: ']'},
{in: "Alt+Rune[%]", out: '%'},
{in: "Alt+Rune[^]", out: '^'},
{in: "Alt+Rune[7]", out: '7'},
{in: "Alt+Rune[B]", out: 'B'},
2021-02-16 11:06:41 +08:00
}
for _, test := range tests {
got := extractAltRune(test.in)
assert.Equal(t, test.out, got)
2021-02-16 11:06:41 +08:00
}
}
2021-02-16 11:06:41 +08:00
func TestKeybindExists(t *testing.T) {
2021-02-16 11:06:41 +08:00
2021-02-17 17:08:39 +08:00
tests := []struct {
panel string
key *tcell.EventKey
exists bool
}{
{
panel: "global",
key: tcell.NewEventKey(tcell.KeyRune, 'b', tcell.ModNone),
exists: true,
},
{
panel: "global",
key: tcell.NewEventKey(tcell.KeyRune, 'x', tcell.ModNone),
exists: false,
},
{
panel: "global",
key: tcell.NewEventKey(tcell.KeyRune, ']', tcell.ModNone),
exists: true,
},
{
panel: "global",
key: tcell.NewEventKey(tcell.KeyRune, '[', tcell.ModNone),
exists: false,
},
{
panel: "global",
key: tcell.NewEventKey(tcell.KeyCtrlB, 'b', tcell.ModCtrl),
exists: true,
},
{
panel: "global",
key: tcell.NewEventKey(tcell.KeyCtrlC, 'c', tcell.ModCtrl),
exists: false,
},
{
panel: "playlist",
key: tcell.NewEventKey(tcell.KeyRune, '!', tcell.ModAlt),
exists: true,
},
{
panel: "playlist",
key: tcell.NewEventKey(tcell.KeyRune, '>', tcell.ModAlt),
exists: false,
},
{
panel: "playlist",
key: tcell.NewEventKey(tcell.KeyCtrlCarat, '^', tcell.ModCtrl),
exists: true,
},
{
panel: "queue",
key: tcell.NewEventKey(tcell.KeyRune, '>', tcell.ModAlt),
exists: true,
},
{
panel: "queue",
key: tcell.NewEventKey(tcell.KeyEnter, 0, tcell.ModNone),
exists: true,
},
}
src := `
module Keybinds {
global = {}
playlist = {}
queue = {}
global["b"] = func() { return 0 }
global["]"] = func() { return 0 }
global["ctrl_b"] = func() { return 0 }
global["alt_b"] = func() { return 0 }
playlist["alt_!"] = func() { return 0 }
playlist["ctrl_^"] = func() { return 0 }
queue["alt_>"] = func() { return 0 }
queue["enter"] = func() { return 0 }
}
`
a := NewAnko()
_, err := a.Execute(src)
if err != nil {
t.Error(err)
}
for i, test := range tests {
got := a.KeybindExists(test.panel, test.key)
msg := fmt.Sprintf("error on test %d", i+1)
assert.Equal(t, test.exists, got, msg)
}
2021-02-16 11:06:41 +08:00
}