require_relative "helper" class TestFunctionDefinition < MiniTest::Test # include the magic (setup and parse -> test method translation), see there include ParserHelper def test_simplest_function @string_input = <{:name=>"foo"}, :parmeter_list=>[{:parmeter=>{:name=>"x"}}], :expressions=>[{:integer=>"5"}], :end=>"end"} @transform_output = Ast::FunctionExpression.new('foo', [Ast::NameExpression.new('x')], [Ast::IntegerExpression.new(5)]) @parser = @parser.function_definition end def test_function_assignment @string_input = <{:name=>"foo"}, :parmeter_list=>[{:parmeter=>{:name=>"x"}}], :expressions=>[{:l=>{:name=>"abba"}, :o=>"= ", :r=>{:integer=>"5"}}], :end=>"end"} @transform_output = Ast::FunctionExpression.new(:foo, [Ast::NameExpression.new("x")] , [Ast::OperatorExpression.new("=", Ast::NameExpression.new("abba"),Ast::IntegerExpression.new(5))] ) @parser = @parser.function_definition end def test_function_if @string_input = <{:name=>"ofthen"}, :parmeter_list=>[{:parmeter=>{:name=>"n"}}], :expressions=>[ {:if=>"if", :conditional=>{:integer=>"0"}, :if_true=>{:expressions=>[{:integer=>"42"}], :else=>"else"}, :if_false=>{:expressions=>[{:integer=>"667"}], :end=>"end"}}], :end=>"end"} @transform_output = Ast::FunctionExpression.new(:ofthen, [Ast::NameExpression.new("n")] , [Ast::ConditionalExpression.new(Ast::IntegerExpression.new(0), [Ast::IntegerExpression.new(42)],[Ast::IntegerExpression.new(667)] )] ) @parser = @parser.function_definition end def test_function_while @string_input = <