cauldron 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -1
- data/.rspec +1 -0
- data/Gemfile +16 -9
- data/Gemfile.lock +134 -64
- data/README.md +26 -0
- data/Rakefile +24 -99
- data/build_sandbox.rb +41 -0
- data/cucumber.yml +8 -0
- data/features/chop.feature +23 -0
- data/features/create_dynamic_statements.feature +14 -0
- data/features/generate_known_solution.feature +42 -0
- data/features/generate_new_statement.feature +20 -0
- data/features/step_definitions/cauldron_steps.rb +47 -0
- data/features/support/env.rb +1 -1
- data/features/use_existing_statements.feature +23 -0
- data/lib/cauldron.rb +41 -5
- data/lib/cauldron/actualized_composite.rb +35 -0
- data/lib/cauldron/array_collect_template/default.rb +95 -0
- data/lib/cauldron/array_collect_template/template.rb +57 -0
- data/lib/cauldron/builder.rb +60 -0
- data/lib/cauldron/caret.rb +50 -0
- data/lib/cauldron/dynamic_operator.rb +90 -0
- data/lib/cauldron/dynamic_operator_module.rb +140 -0
- data/lib/cauldron/example.rb +18 -0
- data/lib/cauldron/example_set.rb +36 -0
- data/lib/cauldron/histories.rb +53 -0
- data/lib/cauldron/history.rb +34 -0
- data/lib/cauldron/if_relationship.rb +4 -6
- data/lib/cauldron/number_addition_template/add_five.rb +71 -0
- data/lib/cauldron/number_addition_template/template.rb +56 -0
- data/lib/cauldron/operator.rb +62 -0
- data/lib/cauldron/operator/array_reverse_operator.rb +160 -0
- data/lib/cauldron/operator/concat_operator.rb +72 -0
- data/lib/cauldron/operator/hash_key_value_operator.rb +74 -0
- data/lib/cauldron/operator/numeric_operator.rb +115 -0
- data/lib/cauldron/operator/string_asterisk_operator.rb +131 -0
- data/lib/cauldron/operator/to_s_operator.rb +18 -0
- data/lib/cauldron/operator/var_collect_operator.rb +29 -0
- data/lib/cauldron/pot.rb +136 -26
- data/lib/cauldron/scope.rb +24 -0
- data/lib/cauldron/solution/composite.rb +236 -0
- data/lib/cauldron/solution/one.rb +49 -0
- data/lib/cauldron/statement_generator.rb +298 -0
- data/lib/cauldron/template_base.rb +14 -0
- data/lib/cauldron/tracer.rb +55 -0
- data/lib/cauldron/version.rb +1 -1
- data/lib/pry_tester.rb +76 -0
- data/ruby_to_sexp.rb +74 -0
- data/sandbox.rb +7 -0
- data/sexp_to_ruby.rb +150 -0
- data/spec/cauldron/actualized_composite_spec.rb +140 -0
- data/spec/cauldron/array_collect_template/default_spec.rb +41 -0
- data/spec/cauldron/builder_spec.rb +186 -0
- data/spec/cauldron/dynamic/add_number_template_spec.rb +30 -0
- data/spec/cauldron/dynamic_operator_spec.rb +416 -0
- data/spec/cauldron/example_set_spec.rb +49 -0
- data/spec/cauldron/example_spec.rb +33 -0
- data/spec/cauldron/histories_spec.rb +135 -0
- data/spec/cauldron/history_spec.rb +118 -0
- data/spec/cauldron/if_relationship_spec.rb +1 -1
- data/spec/cauldron/operator/array_reverse_operator_spec.rb +73 -0
- data/spec/cauldron/{concat_operator_spec.rb → operator/concat_operator_spec.rb} +30 -12
- data/spec/cauldron/operator/hash_key_value_operator_spec.rb +98 -0
- data/spec/cauldron/operator/numeric_operator_spec.rb +110 -0
- data/spec/cauldron/operator/string_asterisk_operator_spec.rb +196 -0
- data/spec/cauldron/operator/var_collect_operator_spec.rb +38 -0
- data/spec/cauldron/pot_spec.rb +176 -14
- data/spec/cauldron/solution/composite_spec.rb +421 -0
- data/spec/cauldron/solution/one_spec.rb +24 -0
- data/spec/cauldron/statement_generator_spec.rb +211 -0
- data/spec/cauldron/terminal_spec.rb +2 -2
- data/spec/spec_helper.rb +5 -1
- data/spec/support/code_matcher.rb +55 -0
- data/spec/support/include_instance_of_matcher.rb +9 -0
- data/spec/support/shared_examples_for_leaf_operators.rb +22 -0
- data/spec/support/shared_examples_for_operators.rb +23 -0
- data/syntax_spec.txt +2 -0
- metadata +104 -41
- data/README +0 -1
- data/README.rdoc +0 -19
- data/VERSION +0 -1
- data/features/cauldron_new_approach.feature +0 -46
- data/lib/cauldron/array_reverse_operator.rb +0 -39
- data/lib/cauldron/concat_operator.rb +0 -34
- data/lib/cauldron/numeric_operator.rb +0 -45
- data/lib/cauldron/relationship.rb +0 -5
- data/spec/cauldron/array_reverse_operator_spec.rb +0 -59
- data/spec/cauldron/numeric_operator_spec.rb +0 -70
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Cauldron
|
4
|
+
|
5
|
+
describe ExampleSet do
|
6
|
+
|
7
|
+
describe '#all?' do
|
8
|
+
|
9
|
+
context %q{contains example {:arguments => ['Mass'], :response => 'effect'}} do
|
10
|
+
|
11
|
+
context %q{with block {|x| x.response == 'effect'}} do
|
12
|
+
|
13
|
+
let(:example_set) do
|
14
|
+
Cauldron::ExampleSet.new(
|
15
|
+
[
|
16
|
+
Cauldron::Example.new({:arguments => ['Mass'], :response => 'effect'})
|
17
|
+
]
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'returns false' do
|
22
|
+
example_set.all? {|x| x.response == 'effect'}.should == true
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#scope' do
|
32
|
+
|
33
|
+
let(:example) { Cauldron::Example.new({:arguments => ['Mass'], :response => 'effect'}) }
|
34
|
+
|
35
|
+
let(:example_set) do
|
36
|
+
Cauldron::ExampleSet.new(
|
37
|
+
[ example ]
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'creates a new variables array' do
|
42
|
+
example_set.scope.variables.object_id.should_not === example.params.object_id
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Cauldron
|
4
|
+
|
5
|
+
describe Example do
|
6
|
+
|
7
|
+
describe '#params' do
|
8
|
+
|
9
|
+
let(:example) do
|
10
|
+
Cauldron::Example.new(
|
11
|
+
{ arguments: [["Pip", "Rowe"]], response: ["Pi", "Row"] }
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns ['var0']" do
|
16
|
+
example.params.should == ['var0']
|
17
|
+
end
|
18
|
+
|
19
|
+
context '#params has already been called' do
|
20
|
+
|
21
|
+
before(:each) { example.params }
|
22
|
+
|
23
|
+
it "returns ['var0']" do
|
24
|
+
example.params.should == ['var0']
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Cauldron
|
4
|
+
|
5
|
+
describe Histories do
|
6
|
+
|
7
|
+
describe '#insert_points' do
|
8
|
+
|
9
|
+
context 'has history with point [0]' do
|
10
|
+
|
11
|
+
let(:first_line_history) { Cauldron::History.new([{point: [0]}])}
|
12
|
+
|
13
|
+
let(:subject){
|
14
|
+
Cauldron::Histories.new([first_line_history])
|
15
|
+
}
|
16
|
+
|
17
|
+
it 'returns [ [0] ]' do
|
18
|
+
subject.insert_points.should == [[0]]
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'has history 2 points [1,0]' do
|
24
|
+
|
25
|
+
let(:first_history) { Cauldron::History.new([{point: [1,0]}])}
|
26
|
+
let(:second_history) { Cauldron::History.new([{point: [1,0]}])}
|
27
|
+
|
28
|
+
let(:subject){
|
29
|
+
Cauldron::Histories.new([first_history,second_history])
|
30
|
+
}
|
31
|
+
|
32
|
+
it 'returns 1 insert point' do
|
33
|
+
expect(subject.insert_points.length).to eql(1)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#contexts_at' do
|
41
|
+
|
42
|
+
# #<Cauldron::Histories:0x007f7f5c3f38c8
|
43
|
+
# @results=
|
44
|
+
# [#<Cauldron::History:0x007f7f5c3f3940
|
45
|
+
# @logs=
|
46
|
+
# [{:var2=>"Sparky", :var0=>["Sparky", "Kels"], :var1=>nil, :line=>0, :depth=>1, :total_line=>3, :point=>[0, 0]},
|
47
|
+
# {:var2=>"Kels", :var0=>["Sparky", "Kels"], :var1=>nil, :line=>0, :depth=>1, :total_line=>3, :point=>[0, 0]},
|
48
|
+
# {:var0=>["Sparky", "Kels"], :var1=>["Sparky", "Kels"], :line=>0, :depth=>0, :total_line=>4, :point=>[1]}]>]>
|
49
|
+
|
50
|
+
# point [0,0] => [{:var2=>"Sparky", :var0=>["Sparky", "Kels"], :var1=>nil}]
|
51
|
+
# point [0,0] => [{:var2=>"Kels", :var0=>["Sparky", "Kels"], :var1=>nil}]
|
52
|
+
# point [1] => [{:var2=>"Kels", :var0=>["Sparky", "Kels"], :var1=>nil}]
|
53
|
+
|
54
|
+
let(:histories) do
|
55
|
+
Cauldron::Histories.new(
|
56
|
+
[
|
57
|
+
Cauldron::History.new(
|
58
|
+
[
|
59
|
+
{:var2=>"Sparky", :var0=>["Sparky", "Kels"], :var1=>nil, :line=>0, :depth=>1, :total_line=>3, :point=>[0, 0]},
|
60
|
+
{:var2=>"Kels", :var0=>["Sparky", "Kels"], :var1=>nil, :line=>0, :depth=>1, :total_line=>3, :point=>[0, 0]},
|
61
|
+
{:var0=>["Sparky", "Kels"], :var1=>["Sparky", "Kels"], :line=>0, :depth=>0, :total_line=>4, :point=>[1]}
|
62
|
+
]
|
63
|
+
)
|
64
|
+
]
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'returns 1 context' do
|
69
|
+
expect(histories.contexts_at([1]).length).to eql(1)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'returns 2 contexts' do
|
73
|
+
expect(histories.contexts_at([0, 0]).length).to eql(2)
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#variable_permutations' do
|
79
|
+
|
80
|
+
let(:histories) do
|
81
|
+
Cauldron::Histories.new(
|
82
|
+
[
|
83
|
+
Cauldron::History.new([{var0: 4}])
|
84
|
+
]
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'returns [{var0: 4}]' do
|
89
|
+
histories.variable_permutations(1).should == [
|
90
|
+
{var0: 4}
|
91
|
+
]
|
92
|
+
end
|
93
|
+
|
94
|
+
context 'when var0 is ["Sparky", "Kel"]' do
|
95
|
+
|
96
|
+
let(:histories) do
|
97
|
+
Cauldron::Histories.new(
|
98
|
+
[
|
99
|
+
Cauldron::History.new([{:var0=>["Sparky", "Kel"], :line=>0, :depth=>0, :total_line=>0}])
|
100
|
+
]
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'returns ["Sparky", "Kel"]' do
|
105
|
+
histories.variable_permutations(1).should == [
|
106
|
+
{var0: ["Sparky", "Kel"]}
|
107
|
+
]
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'using two histories' do
|
113
|
+
|
114
|
+
let(:histories) do
|
115
|
+
Cauldron::Histories.new(
|
116
|
+
[
|
117
|
+
Cauldron::History.new([{:var0=>"Sparky", :line=>0, :depth=>0, :total_line=>0}]),
|
118
|
+
Cauldron::History.new([{:var0=>"Kel", :line=>0, :depth=>0, :total_line=>0}])
|
119
|
+
]
|
120
|
+
)
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'returns []' do
|
124
|
+
histories.variable_permutations(1).should == [
|
125
|
+
{var0: 'Sparky'}, {var0: 'Kel'}
|
126
|
+
]
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Cauldron
|
4
|
+
|
5
|
+
describe History do
|
6
|
+
|
7
|
+
describe '#insert_points' do
|
8
|
+
|
9
|
+
context %q{given the history is
|
10
|
+
History is:
|
11
|
+
[line: 0, depth:0, var0: ['Sparky','Kel'] ]
|
12
|
+
} do
|
13
|
+
|
14
|
+
let(:subject) { History.new([{line: 0, depth: 0, point: [0], var0: ['Sparky','Kel'] }]) }
|
15
|
+
|
16
|
+
it 'has 1 insert point' do
|
17
|
+
expect(subject.insert_points.length).to eql(1)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has the insert point [0,0]' do
|
21
|
+
subject.insert_points.should include([0])
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
context %q{given the history is
|
27
|
+
History is:
|
28
|
+
[line: 1, depth:0, var0: 'Sparky', var1: 'Spark' ]
|
29
|
+
from:
|
30
|
+
var1 = var0.chop
|
31
|
+
} do
|
32
|
+
|
33
|
+
let(:subject) { History.new([{line: 1, depth: 0, point: [1], var0: 'Sparky', var1: 'Spark'}]) }
|
34
|
+
|
35
|
+
it 'has 1 insert point' do
|
36
|
+
expect(subject.insert_points.length).to eql(1)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'has the insert point [1,0]' do
|
40
|
+
subject.insert_points.should include([1])
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
context %q{
|
46
|
+
History is:
|
47
|
+
[line: 1, depth:1, total_line: 2, point: [0,1], var0: ['Sparky', 'Kels'], var1: 'Spark' ],
|
48
|
+
[line: 1, depth:1, total_line: 2, point: [0,1], var0: ['Sparky', 'Kels'], var1: 'Kel' ],
|
49
|
+
[line: 1, depth:0, total_line: 2, point: [1], var0: ['Sparky', 'Kels'], var1: 'Kel', var2: ['Spark', 'Kel'] ],
|
50
|
+
from:
|
51
|
+
var2 = var0.each do |var1|
|
52
|
+
var1.chop
|
53
|
+
end
|
54
|
+
} do
|
55
|
+
|
56
|
+
let(:subject) {
|
57
|
+
History.new([
|
58
|
+
{line: 1, depth:1, total_line: 2, point: [0,1], var0: ['Sparky', 'Kels'], var1: 'Spark'},
|
59
|
+
{line: 1, depth:1, total_line: 2, point: [0,1], var0: ['Sparky', 'Kels'], var1: 'Kel'},
|
60
|
+
{line: 1, depth:0, total_line: 2, point: [1], var0: ['Sparky', 'Kels'], var1: 'Kel', var2: ['Spark', 'Kel']}
|
61
|
+
])
|
62
|
+
}
|
63
|
+
|
64
|
+
it 'has 2 insert point' do
|
65
|
+
expect(subject.insert_points.length).to eql(2)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'has the insert point [1]' do
|
69
|
+
subject.insert_points.should include([1])
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'has the insert point [0,1]' do
|
73
|
+
subject.insert_points.should include([0,1])
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '#variables' do
|
81
|
+
|
82
|
+
context %q{
|
83
|
+
History is:
|
84
|
+
[line: 0, depth:0, var0: ['Sparky','Kel'] ]
|
85
|
+
} do
|
86
|
+
|
87
|
+
let(:history) { History.new([{line: 0, depth: 0, var0: ['Sparky','Kel'] }]) }
|
88
|
+
|
89
|
+
it 'returns "var0"' do
|
90
|
+
history.variables.should == [:var0]
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
describe '#values' do
|
98
|
+
|
99
|
+
context %q{
|
100
|
+
History is:
|
101
|
+
[line: 0, depth:0, var0: ['Sparky','Kel'] ]
|
102
|
+
} do
|
103
|
+
|
104
|
+
let(:history) { History.new([{line: 0, depth: 0, var0: ['Sparky','Kel'] }]) }
|
105
|
+
|
106
|
+
it %q{returns "[ ['Sparky','Kel'] ]"} do
|
107
|
+
history.values(:var0).should == [
|
108
|
+
['Sparky','Kel']
|
109
|
+
]
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Cauldron
|
4
|
+
|
5
|
+
describe 'ArrayReverseOperator' do
|
6
|
+
|
7
|
+
it_behaves_like "operator" do
|
8
|
+
let(:operator) { ArrayReverseOperator.new([0]) }
|
9
|
+
let(:initial_scope) { Cauldron::Scope.new(['var0']) }
|
10
|
+
let(:initial_operators) { [] }
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '.viable?' do
|
14
|
+
|
15
|
+
context 'the arguments are not arrays' do
|
16
|
+
|
17
|
+
it 'is false' do
|
18
|
+
expect(ArrayReverseOperator.viable?([8], ['lions','tigers','bears'])).to eql(false)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'using more than 1 argument' do
|
24
|
+
|
25
|
+
it 'is false' do
|
26
|
+
expect(ArrayReverseOperator.viable?([['lions'],['tigers']], ['lions','tigers'])).to eql(false)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'response is not an array' do
|
32
|
+
|
33
|
+
it 'is false' do
|
34
|
+
expect(ArrayReverseOperator.viable?([['lions','tigers']], 'lions')).to eql(false)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#successful?' do
|
42
|
+
|
43
|
+
context 'using array that needs reversed' do
|
44
|
+
|
45
|
+
it 'is true' do
|
46
|
+
operator = ArrayReverseOperator.new([0])
|
47
|
+
expect(
|
48
|
+
operator.successful?(
|
49
|
+
{ arguments: [['lions','tigers']],response: ['tigers','lions']}
|
50
|
+
)
|
51
|
+
).to eql(true)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
context "using array that can't be reversed" do
|
57
|
+
|
58
|
+
it 'is false' do
|
59
|
+
operator = ArrayReverseOperator.new([0])
|
60
|
+
expect(
|
61
|
+
operator.successful?(
|
62
|
+
{arguments:[['lions','tigers']],response: ['lions','tigers']}
|
63
|
+
)
|
64
|
+
).to eql(false)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -2,14 +2,24 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Cauldron
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe ConcatOperator do
|
6
|
+
|
7
|
+
it_behaves_like "leaf_operator" do
|
8
|
+
let(:leaf_operator) { ConcatOperator.new([0]) }
|
9
|
+
end
|
10
|
+
|
11
|
+
it_behaves_like "operator" do
|
12
|
+
let(:operator) { ConcatOperator.new([0]) }
|
13
|
+
let(:initial_scope) { Cauldron::Scope.new(['var0']) }
|
14
|
+
let(:initial_operators) { [] }
|
15
|
+
end
|
6
16
|
|
7
17
|
describe '.viable?' do
|
8
18
|
|
9
19
|
context 'the arguments are not string' do
|
10
20
|
|
11
21
|
it 'is false' do
|
12
|
-
ConcatOperator.viable?([8], 'foobar').
|
22
|
+
expect(ConcatOperator.viable?([8], 'foobar')).to eql(false)
|
13
23
|
end
|
14
24
|
|
15
25
|
end
|
@@ -17,7 +27,7 @@ module Cauldron
|
|
17
27
|
context 'the reponse is not a string' do
|
18
28
|
|
19
29
|
it 'is false' do
|
20
|
-
ConcatOperator.viable?(['foo'],8).
|
30
|
+
expect(ConcatOperator.viable?(['foo'],8)).to eql(false)
|
21
31
|
end
|
22
32
|
|
23
33
|
end
|
@@ -30,10 +40,13 @@ module Cauldron
|
|
30
40
|
|
31
41
|
context 'response is "foobar"' do
|
32
42
|
|
43
|
+
let(:problems) do
|
44
|
+
Cauldron::ExampleSet.new(
|
45
|
+
[Cauldron::Example.new({ arguments: ['foo'], response: 'foobar'})]
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
33
49
|
it 'return "[bar]"' do
|
34
|
-
problems = [
|
35
|
-
{ arguments: ['foo'], response: 'foobar'}
|
36
|
-
]
|
37
50
|
ConcatOperator.find_constants(problems).should == ['bar']
|
38
51
|
end
|
39
52
|
|
@@ -41,10 +54,13 @@ module Cauldron
|
|
41
54
|
|
42
55
|
context 'response is "barfoo"' do
|
43
56
|
|
57
|
+
let(:problems) do
|
58
|
+
Cauldron::ExampleSet.new(
|
59
|
+
[Cauldron::Example.new({ arguments: ['foo'], response: 'barfoo'})]
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
44
63
|
it 'returns "[]"' do
|
45
|
-
problems = [
|
46
|
-
{ arguments: ['foo'], response: 'barfoo'}
|
47
|
-
]
|
48
64
|
ConcatOperator.find_constants(problems).should == []
|
49
65
|
end
|
50
66
|
|
@@ -63,7 +79,7 @@ module Cauldron
|
|
63
79
|
{arguments: ['foo'], response: 'foobar'},
|
64
80
|
{arguments: ['goo'], response: 'goobar'}
|
65
81
|
]
|
66
|
-
operator = ConcatOperator.new(
|
82
|
+
operator = ConcatOperator.new([])
|
67
83
|
problems.all? {|x| operator.successful?(x) }.should == true
|
68
84
|
end
|
69
85
|
|
@@ -75,9 +91,11 @@ module Cauldron
|
|
75
91
|
|
76
92
|
context 'using the constant "bar"' do
|
77
93
|
|
94
|
+
let(:scope) { Cauldron::Scope.new(['var0']) }
|
95
|
+
|
78
96
|
it 'returns "var0.concat("bar")"' do
|
79
|
-
operator = ConcatOperator.new(
|
80
|
-
operator.to_ruby.should == "
|
97
|
+
operator = ConcatOperator.new([0])
|
98
|
+
operator.to_ruby(scope,[]).should == "var0.concat(\"bar\")"
|
81
99
|
end
|
82
100
|
|
83
101
|
end
|