Sha256: 7da4c12f9cd514f240dd82ce28434c9f11f75f04725edeaa46e411216bda084b

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

describe Gobstones::Parser, "if statements" do

  describe "if" do

    it "should parse a statement with a simple boolean and an empty block" do
      if_cmd = IfCmd.new True.new, CmdBlock.empty

      expect('if (True) {}').to be_parsed_as(:command).and_return(if_cmd)
      expect('if (True) {
      }').to be_parsed_as(:command).and_return(if_cmd)
      expect('if (True)
        {}').to be_parsed_as(:command).and_return(if_cmd)
    end

    it "should parse a statement with a simple boolean and a block with commands" do
      cmd_block = CmdBlock.new [Poner.new(Verde.new), Skip.new]
      if_cmd = IfCmd.new False.new, cmd_block

      expect('if(False){Poner(Verde); Skip}').
        to be_parsed_as(:command).and_return(if_cmd)
    end

    it "should parse a statement with a complex boolean expression" do
      and_expr = And.new VarName.new('a'), False.new
      exp = Or.new PuedeMover.new(Norte.new), ParenthesesExpr.new(and_expr)
      if_cmd = IfCmd.new exp, CmdBlock.empty

      expect('if (puedeMover(Norte) || (a && False)) {}').
        to be_parsed_as(:command).and_return(if_cmd)
    end

  end

  describe "if-else" do

    it "should parse a statement with an else block" do
      else_block = CmdBlock.new [Mover.new(Norte.new)]
      if_else_cmd = IfElseCmd.new False.new, CmdBlock.empty, else_block

      expect('if (False) { } else { Mover(Norte) }').
        to be_parsed_as(:command).and_return(if_else_cmd)
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gobstones-0.0.1.1 spec/parser/if_command_spec.rb