ParseTree 2.2.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|