flavour_saver 0.3.7 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +47 -0
  3. data/CHANGELOG.md +40 -0
  4. data/Gemfile.lock +34 -62
  5. data/README.md +34 -11
  6. data/flavour_saver.gemspec +14 -9
  7. data/lib/flavour_saver/helpers.rb +28 -13
  8. data/lib/flavour_saver/lexer.rb +19 -6
  9. data/lib/flavour_saver/nodes.rb +1 -1
  10. data/lib/flavour_saver/parser.rb +8 -7
  11. data/lib/flavour_saver/runtime.rb +8 -8
  12. data/lib/flavour_saver/version.rb +1 -1
  13. data/spec/acceptance/backtrack_spec.rb +1 -1
  14. data/spec/acceptance/comment_spec.rb +1 -1
  15. data/spec/acceptance/custom_block_helper_spec.rb +2 -2
  16. data/spec/acceptance/custom_helper_spec.rb +1 -1
  17. data/spec/acceptance/ensure_no_rce_spec.rb +2 -2
  18. data/spec/acceptance/handlebars_qunit_spec.rb +299 -214
  19. data/spec/acceptance/if_else_spec.rb +37 -6
  20. data/spec/acceptance/multi_level_with_spec.rb +1 -1
  21. data/spec/acceptance/one_character_identifier_spec.rb +2 -2
  22. data/spec/acceptance/raw_block_spec.rb +1 -1
  23. data/spec/acceptance/runtime_run_spec.rb +1 -1
  24. data/spec/acceptance/sections_spec.rb +3 -3
  25. data/spec/acceptance/segment_literals_spec.rb +3 -3
  26. data/spec/acceptance/simple_expression_spec.rb +3 -3
  27. data/spec/acceptance/subexpression_spec.rb +37 -0
  28. data/spec/acceptance/unless_spec.rb +48 -0
  29. data/spec/fixtures/if_else.hbs +3 -3
  30. data/spec/fixtures/unless.hbs +5 -0
  31. data/spec/lib/flavour_saver/lexer_spec.rb +104 -28
  32. data/spec/lib/flavour_saver/parser_spec.rb +115 -82
  33. data/spec/lib/flavour_saver/runtime_spec.rb +44 -33
  34. metadata +27 -72
  35. data/.travis.yml +0 -14
  36. data/Guardfile +0 -12
@@ -3,15 +3,46 @@ require 'flavour_saver'
3
3
 
4
4
  describe 'Fixture: if_else.hbs' do
5
5
  subject { Tilt.new(template).render(context).gsub(/[\s\r\n]+/, ' ').strip }
6
- let(:context) { Struct.new(:name).new }
6
+ let(:context) { Struct.new(:value).new }
7
7
  let(:template) { File.expand_path('../../fixtures/if_else.hbs', __FILE__) }
8
8
 
9
- it 'renders correctly when given a name' do
10
- context.name = 'Alan'
11
- subject.should == "Say hello to Alan."
9
+ it "renders the if block when given a string" do
10
+ context.value = "Alan"
11
+ expect(subject).to eq "The given value is truthy: Alan."
12
12
  end
13
13
 
14
- it 'renders correctly when not given a name' do
15
- subject.should == "Nobody to say hi to."
14
+ it "renders the if block when given a number greater than zero" do
15
+ context.value = 1
16
+ expect(subject).to eq "The given value is truthy: 1."
17
+ end
18
+
19
+ it "renders the if block when given an array that is not empty" do
20
+ context.value = [1]
21
+ expect(subject).to eq "The given value is truthy: [1]."
22
+ end
23
+
24
+ it "renders the else block when given false" do
25
+ context.value = false
26
+ expect(subject).to eq "The given value is falsy: false."
27
+ end
28
+
29
+ it 'renders the else block when given nil' do
30
+ context.value = nil
31
+ expect(subject).to eq "The given value is falsy: ."
32
+ end
33
+
34
+ it "renders the else block when given an empty string" do
35
+ context.value = ""
36
+ expect(subject).to eq "The given value is falsy: ."
37
+ end
38
+
39
+ it "renders the else block when given a zero" do
40
+ context.value = 0
41
+ expect(subject).to eq "The given value is falsy: 0."
42
+ end
43
+
44
+ it "renders the else block when given an empty array" do
45
+ context.value = []
46
+ expect(subject).to eq "The given value is falsy: []."
16
47
  end
17
48
  end
@@ -9,7 +9,7 @@ describe 'Fixture: multi_level_with.hbs' do
9
9
  it 'renders correctly when person has a name' do
10
10
  context.person = Struct.new(:name).new('Alan')
11
11
  context.company = Struct.new(:name).new('Rad, Inc.')
12
- subject.should == 'Alan - Rad, Inc.'
12
+ expect(subject).to eq 'Alan - Rad, Inc.'
13
13
  end
14
14
 
15
15
  end
@@ -7,7 +7,7 @@ describe 'Fixture: one_character_identifier.hbs' do
7
7
  let(:context) { double(:context) }
8
8
 
9
9
  it 'renders correctly' do
10
- context.should_receive(:a).and_return('foo')
11
- subject.should == "foo"
10
+ expect(context).to receive(:a).and_return('foo')
11
+ expect(subject).to eq "foo"
12
12
  end
13
13
  end
@@ -7,6 +7,6 @@ describe 'Fixture: raw.hbs' do
7
7
  let(:context) { double(:context) }
8
8
 
9
9
  it 'renders correctly' do
10
- subject.should == "{{=if brokensyntax}"
10
+ expect(subject).to eq "{{=if brokensyntax}"
11
11
  end
12
12
  end
@@ -20,7 +20,7 @@ describe FlavourSaver::Runtime do
20
20
  is_even_helper = proc { |n| n % 2 == 0 }
21
21
 
22
22
  locals[:is_even] = is_even_helper
23
- subject.should == "24 is even"
23
+ expect(subject).to eq "24 is even"
24
24
  end
25
25
  end
26
26
  end
@@ -8,18 +8,18 @@ describe 'Fixture: sections.hbs' do
8
8
 
9
9
  it 'renders correctly when given a name' do
10
10
  context.name = 'Alan'
11
- subject.should == "Say hello to Alan."
11
+ expect(subject).to eq "Say hello to Alan."
12
12
  end
13
13
 
14
14
  it 'renders correctly when given a list of names' do
15
15
  context.names = ['Foo', 'Bar']
16
- subject.should == "* Foo * Bar"
16
+ expect(subject).to eq "* Foo * Bar"
17
17
  end
18
18
 
19
19
  it 'renders correctly when given an order' do
20
20
  class Order; def number; 1234; end; end
21
21
  context.order = Order.new
22
- subject.should == 'Number: 1234'
22
+ expect(subject).to eq 'Number: 1234'
23
23
  end
24
24
  end
25
25
 
@@ -17,10 +17,10 @@ describe FlavourSaver do
17
17
  foos = []
18
18
  foos << double(:foo)
19
19
  foos << double(:foo)
20
- foos[1].should_receive(:bar).and_return('two')
20
+ expect(foos[1]).to receive(:bar).and_return('two')
21
21
 
22
- context.stub(:foos).and_return(foos)
23
- subject.should == 'two'
22
+ allow(context).to receive(:foos).and_return(foos)
23
+ expect(subject).to eq 'two'
24
24
  end
25
25
  end
26
26
  end
@@ -7,11 +7,11 @@ describe 'Fixture: simple_expression.hbs' do
7
7
  let(:context) { double(:context) }
8
8
 
9
9
  it 'renders correctly' do
10
- context.should_receive(:hello).and_return('hello world')
11
- subject.should == "hello world"
10
+ expect(context).to receive(:hello).and_return('hello world')
11
+ expect(subject).to eq "hello world"
12
12
  end
13
13
 
14
14
  it 'renders nothing if undefined' do
15
- subject.should == ""
15
+ expect(subject).to eq ""
16
16
  end
17
17
  end
@@ -0,0 +1,37 @@
1
+ require 'tilt'
2
+ require 'flavour_saver'
3
+
4
+ describe 'Subexpressions' do
5
+
6
+ subject { Tilt['handlebars'].new{ template }.render(context).gsub(/[\s\r\n]+/, ' ').strip }
7
+
8
+ let(:context) { double(:context) }
9
+ before(:all) do
10
+ FlavourSaver.register_helper(:sum) { |a,b| a + b}
11
+ end
12
+ context "simple subexpression" do
13
+ let(:template) { "{{sum 1 (sum 1 1)}}" }
14
+ specify{expect(subject).to eq "3"}
15
+ end
16
+
17
+ context "nested subexpressions" do
18
+ let(:template) { "{{sum 1 (sum 1 (sum 1 1))}}" }
19
+ specify{expect(subject).to eq "4"}
20
+ end
21
+
22
+ context "subexpression as argument" do
23
+ before {FlavourSaver.register_helper(:cents) { |a| a[:total] + 10}}
24
+ let(:template) { "{{cents total=(sum 1 1)}}" }
25
+ specify{expect(subject).to eq "12"}
26
+ end
27
+
28
+ context "subexpression in block" do
29
+ before {FlavourSaver.register_helper(:repeat) do |a, &block|
30
+ s = ''
31
+ a.times {s += block.call.contents}
32
+ s
33
+ end}
34
+ let(:template) { "{{#repeat (sum 1 2)}}*{{/repeat}}" }
35
+ specify{expect(subject).to eq "***"}
36
+ end
37
+ end
@@ -0,0 +1,48 @@
1
+ require 'tilt'
2
+ require 'flavour_saver'
3
+
4
+ describe 'Fixture: unless.hbs' do
5
+ subject { Tilt.new(template).render(context).gsub(/[\s\r\n]+/, ' ').strip }
6
+ let(:context) { Struct.new(:value).new }
7
+ let(:template) { File.expand_path('../../fixtures/unless.hbs', __FILE__) }
8
+
9
+ it "renders the unless block when given false" do
10
+ context.value = false
11
+ expect(subject).to eq "The given value is falsy: false."
12
+ end
13
+
14
+ it 'renders the unless block when given nil' do
15
+ context.value = nil
16
+ expect(subject).to eq "The given value is falsy: ."
17
+ end
18
+
19
+ it "renders the unless block when given an empty string" do
20
+ context.value = ""
21
+ expect(subject).to eq "The given value is falsy: ."
22
+ end
23
+
24
+ it "renders the unless block when given a zero" do
25
+ context.value = 0
26
+ expect(subject).to eq "The given value is falsy: 0."
27
+ end
28
+
29
+ it "renders the unless block when given an empty array" do
30
+ context.value = []
31
+ expect(subject).to eq "The given value is falsy: []."
32
+ end
33
+
34
+ it "renders the else block when given a string" do
35
+ context.value = "Alan"
36
+ expect(subject).to eq "The given value is truthy: Alan."
37
+ end
38
+
39
+ it "renders the else block when given a number greater than zero" do
40
+ context.value = 1
41
+ expect(subject).to eq "The given value is truthy: 1."
42
+ end
43
+
44
+ it "renders the else block when given an array that is not empty" do
45
+ context.value = [1]
46
+ expect(subject).to eq "The given value is truthy: [1]."
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
- {{#if name}}
2
- Say hello to {{name}}.
1
+ {{#if value}}
2
+ The given value is truthy: {{value}}.
3
3
  {{else}}
4
- Nobody to say hi to.
4
+ The given value is falsy: {{value}}.
5
5
  {{/if}}
@@ -0,0 +1,5 @@
1
+ {{#unless value}}
2
+ The given value is falsy: {{value}}.
3
+ {{else}}
4
+ The given value is truthy: {{value}}.
5
+ {{/unless}}
@@ -2,7 +2,7 @@ require 'flavour_saver/lexer'
2
2
 
3
3
  describe FlavourSaver::Lexer do
4
4
  it 'is an RLTK lexer' do
5
- subject.should be_a(RLTK::Lexer)
5
+ expect(subject).to be_a(RLTK::Lexer)
6
6
  end
7
7
 
8
8
  describe 'Tokens' do
@@ -11,17 +11,17 @@ describe FlavourSaver::Lexer do
11
11
  subject { FlavourSaver::Lexer.lex "{{foo}}" }
12
12
 
13
13
  it 'begins with an EXPRST' do
14
- subject.first.type.should == :EXPRST
14
+ expect(subject.first.type).to eq :EXPRST
15
15
  end
16
16
 
17
17
  it 'ends with an EXPRE' do
18
- subject[-2].type.should == :EXPRE
18
+ expect(subject[-2].type).to eq :EXPRE
19
19
  end
20
20
 
21
21
  it 'contains only the identifier "foo"' do
22
- subject[1..-3].size.should == 1
23
- subject[1].type.should == :IDENT
24
- subject[1].value.should == 'foo'
22
+ expect(subject[1..-3].size).to eq 1
23
+ expect(subject[1].type).to eq :IDENT
24
+ expect(subject[1].value).to eq 'foo'
25
25
  end
26
26
  end
27
27
 
@@ -29,11 +29,11 @@ describe FlavourSaver::Lexer do
29
29
  subject { FlavourSaver::Lexer.lex "{{foo bar}}" }
30
30
 
31
31
  it 'has tokens in the correct order' do
32
- subject.map(&:type).should == [ :EXPRST, :IDENT, :WHITE, :IDENT, :EXPRE, :EOS ]
32
+ expect(subject.map(&:type)).to eq [ :EXPRST, :IDENT, :WHITE, :IDENT, :EXPRE, :EOS ]
33
33
  end
34
34
 
35
35
  it 'has values in the correct order' do
36
- subject.map(&:value).compact.should == [ 'foo', 'bar' ]
36
+ expect(subject.map(&:value).compact).to eq [ 'foo', 'bar' ]
37
37
  end
38
38
  end
39
39
 
@@ -41,11 +41,23 @@ describe FlavourSaver::Lexer do
41
41
  subject { FlavourSaver::Lexer.lex "{{foo \"bar\"}}" }
42
42
 
43
43
  it 'has tokens in the correct order' do
44
- subject.map(&:type).should == [ :EXPRST, :IDENT, :WHITE, :STRING, :EXPRE, :EOS ]
44
+ expect(subject.map(&:type)).to eq [ :EXPRST, :IDENT, :WHITE, :STRING, :EXPRE, :EOS ]
45
45
  end
46
46
 
47
47
  it 'has values in the correct order' do
48
- subject.map(&:value).compact.should == [ 'foo', 'bar' ]
48
+ expect(subject.map(&:value).compact).to eq [ 'foo', 'bar' ]
49
+ end
50
+ end
51
+
52
+ describe '{{foo (bar "baz")}}' do
53
+ subject { FlavourSaver::Lexer.lex "{{foo (bar 'baz')}}" }
54
+
55
+ it 'has tokens in the correct order' do
56
+ expect(subject.map(&:type)).to eq [ :EXPRST, :IDENT, :WHITE, :OPAR, :IDENT, :WHITE, :S_STRING, :CPAR, :EXPRE, :EOS ]
57
+ end
58
+
59
+ it 'has values in the correct order' do
60
+ expect(subject.map(&:value).compact).to eq [ 'foo', 'bar', 'baz' ]
49
61
  end
50
62
  end
51
63
 
@@ -53,13 +65,77 @@ describe FlavourSaver::Lexer do
53
65
  subject { FlavourSaver::Lexer.lex '{{foo bar="baz" hello="goodbye"}}' }
54
66
 
55
67
  it 'has tokens in the correct order' do
56
- subject.map(&:type).should == [ :EXPRST, :IDENT, :WHITE, :IDENT, :EQ, :STRING, :WHITE, :IDENT, :EQ, :STRING, :EXPRE, :EOS ]
68
+ expect(subject.map(&:type)).to eq [ :EXPRST, :IDENT, :WHITE, :IDENT, :EQ, :STRING, :WHITE, :IDENT, :EQ, :STRING, :EXPRE, :EOS ]
57
69
  end
58
70
 
59
71
  it 'has values in the correct order' do
60
- subject.map(&:value).compact.should == [ 'foo', 'bar', 'baz', 'hello', 'goodbye' ]
72
+ expect(subject.map(&:value).compact).to eq [ 'foo', 'bar', 'baz', 'hello', 'goodbye' ]
73
+ end
74
+ end
75
+
76
+ describe '{{0}}' do
77
+ subject { FlavourSaver::Lexer.lex "{{0}}" }
78
+
79
+ it 'properly lexes the expression' do
80
+ expect(subject.map(&:type)).to eq(
81
+ [:EXPRST, :NUMBER, :EXPRE, :EOS]
82
+ )
83
+ end
84
+
85
+ it 'contains only the number "0"' do
86
+ expect(subject[1..-3].size).to eq 1
87
+ expect(subject[1].type).to eq :NUMBER
88
+ expect(subject[1].value).to eq '0'
89
+ end
90
+ end
91
+
92
+ describe '{{0.0123456789}}' do
93
+ subject { FlavourSaver::Lexer.lex "{{0.0123456789}}" }
94
+
95
+ it 'properly lexes the expression' do
96
+ expect(subject.map(&:type)).to eq(
97
+ [:EXPRST, :NUMBER, :EXPRE, :EOS]
98
+ )
99
+ end
100
+
101
+ it 'contains only the number "0.0123456789"' do
102
+ expect(subject[1..-3].size).to eq 1
103
+ expect(subject[1].type).to eq :NUMBER
104
+ expect(subject[1].value).to eq '0.0123456789'
61
105
  end
106
+ end
107
+ end
108
+
109
+ describe 'Identities' do
110
+
111
+ it 'supports as ruby methods' do
112
+ ids = %w( _ __ __123__ __ABC__ ABC123 Abc134def )
113
+ ids.each do |id|
114
+ subject = FlavourSaver::Lexer.lex "{{#{id}}}"
115
+ expect(subject[1].type).to eq :IDENT
116
+ expect(subject[1].value).to eq id
117
+ end
118
+ end
119
+
120
+ it 'maps non-ruby identities to literals' do
121
+ ids = %w( A-B 12_Mine - :example 0A test? )
122
+ ids.each do |id|
123
+ subject = FlavourSaver::Lexer.lex "{{#{id}}}"
124
+ expect(subject[1].type).to eq :LITERAL
125
+ expect(subject[1].value).to eq id
126
+ end
127
+ end
128
+ end
129
+
130
+ describe '{{foo bar=(baz qux)}}' do
131
+ subject { FlavourSaver::Lexer.lex '{{foo bar=(baz qux)}}' }
132
+
133
+ it 'has tokens in the correct order' do
134
+ expect(subject.map(&:type)).to eq [:EXPRST, :IDENT, :WHITE, :IDENT, :EQ, :OPAR, :IDENT, :WHITE, :IDENT, :CPAR, :EXPRE, :EOS]
135
+ end
62
136
 
137
+ it 'has values in the correct order' do
138
+ expect(subject.map(&:value).compact).to eq [ 'foo', 'bar', 'baz', 'qux' ]
63
139
  end
64
140
  end
65
141
 
@@ -67,7 +143,7 @@ describe FlavourSaver::Lexer do
67
143
  subject { FlavourSaver::Lexer.lex '{{else}}' }
68
144
 
69
145
  it 'has tokens in the correct order' do
70
- subject.map(&:type).should == [ :EXPRST, :ELSE, :EXPRE, :EOS ]
146
+ expect(subject.map(&:type)).to eq [ :EXPRST, :ELSE, :EXPRE, :EOS ]
71
147
  end
72
148
  end
73
149
 
@@ -76,11 +152,11 @@ describe FlavourSaver::Lexer do
76
152
  subject { FlavourSaver::Lexer.lex "{{foo.bar}}" }
77
153
 
78
154
  it 'has tokens in the correct order' do
79
- subject.map(&:type).should == [ :EXPRST, :IDENT, :DOT, :IDENT, :EXPRE, :EOS ]
155
+ expect(subject.map(&:type)).to eq [ :EXPRST, :IDENT, :DOT, :IDENT, :EXPRE, :EOS ]
80
156
  end
81
157
 
82
158
  it 'has the correct values' do
83
- subject.map(&:value).compact.should == ['foo', 'bar']
159
+ expect(subject.map(&:value).compact).to eq ['foo', 'bar']
84
160
  end
85
161
  end
86
162
 
@@ -88,11 +164,11 @@ describe FlavourSaver::Lexer do
88
164
  subject { FlavourSaver::Lexer.lex "{{foo.[10].bar}}" }
89
165
 
90
166
  it 'has tokens in the correct order' do
91
- subject.map(&:type).should == [ :EXPRST, :IDENT, :DOT, :LITERAL, :DOT, :IDENT, :EXPRE, :EOS ]
167
+ expect(subject.map(&:type)).to eq [ :EXPRST, :IDENT, :DOT, :LITERAL, :DOT, :IDENT, :EXPRE, :EOS ]
92
168
  end
93
169
 
94
170
  it 'has the correct values' do
95
- subject.map(&:value).compact.should == ['foo', '10', 'bar']
171
+ expect(subject.map(&:value).compact).to eq ['foo', '10', 'bar']
96
172
  end
97
173
  end
98
174
 
@@ -100,11 +176,11 @@ describe FlavourSaver::Lexer do
100
176
  subject { FlavourSaver::Lexer.lex '{{foo.[he!@#$(&@klA)].bar}}' }
101
177
 
102
178
  it 'has tokens in the correct order' do
103
- subject.map(&:type).should == [ :EXPRST, :IDENT, :DOT, :LITERAL, :DOT, :IDENT, :EXPRE, :EOS ]
179
+ expect(subject.map(&:type)).to eq [ :EXPRST, :IDENT, :DOT, :LITERAL, :DOT, :IDENT, :EXPRE, :EOS ]
104
180
  end
105
181
 
106
182
  it 'has the correct values' do
107
- subject.map(&:value).compact.should == ['foo', 'he!@#$(&@klA)', 'bar']
183
+ expect(subject.map(&:value).compact).to eq ['foo', 'he!@#$(&@klA)', 'bar']
108
184
  end
109
185
  end
110
186
  end
@@ -113,7 +189,7 @@ describe FlavourSaver::Lexer do
113
189
  subject { FlavourSaver::Lexer.lex "{{{foo}}}" }
114
190
 
115
191
  it 'has tokens in the correct order' do
116
- subject.map(&:type).should == [ :TEXPRST, :IDENT, :TEXPRE, :EOS ]
192
+ expect(subject.map(&:type)).to eq [ :TEXPRST, :IDENT, :TEXPRE, :EOS ]
117
193
  end
118
194
  end
119
195
 
@@ -121,7 +197,7 @@ describe FlavourSaver::Lexer do
121
197
  subject { FlavourSaver::Lexer.lex "{{! WAT}}" }
122
198
 
123
199
  it 'has tokens in the correct order' do
124
- subject.map(&:type).should == [ :EXPRST, :BANG, :COMMENT, :EXPRE, :EOS ]
200
+ expect(subject.map(&:type)).to eq [ :EXPRST, :BANG, :COMMENT, :EXPRE, :EOS ]
125
201
  end
126
202
  end
127
203
 
@@ -129,7 +205,7 @@ describe FlavourSaver::Lexer do
129
205
  subject { FlavourSaver::Lexer.lex "{{../foo}}" }
130
206
 
131
207
  it 'has tokens in the correct order' do
132
- subject.map(&:type).should == [:EXPRST, :DOT, :DOT, :FWSL, :IDENT, :EXPRE, :EOS]
208
+ expect(subject.map(&:type)).to eq [:EXPRST, :DOT, :DOT, :FWSL, :IDENT, :EXPRE, :EOS]
133
209
  end
134
210
  end
135
211
 
@@ -137,7 +213,7 @@ describe FlavourSaver::Lexer do
137
213
  subject { FlavourSaver::Lexer.lex "{{foo}}\n{{bar}}\r{{baz}}" }
138
214
 
139
215
  it 'has tokens in the correct order' do
140
- subject.map(&:type).should == [:EXPRST,:IDENT,:EXPRE,:OUT,:EXPRST,:IDENT,:EXPRE,:OUT,:EXPRST,:IDENT,:EXPRE,:EOS]
216
+ expect(subject.map(&:type)).to eq [:EXPRST,:IDENT,:EXPRE,:OUT,:EXPRST,:IDENT,:EXPRE,:OUT,:EXPRST,:IDENT,:EXPRE,:EOS]
141
217
  end
142
218
  end
143
219
 
@@ -146,7 +222,7 @@ describe FlavourSaver::Lexer do
146
222
 
147
223
  describe '{{#foo}}{{bar}}{{/foo}}' do
148
224
  it 'has tokens in the correct order' do
149
- subject.map(&:type).should == [
225
+ expect(subject.map(&:type)).to eq [
150
226
  :EXPRST, :HASH, :IDENT, :EXPRE,
151
227
  :EXPRST, :IDENT, :EXPRE,
152
228
  :EXPRST, :FWSL, :IDENT, :EXPRE,
@@ -155,7 +231,7 @@ describe FlavourSaver::Lexer do
155
231
  end
156
232
 
157
233
  it 'has identifiers in the correct order' do
158
- subject.map(&:value).compact.should == [ 'foo', 'bar', 'foo' ]
234
+ expect(subject.map(&:value).compact).to eq [ 'foo', 'bar', 'foo' ]
159
235
  end
160
236
  end
161
237
  end
@@ -164,7 +240,7 @@ describe FlavourSaver::Lexer do
164
240
  subject { FlavourSaver::Lexer.lex "\r" }
165
241
 
166
242
  it 'has tokens in the correct order' do
167
- subject.map(&:type).should == [:OUT,:EOS]
243
+ expect(subject.map(&:type)).to eq [:OUT,:EOS]
168
244
  end
169
245
  end
170
246
 
@@ -172,7 +248,7 @@ describe FlavourSaver::Lexer do
172
248
  subject { FlavourSaver::Lexer.lex "\n" }
173
249
 
174
250
  it 'has tokens in the correct order' do
175
- subject.map(&:type).should == [:OUT,:EOS]
251
+ expect(subject.map(&:type)).to eq [:OUT,:EOS]
176
252
  end
177
253
  end
178
254
 
@@ -180,7 +256,7 @@ describe FlavourSaver::Lexer do
180
256
  subject { FlavourSaver::Lexer.lex "{" }
181
257
 
182
258
  it 'has tokens in the correct order' do
183
- subject.map(&:type).should == [:OUT,:EOS]
259
+ expect(subject.map(&:type)).to eq [:OUT,:EOS]
184
260
  end
185
261
  end
186
262
  end