mvz-live_ast 2.0.0 → 2.1.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.
- checksums.yaml +4 -4
- data/CHANGES.rdoc +5 -0
- data/README.rdoc +14 -0
- data/lib/live_ast/base.rb +7 -9
- data/lib/live_ast/irb_spy.rb +1 -1
- data/lib/live_ast/replace_caller.rb +14 -0
- data/lib/live_ast/version.rb +1 -1
- metadata +75 -116
- data/Rakefile +0 -62
- data/devel/levitate.rb +0 -184
- data/devel/levitate_config.rb +0 -4
- data/test/alias_test.rb +0 -25
- data/test/ast_eval/ast_eval_test.rb +0 -13
- data/test/ast_load/ast_load_test.rb +0 -47
- data/test/attr_test.rb +0 -26
- data/test/backtrace_test.rb +0 -161
- data/test/base/noninvasive_test.rb +0 -55
- data/test/base/reload_test.rb +0 -43
- data/test/covert_define_method_test.rb +0 -25
- data/test/def_test.rb +0 -37
- data/test/define_method_test.rb +0 -69
- data/test/define_singleton_method_test.rb +0 -17
- data/test/encoding_test/bad.rb +0 -1
- data/test/encoding_test/cp932.rb +0 -6
- data/test/encoding_test/default.rb +0 -5
- data/test/encoding_test/eucjp.rb +0 -6
- data/test/encoding_test/koi8.rb +0 -6
- data/test/encoding_test/koi8_shebang.rb +0 -7
- data/test/encoding_test/koi8_with_utf8bom.rb +0 -6
- data/test/encoding_test/usascii.rb +0 -6
- data/test/encoding_test/usascii_with_utf8bom.rb +0 -6
- data/test/encoding_test/utf8.rb +0 -6
- data/test/encoding_test/utf8bom.rb +0 -6
- data/test/encoding_test/utf8bom_only.rb +0 -5
- data/test/encoding_test/utf8dos.rb +0 -6
- data/test/encoding_test/utf8mac.rb +0 -6
- data/test/encoding_test/utf8mac_alt.rb +0 -6
- data/test/encoding_test/utf8unix.rb +0 -6
- data/test/encoding_test.rb +0 -54
- data/test/error_test.rb +0 -118
- data/test/eval_test.rb +0 -271
- data/test/flush_cache_test.rb +0 -102
- data/test/full/ast_reload_test.rb +0 -41
- data/test/full/replace_eval_test.rb +0 -433
- data/test/irb_test.rb +0 -43
- data/test/lambda_test.rb +0 -65
- data/test/load_path_test.rb +0 -77
- data/test/load_test.rb +0 -125
- data/test/main.rb +0 -134
- data/test/nested_test.rb +0 -31
- data/test/readme_test.rb +0 -16
- data/test/recursive_eval_test.rb +0 -53
- data/test/redefine_method_test.rb +0 -85
- data/test/rubygems_test.rb +0 -27
- data/test/rubyspec_test.rb +0 -39
- data/test/singleton_test.rb +0 -27
- data/test/stdlib_test.rb +0 -15
- data/test/thread_test.rb +0 -45
- data/test/to_ast/to_ast_feature_test.rb +0 -13
- data/test/to_ruby/to_ruby_feature_test.rb +0 -13
- data/test/to_ruby/to_ruby_test.rb +0 -101
@@ -1,433 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "main"
|
4
|
-
|
5
|
-
class FullReplaceEvalTest < ReplaceEvalTest
|
6
|
-
RESULT = {}
|
7
|
-
|
8
|
-
def setup
|
9
|
-
RESULT.clear
|
10
|
-
end
|
11
|
-
|
12
|
-
DEFINE_A = lambda do
|
13
|
-
class A
|
14
|
-
eval %{
|
15
|
-
def f(x, y)
|
16
|
-
x**y
|
17
|
-
end
|
18
|
-
}
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_a_def_method
|
23
|
-
DEFINE_A.call
|
24
|
-
assert_equal binop_def(:f, :**), A.instance_method(:f).to_ast
|
25
|
-
end
|
26
|
-
|
27
|
-
DEFINE_B = lambda do
|
28
|
-
eval %{
|
29
|
-
class B
|
30
|
-
def f(x, y)
|
31
|
-
x / y
|
32
|
-
end
|
33
|
-
end
|
34
|
-
}
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_def_class
|
38
|
-
DEFINE_B.call
|
39
|
-
assert_equal "FullReplaceEvalTest::B", B.name
|
40
|
-
assert_equal binop_def(:f, :/), B.instance_method(:f).to_ast
|
41
|
-
end
|
42
|
-
|
43
|
-
def moo
|
44
|
-
a = 22
|
45
|
-
ignore(a)
|
46
|
-
binding
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_binding_eval
|
50
|
-
assert_equal 22, moo.eval("a")
|
51
|
-
assert_equal 22, moo.eval("lambda { a }").call
|
52
|
-
end
|
53
|
-
|
54
|
-
DEFINE_P = lambda do
|
55
|
-
class P
|
56
|
-
eval %{
|
57
|
-
def f
|
58
|
-
@x = 33
|
59
|
-
RESULT[:old] = live_ast_original_eval("@x")
|
60
|
-
RESULT[:new] = eval("@x")
|
61
|
-
end
|
62
|
-
}
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_const_lookup
|
67
|
-
DEFINE_P.call
|
68
|
-
P.new.f
|
69
|
-
|
70
|
-
assert_equal 33, RESULT[:old]
|
71
|
-
assert_equal 33, RESULT[:new]
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_const_lookup_two
|
75
|
-
Class.new do
|
76
|
-
eval %{
|
77
|
-
def f
|
78
|
-
@x = 44
|
79
|
-
RESULT[:old] = live_ast_original_eval("@x")
|
80
|
-
RESULT[:new] = eval("@x")
|
81
|
-
end
|
82
|
-
}
|
83
|
-
end.new.f
|
84
|
-
|
85
|
-
assert_equal 44, RESULT[:old]
|
86
|
-
assert_equal 44, RESULT[:new]
|
87
|
-
end
|
88
|
-
|
89
|
-
DEFINE_QS = lambda do
|
90
|
-
class Q
|
91
|
-
class R
|
92
|
-
eval %{
|
93
|
-
def f
|
94
|
-
RESULT[:qr] = 55
|
95
|
-
end
|
96
|
-
}
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
module S
|
101
|
-
class T
|
102
|
-
eval %{
|
103
|
-
def f
|
104
|
-
RESULT[:st] = 66
|
105
|
-
end
|
106
|
-
}
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_const_lookup_three
|
112
|
-
DEFINE_QS.call
|
113
|
-
Q::R.new.f
|
114
|
-
S::T.new.f
|
115
|
-
assert_equal 55, RESULT[:qr]
|
116
|
-
assert_equal 66, RESULT[:st]
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_eval_arg_error
|
120
|
-
[[], (1..5).to_a].each do |args|
|
121
|
-
orig = assert_raises ArgumentError do
|
122
|
-
live_ast_original_eval(*args)
|
123
|
-
end
|
124
|
-
live = assert_raises ArgumentError do
|
125
|
-
eval(*args)
|
126
|
-
end
|
127
|
-
assert_equal orig.message, live.message
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_singleton_eval_arg_error
|
132
|
-
[[], (1..5).to_a].each do |args|
|
133
|
-
orig = assert_raises ArgumentError do
|
134
|
-
Kernel.live_ast_original_singleton_eval(*args)
|
135
|
-
end
|
136
|
-
live = assert_raises ArgumentError do
|
137
|
-
Kernel.eval(*args)
|
138
|
-
end
|
139
|
-
assert_equal orig.message, live.message
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_instance_eval_arg_error_no_block
|
144
|
-
[[], ("a".."z").to_a].each do |args|
|
145
|
-
orig = assert_raises ArgumentError do
|
146
|
-
Object.new.live_ast_original_instance_eval(*args)
|
147
|
-
end
|
148
|
-
live = assert_raises ArgumentError do
|
149
|
-
Object.new.instance_eval(*args)
|
150
|
-
end
|
151
|
-
assert_equal orig.message, live.message
|
152
|
-
end
|
153
|
-
|
154
|
-
orig = assert_raises TypeError do
|
155
|
-
Object.new.live_ast_original_instance_eval(nil)
|
156
|
-
end
|
157
|
-
live = assert_raises TypeError do
|
158
|
-
Object.new.instance_eval(nil)
|
159
|
-
end
|
160
|
-
assert_equal orig.message, live.message
|
161
|
-
|
162
|
-
[[nil], [Object.new], [3], [4, 3, 2], (1..10).to_a].each do |args|
|
163
|
-
orig = assert_raises ArgumentError, TypeError do
|
164
|
-
Object.new.live_ast_original_instance_eval(*args)
|
165
|
-
end
|
166
|
-
live = assert_raises ArgumentError, TypeError do
|
167
|
-
Object.new.instance_eval(*args)
|
168
|
-
end
|
169
|
-
assert_equal orig.message, live.message
|
170
|
-
assert_equal orig.class, live.class
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
describe "instance_eval argument errors" do
|
175
|
-
before do
|
176
|
-
require "live_ast/full"
|
177
|
-
end
|
178
|
-
|
179
|
-
let(:orig) {
|
180
|
-
assert_raises(ArgumentError, TypeError) do
|
181
|
-
Object.new.live_ast_original_instance_eval(*args)
|
182
|
-
end
|
183
|
-
}
|
184
|
-
let(:live) {
|
185
|
-
assert_raises(ArgumentError, TypeError) do
|
186
|
-
Object.new.instance_eval(*args)
|
187
|
-
end
|
188
|
-
}
|
189
|
-
|
190
|
-
describe "when the second argument is nil" do
|
191
|
-
let(:args) { ["1", nil] }
|
192
|
-
it "raises the same error as the original" do
|
193
|
-
assert_equal orig.message, live.message
|
194
|
-
assert_equal orig.class, live.class
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_instance_eval_arg_error_with_block
|
200
|
-
orig = assert_raises ArgumentError do
|
201
|
-
Object.new.live_ast_original_instance_eval(3, 4, 5) { nil }
|
202
|
-
end
|
203
|
-
live = assert_raises ArgumentError do
|
204
|
-
Object.new.instance_eval(3, 4, 5) { nil }
|
205
|
-
end
|
206
|
-
assert_equal orig.message, live.message
|
207
|
-
end
|
208
|
-
|
209
|
-
def test_instance_eval_block
|
210
|
-
orig = {}
|
211
|
-
orig.live_ast_original_instance_eval do
|
212
|
-
self[:x] = 33
|
213
|
-
end
|
214
|
-
assert_equal 33, orig[:x]
|
215
|
-
|
216
|
-
live = {}
|
217
|
-
live.instance_eval do
|
218
|
-
self[:x] = 44
|
219
|
-
end
|
220
|
-
assert_equal 44, live[:x]
|
221
|
-
end
|
222
|
-
|
223
|
-
def test_instance_eval_string
|
224
|
-
orig = {}
|
225
|
-
orig.live_ast_original_instance_eval %{
|
226
|
-
self[:x] = 33
|
227
|
-
}
|
228
|
-
assert_equal 33, orig[:x]
|
229
|
-
|
230
|
-
live = {}
|
231
|
-
live.instance_eval %{
|
232
|
-
self[:x] = 44
|
233
|
-
}
|
234
|
-
assert_equal 44, live[:x]
|
235
|
-
end
|
236
|
-
|
237
|
-
def test_instance_eval_binding
|
238
|
-
x = 33
|
239
|
-
orig = {}
|
240
|
-
orig.live_ast_original_instance_eval %{
|
241
|
-
self[:x] = x
|
242
|
-
self[:f] = lambda { "f" }
|
243
|
-
}
|
244
|
-
assert_equal x, orig[:x]
|
245
|
-
|
246
|
-
y = 44
|
247
|
-
live = {}
|
248
|
-
live.instance_eval %{
|
249
|
-
self[:y] = y
|
250
|
-
self[:g] = lambda { "g" }
|
251
|
-
}
|
252
|
-
assert_equal y, live[:y]
|
253
|
-
|
254
|
-
assert_equal no_arg_block(:lambda, "g"), live[:g].to_ast
|
255
|
-
end
|
256
|
-
|
257
|
-
def test_module_eval_block
|
258
|
-
orig = Module.new
|
259
|
-
orig.live_ast_original_module_eval do
|
260
|
-
def f
|
261
|
-
"orig"
|
262
|
-
end
|
263
|
-
end
|
264
|
-
orig.instance_method(:f)
|
265
|
-
|
266
|
-
live = Module.new
|
267
|
-
live.module_eval do
|
268
|
-
def f
|
269
|
-
"live"
|
270
|
-
end
|
271
|
-
end
|
272
|
-
assert_equal no_arg_def(:f, "live"),
|
273
|
-
live.instance_method(:f).to_ast
|
274
|
-
end
|
275
|
-
|
276
|
-
def test_module_eval_string
|
277
|
-
orig = Module.new
|
278
|
-
orig.live_ast_original_module_eval %{
|
279
|
-
def f
|
280
|
-
"orig"
|
281
|
-
end
|
282
|
-
}
|
283
|
-
orig.instance_method(:f)
|
284
|
-
|
285
|
-
live = Module.new
|
286
|
-
live.module_eval %{
|
287
|
-
def h
|
288
|
-
"live h"
|
289
|
-
end
|
290
|
-
}
|
291
|
-
assert_equal no_arg_def(:h, "live h"),
|
292
|
-
live.instance_method(:h).to_ast
|
293
|
-
end
|
294
|
-
|
295
|
-
def test_module_eval_binding
|
296
|
-
x = 33
|
297
|
-
ignore(x)
|
298
|
-
orig = Class.new
|
299
|
-
orig.live_ast_original_module_eval %{
|
300
|
-
define_method :value do
|
301
|
-
x
|
302
|
-
end
|
303
|
-
define_method :f do
|
304
|
-
lambda { }
|
305
|
-
end
|
306
|
-
}
|
307
|
-
assert_equal 33, orig.new.value
|
308
|
-
assert orig.new.f.is_a?(Proc)
|
309
|
-
|
310
|
-
y = 44
|
311
|
-
ignore(y)
|
312
|
-
live = Class.new
|
313
|
-
live.module_eval %{
|
314
|
-
define_method :value do
|
315
|
-
y
|
316
|
-
end
|
317
|
-
define_method :g do
|
318
|
-
lambda { "g return" }
|
319
|
-
end
|
320
|
-
}
|
321
|
-
assert_equal 44, live.new.value
|
322
|
-
assert live.new.g.is_a?(Proc)
|
323
|
-
|
324
|
-
assert_equal no_arg_block(:lambda, "g return"),
|
325
|
-
live.new.g.to_ast
|
326
|
-
end
|
327
|
-
|
328
|
-
def test_module_eval_file_line
|
329
|
-
klass = Module.new
|
330
|
-
|
331
|
-
orig =
|
332
|
-
klass.live_ast_original_module_eval("[__FILE__, __LINE__]", "test", 102)
|
333
|
-
live =
|
334
|
-
klass.module_eval("[__FILE__, __LINE__]", "test", 102)
|
335
|
-
|
336
|
-
unfixable do
|
337
|
-
assert_equal orig, live
|
338
|
-
end
|
339
|
-
|
340
|
-
live.first.sub!(/#{Regexp.quote LiveAST::Linker::REVISION_TOKEN}.*\Z/, "")
|
341
|
-
assert_equal orig, live
|
342
|
-
assert_equal ["test", 102], live
|
343
|
-
end
|
344
|
-
|
345
|
-
def test_module_eval_to_str
|
346
|
-
file = MiniTest::Mock.new
|
347
|
-
file.expect(:to_str, "zebra.rb")
|
348
|
-
Class.new.module_eval("33 + 44", file)
|
349
|
-
file.verify
|
350
|
-
end
|
351
|
-
|
352
|
-
def test_eval_not_hosed
|
353
|
-
assert_equal 3, eval("1 + 2")
|
354
|
-
1.times do
|
355
|
-
assert_equal 3, eval("1 + 2")
|
356
|
-
end
|
357
|
-
|
358
|
-
assert_equal(3, eval(%{ eval("1 + 2") }))
|
359
|
-
1.times do
|
360
|
-
assert_equal(3, eval(%{ eval("1 + 2") }))
|
361
|
-
end
|
362
|
-
|
363
|
-
x = 5
|
364
|
-
eval %{
|
365
|
-
assert_equal(3, eval(' eval("1 + 2") '))
|
366
|
-
x = 6
|
367
|
-
}
|
368
|
-
assert_equal 6, x
|
369
|
-
end
|
370
|
-
|
371
|
-
def test_local_var_collision
|
372
|
-
args = 33
|
373
|
-
ignore(args)
|
374
|
-
|
375
|
-
assert_equal 33, live_ast_original_eval("args")
|
376
|
-
assert_equal 33, eval("args")
|
377
|
-
|
378
|
-
assert_equal 33, Kernel.live_ast_original_singleton_eval("args")
|
379
|
-
assert_equal 33, Kernel.eval("args")
|
380
|
-
|
381
|
-
assert_equal 33, binding.live_ast_original_binding_eval("args")
|
382
|
-
assert_equal 33, binding.eval("args")
|
383
|
-
|
384
|
-
assert_equal 33, Object.new.live_ast_original_instance_eval("args")
|
385
|
-
assert_equal 33, Object.new.instance_eval("args")
|
386
|
-
|
387
|
-
assert_equal 33, Class.new.live_ast_original_module_eval("args")
|
388
|
-
assert_equal 33, Class.new.module_eval("args")
|
389
|
-
|
390
|
-
assert_equal 33, Class.new.live_ast_original_instance_eval("args")
|
391
|
-
assert_equal 33, Class.new.instance_eval("args")
|
392
|
-
end
|
393
|
-
|
394
|
-
def test_location_without_binding
|
395
|
-
expected = ["(eval)", 2]
|
396
|
-
|
397
|
-
assert_equal expected, live_ast_original_eval("\n[__FILE__, __LINE__]")
|
398
|
-
|
399
|
-
unfixable do
|
400
|
-
assert_equal expected, eval("\n[__FILE__, __LINE__]")
|
401
|
-
end
|
402
|
-
|
403
|
-
file, line = eval("\n[__FILE__, __LINE__]")
|
404
|
-
file = LiveAST.strip_token file
|
405
|
-
|
406
|
-
assert_equal expected, [file, line]
|
407
|
-
end
|
408
|
-
|
409
|
-
DEFINE_BO_TEST = lambda do
|
410
|
-
class BasicObject
|
411
|
-
Kernel.eval("1 + 1")
|
412
|
-
end
|
413
|
-
end
|
414
|
-
|
415
|
-
def test_basic_object
|
416
|
-
::BasicObject.new.instance_eval %{
|
417
|
-
t = 33
|
418
|
-
::FullReplaceEvalTest::RESULT[:bo_test] = t + 44
|
419
|
-
}
|
420
|
-
assert_equal 77, RESULT[:bo_test]
|
421
|
-
end
|
422
|
-
|
423
|
-
class Z
|
424
|
-
def initialize
|
425
|
-
@t = 99
|
426
|
-
end
|
427
|
-
end
|
428
|
-
|
429
|
-
def test_instance_variables
|
430
|
-
assert_equal 99, Z.new.instance_eval { @t }
|
431
|
-
assert_equal 99, Z.new.instance_eval("@t")
|
432
|
-
end
|
433
|
-
end
|
data/test/irb_test.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
require "live_ast/irb_spy"
|
5
|
-
|
6
|
-
class IRBTest < RegularTest
|
7
|
-
def with_module(parent, child)
|
8
|
-
parent.const_set child, Module.new
|
9
|
-
begin
|
10
|
-
yield
|
11
|
-
ensure
|
12
|
-
parent.send :remove_const, child
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def setup
|
17
|
-
LiveAST::IRBSpy.history = [
|
18
|
-
nil,
|
19
|
-
"class Foo; def bar; 'bar'; end; end",
|
20
|
-
"class Bar",
|
21
|
-
" def foo",
|
22
|
-
" 'foo'",
|
23
|
-
" end",
|
24
|
-
"end"
|
25
|
-
]
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_single_line
|
29
|
-
with_module(Object, :IRB) do
|
30
|
-
expected = no_arg_def(:bar, "bar")
|
31
|
-
result = LiveAST::Linker.fetch_from_cache("(irb)", 1)
|
32
|
-
assert_equal expected, result
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_multiple_lines
|
37
|
-
with_module(Object, :IRB) do
|
38
|
-
expected = no_arg_def(:foo, "foo")
|
39
|
-
result = LiveAST::Linker.fetch_from_cache("(irb)", 3)
|
40
|
-
assert_equal expected, result
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
data/test/lambda_test.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
|
5
|
-
class LambdaTest < RegularTest
|
6
|
-
def test_block_braces_multiline
|
7
|
-
block = return_block { |x, y|
|
8
|
-
x + y
|
9
|
-
}
|
10
|
-
|
11
|
-
expected = binop_block(:return_block, :+)
|
12
|
-
assert_equal expected, block.to_ast
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_block_do_end_multiline
|
16
|
-
block = return_block do |x, y|
|
17
|
-
x * y
|
18
|
-
end
|
19
|
-
|
20
|
-
expected = binop_block(:return_block, :*)
|
21
|
-
assert_equal expected, block.to_ast
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_lambda
|
25
|
-
a = lambda { |x, y| x - y }
|
26
|
-
|
27
|
-
expected = binop_block(:lambda, :-)
|
28
|
-
assert_equal expected, a.to_ast
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_stabby_lambda
|
32
|
-
a = ->(x, y) { x - y }
|
33
|
-
|
34
|
-
expected = binop_lambda(:-)
|
35
|
-
assert_equal expected, a.to_ast
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_proc
|
39
|
-
a = proc { |x, y| x / y }
|
40
|
-
|
41
|
-
expected = binop_block(:proc, :/)
|
42
|
-
assert_equal expected, a.to_ast
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_proc_new
|
46
|
-
a = Proc.new { |x, y| x + y }
|
47
|
-
|
48
|
-
expected = binop_proc_new(:+)
|
49
|
-
assert_equal expected, a.to_ast
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_block_braces_one_line
|
53
|
-
block = return_block { |x, y| x * y }
|
54
|
-
|
55
|
-
expected = binop_block(:return_block, :*)
|
56
|
-
assert_equal expected, block.to_ast
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_block_do_end_one_line
|
60
|
-
block = return_block do |x, y| x - y end
|
61
|
-
|
62
|
-
expected = binop_block(:return_block, :-)
|
63
|
-
assert_equal expected, block.to_ast
|
64
|
-
end
|
65
|
-
end
|
data/test/load_path_test.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
|
5
|
-
class LoadPathTest < BaseTest
|
6
|
-
include FileUtils
|
7
|
-
|
8
|
-
def test_load_path
|
9
|
-
$LOAD_PATH.unshift DATA_DIR
|
10
|
-
begin
|
11
|
-
check_load
|
12
|
-
check_errors
|
13
|
-
temp_file nil, "foo.rb" do
|
14
|
-
Dir.chdir(DATA_DIR) do
|
15
|
-
compare_load_errors("/foo.rb")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
ensure
|
19
|
-
$LOAD_PATH.shift
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_chdir
|
24
|
-
Dir.chdir(DATA_DIR) do
|
25
|
-
check_load
|
26
|
-
check_errors
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def check_load
|
31
|
-
code1 = %{
|
32
|
-
def hello
|
33
|
-
"password"
|
34
|
-
end
|
35
|
-
}
|
36
|
-
|
37
|
-
code2 = %{
|
38
|
-
def goodbye
|
39
|
-
"bubbleboy"
|
40
|
-
end
|
41
|
-
}
|
42
|
-
|
43
|
-
temp_file code1, "foo.rb" do |path|
|
44
|
-
load "foo.rb"
|
45
|
-
assert_equal "password", hello
|
46
|
-
|
47
|
-
write_file path, code2
|
48
|
-
|
49
|
-
LiveAST.load "foo.rb"
|
50
|
-
assert_equal "bubbleboy", goodbye
|
51
|
-
end
|
52
|
-
ensure
|
53
|
-
Object.send(:remove_method, :hello)
|
54
|
-
Object.send(:remove_method, :goodbye)
|
55
|
-
end
|
56
|
-
|
57
|
-
def compare_load_errors(file)
|
58
|
-
error = assert_raises LoadError do
|
59
|
-
LiveAST.load file
|
60
|
-
end
|
61
|
-
assert_equal "cannot load such file -- #{file}", error.message
|
62
|
-
end
|
63
|
-
|
64
|
-
def check_errors
|
65
|
-
temp_file "# do nothing", "foo.rb" do |_path|
|
66
|
-
[
|
67
|
-
"foo",
|
68
|
-
"",
|
69
|
-
"/usr",
|
70
|
-
".",
|
71
|
-
".."
|
72
|
-
].each do |file|
|
73
|
-
compare_load_errors(file)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|