gobstones 0.0.1.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -3
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +1 -1
  5. data/CHANGELOG +22 -2
  6. data/Gemfile +3 -3
  7. data/Gemfile.lock +32 -27
  8. data/bin/gobstones +1 -1
  9. data/examples/.gitkeep +0 -0
  10. data/gobstones.gemspec +2 -2
  11. data/lib/gobstones/cli/board_template +1 -1
  12. data/lib/gobstones/cli/printer.rb +1 -1
  13. data/lib/gobstones/cli/runner.rb +8 -2
  14. data/lib/gobstones/extensions/all.rb +2 -1
  15. data/lib/gobstones/extensions/boolean.rb +1 -1
  16. data/lib/gobstones/extensions/fixnum.rb +1 -1
  17. data/lib/gobstones/extensions/string.rb +9 -0
  18. data/lib/gobstones/lang/all.rb +1 -1
  19. data/lib/gobstones/lang/commands/all.rb +3 -2
  20. data/lib/gobstones/lang/commands/boom_cmd.rb +6 -3
  21. data/lib/gobstones/lang/commands/command_block.rb +1 -1
  22. data/lib/gobstones/lang/commands/conditional_cmd.rb +5 -1
  23. data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +1 -1
  24. data/lib/gobstones/lang/commands/mover_cmd.rb +4 -2
  25. data/lib/gobstones/lang/commands/multiple_assignment.rb +35 -0
  26. data/lib/gobstones/lang/commands/poner_cmd.rb +8 -4
  27. data/lib/gobstones/lang/commands/procedure_call.rb +1 -9
  28. data/lib/gobstones/lang/commands/repeat_with_cmd.rb +10 -6
  29. data/lib/gobstones/lang/commands/sacar_cmd.rb +9 -7
  30. data/lib/gobstones/lang/commands/{assignments.rb → single_assignment.rb} +5 -3
  31. data/lib/gobstones/lang/commands/skip_cmd.rb +2 -2
  32. data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +1 -1
  33. data/lib/gobstones/lang/commands/while_cmd.rb +1 -1
  34. data/lib/gobstones/lang/definitions/all.rb +1 -1
  35. data/lib/gobstones/lang/definitions/definition.rb +47 -5
  36. data/lib/gobstones/lang/definitions/definition_call.rb +17 -5
  37. data/lib/gobstones/lang/definitions/function.rb +9 -0
  38. data/lib/gobstones/lang/definitions/main.rb +1 -1
  39. data/lib/gobstones/lang/definitions/no_return_statement.rb +7 -3
  40. data/lib/gobstones/lang/definitions/procedure.rb +5 -20
  41. data/lib/gobstones/lang/definitions/return_from_function.rb +12 -2
  42. data/lib/gobstones/lang/definitions/return_from_main.rb +5 -1
  43. data/lib/gobstones/lang/definitions/var_tuple.rb +13 -1
  44. data/lib/gobstones/lang/expressions/all.rb +1 -1
  45. data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +1 -1
  46. data/lib/gobstones/lang/expressions/boolean_expressions.rb +3 -2
  47. data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +17 -0
  48. data/lib/gobstones/lang/expressions/function_call.rb +1 -1
  49. data/lib/gobstones/lang/expressions/one_arg_expression.rb +16 -4
  50. data/lib/gobstones/lang/expressions/primitive_functions.rb +18 -12
  51. data/lib/gobstones/lang/expressions/two_arg_expression.rb +7 -3
  52. data/lib/gobstones/lang/expressions/type_bound_functions.rb +1 -1
  53. data/lib/gobstones/lang/expressions/var_name.rb +9 -3
  54. data/lib/gobstones/lang/literals/all.rb +1 -1
  55. data/lib/gobstones/lang/literals/colors.rb +1 -1
  56. data/lib/gobstones/lang/literals/literal.rb +31 -21
  57. data/lib/gobstones/lang/literals/number.rb +1 -1
  58. data/lib/gobstones/lang/program.rb +13 -4
  59. data/lib/gobstones/modules/equal_by_class.rb +1 -1
  60. data/lib/gobstones/parser/ast/ast.rb +12 -8
  61. data/lib/gobstones/parser/grammar/gobstones.treetop +4 -4
  62. data/lib/gobstones/parser/parse_error.rb +1 -1
  63. data/lib/gobstones/runner/all.rb +1 -2
  64. data/lib/gobstones/runner/board.rb +13 -4
  65. data/lib/gobstones/runner/cell.rb +10 -0
  66. data/lib/gobstones/runner/errors/all.rb +1 -1
  67. data/lib/gobstones/runner/errors/definition_not_found_error.rb +1 -1
  68. data/lib/gobstones/runner/execution_context.rb +66 -16
  69. data/lib/gobstones/runner/head.rb +17 -3
  70. data/spec/gobstones_lang_test_objects.rb +75 -0
  71. data/spec/lang/commands/boom_cmd_spec.rb +3 -3
  72. data/spec/lang/commands/cmd_block_spec.rb +14 -14
  73. data/spec/lang/commands/if_cmd_spec.rb +21 -20
  74. data/spec/lang/commands/ir_al_origen_cmd_spec.rb +3 -3
  75. data/spec/lang/commands/mover_cmd_spec.rb +12 -14
  76. data/spec/lang/commands/multiple_assignment_spec.rb +37 -0
  77. data/spec/lang/commands/poner_cmd_spec.rb +13 -14
  78. data/spec/lang/commands/procedure_call_spec.rb +19 -24
  79. data/spec/lang/commands/procedure_spec.rb +32 -36
  80. data/spec/lang/commands/repeat_with_cmd_spec.rb +39 -20
  81. data/spec/lang/commands/sacar_cmd_spec.rb +17 -16
  82. data/spec/lang/commands/single_assignment_spec.rb +13 -0
  83. data/spec/lang/commands/skip_cmd_spec.rb +2 -2
  84. data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +7 -6
  85. data/spec/lang/commands/while_cmd_spec.rb +21 -15
  86. data/spec/lang/definitions/no_return_statement_spec.rb +10 -0
  87. data/spec/lang/definitions/var_tuple_spec.rb +16 -0
  88. data/spec/lang/expressions/arithmetic_expressions_spec.rb +15 -15
  89. data/spec/lang/expressions/boolean_expressions_spec.rb +35 -25
  90. data/spec/lang/expressions/comparison_expressions_spec.rb +25 -28
  91. data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +11 -0
  92. data/spec/lang/expressions/function_call_spec.rb +29 -0
  93. data/spec/lang/expressions/primitive_functions_spec.rb +60 -62
  94. data/spec/lang/expressions/type_bound_functions_spec.rb +13 -13
  95. data/spec/lang/expressions/var_name_spec.rb +20 -8
  96. data/spec/lang/literals/booleans_spec.rb +5 -7
  97. data/spec/lang/literals/colors_spec.rb +4 -4
  98. data/spec/lang/literals/directions_spec.rb +12 -12
  99. data/spec/lang/literals/numbers_spec.rb +2 -2
  100. data/spec/matchers/parse_matcher.rb +9 -10
  101. data/spec/parser/arithmetic_expressions_spec.rb +19 -19
  102. data/spec/parser/assignments_spec.rb +24 -10
  103. data/spec/parser/boolean_expressions_spec.rb +18 -18
  104. data/spec/parser/command_block_spec.rb +17 -19
  105. data/spec/parser/data_types_spec.rb +23 -23
  106. data/spec/parser/function_calls_spec.rb +13 -12
  107. data/spec/parser/function_definitions_spec.rb +13 -18
  108. data/spec/parser/gobstones_program_spec.rb +15 -15
  109. data/spec/parser/if_command_spec.rb +13 -12
  110. data/spec/parser/main_definition_spec.rb +12 -12
  111. data/spec/parser/nested_expressions_spec.rb +16 -20
  112. data/spec/parser/primitive_expressions_spec.rb +27 -33
  113. data/spec/parser/procedure_calls_spec.rb +12 -12
  114. data/spec/parser/procedure_definitions_spec.rb +10 -16
  115. data/spec/parser/repeat_with_command_spec.rb +7 -10
  116. data/spec/parser/simple_commands_spec.rb +10 -10
  117. data/spec/parser/treetop_parser_spec.rb +11 -10
  118. data/spec/parser/var_tuple_spec.rb +7 -11
  119. data/spec/parser/while_command_spec.rb +9 -9
  120. data/spec/runner/board_spec.rb +23 -27
  121. data/spec/runner/cell_spec.rb +34 -38
  122. data/spec/runner/execution_context_spec.rb +38 -24
  123. data/spec/runner/head_spec.rb +54 -63
  124. data/spec/spec_helper.rb +4 -1
  125. data/spec/type_checker_spec.rb +13 -13
  126. metadata +33 -18
  127. data/lib/gobstones/lang/expressions/parentheses_expression.rb +0 -13
  128. data/spec/lang/commands/assignments_spec.rb +0 -13
@@ -1,34 +1,34 @@
1
1
  describe Gobstones::Parser, "arithmetic expressions" do
2
2
 
3
- let(:a) { VarName.new 'a' }
4
- let(:b) { VarName.new 'b' }
5
- let(:c) { VarName.new 'c' }
6
- let(:d) { VarName.new 'd' }
3
+ let(:a) { 'a'.to_var_name }
4
+ let(:b) { 'b'.to_var_name }
5
+ let(:c) { 'c'.to_var_name }
6
+ let(:d) { 'd'.to_var_name }
7
7
 
8
8
  describe "addition and subtraction" do
9
9
 
10
- it "should parse a + expression" do
10
+ it "parses a + expression" do
11
11
  sum = Add.new a, b
12
12
 
13
13
  expect('a+b').to be_parsed_as(:expression).and_return(sum)
14
14
  expect('a + b').to be_parsed_as(:expression).and_return(sum)
15
15
  end
16
16
 
17
- it "should parse a nested + expression, associating to left" do
17
+ it "parses a nested + expression, associating to left" do
18
18
  sum_ab = Add.new a, b
19
19
  total = Add.new sum_ab, c
20
20
 
21
21
  expect('a + b + c').to be_parsed_as(:expression).and_return(total)
22
22
  end
23
23
 
24
- it "should parse a - expression" do
24
+ it "parses a - expression" do
25
25
  sub = Sub.new a, b
26
26
 
27
27
  expect('a-b').to be_parsed_as(:expression).and_return(sub)
28
28
  expect('a - b').to be_parsed_as(:expression).and_return(sub)
29
29
  end
30
30
 
31
- it "should parse a nested expression with + and -, associating to left" do
31
+ it "parses a nested expression with + and -, associating to left" do
32
32
  sum_ab = Add.new a, b
33
33
  total = Sub.new sum_ab, c
34
34
 
@@ -39,42 +39,42 @@ describe Gobstones::Parser, "arithmetic expressions" do
39
39
 
40
40
  describe "multiplication, division, modulus and power" do
41
41
 
42
- it "should parse a * expression" do
42
+ it "parses a * expression" do
43
43
  mul = Mul.new a, b
44
44
 
45
45
  expect('a*b').to be_parsed_as(:expression).and_return(mul)
46
46
  expect('a * b').to be_parsed_as(:expression).and_return(mul)
47
47
  end
48
48
 
49
- it "should parse a nested * expression" do
49
+ it "parses a nested * expression" do
50
50
  mul_ab = Mul.new a, b
51
51
  total = Mul.new mul_ab, c
52
52
 
53
53
  expect('a * b * c').to be_parsed_as(:expression).and_return(total)
54
54
  end
55
55
 
56
- it "should parse a div expression" do
56
+ it "parses a div expression" do
57
57
  div = Div.new a, b
58
58
 
59
59
  expect('a div b').to be_parsed_as(:expression).and_return(div)
60
60
  expect('a div b').to be_parsed_as(:expression).and_return(div)
61
61
  end
62
62
 
63
- it "should parse a mod expression" do
63
+ it "parses a mod expression" do
64
64
  mod = Mod.new a, b
65
65
 
66
66
  expect('a mod b').to be_parsed_as(:expression).and_return(mod)
67
67
  expect('a mod b').to be_parsed_as(:expression).and_return(mod)
68
68
  end
69
69
 
70
- it "should parse a power expression" do
70
+ it "parses a power expression" do
71
71
  pow = Pow.new a, b
72
72
 
73
73
  expect('a^b').to be_parsed_as(:expression).and_return(pow)
74
74
  expect('a ^ b').to be_parsed_as(:expression).and_return(pow)
75
75
  end
76
76
 
77
- it "should parse a nested power expression, associating left" do
77
+ it "parses a nested power expression, associating left" do
78
78
  pow_ab = Pow.new a, b
79
79
  pow_abc = Pow.new pow_ab, c
80
80
  pow_abcd = Pow.new pow_abc, d
@@ -86,7 +86,7 @@ describe Gobstones::Parser, "arithmetic expressions" do
86
86
 
87
87
  describe "complex arithmetic expressions (without parentheses)" do
88
88
 
89
- it "should parse using precedence of + and - over *" do
89
+ it "parses using precedence of + and - over *" do
90
90
  mul = Mul.new b, c
91
91
  sub = Sub.new a, mul
92
92
  add = Add.new sub, d
@@ -94,7 +94,7 @@ describe Gobstones::Parser, "arithmetic expressions" do
94
94
  expect('a - b * c + d').to be_parsed_as(:expression).and_return(add)
95
95
  end
96
96
 
97
- it "should parse using precedence of * over div and mod" do
97
+ it "parses using precedence of * over div and mod" do
98
98
  div = Div.new a, b
99
99
  mod = Mod.new a, c
100
100
  inner_mul = Mul.new div, mod
@@ -104,7 +104,7 @@ describe Gobstones::Parser, "arithmetic expressions" do
104
104
  to be_parsed_as(:expression).and_return(outer_mul)
105
105
  end
106
106
 
107
- it "should parse using precedence of div and mod over ^" do
107
+ it "parses using precedence of div and mod over ^" do
108
108
  pow_ab = Pow.new a, b
109
109
  pow_cd = Pow.new c, d
110
110
  div = Div.new pow_ab, pow_cd
@@ -112,7 +112,7 @@ describe Gobstones::Parser, "arithmetic expressions" do
112
112
  expect('a^b div c^d').to be_parsed_as(:expression).and_return(div)
113
113
  end
114
114
 
115
- it "should parse an expression with all kind of operators" do
115
+ it "parses an expression with all kind of operators" do
116
116
  pow = Pow.new b, c
117
117
  mod = Mod.new a, pow
118
118
  div = Div.new d, b
@@ -126,4 +126,4 @@ describe Gobstones::Parser, "arithmetic expressions" do
126
126
 
127
127
  end
128
128
 
129
- end
129
+ end
@@ -2,8 +2,8 @@ describe Gobstones::Parser, "assignments" do
2
2
 
3
3
  describe "single" do
4
4
 
5
- it "should parse a valid assignment with a simple expression" do
6
- assignment = SingleAssignment.new VarName.new('myDir'), Norte.new
5
+ it "parses a valid assignment with a simple expression" do
6
+ assignment = SingleAssignment.new 'myDir'.to_var_name, norte
7
7
 
8
8
  expect('myDir:=Norte').
9
9
  to be_parsed_as(:command).and_return(assignment)
@@ -11,20 +11,20 @@ describe Gobstones::Parser, "assignments" do
11
11
  to be_parsed_as(:command).and_return(assignment)
12
12
  end
13
13
 
14
- it "should parse a valid assignment with a complex expression" do
15
- a, b = VarName.new('a'), VarName.new('b')
16
- exp = Or.new False.new, ParenthesesExpr.new(And.new(a, b))
17
- assignment = SingleAssignment.new VarName.new('myVar'), exp
14
+ it "parses a valid assignment with a complex expression" do
15
+ a, b = 'a'.to_var_name, 'b'.to_var_name
16
+ exp = Or.new false_value, EnclosedByParensExpression.new(And.new(a, b))
17
+ assignment = SingleAssignment.new 'myVar'.to_var_name, exp
18
18
 
19
19
  expect('myVar := False || (a && b)').
20
20
  to be_parsed_as(:command).and_return(assignment)
21
21
  end
22
22
 
23
- it "should not parse with an invalid var name" do
23
+ it "does not parse with an invalid var name" do
24
24
  expect('MyWrongVar := a').to be_parsed_as(:command).and_fail
25
25
  end
26
26
 
27
- it "should not parse with a command on the right side" do
27
+ it "does not parse with a command on the right side" do
28
28
  expect('myVar := Skip').to be_parsed_as(:command).and_fail
29
29
  end
30
30
 
@@ -32,8 +32,22 @@ describe Gobstones::Parser, "assignments" do
32
32
 
33
33
  describe "multiple" do
34
34
 
35
- # TODO implement
35
+ context "failures" do
36
+
37
+ it 'fails if the expression on the left side is not a var tuple' do
38
+ expect('myVar = funcCall()').to be_parsed_as(:command).and_fail
39
+ end
40
+
41
+ end
42
+
43
+ it 'parses a valid assignment with a function call on the right side' do
44
+ var_tuple = VarTuple.new ['aColor'.to_var_name, 'aDirection'.to_var_name]
45
+ func_call = FunctionCall.new 'myFunction', []
46
+ assignment = MultipleAssignment.new var_tuple, func_call
47
+ expect('(aColor, aDirection) := myFunction()').
48
+ to be_parsed_as(:command).and_return(assignment)
49
+ end
36
50
 
37
51
  end
38
52
 
39
- end
53
+ end
@@ -1,48 +1,48 @@
1
1
  describe Gobstones::Parser, "boolean expressions" do
2
2
 
3
- let(:a) { VarName.new 'a' }
4
- let(:b) { VarName.new 'b' }
5
- let(:c) { VarName.new 'c' }
6
- let(:d) { VarName.new 'd' }
3
+ let(:a) { 'a'.to_var_name }
4
+ let(:b) { 'b'.to_var_name }
5
+ let(:c) { 'c'.to_var_name }
6
+ let(:d) { 'd'.to_var_name }
7
7
 
8
8
  describe "relational operators" do
9
9
 
10
- it "should parse an expression with ==" do
10
+ it "parses an expression with ==" do
11
11
  eq = Equal.new a, b
12
12
 
13
13
  expect('a==b').to be_parsed_as(:expression).and_return(eq)
14
14
  expect('a == b').to be_parsed_as(:expression).and_return(eq)
15
15
  end
16
16
 
17
- it "should parse an expression with /=" do
17
+ it "parses an expression with /=" do
18
18
  not_eq = NotEqual.new a, b
19
19
 
20
20
  expect('a/=b').to be_parsed_as(:expression).and_return(not_eq)
21
21
  expect('a /= b').to be_parsed_as(:expression).and_return(not_eq)
22
22
  end
23
23
 
24
- it "should parse an expression with <" do
24
+ it "parses an expression with <" do
25
25
  lt = LessThan.new a, b
26
26
 
27
27
  expect('a<b').to be_parsed_as(:expression).and_return(lt)
28
28
  expect('a < b').to be_parsed_as(:expression).and_return(lt)
29
29
  end
30
30
 
31
- it "should parse an expression with <=" do
31
+ it "parses an expression with <=" do
32
32
  le = LessEqual.new a, b
33
33
 
34
34
  expect('a<=b').to be_parsed_as(:expression).and_return(le)
35
35
  expect('a <= b').to be_parsed_as(:expression).and_return(le)
36
36
  end
37
37
 
38
- it "should parse an expression with >=" do
38
+ it "parses an expression with >=" do
39
39
  ge = GreaterEqual.new a, b
40
40
 
41
41
  expect('a>=b').to be_parsed_as(:expression).and_return(ge)
42
42
  expect('a >= b').to be_parsed_as(:expression).and_return(ge)
43
43
  end
44
44
 
45
- it "should parse an expression with >" do
45
+ it "parses an expression with >" do
46
46
  gt = GreaterThan.new a, b
47
47
 
48
48
  expect('a>b').to be_parsed_as(:expression).and_return(gt)
@@ -53,21 +53,21 @@ describe Gobstones::Parser, "boolean expressions" do
53
53
 
54
54
  describe "not, and, or" do
55
55
 
56
- it "should parse a not expression" do
56
+ it "parses a not expression" do
57
57
  exp = Equal.new a, b
58
58
  not_exp = Not.new exp
59
59
 
60
60
  expect('not a == b').to be_parsed_as(:expression).and_return(not_exp)
61
61
  end
62
62
 
63
- it "should parse an And expression" do
63
+ it "parses an And expression" do
64
64
  exp = And.new a, b
65
65
 
66
66
  expect('a&&b').to be_parsed_as(:expression).and_return(exp)
67
67
  expect('a && b').to be_parsed_as(:expression).and_return(exp)
68
68
  end
69
69
 
70
- it "should parse an Or expression" do
70
+ it "parses an Or expression" do
71
71
  exp = Or.new a, b
72
72
 
73
73
  expect('a||b').to be_parsed_as(:expression).and_return(exp)
@@ -76,28 +76,28 @@ describe Gobstones::Parser, "boolean expressions" do
76
76
 
77
77
  describe "nested" do
78
78
 
79
- it "should parse a nested || expression, associating right" do
79
+ it "parses a nested || expression, associating right" do
80
80
  inner_or = Or.new b, c
81
81
  outer_or = Or.new a, inner_or
82
82
 
83
83
  expect('a || b || c').to be_parsed_as(:expression).and_return(outer_or)
84
84
  end
85
85
 
86
- it "should parse a nested && expression, associating right" do
86
+ it "parses a nested && expression, associating right" do
87
87
  inner_and = And.new b, c
88
88
  outer_and = And.new a, inner_and
89
89
 
90
90
  expect('a && b && c').to be_parsed_as(:expression).and_return(outer_and)
91
91
  end
92
92
 
93
- it "|| should take precedence over &&, left" do
93
+ it "parses with || taking precedence over &&, left" do
94
94
  bc_and = And.new b, c
95
95
  abc_or = Or.new a, bc_and
96
96
 
97
97
  expect('a || b && c').to be_parsed_as(:expression).and_return(abc_or)
98
98
  end
99
99
 
100
- it "|| should take precedence over &&, right" do
100
+ it "parses with || taking precedence over &&, right" do
101
101
  ab_and = And.new a, b
102
102
  abc_or = Or.new ab_and, c
103
103
 
@@ -108,4 +108,4 @@ describe Gobstones::Parser, "boolean expressions" do
108
108
 
109
109
  end
110
110
 
111
- end
111
+ end
@@ -1,22 +1,20 @@
1
1
  describe Gobstones::Parser, "command blocks" do
2
2
 
3
- it "should parse an empty block" do
4
- cmd_block = CmdBlock.empty
5
-
6
- expect('{}').to be_parsed_as(:command).and_return(cmd_block)
7
- expect('{ }').to be_parsed_as(:command).and_return(cmd_block)
3
+ it "parses an empty block" do
4
+ expect('{}').to be_parsed_as(:command).and_return(CommandBlock.empty)
5
+ expect('{ }').to be_parsed_as(:command).and_return(CommandBlock.empty)
8
6
  end
9
7
 
10
- it "should parse a block with one simple cmd" do
11
- cmd_block = CmdBlock.new [Skip.new]
8
+ it "parses a block with one simple cmd" do
9
+ cmd_block = CommandBlock.new [Skip.new]
12
10
  expect('{ Skip }').to be_parsed_as(:command).and_return(cmd_block)
13
11
  end
14
12
 
15
- it "should parse a block with many simple commands" do
16
- first = Poner.new Verde.new
13
+ it "parses a block with many simple commands" do
14
+ first = Poner.new verde
17
15
  second = Boom.new "error"
18
- third = Mover.new Oeste.new
19
- cmd_block = CmdBlock.new [first, second, third]
16
+ third = Mover.new oeste
17
+ cmd_block = CommandBlock.new [first, second, third]
20
18
 
21
19
  expect('{
22
20
  Poner(Verde)
@@ -25,21 +23,21 @@ describe Gobstones::Parser, "command blocks" do
25
23
  }').to be_parsed_as(:command).and_return(cmd_block)
26
24
  end
27
25
 
28
- it "should allow ; between commands" do
29
- first = Poner.new Verde.new
30
- second = Boom.new "error"
31
- third = Mover.new Oeste.new
32
- cmd_block = CmdBlock.new [first, second, third]
26
+ it "allows semicolon between commands" do
27
+ first = Poner.new verde
28
+ second = Boom.new 'error'
29
+ third = Mover.new oeste
30
+ cmd_block = CommandBlock.new [first, second, third]
33
31
 
34
32
  expect('{Poner(Verde); BOOM("error");
35
33
  Mover(Oeste);
36
34
  }').to be_parsed_as(:command).and_return(cmd_block)
37
35
  end
38
36
 
39
- it "should parse a block with simple and complex commands" do
37
+ it "parses a block with simple and complex commands" do
40
38
  first = ProcedureCall.new 'Proc', []
41
- second = IfCmd.new True.new, CmdBlock.empty
42
- cmd_block = CmdBlock.new [first, second]
39
+ second = IfCmd.new true_value, empty_body
40
+ cmd_block = CommandBlock.new [first, second]
43
41
 
44
42
  expect('{
45
43
  Proc()
@@ -2,11 +2,11 @@ describe Gobstones::Parser, "data types" do
2
2
 
3
3
  describe "numbers" do
4
4
 
5
- it "should parse a positive number" do
5
+ it "parses a positive number" do
6
6
  expect('42').to be_parsed_as(:expression).and_return(42.to_gbs_num)
7
7
  end
8
8
 
9
- it "should parse a negative number" do
9
+ it "parses a negative number" do
10
10
  expect('-42').to be_parsed_as(:expression).and_return(-42.to_gbs_num)
11
11
  end
12
12
 
@@ -14,54 +14,54 @@ describe Gobstones::Parser, "data types" do
14
14
 
15
15
  describe "booleans" do
16
16
 
17
- it "should parse a true boolean" do
18
- expect('True').to be_parsed_as(:expression).and_return(True.new)
17
+ it "parses a true boolean" do
18
+ expect('True').to be_parsed_as(:expression).and_return(true_value)
19
19
  end
20
20
 
21
- it "should parse a false boolean" do
22
- expect('False').to be_parsed_as(:expression).and_return(False.new)
21
+ it "parses a false boolean" do
22
+ expect('False').to be_parsed_as(:expression).and_return(false_value)
23
23
  end
24
24
 
25
25
  end
26
26
 
27
27
  describe "colors" do
28
28
 
29
- it "should parse the 'Azul' color" do
30
- expect('Azul').to be_parsed_as(:expression).and_return(Azul.new)
29
+ it "parses the 'Azul' color" do
30
+ expect('Azul').to be_parsed_as(:expression).and_return(azul)
31
31
  end
32
32
 
33
- it "should parse the 'Negro' color" do
34
- expect('Negro').to be_parsed_as(:expression).and_return(Negro.new)
33
+ it "parses the 'Negro' color" do
34
+ expect('Negro').to be_parsed_as(:expression).and_return(negro)
35
35
  end
36
36
 
37
- it "should parse the 'Rojo' color" do
38
- expect('Rojo').to be_parsed_as(:expression).and_return(Rojo.new)
37
+ it "parses the 'Rojo' color" do
38
+ expect('Rojo').to be_parsed_as(:expression).and_return(rojo)
39
39
  end
40
40
 
41
- it "should parse the 'Verde' color" do
42
- expect('Verde').to be_parsed_as(:expression).and_return(Verde.new)
41
+ it "parses the 'Verde' color" do
42
+ expect('Verde').to be_parsed_as(:expression).and_return(verde)
43
43
  end
44
44
 
45
45
  end
46
46
 
47
47
  describe "directions" do
48
48
 
49
- it "should parse the 'Norte' direction" do
50
- expect('Norte').to be_parsed_as(:expression).and_return(Norte.new)
49
+ it "parses the 'Norte' direction" do
50
+ expect('Norte').to be_parsed_as(:expression).and_return(norte)
51
51
  end
52
52
 
53
- it "should parse the 'Este' direction" do
54
- expect('Este').to be_parsed_as(:expression).and_return(Este.new)
53
+ it "parses the 'Este' direction" do
54
+ expect('Este').to be_parsed_as(:expression).and_return(este)
55
55
  end
56
56
 
57
- it "should parse the 'Sur' direction" do
58
- expect('Sur').to be_parsed_as(:expression).and_return(Sur.new)
57
+ it "parses the 'Sur' direction" do
58
+ expect('Sur').to be_parsed_as(:expression).and_return(sur)
59
59
  end
60
60
 
61
- it "should parse the 'Oeste' direction" do
62
- expect('Oeste').to be_parsed_as(:expression).and_return(Oeste.new)
61
+ it "parses the 'Oeste' direction" do
62
+ expect('Oeste').to be_parsed_as(:expression).and_return(oeste)
63
63
  end
64
64
 
65
65
  end
66
66
 
67
- end
67
+ end