ParseTree 2.2.0 → 3.0.0
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.
- data/.autotest +16 -0
- data/History.txt +48 -0
- data/Manifest.txt +3 -6
- data/Rakefile +8 -5
- data/lib/parse_tree.rb +67 -11
- data/lib/parse_tree_extensions.rb +69 -0
- data/lib/unified_ruby.rb +170 -42
- data/test/pt_testcase.rb +4240 -2399
- data/test/test_parse_tree.rb +52 -20
- data/test/test_parse_tree_extensions.rb +39 -0
- data/test/test_unified_ruby.rb +292 -234
- metadata +20 -11
- data/lib/composite_sexp_processor.rb +0 -49
- data/lib/sexp.rb +0 -282
- data/lib/sexp_processor.rb +0 -336
- data/test/test_composite_sexp_processor.rb +0 -70
- data/test/test_sexp.rb +0 -313
- data/test/test_sexp_processor.rb +0 -297
@@ -1,70 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby -w
|
2
|
-
|
3
|
-
$TESTING = true
|
4
|
-
|
5
|
-
require 'composite_sexp_processor'
|
6
|
-
require 'test/unit'
|
7
|
-
|
8
|
-
class FakeProcessor1 < SexpProcessor # ZenTest SKIP
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
super
|
12
|
-
self.warn_on_default = false
|
13
|
-
self.default_method = :default_processor
|
14
|
-
self.expected = Array
|
15
|
-
end
|
16
|
-
|
17
|
-
def default_processor(exp)
|
18
|
-
result = []
|
19
|
-
result << exp.shift
|
20
|
-
until exp.empty? do
|
21
|
-
result << exp.shift.to_s + " woot"
|
22
|
-
end
|
23
|
-
result
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class TestCompositeSexpProcessor < Test::Unit::TestCase
|
28
|
-
|
29
|
-
def setup
|
30
|
-
@p = CompositeSexpProcessor.new
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_process_default
|
34
|
-
data = [1, 2, 3]
|
35
|
-
result = @p.process(data.dup)
|
36
|
-
assert_equal(data.dup, result)
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_process_fake1
|
40
|
-
data = [:x, 1, 2, 3]
|
41
|
-
@p << FakeProcessor1.new
|
42
|
-
result = @p.process(data.dup)
|
43
|
-
assert_equal [:x, "1 woot", "2 woot", "3 woot"], result
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_process_fake1_twice
|
47
|
-
data = [:x, 1, 2, 3]
|
48
|
-
@p << FakeProcessor1.new
|
49
|
-
@p << FakeProcessor1.new
|
50
|
-
result = @p.process(data.dup)
|
51
|
-
assert_equal [:x, "1 woot woot", "2 woot woot", "3 woot woot"], result
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_processors
|
55
|
-
# everything is tested by test_append
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_append
|
59
|
-
assert_equal([], @p.processors)
|
60
|
-
|
61
|
-
assert_raises(ArgumentError) do
|
62
|
-
@p << 42
|
63
|
-
end
|
64
|
-
|
65
|
-
fp1 = FakeProcessor1.new
|
66
|
-
@p << fp1
|
67
|
-
assert_equal([fp1], @p.processors)
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
data/test/test_sexp.rb
DELETED
@@ -1,313 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby -w
|
2
|
-
|
3
|
-
$TESTING = true
|
4
|
-
|
5
|
-
require 'test/unit' if $0 == __FILE__ unless defined? $ZENTEST and $ZENTEST
|
6
|
-
require 'test/unit/testcase'
|
7
|
-
require 'sexp_processor'
|
8
|
-
require 'stringio'
|
9
|
-
require 'pp'
|
10
|
-
|
11
|
-
class SexpTestCase < Test::Unit::TestCase
|
12
|
-
|
13
|
-
unless defined? Mini then
|
14
|
-
alias :refute_nil :assert_not_nil
|
15
|
-
alias :refute_equal :assert_not_equal
|
16
|
-
alias :assert_raises :assert_raise
|
17
|
-
end
|
18
|
-
|
19
|
-
# KEY for regex tests
|
20
|
-
# :a == no change
|
21
|
-
# :b == will change (but sometimes ONLY once)
|
22
|
-
# :c == change to
|
23
|
-
|
24
|
-
include SexpMatchSpecials
|
25
|
-
|
26
|
-
def util_equals(x, y)
|
27
|
-
result = x == y
|
28
|
-
refute_nil result, "#{x.inspect} does not === #{y.inspect}"
|
29
|
-
end
|
30
|
-
|
31
|
-
def util_equals3(x, y)
|
32
|
-
result = x === y
|
33
|
-
refute_nil result, "#{x.inspect} does not === #{y.inspect}"
|
34
|
-
end
|
35
|
-
|
36
|
-
def setup
|
37
|
-
@any = ANY()
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_stupid
|
41
|
-
# shuts up test/unit
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
class TestSexp < SexpTestCase # ZenTest FULL
|
46
|
-
|
47
|
-
class SexpFor
|
48
|
-
def method
|
49
|
-
1
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def util_pretty_print(expect, input)
|
54
|
-
io = StringIO.new
|
55
|
-
PP.pp(input, io)
|
56
|
-
io.rewind
|
57
|
-
assert_equal(expect, io.read.chomp)
|
58
|
-
end
|
59
|
-
|
60
|
-
def setup
|
61
|
-
super
|
62
|
-
@sexp_class = Object.const_get(self.class.name[4..-1])
|
63
|
-
@processor = SexpProcessor.new
|
64
|
-
@sexp = @sexp_class.new(1, 2, 3)
|
65
|
-
@basic_sexp = s(:lasgn, :var, s(:lit, 42))
|
66
|
-
@re = s(:lit, 42)
|
67
|
-
@bad1 = s(:lit, 24)
|
68
|
-
@bad1 = s(:blah, 42)
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_class_for
|
72
|
-
sexp = Sexp.for SexpFor
|
73
|
-
assert_equal s(:class, :"TestSexp::SexpFor"), sexp[0..1]
|
74
|
-
|
75
|
-
sexp = Sexp.for SexpFor, :method
|
76
|
-
assert_equal s(:defn, :method), sexp[0..1]
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_class_from_array
|
80
|
-
# raise NotImplementedError, 'Need to write test_class_from_array'
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_class_index
|
84
|
-
# raise NotImplementedError, 'Need to write test_class_index'
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_array_type_eh
|
88
|
-
assert_equal false, @sexp.array_type?
|
89
|
-
@sexp.unshift :array
|
90
|
-
assert_equal true, @sexp.array_type?
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_each_of_type
|
94
|
-
# TODO: huh... this tests fails if top level sexp :b is removed
|
95
|
-
@sexp = s(:b, s(:a, s(:b, s(:a), :a, s(:b, :a), s(:b, s(:a)))))
|
96
|
-
count = 0
|
97
|
-
@sexp.each_of_type(:a) do |exp|
|
98
|
-
count += 1
|
99
|
-
end
|
100
|
-
assert_equal(3, count, "must find 3 a's in #{@sexp.inspect}")
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_equals2_array
|
104
|
-
# can't use assert_equals because it uses array as receiver
|
105
|
-
refute_equal(@sexp, [1, 2, 3],
|
106
|
-
"Sexp must not be equal to equivalent array")
|
107
|
-
# both directions just in case
|
108
|
-
# HACK - this seems to be a bug in ruby as far as I'm concerned
|
109
|
-
# assert_not_equal([1, 2, 3], @sexp,
|
110
|
-
# "Sexp must not be equal to equivalent array")
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_equals2_not_body
|
114
|
-
sexp2 = s(1, 2, 5)
|
115
|
-
refute_equal(@sexp, sexp2)
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_equals2_sexp
|
119
|
-
sexp2 = s(1, 2, 3)
|
120
|
-
unless @sexp.class == Sexp then
|
121
|
-
refute_equal(@sexp, sexp2)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_equals3_any
|
126
|
-
util_equals3 @any, s()
|
127
|
-
util_equals3 @any, s(:a)
|
128
|
-
util_equals3 @any, s(:a, :b, s(:c))
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_equals3_full_match
|
132
|
-
util_equals3 s(), s() # 0
|
133
|
-
util_equals3 s(:blah), s(:blah) # 1
|
134
|
-
util_equals3 s(:a, :b), s(:a, :b) # 2
|
135
|
-
util_equals3 @basic_sexp, @basic_sexp.dup # deeper structure
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_equals3_mismatch
|
139
|
-
assert_nil s() === s(:a)
|
140
|
-
assert_nil s(:a) === s()
|
141
|
-
assert_nil s(:blah1) === s(:blah2)
|
142
|
-
assert_nil s(:a) === s(:a, :b)
|
143
|
-
assert_nil s(:a, :b) === s(:a)
|
144
|
-
assert_nil s(:a1, :b) === s(:a2, :b)
|
145
|
-
assert_nil s(:a, :b1) === s(:a, :b2)
|
146
|
-
assert_nil @basic_sexp === @basic_sexp.dup.push(42)
|
147
|
-
assert_nil @basic_sexp.dup.push(42) === @basic_sexp
|
148
|
-
end
|
149
|
-
|
150
|
-
def test_equals3_subset_match
|
151
|
-
util_equals3 s(:a), s(s(:a), s(:b)) # left
|
152
|
-
util_equals3 s(:a), s(:blah, s(:a ), s(:b)) # mid 1
|
153
|
-
util_equals3 s(:a, 1), s(:blah, s(:a, 1), s(:b)) # mid 2
|
154
|
-
util_equals3 @basic_sexp, s(:blah, @basic_sexp.dup, s(:b)) # mid deeper
|
155
|
-
util_equals3 @basic_sexp, s(@basic_sexp.dup, s(:a), s(:b)) # left deeper
|
156
|
-
|
157
|
-
util_equals3 s(:a), s(:blah, s(:blah, s(:a))) # left deeper
|
158
|
-
end
|
159
|
-
|
160
|
-
# def test_equalstilde_any
|
161
|
-
# result = @basic_sexp =~ s(:lit, ANY())
|
162
|
-
# p result
|
163
|
-
# assert result
|
164
|
-
# end
|
165
|
-
|
166
|
-
def test_equalstilde_fancy
|
167
|
-
assert_nil s(:b) =~ s(:a, s(:b), :c)
|
168
|
-
refute_nil s(:a, s(:b), :c) =~ s(:b)
|
169
|
-
end
|
170
|
-
|
171
|
-
def test_equalstilde_plain
|
172
|
-
result = @basic_sexp =~ @re
|
173
|
-
assert result
|
174
|
-
end
|
175
|
-
|
176
|
-
def test_find_and_replace_all
|
177
|
-
@sexp = s(:a, s(:b, s(:a), s(:b), s(:b, s(:a))))
|
178
|
-
expected = s(:a, s(:a, s(:a), s(:a), s(:a, s(:a))))
|
179
|
-
|
180
|
-
@sexp.find_and_replace_all(:b, :a)
|
181
|
-
|
182
|
-
assert_equal(expected, @sexp)
|
183
|
-
end
|
184
|
-
|
185
|
-
def test_gsub
|
186
|
-
assert_equal s(:c), s().gsub(s(), s(:c))
|
187
|
-
assert_equal s(:c), s(:b).gsub(s(:b), s(:c))
|
188
|
-
assert_equal s(:a), s(:a).gsub(s(:b), s(:c))
|
189
|
-
assert_equal s(:a, s(:c)), s(:a, s(:b)).gsub(s(:b), s(:c))
|
190
|
-
|
191
|
-
assert_equal(s(:a, s(:c), s(:c)),
|
192
|
-
s(:a, s(:b), s(:b)).gsub(s(:b), s(:c)))
|
193
|
-
assert_equal(s(:a, s(:c), s(:a, s(:c))),
|
194
|
-
s(:a, s(:b), s(:a, s(:b))).gsub(s(:b), s(:c)))
|
195
|
-
end
|
196
|
-
|
197
|
-
def test_inspect
|
198
|
-
k = @sexp_class
|
199
|
-
n = k.name[0].chr.downcase
|
200
|
-
assert_equal("#{n}()",
|
201
|
-
k.new().inspect)
|
202
|
-
assert_equal("#{n}(:a)",
|
203
|
-
k.new(:a).inspect)
|
204
|
-
assert_equal("#{n}(:a, :b)",
|
205
|
-
k.new(:a, :b).inspect)
|
206
|
-
assert_equal("#{n}(:a, #{n}(:b))",
|
207
|
-
k.new(:a, k.new(:b)).inspect)
|
208
|
-
end
|
209
|
-
|
210
|
-
def test_method_missing
|
211
|
-
assert_nil @sexp.not_there
|
212
|
-
assert_equal s(:lit, 42), @basic_sexp.lit
|
213
|
-
end
|
214
|
-
|
215
|
-
def test_method_missing_ambigious
|
216
|
-
assert_raises NoMethodError do
|
217
|
-
pirate = s(:says, s(:arrr!), s(:arrr!), s(:arrr!))
|
218
|
-
pirate.arrr!
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
def test_method_missing_deep
|
223
|
-
sexp = s(:blah, s(:a, s(:b, s(:c, :yay!))))
|
224
|
-
assert_equal(s(:c, :yay!), sexp.a.b.c)
|
225
|
-
end
|
226
|
-
|
227
|
-
def test_method_missing_delete
|
228
|
-
sexp = s(:blah, s(:a, s(:b, s(:c, :yay!))))
|
229
|
-
|
230
|
-
assert_equal(s(:c, :yay!), sexp.a.b.c(true))
|
231
|
-
assert_equal(s(:blah, s(:a, s(:b))), sexp)
|
232
|
-
end
|
233
|
-
|
234
|
-
def test_pretty_print
|
235
|
-
util_pretty_print("s()",
|
236
|
-
s())
|
237
|
-
util_pretty_print("s(:a)",
|
238
|
-
s(:a))
|
239
|
-
util_pretty_print("s(:a, :b)",
|
240
|
-
s(:a, :b))
|
241
|
-
util_pretty_print("s(:a, s(:b))",
|
242
|
-
s(:a, s(:b)))
|
243
|
-
end
|
244
|
-
|
245
|
-
def test_sexp_body
|
246
|
-
assert_equal [2, 3], @sexp.sexp_body
|
247
|
-
end
|
248
|
-
|
249
|
-
def test_shift
|
250
|
-
assert_equal(1, @sexp.shift)
|
251
|
-
assert_equal(2, @sexp.shift)
|
252
|
-
assert_equal(3, @sexp.shift)
|
253
|
-
|
254
|
-
assert_raises(RuntimeError) do
|
255
|
-
@sexp.shift
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
def test_structure
|
260
|
-
@sexp = s(:a, 1, 2, s(:b, 3, 4), 5, 6)
|
261
|
-
backup = @sexp.deep_clone
|
262
|
-
expected = s(:a, s(:b))
|
263
|
-
|
264
|
-
assert_equal(expected, @sexp.structure)
|
265
|
-
assert_equal(backup, @sexp)
|
266
|
-
end
|
267
|
-
|
268
|
-
def test_sub
|
269
|
-
assert_equal s(:c), s().sub(s(), s(:c))
|
270
|
-
assert_equal s(:c), s(:b).sub(s(:b), s(:c))
|
271
|
-
assert_equal s(:a), s(:a).sub(s(:b), s(:c))
|
272
|
-
assert_equal s(:a, s(:c)), s(:a, s(:c)).sub(s(:b), s(:c))
|
273
|
-
|
274
|
-
assert_equal s(:a, s(:c), s(:b)), s(:a, s(:b), s(:b)).sub(s(:b), s(:c))
|
275
|
-
|
276
|
-
assert_equal(s(:a, s(:c), s(:a)),
|
277
|
-
s(:a, s(:b), s(:a)).sub(s(:b), s(:c)))
|
278
|
-
assert_equal(s(:a, s(:c), s(:a, s(:a))),
|
279
|
-
s(:a, s(:b), s(:a, s(:a))).sub(s(:b), s(:c)))
|
280
|
-
assert_equal(s(:a, s(:a), s(:a, s(:c), s(:b))),
|
281
|
-
s(:a, s(:a), s(:a, s(:b), s(:b))).sub(s(:b), s(:c)))
|
282
|
-
assert_equal(s(:a, s(:c, s(:b))),
|
283
|
-
s(:a, s(:b)).sub(s(:b), s(:c, s(:b))))
|
284
|
-
end
|
285
|
-
|
286
|
-
def test_to_a
|
287
|
-
assert_equal([1, 2, 3], @sexp.to_a)
|
288
|
-
end
|
289
|
-
|
290
|
-
def test_to_s
|
291
|
-
test_inspect
|
292
|
-
end
|
293
|
-
end
|
294
|
-
|
295
|
-
class TestSexpAny < SexpTestCase
|
296
|
-
|
297
|
-
def setup
|
298
|
-
super
|
299
|
-
end
|
300
|
-
|
301
|
-
def test_equals
|
302
|
-
util_equals @any, s()
|
303
|
-
util_equals @any, s(:a)
|
304
|
-
util_equals @any, s(:a, :b, s(:c))
|
305
|
-
end
|
306
|
-
|
307
|
-
def test_equals3
|
308
|
-
util_equals3 @any, s()
|
309
|
-
util_equals3 @any, s(:a)
|
310
|
-
util_equals3 @any, s(:a, :b, s(:c))
|
311
|
-
end
|
312
|
-
|
313
|
-
end
|
data/test/test_sexp_processor.rb
DELETED
@@ -1,297 +0,0 @@
|
|
1
|
-
#!/usr/local/bin/ruby -w
|
2
|
-
|
3
|
-
$TESTING = true
|
4
|
-
|
5
|
-
require 'sexp_processor'
|
6
|
-
require 'stringio'
|
7
|
-
require 'test/unit'
|
8
|
-
require 'pp'
|
9
|
-
|
10
|
-
# Fake test classes:
|
11
|
-
|
12
|
-
class TestProcessor < SexpProcessor # ZenTest SKIP
|
13
|
-
attr_accessor :auto_shift_type
|
14
|
-
|
15
|
-
def process_acc1(exp)
|
16
|
-
out = self.expected.new(:acc2, exp.thing_three, exp.thing_two, exp.thing_one)
|
17
|
-
exp.clear
|
18
|
-
return out
|
19
|
-
end
|
20
|
-
|
21
|
-
def process_acc2(exp)
|
22
|
-
out = []
|
23
|
-
out << exp.thing_one
|
24
|
-
end
|
25
|
-
|
26
|
-
def process_specific(exp)
|
27
|
-
name = exp.shift
|
28
|
-
result = s(:blah)
|
29
|
-
until exp.empty?
|
30
|
-
result.push process(exp.shift)
|
31
|
-
end
|
32
|
-
result
|
33
|
-
end
|
34
|
-
|
35
|
-
def process_strip(exp)
|
36
|
-
result = exp.deep_clone
|
37
|
-
exp.clear
|
38
|
-
result
|
39
|
-
end
|
40
|
-
|
41
|
-
def process_nonempty(exp)
|
42
|
-
s(*exp)
|
43
|
-
end
|
44
|
-
|
45
|
-
def process_broken(exp)
|
46
|
-
result = [*exp]
|
47
|
-
exp.clear
|
48
|
-
result
|
49
|
-
end
|
50
|
-
|
51
|
-
def process_expected(exp)
|
52
|
-
exp.clear
|
53
|
-
return {}
|
54
|
-
end
|
55
|
-
|
56
|
-
def process_string(exp)
|
57
|
-
return exp.shift
|
58
|
-
end
|
59
|
-
|
60
|
-
def rewrite_rewritable(exp) # (a b c) => (a c b)
|
61
|
-
return s(exp.shift, exp.pop, exp.shift)
|
62
|
-
end
|
63
|
-
|
64
|
-
def process_rewritable(exp)
|
65
|
-
@n ||= 0
|
66
|
-
exp.shift # name
|
67
|
-
result = s(:rewritten)
|
68
|
-
until exp.empty?
|
69
|
-
result.push process(exp.shift)
|
70
|
-
end
|
71
|
-
result.push @n
|
72
|
-
@n += 1
|
73
|
-
result
|
74
|
-
end
|
75
|
-
|
76
|
-
def rewrite_major_rewrite(exp)
|
77
|
-
exp[0] = :rewritable
|
78
|
-
exp
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class TestProcessorDefault < SexpProcessor # ZenTest SKIP
|
83
|
-
def initialize
|
84
|
-
super
|
85
|
-
self.default_method = :def_method
|
86
|
-
end
|
87
|
-
|
88
|
-
def def_method(exp)
|
89
|
-
exp.clear
|
90
|
-
self.expected.new(42)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
# Real test classes:
|
95
|
-
|
96
|
-
class TestSexpProcessor < Test::Unit::TestCase
|
97
|
-
|
98
|
-
def setup
|
99
|
-
@processor = TestProcessor.new
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_process_specific
|
103
|
-
a = [:specific, [:x, 1], [:y, 2], [:z, 3]]
|
104
|
-
expected = [:blah, [:x, 1], [:y, 2], [:z, 3]]
|
105
|
-
assert_equal(expected, @processor.process(a))
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_process_generic
|
109
|
-
a = [:blah, 1, 2, 3]
|
110
|
-
expected = a.deep_clone
|
111
|
-
assert_equal(expected, @processor.process(a))
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_process_default
|
115
|
-
@processor = TestProcessorDefault.new
|
116
|
-
@processor.warn_on_default = false
|
117
|
-
|
118
|
-
a = s(:blah, 1, 2, 3)
|
119
|
-
assert_equal(@processor.expected.new(42), @processor.process(a))
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_process_not_sexp
|
123
|
-
@processor = TestProcessor.new
|
124
|
-
@processor.warn_on_default = false
|
125
|
-
|
126
|
-
assert_raises SexpTypeError do
|
127
|
-
@processor.process([:broken, 1, 2, 3])
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_process_unsupported_wrong
|
132
|
-
@processor = TestProcessor.new
|
133
|
-
@processor.unsupported << :strip
|
134
|
-
|
135
|
-
assert_raises UnsupportedNodeError do
|
136
|
-
@processor.process([:whatever])
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def test_unsupported_equal
|
141
|
-
@processor.strict = true
|
142
|
-
@processor.unsupported = [ :unsupported ]
|
143
|
-
assert_raises UnsupportedNodeError do
|
144
|
-
@processor.process([:unsupported, 42])
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def test_strict
|
149
|
-
@processor.strict = true
|
150
|
-
assert_raises UnknownNodeError do
|
151
|
-
@processor.process([:blah, 1, 2, 3])
|
152
|
-
end
|
153
|
-
end
|
154
|
-
def test_strict=; end #Handled
|
155
|
-
|
156
|
-
def test_require_empty_false
|
157
|
-
@processor.require_empty = false
|
158
|
-
|
159
|
-
@processor.process([:nonempty, 1, 2, 3])
|
160
|
-
end
|
161
|
-
|
162
|
-
def test_require_empty_true
|
163
|
-
assert_raises NotEmptyError do
|
164
|
-
@processor.process([:nonempty, 1, 2, 3])
|
165
|
-
end
|
166
|
-
end
|
167
|
-
def test_require_empty=; end # handled
|
168
|
-
|
169
|
-
def test_process_strip
|
170
|
-
@processor.auto_shift_type = true
|
171
|
-
assert_equal([1, 2, 3], @processor.process(s(:strip, 1, 2, 3)))
|
172
|
-
end
|
173
|
-
|
174
|
-
def test_rewrite
|
175
|
-
assert_equal(s(:rewritable, :b, :a),
|
176
|
-
@processor.rewrite(s(:rewritable, :a, :b)))
|
177
|
-
end
|
178
|
-
|
179
|
-
def test_rewrite_different_type
|
180
|
-
assert_equal(s(:rewritable, :b, :a),
|
181
|
-
@processor.rewrite(s(:major_rewrite, :a, :b)))
|
182
|
-
end
|
183
|
-
|
184
|
-
def test_rewrite_deep
|
185
|
-
assert_equal(s(:specific, s(:rewritable, :b, :a)),
|
186
|
-
@processor.rewrite(s(:specific, s(:rewritable, :a, :b))))
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_rewrite_not_empty
|
190
|
-
insert = s(:rewritable, 1, 2, 2)
|
191
|
-
expect = s(:rewritable, 2, 1)
|
192
|
-
result = @processor.rewrite(insert)
|
193
|
-
assert_equal(expect, result)
|
194
|
-
assert_equal(s(2), insert) # post-processing
|
195
|
-
end
|
196
|
-
|
197
|
-
def test_process_rewrite
|
198
|
-
assert_equal(s(:rewritten, s(:y, 2), s(:x, 1), 0),
|
199
|
-
@processor.process(s(:rewritable, s(:x, 1), s(:y, 2))))
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_process_rewrite_deep
|
203
|
-
assert_equal(s(:blah, s(:rewritten, s(:b), s(:a), 0)),
|
204
|
-
@processor.process(s(:specific, s(:rewritable, s(:a), s(:b)))))
|
205
|
-
end
|
206
|
-
|
207
|
-
def test_rewrite_depth_first
|
208
|
-
inn = s(:specific,
|
209
|
-
s(:rewritable,
|
210
|
-
s(:a),
|
211
|
-
s(:rewritable,
|
212
|
-
s(:rewritable, s(:b), s(:c)),
|
213
|
-
s(:d))))
|
214
|
-
out = s(:specific,
|
215
|
-
s(:rewritable,
|
216
|
-
s(:rewritable,
|
217
|
-
s(:d),
|
218
|
-
s(:rewritable, s(:c), s(:b))),
|
219
|
-
s(:a)))
|
220
|
-
|
221
|
-
assert_equal(out, @processor.rewrite(inn))
|
222
|
-
end
|
223
|
-
|
224
|
-
def test_process_rewrite_depth_first
|
225
|
-
inn = s(:specific,
|
226
|
-
s(:rewritable,
|
227
|
-
s(:a),
|
228
|
-
s(:rewritable,
|
229
|
-
s(:rewritable, s(:b), s(:c)),
|
230
|
-
s(:d))))
|
231
|
-
out = s(:blah,
|
232
|
-
s(:rewritten,
|
233
|
-
s(:rewritten,
|
234
|
-
s(:d),
|
235
|
-
s(:rewritten, s(:c), s(:b), 0), 1),
|
236
|
-
s(:a), 2))
|
237
|
-
|
238
|
-
assert_equal(out, @processor.process(inn))
|
239
|
-
end
|
240
|
-
|
241
|
-
def test_assert_type_hit
|
242
|
-
@processor.assert_type([:blah, 1, 2, 3], :blah)
|
243
|
-
end
|
244
|
-
|
245
|
-
def test_assert_type_miss
|
246
|
-
assert_raises SexpTypeError do
|
247
|
-
@processor.assert_type([:thingy, 1, 2, 3], :blah)
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
def test_generate
|
252
|
-
# nothing to test at this time... soon.
|
253
|
-
end
|
254
|
-
|
255
|
-
def test_auto_shift_type
|
256
|
-
@processor.auto_shift_type = false
|
257
|
-
assert_equal(false, @processor.auto_shift_type)
|
258
|
-
@processor.auto_shift_type = true
|
259
|
-
assert_equal(true, @processor.auto_shift_type)
|
260
|
-
end
|
261
|
-
def test_auto_shift_type_equal; end # handled
|
262
|
-
|
263
|
-
def test_default_method
|
264
|
-
# default functionality tested in process_default
|
265
|
-
assert_nil @processor.default_method
|
266
|
-
@processor.default_method = :something
|
267
|
-
assert_equal :something, @processor.default_method
|
268
|
-
end
|
269
|
-
def test_default_method=; end # handled
|
270
|
-
|
271
|
-
def test_expected
|
272
|
-
assert_equal Sexp, @processor.expected
|
273
|
-
assert_raises SexpTypeError do
|
274
|
-
@processor.process([:expected]) # should raise
|
275
|
-
end
|
276
|
-
|
277
|
-
@processor.process(s(:str, "string")) # shouldn't raise
|
278
|
-
|
279
|
-
@processor.expected = Hash
|
280
|
-
assert_equal Hash, @processor.expected
|
281
|
-
assert !(Hash === s()), "Hash === s() should not be true"
|
282
|
-
|
283
|
-
assert_raises SexpTypeError do
|
284
|
-
@processor.process(s(:string, "string")) # should raise
|
285
|
-
end
|
286
|
-
|
287
|
-
@processor.process([:expected]) # shouldn't raise
|
288
|
-
end
|
289
|
-
def test_expected=; end # handled
|
290
|
-
|
291
|
-
# Not Testing:
|
292
|
-
def test_debug; end
|
293
|
-
def test_debug=; end
|
294
|
-
def test_warn_on_default; end
|
295
|
-
def test_warn_on_default=; end
|
296
|
-
|
297
|
-
end
|