package shell import ( "bufio" "strings" "testing" "github.com/stretchr/testify/suite" ) type SubshellTest struct { suite.Suite } func (t *SubshellTest) TestParse() { parser := &BaseParser{&SubshellParameters{}} reader := bufio.NewReader(strings.NewReader("(echo hello world!)")) iterator, err := NewCharIterator(reader) t.NoError(err) token, err := parser.Parse(iterator, &CharCollection{}) t.NoError(err) t.IsType(&Subshell{}, token) t.IsType(&Statement{}, token.Tokens()[0]) t.Equal(1, len(token.Tokens())) statement := token.Tokens()[0] t.IsType(&Word{}, statement.Tokens()[0]) t.IsType(&Word{}, statement.Tokens()[2]) t.IsType(&Word{}, statement.Tokens()[4]) t.Equal(5, len(statement.Tokens())) t.Equal("echo", statement.Tokens()[0].String()) t.Equal("hello", statement.Tokens()[2].String()) t.Equal("world!", statement.Tokens()[4].String()) } func (t *SubshellTest) TestParseMultipleStatements() { parser := &BaseParser{&SubshellParameters{}} reader := bufio.NewReader(strings.NewReader("(echo hello world!; echo tramp_exit_code $?)")) iterator, err := NewCharIterator(reader) t.NoError(err) token, err := parser.Parse(iterator, &CharCollection{}) t.NoError(err) t.Equal(2, len(token.Tokens())) t.IsType(&Subshell{}, token) t.IsType(&Statement{}, token.Tokens()[0]) t.IsType(&Statement{}, token.Tokens()[1]) } func TestSubshellTest(t *testing.T) { suite.Run(t, new(SubshellTest)) }