spec/lang/commands/procedure_spec.rb in gobstones-0.0.2 vs spec/lang/commands/procedure_spec.rb in gobstones-0.0.3
- old
+ new
@@ -1,63 +1,63 @@
-describe Procedure do
-
+RSpec.describe Procedure do
let(:context) { clean_context }
- it "executes its body and leaves state in the program context" do
- poner_cmd = Poner.new rojo
- body = CommandBlock.new [poner_cmd]
- procedure = Procedure.new 'MyProcedure', no_arguments, body
+ it 'executes its body and leaves state in the program context' do
+ poner_cmd = Poner.new(rojo)
+ body = CommandBlock.with_just(poner_cmd)
+ procedure = described_class.new('MyProcedure', no_arguments, body)
procedure.evaluate context
- expect(context.head.are_there_balls?(rojo)).to be true
+
+ expect_balls(rojo)
end
- it "fails getting a variable which is in the outer context" do
+ it 'fails getting a variable which is in the outer context' do
var_name = 'var'.to_var_name
context.set var_name, verde
- poner_cmd = Poner.new var_name
- body = CommandBlock.new [poner_cmd]
- procedure = Procedure.new 'MyProcedure', no_arguments, body
+ poner_cmd = Poner.new(var_name)
+ body = CommandBlock.with_just(poner_cmd)
+ procedure = described_class.new('MyProcedure', no_arguments, body)
+
expect { procedure.evaluate context }.to raise_error(UndefinedVariableError)
end
- it "sets arguments in the new context so they can be used" do
+ it 'sets arguments in the new context so they can be used' do
a_color = 'a_color'.to_var_name
a_direction = 'a_direction'.to_var_name
- args = VarTuple.new [a_color, a_direction]
- mover_cmd = Mover.new a_direction
- poner_cmd = Poner.new a_color
- body = CommandBlock.new [mover_cmd, poner_cmd]
- procedure = Procedure.new 'MyProc', args, body
+ args = VarTuple.new([a_color, a_direction])
+ mover_cmd = Mover.new(a_direction)
+ poner_cmd = Poner.new(a_color)
+ body = CommandBlock.new([mover_cmd, poner_cmd])
+ procedure = described_class.new('MyProc', args, body)
procedure.evaluate context, [negro, norte]
- expect(context.head.are_there_balls?(negro)).to be true
+ expect_balls(negro)
expect(context.head.y_pos).to eq(1)
end
- it "does not set arguments as var names in outer context" do
+ it 'does not set arguments as var names in outer context' do
a_direction = 'a_direction'.to_var_name
- args = VarTuple.new [a_direction]
- procedure = Procedure.new 'MyProc', args, empty_body
+ args = VarTuple.new([a_direction])
+ procedure = described_class.new('MyProc', args, empty_body)
procedure.evaluate context, [oeste]
- expect(context.has_variable_named?('a_direction')).to be false
+ expect(context.has_variable_named?('a_direction')).to be(false)
end
- it "fails if it is executed with more arguments than expected" do
- procedure = Procedure.new 'MyProcedure', no_arguments, empty_body
+ it 'fails if it is executed with more arguments than expected' do
+ procedure = described_class.new('MyProcedure', no_arguments, empty_body)
+
error_message = "Wrong number of arguments in procedure 'MyProcedure': expected 0, got 1"
- expect { procedure.evaluate context, [norte] }
- .to raise_error(WrongArgumentsError, error_message)
+ expect { procedure.evaluate context, [norte] }.to raise_error(WrongArgumentsError, error_message)
end
- it "fails if it is executed with less arguments than expected" do
- args = VarTuple.new ['arg1'.to_var_name, 'arg2'.to_var_name]
- procedure = Procedure.new 'MyProcedure2', args, empty_body
+ it 'fails if it is executed with less arguments than expected' do
+ args = VarTuple.with_names(%w[arg1 arg2])
+ procedure = described_class.new('MyProcedure2', args, empty_body)
+
error_message = "Wrong number of arguments in procedure 'MyProcedure2': expected 2, got 1"
- expect { procedure.evaluate context, [verde] }
- .to raise_error(WrongArgumentsError, error_message)
+ expect { procedure.evaluate context, [verde] }.to raise_error(WrongArgumentsError, error_message)
end
-
end