add missing files
This commit is contained in:
parent
1fcd70afa0
commit
37a7eda095
201
eval_test.go
Normal file
201
eval_test.go
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
// These inputs are used in scan and parse tests.
|
||||||
|
|
||||||
|
var gTests = []struct {
|
||||||
|
inp string
|
||||||
|
toks []string
|
||||||
|
exprs []Expr
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"",
|
||||||
|
[]string{},
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"# comments start with '#'",
|
||||||
|
[]string{},
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"set hidden # trailing comments are allowed",
|
||||||
|
[]string{"set", "hidden", "\n"},
|
||||||
|
[]Expr{&SetExpr{"hidden", ""}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"set hidden; set preview",
|
||||||
|
[]string{"set", "hidden", ";", "set", "preview", "\n"},
|
||||||
|
[]Expr{&SetExpr{"hidden", ""}, &SetExpr{"preview", ""}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"set ratios 1:2:3",
|
||||||
|
[]string{"set", "ratios", "1:2:3", "\n"},
|
||||||
|
[]Expr{&SetExpr{"ratios", "1:2:3"}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"set ratios 1:2:3;",
|
||||||
|
[]string{"set", "ratios", "1:2:3", ";"},
|
||||||
|
[]Expr{&SetExpr{"ratios", "1:2:3"}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
":set ratios 1:2:3",
|
||||||
|
[]string{":", "set", "ratios", "1:2:3", "\n", "\n"},
|
||||||
|
[]Expr{&ListExpr{[]Expr{&SetExpr{"ratios", "1:2:3"}}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
":set ratios 1:2:3;",
|
||||||
|
[]string{":", "set", "ratios", "1:2:3", ";", "\n"},
|
||||||
|
[]Expr{&ListExpr{[]Expr{&SetExpr{"ratios", "1:2:3"}}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map gh cd ~",
|
||||||
|
[]string{"map", "gh", "cd", "~", "\n"},
|
||||||
|
[]Expr{&MapExpr{"gh", &CallExpr{"cd", []string{"~"}}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map gh cd ~;",
|
||||||
|
[]string{"map", "gh", "cd", "~", ";"},
|
||||||
|
[]Expr{&MapExpr{"gh", &CallExpr{"cd", []string{"~"}}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map gh :cd ~",
|
||||||
|
[]string{"map", "gh", ":", "cd", "~", "\n", "\n"},
|
||||||
|
[]Expr{&MapExpr{"gh", &ListExpr{[]Expr{&CallExpr{"cd", []string{"~"}}}}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map gh :cd ~;",
|
||||||
|
[]string{"map", "gh", ":", "cd", "~", ";", "\n"},
|
||||||
|
[]Expr{&MapExpr{"gh", &ListExpr{[]Expr{&CallExpr{"cd", []string{"~"}}}}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"cmd usage $du -h . | less",
|
||||||
|
[]string{"cmd", "usage", "$", "du -h . | less", "\n"},
|
||||||
|
[]Expr{&CmdExpr{"usage", &ExecExpr{"$", "du -h . | less"}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map u usage",
|
||||||
|
[]string{"map", "u", "usage", "\n"},
|
||||||
|
[]Expr{&MapExpr{"u", &CallExpr{"usage", nil}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map u usage;",
|
||||||
|
[]string{"map", "u", "usage", ";"},
|
||||||
|
[]Expr{&MapExpr{"u", &CallExpr{"usage", nil}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map u :usage",
|
||||||
|
[]string{"map", "u", ":", "usage", "\n", "\n"},
|
||||||
|
[]Expr{&MapExpr{"u", &ListExpr{[]Expr{&CallExpr{"usage", nil}}}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map u :usage;",
|
||||||
|
[]string{"map", "u", ":", "usage", ";", "\n"},
|
||||||
|
[]Expr{&MapExpr{"u", &ListExpr{[]Expr{&CallExpr{"usage", nil}}}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map u $du -h . | less",
|
||||||
|
[]string{"map", "u", "$", "du -h . | less", "\n"},
|
||||||
|
[]Expr{&MapExpr{"u", &ExecExpr{"$", "du -h . | less"}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"cmd usage $du -h \"$1\" | less",
|
||||||
|
[]string{"cmd", "usage", "$", `du -h "$1" | less`, "\n"},
|
||||||
|
[]Expr{&CmdExpr{"usage", &ExecExpr{"$", `du -h "$1" | less`}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"map u usage /",
|
||||||
|
[]string{"map", "u", "usage", "/", "\n"},
|
||||||
|
[]Expr{&MapExpr{"u", &CallExpr{"usage", []string{"/"}}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
`cmd gohome :{{
|
||||||
|
cd ~
|
||||||
|
set hidden
|
||||||
|
}}`,
|
||||||
|
[]string{"cmd", "gohome", ":", "{{",
|
||||||
|
"cd", "~", "\n",
|
||||||
|
"set", "hidden", "\n",
|
||||||
|
"}}", "\n"},
|
||||||
|
[]Expr{&CmdExpr{"gohome", &ListExpr{[]Expr{
|
||||||
|
&CallExpr{"cd", []string{"~"}},
|
||||||
|
&SetExpr{"hidden", ""}}},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
`map gh :{{
|
||||||
|
cd ~
|
||||||
|
set hidden
|
||||||
|
}}`,
|
||||||
|
[]string{"map", "gh", ":", "{{",
|
||||||
|
"cd", "~", "\n",
|
||||||
|
"set", "hidden", "\n",
|
||||||
|
"}}", "\n"},
|
||||||
|
[]Expr{&MapExpr{"gh", &ListExpr{[]Expr{
|
||||||
|
&CallExpr{"cd", []string{"~"}},
|
||||||
|
&SetExpr{"hidden", ""}}},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
`map c ${{
|
||||||
|
mkdir foo
|
||||||
|
IFS=':'; cp ${fs} foo
|
||||||
|
tar -czvf "foo.tar.gz" foo
|
||||||
|
rm -rf foo
|
||||||
|
}}`,
|
||||||
|
[]string{"map", "c", "$", "{{", `
|
||||||
|
mkdir foo
|
||||||
|
IFS=':'; cp ${fs} foo
|
||||||
|
tar -czvf "foo.tar.gz" foo
|
||||||
|
rm -rf foo
|
||||||
|
`, "}}", "\n"},
|
||||||
|
[]Expr{&MapExpr{"c", &ExecExpr{"$", `
|
||||||
|
mkdir foo
|
||||||
|
IFS=':'; cp ${fs} foo
|
||||||
|
tar -czvf "foo.tar.gz" foo
|
||||||
|
rm -rf foo
|
||||||
|
`}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
`cmd compress ${{
|
||||||
|
mkdir "$1"
|
||||||
|
IFS=':'; cp ${fs} "$1"
|
||||||
|
tar -czvf "$1.tar.gz" "$1"
|
||||||
|
rm -rf "$1"
|
||||||
|
}}`,
|
||||||
|
[]string{"cmd", "compress", "$", "{{", `
|
||||||
|
mkdir "$1"
|
||||||
|
IFS=':'; cp ${fs} "$1"
|
||||||
|
tar -czvf "$1.tar.gz" "$1"
|
||||||
|
rm -rf "$1"
|
||||||
|
`, "}}", "\n"},
|
||||||
|
[]Expr{&CmdExpr{"compress", &ExecExpr{"$", `
|
||||||
|
mkdir "$1"
|
||||||
|
IFS=':'; cp ${fs} "$1"
|
||||||
|
tar -czvf "$1.tar.gz" "$1"
|
||||||
|
rm -rf "$1"
|
||||||
|
`}}},
|
||||||
|
},
|
||||||
|
}
|
23
parse_test.go
Normal file
23
parse_test.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestParse(t *testing.T) {
|
||||||
|
for _, test := range gTests {
|
||||||
|
p := newParser(strings.NewReader(test.inp))
|
||||||
|
|
||||||
|
for _, expr := range test.exprs {
|
||||||
|
if p.parse(); !reflect.DeepEqual(p.expr, expr) {
|
||||||
|
t.Errorf("at input '%s' expected '%s' but parsed '%s'", test.inp, expr, p.expr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if p.parse(); p.expr != nil {
|
||||||
|
t.Errorf("at input '%s' unexpected '%s'", test.inp, p.expr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user