ripper2ruby 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.markdown +10 -0
- data/lib/core_ext/array/flush.rb +5 -0
- data/lib/core_ext/hash/delete_at.rb +5 -0
- data/lib/core_ext/object/meta_class.rb +5 -0
- data/lib/core_ext/object/try.rb +12 -0
- data/lib/erb/stripper.rb +48 -0
- data/lib/highlighters/ansi.rb +29 -0
- data/lib/ripper/event_log.rb +45 -0
- data/lib/ripper/ruby_builder.rb +168 -0
- data/lib/ripper/ruby_builder/buffer.rb +34 -0
- data/lib/ripper/ruby_builder/events/args.rb +40 -0
- data/lib/ripper/ruby_builder/events/array.rb +71 -0
- data/lib/ripper/ruby_builder/events/assignment.rb +55 -0
- data/lib/ripper/ruby_builder/events/block.rb +80 -0
- data/lib/ripper/ruby_builder/events/call.rb +123 -0
- data/lib/ripper/ruby_builder/events/case.rb +17 -0
- data/lib/ripper/ruby_builder/events/const.rb +47 -0
- data/lib/ripper/ruby_builder/events/for.rb +13 -0
- data/lib/ripper/ruby_builder/events/hash.rb +24 -0
- data/lib/ripper/ruby_builder/events/identifier.rb +41 -0
- data/lib/ripper/ruby_builder/events/if.rb +37 -0
- data/lib/ripper/ruby_builder/events/lexer.rb +159 -0
- data/lib/ripper/ruby_builder/events/literal.rb +47 -0
- data/lib/ripper/ruby_builder/events/method.rb +21 -0
- data/lib/ripper/ruby_builder/events/operator.rb +23 -0
- data/lib/ripper/ruby_builder/events/statements.rb +50 -0
- data/lib/ripper/ruby_builder/events/string.rb +117 -0
- data/lib/ripper/ruby_builder/events/symbol.rb +22 -0
- data/lib/ripper/ruby_builder/events/while.rb +27 -0
- data/lib/ripper/ruby_builder/queue.rb +33 -0
- data/lib/ripper/ruby_builder/stack.rb +125 -0
- data/lib/ripper/ruby_builder/token.rb +91 -0
- data/lib/ripper2ruby.rb +1 -0
- data/lib/ruby.rb +28 -0
- data/lib/ruby/aggregate.rb +71 -0
- data/lib/ruby/alternation/args.rb +25 -0
- data/lib/ruby/alternation/hash.rb +25 -0
- data/lib/ruby/alternation/list.rb +19 -0
- data/lib/ruby/args.rb +36 -0
- data/lib/ruby/array.rb +27 -0
- data/lib/ruby/assignment.rb +32 -0
- data/lib/ruby/assoc.rb +17 -0
- data/lib/ruby/block.rb +42 -0
- data/lib/ruby/call.rb +34 -0
- data/lib/ruby/case.rb +30 -0
- data/lib/ruby/const.rb +49 -0
- data/lib/ruby/for.rb +18 -0
- data/lib/ruby/hash.rb +14 -0
- data/lib/ruby/if.rb +35 -0
- data/lib/ruby/list.rb +40 -0
- data/lib/ruby/literal.rb +45 -0
- data/lib/ruby/method.rb +19 -0
- data/lib/ruby/node.rb +47 -0
- data/lib/ruby/node/composite.rb +68 -0
- data/lib/ruby/node/conversions.rb +66 -0
- data/lib/ruby/node/position.rb +35 -0
- data/lib/ruby/node/source.rb +29 -0
- data/lib/ruby/node/text.rb +121 -0
- data/lib/ruby/node/traversal.rb +82 -0
- data/lib/ruby/operator.rb +49 -0
- data/lib/ruby/params.rb +41 -0
- data/lib/ruby/statements.rb +45 -0
- data/lib/ruby/string.rb +40 -0
- data/lib/ruby/symbol.rb +27 -0
- data/lib/ruby/token.rb +51 -0
- data/lib/ruby/while.rb +32 -0
- data/test/all.rb +3 -0
- data/test/builder/stack_test.rb +67 -0
- data/test/builder/text_test.rb +118 -0
- data/test/context_test.rb +54 -0
- data/test/erb_stripper_test.rb +29 -0
- data/test/fixtures/all.rb.src +150 -0
- data/test/fixtures/source_1.rb +16 -0
- data/test/fixtures/source_2.rb +1 -0
- data/test/fixtures/stuff.rb +371 -0
- data/test/fixtures/template.html.erb +22 -0
- data/test/fixtures/tmp.rb +6 -0
- data/test/lib_test.rb +92 -0
- data/test/lib_test_helper.rb +103 -0
- data/test/libs.txt +227 -0
- data/test/nodes/args_test.rb +100 -0
- data/test/nodes/array_test.rb +141 -0
- data/test/nodes/assignment_test.rb +49 -0
- data/test/nodes/block_test.rb +125 -0
- data/test/nodes/call_test.rb +229 -0
- data/test/nodes/case_test.rb +68 -0
- data/test/nodes/comments_test.rb +25 -0
- data/test/nodes/const_test.rb +46 -0
- data/test/nodes/conversions_test.rb +9 -0
- data/test/nodes/for_test.rb +34 -0
- data/test/nodes/hash_test.rb +71 -0
- data/test/nodes/heredoc_test.rb +202 -0
- data/test/nodes/identifier_test.rb +51 -0
- data/test/nodes/if_test.rb +100 -0
- data/test/nodes/literals_test.rb +63 -0
- data/test/nodes/method_test.rb +92 -0
- data/test/nodes/namespaces_test.rb +65 -0
- data/test/nodes/node_test.rb +74 -0
- data/test/nodes/nodes_test.rb +23 -0
- data/test/nodes/operator_test.rb +241 -0
- data/test/nodes/separators_test.rb +97 -0
- data/test/nodes/statements_test.rb +70 -0
- data/test/nodes/string_test.rb +92 -0
- data/test/nodes/symbol_test.rb +57 -0
- data/test/nodes/unless_test.rb +42 -0
- data/test/nodes/until_test.rb +61 -0
- data/test/nodes/while_test.rb +71 -0
- data/test/test_helper.rb +51 -0
- data/test/traversal_test.rb +53 -0
- metadata +163 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class NodesTest < Test::Unit::TestCase
|
4
|
+
include TestHelper
|
5
|
+
|
6
|
+
lines = File.read(File.dirname(__FILE__) + '/../fixtures/all.rb.src').split("\n")
|
7
|
+
lines.each do |line|
|
8
|
+
next if line =~ /^#/ || line.empty?
|
9
|
+
define_method :"test: to_ruby(#{line}) compiles to the original src" do
|
10
|
+
line.gsub!('\n', "\n")
|
11
|
+
assert_build(line)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir["#{File.dirname(__FILE__)}/../fixtures/**/*.rb"].sort.each do |filename|
|
16
|
+
# puts filename
|
17
|
+
define_method :"test: #{filename} compiles to the original src" do
|
18
|
+
next if filename.index('tmp.rb')
|
19
|
+
src = File.read(filename)
|
20
|
+
assert_build(src)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,241 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class OperatorTest < Test::Unit::TestCase
|
4
|
+
include TestHelper
|
5
|
+
|
6
|
+
def assert_operator(expr, src, options)
|
7
|
+
row = options[:row] || 0
|
8
|
+
column = options[:column] || 0
|
9
|
+
length = options[:length] || src.length
|
10
|
+
|
11
|
+
assert expr.root.is_a?(Ruby::Program)
|
12
|
+
assert_equal src, expr.to_ruby
|
13
|
+
assert_equal src, expr.src
|
14
|
+
assert_equal row, expr.row
|
15
|
+
assert_equal column, expr.column
|
16
|
+
assert_equal length, expr.length
|
17
|
+
end
|
18
|
+
|
19
|
+
def assert_unary_operator(operator, options = {})
|
20
|
+
src = options[:src] || "#{operator}1"
|
21
|
+
expr = build(src).first
|
22
|
+
|
23
|
+
assert_equal Ruby::Unary, expr.class
|
24
|
+
assert_equal operator.to_s, expr.operator.token
|
25
|
+
# assert_equal options[:value] || 1, expr.operand.value
|
26
|
+
|
27
|
+
assert_operator(expr, src, options)
|
28
|
+
end
|
29
|
+
|
30
|
+
def assert_binary_operator(operator, options = {})
|
31
|
+
src = options[:src] || "1 #{operator} 2"
|
32
|
+
expr = build(src).first
|
33
|
+
|
34
|
+
assert_equal Ruby::Binary, expr.class
|
35
|
+
assert_equal operator.to_s, expr.operator.token
|
36
|
+
assert_equal options[:left] || 1, expr.left.value
|
37
|
+
assert_equal options[:right] || 2, expr.right.value
|
38
|
+
|
39
|
+
assert_operator(expr, src, options)
|
40
|
+
end
|
41
|
+
|
42
|
+
# UNARY
|
43
|
+
|
44
|
+
define_method :'test operator: +1 (+)' do
|
45
|
+
assert_unary_operator(:+, :src => '+a')
|
46
|
+
end
|
47
|
+
|
48
|
+
define_method :'test operator: -1 (-)' do
|
49
|
+
assert_unary_operator(:-, :src => '-b')
|
50
|
+
end
|
51
|
+
|
52
|
+
define_method :'test operator: !1 (!)' do
|
53
|
+
assert_unary_operator(:!)
|
54
|
+
end
|
55
|
+
|
56
|
+
define_method :'test operator: not 1 (not, without parentheses)' do
|
57
|
+
assert_unary_operator(:not, :src => 'not 1')
|
58
|
+
end
|
59
|
+
|
60
|
+
define_method :'test operator: not(1) (not, with parentheses)' do
|
61
|
+
assert_unary_operator(:not, :src => 'not(1)')
|
62
|
+
end
|
63
|
+
|
64
|
+
define_method :'test operator: ~1 (complement/bitwise-not)' do
|
65
|
+
assert_unary_operator(:~)
|
66
|
+
end
|
67
|
+
|
68
|
+
define_method :'test operator: (!1) (complement/bitwise-not, enclosing parentheses)' do
|
69
|
+
src = '(!1)'
|
70
|
+
assert_build(src)
|
71
|
+
end
|
72
|
+
|
73
|
+
define_method :"test operator: enclosing parentheses with leading space" do
|
74
|
+
src = 'not (@main or @sub)'
|
75
|
+
assert_build(src)
|
76
|
+
end
|
77
|
+
|
78
|
+
# BINARY
|
79
|
+
|
80
|
+
# arithmetical
|
81
|
+
|
82
|
+
define_method :'test operator: 1 + 2 (plus)' do
|
83
|
+
assert_binary_operator :'+'
|
84
|
+
end
|
85
|
+
|
86
|
+
define_method :'test operator: 1 - 2 (minus)' do
|
87
|
+
assert_binary_operator :'-'
|
88
|
+
end
|
89
|
+
|
90
|
+
define_method :'test operator: 1 * 2 (times)' do
|
91
|
+
assert_binary_operator :'*'
|
92
|
+
end
|
93
|
+
|
94
|
+
define_method :'test operator: 1 / 2 (over)' do
|
95
|
+
assert_binary_operator :'/'
|
96
|
+
end
|
97
|
+
|
98
|
+
define_method :'test operator: 1 ** 2 (exponentiation)' do
|
99
|
+
assert_binary_operator :'**'
|
100
|
+
end
|
101
|
+
|
102
|
+
define_method :'test operator: 1 % 2 (% / modulo)' do
|
103
|
+
assert_binary_operator :'%'
|
104
|
+
end
|
105
|
+
|
106
|
+
define_method :'test operator: (1 + 2) (plus, parentheses)' do
|
107
|
+
src = '(1+2)'
|
108
|
+
assert_build(src)
|
109
|
+
end
|
110
|
+
|
111
|
+
# logical
|
112
|
+
|
113
|
+
define_method :'test operator: 1 && 2 (&& / strong logical and)' do
|
114
|
+
assert_binary_operator :'&&'
|
115
|
+
end
|
116
|
+
|
117
|
+
define_method :'test operator: 1 || 2 (|| / strong logical or)' do
|
118
|
+
assert_binary_operator :'||'
|
119
|
+
end
|
120
|
+
|
121
|
+
define_method :'test binary: 1 and 2 (and / weak logical and)' do
|
122
|
+
assert_binary_operator :'and'
|
123
|
+
end
|
124
|
+
|
125
|
+
define_method :'test binary: 1 or 2 (or / weak logical or)' do
|
126
|
+
assert_binary_operator :'or'
|
127
|
+
end
|
128
|
+
|
129
|
+
define_method :'test operator: (1 and 2) (and, parentheses)' do
|
130
|
+
src = '(1 and 2)'
|
131
|
+
assert_build(src)
|
132
|
+
end
|
133
|
+
|
134
|
+
# bitwise
|
135
|
+
|
136
|
+
define_method :'test operator: 1 << 2 (<< / left-shift)' do
|
137
|
+
assert_binary_operator :'<<'
|
138
|
+
end
|
139
|
+
|
140
|
+
define_method :'test operator: 1 >> 2 (>> / right-shift)' do
|
141
|
+
assert_binary_operator :'>>'
|
142
|
+
end
|
143
|
+
|
144
|
+
define_method :'test binary: 1 & 2 (& / bit-wise and)' do
|
145
|
+
assert_binary_operator :'&'
|
146
|
+
end
|
147
|
+
|
148
|
+
define_method :'test binary: 1 | 2 (| / bit-wise or)' do
|
149
|
+
assert_binary_operator :'|'
|
150
|
+
end
|
151
|
+
|
152
|
+
define_method :'test binary: 1 ^ 2 (^ / bit-wise xor)' do
|
153
|
+
assert_binary_operator :'^'
|
154
|
+
end
|
155
|
+
|
156
|
+
# comparsion, equality, matching
|
157
|
+
|
158
|
+
define_method :'test binary: 1 < 2 (comparsion, smaller)' do
|
159
|
+
assert_binary_operator :'<'
|
160
|
+
end
|
161
|
+
|
162
|
+
define_method :'test binary: 1 <= 2 (comparsion, smaller or equal)' do
|
163
|
+
assert_binary_operator :'<='
|
164
|
+
end
|
165
|
+
|
166
|
+
define_method :'test binary: 1 > 2 (comparsion, greater)' do
|
167
|
+
assert_binary_operator :'>'
|
168
|
+
end
|
169
|
+
|
170
|
+
define_method :'test binary: 1 >= 2 (comparsion, greater or equal)' do
|
171
|
+
assert_binary_operator :'>='
|
172
|
+
end
|
173
|
+
|
174
|
+
define_method :'test binary: 1 <=> 2 (spaceship)' do
|
175
|
+
assert_binary_operator :'<=>'
|
176
|
+
end
|
177
|
+
|
178
|
+
define_method :'test binary: 1 == 2 (equals)' do
|
179
|
+
assert_binary_operator :'=='
|
180
|
+
end
|
181
|
+
|
182
|
+
define_method :'test binary: 1 != 2 (not equals)' do
|
183
|
+
assert_binary_operator :'!='
|
184
|
+
end
|
185
|
+
|
186
|
+
define_method :'test binary: 1 === 2 (threequals)' do
|
187
|
+
assert_binary_operator :'==='
|
188
|
+
end
|
189
|
+
|
190
|
+
define_method :'test binary: 1 =~ 2 (matches)' do
|
191
|
+
assert_binary_operator :'=~'
|
192
|
+
end
|
193
|
+
|
194
|
+
define_method :'test binary: 1 !~ 2 (not matches)' do
|
195
|
+
assert_binary_operator :'=~'
|
196
|
+
end
|
197
|
+
|
198
|
+
# TERNARY
|
199
|
+
|
200
|
+
define_method :'test ternary: 1 == 1 ? 2 : 3 (ifop)' do
|
201
|
+
src = '1 == 1 ? 2 : 3'
|
202
|
+
assert_build(src) do |node|
|
203
|
+
assert_equal Ruby::IfOp, node.first.class
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
define_method :'test ternary: ((1) ? 2 : (3)) (ifop, parentheses)' do
|
208
|
+
src = '((1) ? 2 : (3))'
|
209
|
+
assert_build(src)
|
210
|
+
end
|
211
|
+
|
212
|
+
# ======
|
213
|
+
|
214
|
+
define_method :'test operator order in an expression with multiple identical operators' do
|
215
|
+
src = 'foo + bar + baz'
|
216
|
+
assert_build(src)
|
217
|
+
# FIXME positions are messed up!
|
218
|
+
# assert_equal [0, 4], expr.left.operator.position.to_a
|
219
|
+
# assert_equal [0, 10], expr.operator.position.to_a
|
220
|
+
end
|
221
|
+
|
222
|
+
define_method :'test operator order in an expression with multiple different operators' do
|
223
|
+
src = 'foo + bar - baz'
|
224
|
+
assert_build(src)
|
225
|
+
end
|
226
|
+
|
227
|
+
define_method :'test operator order in an expression with multiple ternary operators (1)' do
|
228
|
+
src = "a ? b : c ? d : e"
|
229
|
+
assert_build(src)
|
230
|
+
end
|
231
|
+
|
232
|
+
define_method :'test operator order in an expression with multiple ternary operators (2)' do
|
233
|
+
src = "a ? b ? c : d : e"
|
234
|
+
assert_build(src)
|
235
|
+
end
|
236
|
+
|
237
|
+
# define_method :'test ambiguous argument' do
|
238
|
+
# src = 'a+ a +a'
|
239
|
+
# assert_equal src, build(src).to_ruby(true)
|
240
|
+
# end
|
241
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class SeparatorsTest < Test::Unit::TestCase
|
4
|
+
include TestHelper
|
5
|
+
|
6
|
+
define_method :"test separators in method definition (1)" do
|
7
|
+
src = "def foo\n ;bar\nend"
|
8
|
+
assert_build(src)
|
9
|
+
end
|
10
|
+
|
11
|
+
define_method :"test separators in method definition (2)" do
|
12
|
+
src = "def foo;\nend"
|
13
|
+
assert_build(src)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# def foo
|
18
|
+
# ;
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# def foo
|
22
|
+
# bar;
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# def foo
|
26
|
+
# bar
|
27
|
+
# ;
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# def foo
|
31
|
+
# ;bar
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# def foo
|
35
|
+
# ;
|
36
|
+
# bar
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# def foo
|
40
|
+
# ;bar;
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# def foo
|
44
|
+
# ;
|
45
|
+
# bar
|
46
|
+
# ;
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
# def foo(a, b)
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
# foo { |a, b| }
|
53
|
+
# foo { |a, b| ; }
|
54
|
+
# foo { |a, b| bar; }
|
55
|
+
# foo { |a, b| ;bar }
|
56
|
+
#
|
57
|
+
# foo do |a, b|
|
58
|
+
# ;
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# foo do
|
62
|
+
# bar;
|
63
|
+
# end
|
64
|
+
#
|
65
|
+
# foo do
|
66
|
+
# bar
|
67
|
+
# ;
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
# foo do
|
71
|
+
# ;bar
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# foo do
|
75
|
+
# ;
|
76
|
+
# bar
|
77
|
+
# end
|
78
|
+
#
|
79
|
+
# foo do
|
80
|
+
# ;bar;
|
81
|
+
# end
|
82
|
+
#
|
83
|
+
# foo do
|
84
|
+
# ;
|
85
|
+
# bar
|
86
|
+
# ;
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# begin
|
90
|
+
# ;
|
91
|
+
# rescue
|
92
|
+
# ;
|
93
|
+
# else
|
94
|
+
# ;
|
95
|
+
# ensure
|
96
|
+
# ;
|
97
|
+
# end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class StatementsTest < Test::Unit::TestCase
|
4
|
+
include TestHelper
|
5
|
+
|
6
|
+
define_method :"test parse error raises a ParseError" do
|
7
|
+
src = '[idx [rows, cols]]'
|
8
|
+
assert_raises(Ripper::RubyBuilder::ParseError) { build(src) }
|
9
|
+
end
|
10
|
+
|
11
|
+
define_method :"test a body with a single call, no semicolon" do
|
12
|
+
src = 'foo'
|
13
|
+
assert_build(src)
|
14
|
+
end
|
15
|
+
|
16
|
+
define_method :"test a body with a single call, lefthand semicolon" do
|
17
|
+
src = ';foo'
|
18
|
+
assert_build(src)
|
19
|
+
end
|
20
|
+
|
21
|
+
define_method :"test a body with a single call, righthand semicolon" do
|
22
|
+
src = 'foo;'
|
23
|
+
assert_build(src)
|
24
|
+
end
|
25
|
+
|
26
|
+
define_method :"test a body with a single call, two semicolons" do
|
27
|
+
src = ';foo;'
|
28
|
+
assert_build(src)
|
29
|
+
end
|
30
|
+
|
31
|
+
define_method :"test a body with a few calls and a few semicolons (1)" do
|
32
|
+
src = ';foo;;bar;baz;'
|
33
|
+
assert_build(src)
|
34
|
+
end
|
35
|
+
|
36
|
+
define_method :"test a body with a few calls and a few semicolons (2)" do
|
37
|
+
src = ';foo;;bar;;;;baz;'
|
38
|
+
assert_build(src)
|
39
|
+
end
|
40
|
+
|
41
|
+
define_method :"test a body with a few calls and a few semicolons (3)" do
|
42
|
+
src = ';;;foo;;bar;baz;;;;'
|
43
|
+
assert_build(src)
|
44
|
+
end
|
45
|
+
|
46
|
+
define_method :"test a nested body with a single call, no semicolon (1)" do
|
47
|
+
src = '(foo)'
|
48
|
+
assert_build(src)
|
49
|
+
end
|
50
|
+
|
51
|
+
define_method :"test a nested body with a single call, no semicolon (2)" do
|
52
|
+
src = '(((foo)); (bar))'
|
53
|
+
assert_build(src)
|
54
|
+
end
|
55
|
+
|
56
|
+
define_method :"test a nested body with a single call, no semicolon (2)" do
|
57
|
+
src = '(((foo)); ((bar); (baz)));'
|
58
|
+
assert_build(src)
|
59
|
+
end
|
60
|
+
|
61
|
+
define_method :"test a statement with preceding and succeding whitespace" do
|
62
|
+
src = "\n foo \n \n"
|
63
|
+
assert_build(src)
|
64
|
+
end
|
65
|
+
|
66
|
+
define_method :"test ruby code using the __END__ keyword" do
|
67
|
+
src = "foo\n__END__\nbar"
|
68
|
+
assert_build(src)
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
|
3
|
+
class StringTest < Test::Unit::TestCase
|
4
|
+
include TestHelper
|
5
|
+
|
6
|
+
def assert_string(src, value = nil, klass = Ruby::String)
|
7
|
+
assert_build(src) do |node|
|
8
|
+
assert_equal klass, node.first.class
|
9
|
+
assert_equal value, node.first.value if value
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
define_method :"test an empty string" do
|
14
|
+
src = '""'
|
15
|
+
assert_string(src, '')
|
16
|
+
end
|
17
|
+
|
18
|
+
define_method :"test a double quoted string" do
|
19
|
+
src = '"foo"'
|
20
|
+
assert_string(src, 'foo')
|
21
|
+
end
|
22
|
+
|
23
|
+
define_method :"test a single quoted string" do
|
24
|
+
src = "'foo'"
|
25
|
+
assert_string(src, 'foo')
|
26
|
+
end
|
27
|
+
|
28
|
+
define_method :"test a percent-parens delimited string" do
|
29
|
+
src = "%(foo)"
|
30
|
+
assert_string(src, 'foo')
|
31
|
+
end
|
32
|
+
|
33
|
+
define_method :"test a percent-dot delimited string" do
|
34
|
+
src = "%.foo."
|
35
|
+
assert_string(src, 'foo')
|
36
|
+
end
|
37
|
+
|
38
|
+
define_method :"test a percent-pipe delimited string" do
|
39
|
+
src = "%|foo|"
|
40
|
+
assert_string(src, 'foo')
|
41
|
+
end
|
42
|
+
|
43
|
+
define_method :"test a double-quoted string with an embedded expression" do
|
44
|
+
src = '"foo#{bar}"'
|
45
|
+
assert_string(src)
|
46
|
+
end
|
47
|
+
|
48
|
+
define_method :"test a percent-parentheses delimited string with an embedded expression" do
|
49
|
+
src = '%(foo #{bar})'
|
50
|
+
assert_string(src)
|
51
|
+
end
|
52
|
+
|
53
|
+
define_method :"test a percent-parentheses delimited string after a word-list" do
|
54
|
+
src = "%w(a)\n%(b)"
|
55
|
+
assert_build(src)
|
56
|
+
end
|
57
|
+
|
58
|
+
define_method :"test a backtick delimited string" do
|
59
|
+
src = "`foo`"
|
60
|
+
assert_build(src)
|
61
|
+
end
|
62
|
+
|
63
|
+
define_method :"test a percent-x delimited string" do
|
64
|
+
src = "%x(foo)"
|
65
|
+
assert_build(src)
|
66
|
+
end
|
67
|
+
|
68
|
+
define_method :"test a slash delimited regexp" do
|
69
|
+
src = "/foo/"
|
70
|
+
assert_build(src)
|
71
|
+
end
|
72
|
+
|
73
|
+
define_method :"test a percent-r delimited regexp" do
|
74
|
+
src = "%r(foo)"
|
75
|
+
assert_build(src)
|
76
|
+
end
|
77
|
+
|
78
|
+
define_method :"test a string with a backreference" do
|
79
|
+
src = '"#{$1}"'
|
80
|
+
assert_build(src)
|
81
|
+
end
|
82
|
+
|
83
|
+
define_method :"test a string with a dvar" do
|
84
|
+
src = '"#$0"'
|
85
|
+
assert_build(src)
|
86
|
+
end
|
87
|
+
|
88
|
+
define_method :'test string concat' do
|
89
|
+
src = "'a' 'b'"
|
90
|
+
assert_build(src)
|
91
|
+
end
|
92
|
+
end
|