Sha256: 11b57e5817577d21ec2d67ec23d52421d212cdfc7612539e6f90b32955f72951

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

describe Gobstones::Parser, "function definitions" do

  it "should parse a function without args and a single return" do
    args = VarTuple.new []
    func_return = ReturnFromFunction.new [42.to_gbs_num]

    func_def = Function.new 'just42', args, CmdBlock.new([]), func_return

    expect('function just42() { return (42) }').
      to be_parsed_as(:definition).and_return(func_def)
  end

  it "should parse a function with some args" do
    first_arg = VarName.new 'firstArg'
    second_arg = VarName.new 'secondArg'
    third_arg = VarName.new 'thirdArg'
    args = VarTuple.new [first_arg, second_arg, third_arg]
    body =
    return_st = ReturnFromFunction.new [Verde.new, PuedeMover.new(Norte.new)]
    func_def = Function.new 'myCoolFunction', args, CmdBlock.new([]), return_st

    expect('function myCoolFunction (firstArg, secondArg, thirdArg) {
  return (Verde, puedeMover(Norte))
}').to be_parsed_as(:definition).and_return(func_def)
  end

  it "should parse a function with some statements" do
    args = VarTuple.new [VarName.new('arg')]
    body = CmdBlock.new [Poner.new(Verde.new)]
    return_st = ReturnFromFunction.new [True.new]
    func_def = Function.new 'myFunc', args, body, return_st

    expect('function myFunc(arg)
{
  Poner(Verde)
  return (True)
}').to be_parsed_as(:definition).and_return(func_def)
  end

  it "should not parse a function without a valid identifier" do
    expect('function MyWrongFunc() { return(True) }').
      to be_parsed_as(:definition).and_fail
  end

  it "should not parse a function without a return statement" do
    expect('function myFuncWithoutReturn() { }').
      to be_parsed_as(:definition).and_fail
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

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