2018-04-11 02:05:46 -04:00
|
|
|
package bootcommand
|
|
|
|
|
|
|
|
import (
|
2018-04-13 17:41:17 -04:00
|
|
|
"fmt"
|
2018-04-11 02:05:46 -04:00
|
|
|
"log"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
2018-04-13 17:41:17 -04:00
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
2018-04-11 02:05:46 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
func toIfaceSlice(v interface{}) []interface{} {
|
|
|
|
if v == nil {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
return v.([]interface{})
|
|
|
|
}
|
|
|
|
|
2018-04-13 17:41:17 -04:00
|
|
|
func Test_parse(t *testing.T) {
|
2018-04-11 02:05:46 -04:00
|
|
|
in := "<wait><wait20><wait3s><wait4m2ns>"
|
|
|
|
in += "foo/bar > one 界"
|
2018-04-13 17:41:17 -04:00
|
|
|
in += "<fon> b<fOff>"
|
2018-04-12 14:34:21 -04:00
|
|
|
in += "<foo><f3><f12><spacebar><leftalt><rightshift><rightsuper>"
|
2018-04-13 17:41:17 -04:00
|
|
|
expected := []string{
|
|
|
|
"Wait<1s>",
|
|
|
|
"Wait<20s>",
|
|
|
|
"Wait<3s>",
|
|
|
|
"Wait<4m0.000000002s>",
|
|
|
|
"LIT-Press(f)",
|
|
|
|
"LIT-Press(o)",
|
|
|
|
"LIT-Press(o)",
|
|
|
|
"LIT-Press(/)",
|
|
|
|
"LIT-Press(b)",
|
|
|
|
"LIT-Press(a)",
|
|
|
|
"LIT-Press(r)",
|
|
|
|
"LIT-Press( )",
|
|
|
|
"LIT-Press(>)",
|
|
|
|
"LIT-Press( )",
|
|
|
|
"LIT-Press(o)",
|
|
|
|
"LIT-Press(n)",
|
|
|
|
"LIT-Press(e)",
|
|
|
|
"LIT-Press( )",
|
|
|
|
"LIT-Press(界)",
|
|
|
|
"LIT-On(f)",
|
|
|
|
"LIT-Press( )",
|
|
|
|
"LIT-Press(b)",
|
|
|
|
"LIT-Off(f)",
|
|
|
|
"LIT-Press(<)",
|
|
|
|
"LIT-Press(f)",
|
|
|
|
"LIT-Press(o)",
|
|
|
|
"LIT-Press(o)",
|
|
|
|
"LIT-Press(>)",
|
|
|
|
"Spec-Press(f3)",
|
|
|
|
"Spec-Press(f12)",
|
|
|
|
"Spec-Press(spacebar)",
|
|
|
|
"Spec-Press(leftalt)",
|
|
|
|
"Spec-Press(rightshift)",
|
|
|
|
"Spec-Press(rightsuper)",
|
|
|
|
}
|
|
|
|
|
2018-04-11 02:05:46 -04:00
|
|
|
got, err := ParseReader("", strings.NewReader(in))
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
gL := toIfaceSlice(got)
|
2018-04-13 17:41:17 -04:00
|
|
|
for i, g := range gL {
|
|
|
|
assert.Equal(t, expected[i], fmt.Sprintf("%s", g))
|
2018-04-11 02:05:46 -04:00
|
|
|
log.Printf("%s\n", g)
|
|
|
|
}
|
2018-04-13 17:41:17 -04:00
|
|
|
}
|
2018-04-11 02:05:46 -04:00
|
|
|
|
2018-04-13 17:41:17 -04:00
|
|
|
func Test_special(t *testing.T) {
|
|
|
|
var specials = []struct {
|
|
|
|
in string
|
|
|
|
out string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
"<rightShift><rightshift><RIGHTSHIFT>",
|
|
|
|
"Spec-Press(rightshift)",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"<delon><delON><deLoN><DELON>",
|
|
|
|
"Spec-On(del)",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"<enteroff><enterOFF><eNtErOfF><ENTEROFF>",
|
|
|
|
"Spec-Off(enter)",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for _, tt := range specials {
|
|
|
|
got, err := ParseReader("", strings.NewReader(tt.in))
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
gL := toIfaceSlice(got)
|
|
|
|
for _, g := range gL {
|
|
|
|
assert.Equal(t, tt.out, g.(*specialExpression).String())
|
|
|
|
}
|
|
|
|
}
|
2018-04-11 02:05:46 -04:00
|
|
|
}
|
2018-04-16 16:37:17 -04:00
|
|
|
|
2018-04-18 20:48:35 -04:00
|
|
|
func Test_validation(t *testing.T) {
|
|
|
|
var expressions = []struct {
|
|
|
|
in string
|
|
|
|
valid bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
"<wait1m>",
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"<wait-1m>",
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"<f1>",
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"<",
|
|
|
|
true,
|
|
|
|
},
|
2018-04-16 16:37:17 -04:00
|
|
|
}
|
2018-04-18 20:48:35 -04:00
|
|
|
for _, tt := range expressions {
|
|
|
|
got, err := ParseReader("", strings.NewReader(tt.in))
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2018-04-16 16:37:17 -04:00
|
|
|
|
|
|
|
gL := toIfaceSlice(got)
|
2018-04-18 20:48:35 -04:00
|
|
|
assert.Len(t, gL, 1)
|
|
|
|
err = gL[0].(expression).Validate()
|
|
|
|
if tt.valid {
|
|
|
|
assert.NoError(t, err)
|
|
|
|
} else {
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
}
|
2018-04-16 16:37:17 -04:00
|
|
|
}
|