mvz-live_ast 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|