spec/matchers/parse_matcher.rb in gobstones-0.0.2 vs spec/matchers/parse_matcher.rb in gobstones-0.0.3

- old
+ new

@@ -2,29 +2,28 @@ require 'gobstones/lang/program' PARSER = Gobstones::Parser::TreetopParser.new RSpec::Matchers.define :be_parsed_as do |grammar_elem| - chain :and_fail do @expect_parser_results = false end chain :and_return do |expected| @expect_parser_results = true @expected = expected end match do |actual| - valid_nodes = [:program, :definition, :main, :expression, :command, :var_tuple] + valid_nodes = %i[program definition main expression command var_tuple] fail 'wrong expectation' if @expect_parser_results.nil? fail 'grammar elem not supported' unless valid_nodes.include?(grammar_elem) begin parse send("#{grammar_elem}_code_to_program", actual) @value == send("#{grammar_elem}_node_to_program", @expected) - rescue Gobstones::Parser::ParseError => e + rescue Gobstones::Parser::ParseError !@expect_parser_results end end def program_code_to_program(code) @@ -38,46 +37,45 @@ def main_code_to_program(code) code end def main_node_to_program(node) - Program.new no_definitions, node + Program.new(no_definitions, node) end def definition_code_to_program(code) "#{code}\nprocedure Main() {}" end def definition_node_to_program(node) - Program.new [node], Main.new(empty_body, no_return_statement) + Program.new([node], Main.new(empty_body, no_return_statement)) end def expression_code_to_program(code) "procedure Main() { x := #{code} }" end def expression_node_to_program(node) - assign = SingleAssignment.new 'x'.to_var_name, node - main_node_to_program Main.new(CommandBlock.new([assign]), no_return_statement) + assign = SingleAssignment.new('x'.to_var_name, node) + main_node_to_program(Main.new(CommandBlock.with_just(assign), no_return_statement)) end def command_code_to_program(code) "procedure Main() { #{code} }" end def command_node_to_program(node) - main_node_to_program Main.new(CommandBlock.new([node]), no_return_statement) + main_node_to_program(Main.new(CommandBlock.with_just(node), no_return_statement)) end def var_tuple_code_to_program(code) "procedure Main() { return #{code} }" end def var_tuple_node_to_program(node) - Program.new no_definitions, Main.new(empty_body, ReturnFromMain.new(node)) + Program.new(no_definitions, Main.new(empty_body, ReturnFromMain.new(node))) end def parse(code) - @value = PARSER.parse code + @value = PARSER.parse(code) end - end