func Test_SequenceAction_create(t *testing.T) { rt := &Runtime{} action := NewSequenceAction() assert.Equal(t, 0, len(action.subactions)) // Execute() on an empty SequenceAction does nothing, silently assert.Nil(t, action.Execute(rt)) // action 1 is a bare string: "ls -lR foo/bar" cmd := dsl.NewASTString("\"ls -lR foo/bar\"") action.AddCommand(cmd) // action 2: a = "foo" assign := dsl.NewASTAssignment( "a", dsl.NewASTString("foo")) action.AddAssignment(assign) // action 3: remove("*.o") fcall := dsl.NewASTFunctionCall( dsl.NewASTString("remove"), []dsl.ASTExpression{dsl.NewASTString("\"*.c\"")}) action.AddFunctionCall(fcall) assert.Equal(t, 3, len(action.subactions)) assert.Equal(t, "ls -lR foo/bar", action.subactions[0].(*CommandAction).raw.ValueString()) }
func Test_assign(t *testing.T) { // AST for a = "foo" node := dsl.NewASTAssignment("a", stringnode("foo")) rt := minimalRuntime() errs := rt.assign(node) assert.Equal(t, 0, len(errs)) expect := types.MakeFuString("foo") assertIn(t, rt.Namespace(), "a", expect) // AST for a = foo (another variable, to provoke an error) node = dsl.NewASTAssignment("b", dsl.NewASTName("foo")) errs = rt.assign(node) assert.Equal(t, "name not defined: 'foo'", errs[0].Error()) _, ok := rt.Lookup("b") assert.False(t, ok) }