elvish/pkg/parse/pprint_test.go
Kurtis Rader 12c7a08c97 Increase parse/string.go coverage from 44% to 70%
This is an unusual change in that it exists solely to exercise generated
code and thus increase test coverage. On the one hand, if we never care
about the string value of type `RedirMode` then it should be removed
from the stringified types. On the other hand, verifying a redirection
is correctly represented in the output of the parse.pprint...() family
of functions is useful given the importance of I/O redirections in shells
like Elvish.
2021-06-10 09:17:16 +01:00

84 lines
2.2 KiB
Go

package parse
import (
"strings"
"testing"
"src.elv.sh/pkg/tt"
)
var n = mustParse("ls $x[0]$y[1];echo done >/redir-dest")
var pprintASTTests = tt.Table{
tt.Args(n).Rets(
`Chunk
Pipeline/Form
Compound/Indexing/Primary ExprCtx=CmdExpr Type=Bareword Value="ls"
Compound ExprCtx=NormalExpr
Indexing ExprCtx=NormalExpr
Primary ExprCtx=NormalExpr Type=Variable Value="x"
Array/Compound/Indexing/Primary ExprCtx=NormalExpr Type=Bareword Value="0"
Indexing ExprCtx=NormalExpr
Primary ExprCtx=NormalExpr Type=Variable Value="y"
Array/Compound/Indexing/Primary ExprCtx=NormalExpr Type=Bareword Value="1"
Pipeline/Form
Compound/Indexing/Primary ExprCtx=CmdExpr Type=Bareword Value="echo"
Compound/Indexing/Primary ExprCtx=NormalExpr Type=Bareword Value="done"
Redir Mode=Write RightIsFd=false
Compound/Indexing/Primary ExprCtx=NormalExpr Type=Bareword Value="/redir-dest"
`),
}
func TestPPrintAST(t *testing.T) {
tt.Test(t, tt.Fn("PPrintAST (to string)", func(n Node) string {
var b strings.Builder
pprintAST(n, &b)
return b.String()
}), pprintASTTests)
}
var pprintParseTreeTests = tt.Table{
tt.Args(n).Rets(
`Chunk "ls $x[0]$y...redir-dest" 0-36
Pipeline/Form "ls $x[0]$y[1]" 0-13
Compound/Indexing/Primary "ls" 0-2
Sep " " 2-3
Compound "$x[0]$y[1]" 3-13
Indexing "$x[0]" 3-8
Primary "$x" 3-5
Sep "[" 5-6
Array/Compound/Indexing/Primary "0" 6-7
Sep "]" 7-8
Indexing "$y[1]" 8-13
Primary "$y" 8-10
Sep "[" 10-11
Array/Compound/Indexing/Primary "1" 11-12
Sep "]" 12-13
Sep ";" 13-14
Pipeline/Form "echo done >/redir-dest" 14-36
Compound/Indexing/Primary "echo" 14-18
Sep " " 18-19
Compound/Indexing/Primary "done" 19-23
Sep " " 23-24
Redir ">/redir-dest" 24-36
Sep ">" 24-25
Compound/Indexing/Primary "/redir-dest" 25-36
`),
}
func TestPPrintParseTree(t *testing.T) {
tt.Test(t, tt.Fn("PPrintParseTree (to string)", func(n Node) string {
var b strings.Builder
pprintParseTree(n, &b)
return b.String()
}), pprintParseTreeTests)
}
func mustParse(src string) Node {
tree, err := Parse(SourceForTest(src), Config{})
if err != nil {
panic(err)
}
return tree.Root
}