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
data/test/load_test.rb
DELETED
@@ -1,125 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
require_relative "../devel/levitate"
|
5
|
-
|
6
|
-
class LoadFileTest < BaseTest
|
7
|
-
class << self
|
8
|
-
attr_accessor :flag
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_a_no_locals_created
|
12
|
-
code = %{
|
13
|
-
LoadFileTest.flag = :code_a
|
14
|
-
FOO = 77
|
15
|
-
x = 33
|
16
|
-
y = 99
|
17
|
-
}
|
18
|
-
|
19
|
-
temp_file code do |file|
|
20
|
-
ret = LiveAST.load file
|
21
|
-
assert_equal true, ret
|
22
|
-
assert_equal :code_a, LoadFileTest.flag
|
23
|
-
|
24
|
-
assert_raises NameError do
|
25
|
-
eval("x", TOPLEVEL_BINDING)
|
26
|
-
end
|
27
|
-
|
28
|
-
assert_equal 77, ::FOO
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_b_no_locals_modified
|
33
|
-
code = %{
|
34
|
-
LoadFileTest.flag = :code_b
|
35
|
-
r = 55
|
36
|
-
}
|
37
|
-
|
38
|
-
temp_file code do |file|
|
39
|
-
eval("r = 66", TOPLEVEL_BINDING)
|
40
|
-
|
41
|
-
ret = LiveAST.load file
|
42
|
-
assert_equal true, ret
|
43
|
-
assert_equal :code_b, LoadFileTest.flag
|
44
|
-
|
45
|
-
actual = eval("r", TOPLEVEL_BINDING)
|
46
|
-
assert_equal 66, actual
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_c_wrap
|
51
|
-
code = %{
|
52
|
-
LoadFileTest.flag = :code_c
|
53
|
-
ZOOM = 111
|
54
|
-
}
|
55
|
-
|
56
|
-
temp_file code do |file|
|
57
|
-
ret = LiveAST.load file, true
|
58
|
-
assert_equal true, ret
|
59
|
-
assert_equal :code_c, LoadFileTest.flag
|
60
|
-
|
61
|
-
assert_raises NameError do
|
62
|
-
ZOOM
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.from_d
|
68
|
-
self.flag = :code_d
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_d_empty_locals_list
|
72
|
-
code = %{
|
73
|
-
LoadFileTest.from_d
|
74
|
-
}
|
75
|
-
|
76
|
-
temp_file code do |file|
|
77
|
-
LiveAST.load file
|
78
|
-
assert_equal :code_d, LoadFileTest.flag
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_verbose_respected
|
83
|
-
lib = File.expand_path("../lib", File.dirname(__FILE__))
|
84
|
-
|
85
|
-
[
|
86
|
-
# respects a loaded file setting $VERBOSE = true
|
87
|
-
[
|
88
|
-
"false",
|
89
|
-
"true",
|
90
|
-
lambda { |file|
|
91
|
-
Levitate.run file
|
92
|
-
}
|
93
|
-
],
|
94
|
-
|
95
|
-
# unfixable: does not respect a loaded file setting $VERBOSE = nil
|
96
|
-
[
|
97
|
-
"true",
|
98
|
-
"false",
|
99
|
-
lambda { |file|
|
100
|
-
unfixable do
|
101
|
-
assert_nothing_raised do
|
102
|
-
Levitate.run file
|
103
|
-
end
|
104
|
-
end
|
105
|
-
}
|
106
|
-
]
|
107
|
-
].each do |main_value, loaded_value, action|
|
108
|
-
loaded_code = %{
|
109
|
-
$VERBOSE = #{loaded_value}
|
110
|
-
}
|
111
|
-
|
112
|
-
temp_file loaded_code do |loaded_file|
|
113
|
-
main_code = %{
|
114
|
-
$LOAD_PATH.unshift '#{lib}'
|
115
|
-
require 'live_ast/base'
|
116
|
-
toplevel_local = 444
|
117
|
-
$VERBOSE = #{main_value}
|
118
|
-
LiveAST.load '#{loaded_file}'
|
119
|
-
$VERBOSE == #{loaded_value} or exit(1)
|
120
|
-
}
|
121
|
-
temp_file main_code, &action
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
data/test/main.rb
DELETED
@@ -1,134 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift File.expand_path("../lib", File.dirname(__FILE__))
|
4
|
-
|
5
|
-
# require first for stdlib_test
|
6
|
-
require "pp"
|
7
|
-
require "find"
|
8
|
-
require "fileutils"
|
9
|
-
|
10
|
-
require "minitest/mock"
|
11
|
-
require "minitest/autorun"
|
12
|
-
|
13
|
-
$VERBOSE = true
|
14
|
-
|
15
|
-
require "live_ast/base"
|
16
|
-
|
17
|
-
def define_unsorted_test_case(name, superclass, &block)
|
18
|
-
klass = Class.new superclass, &block
|
19
|
-
letter = ("A".."Z").to_a[rand(26)]
|
20
|
-
Object.const_set "#{letter}#{name}", klass
|
21
|
-
end
|
22
|
-
|
23
|
-
class JLMiniTest < MiniTest::Test
|
24
|
-
def self.test_methods
|
25
|
-
default = super
|
26
|
-
onlies = default.select { |m| m =~ /__only\Z/ }
|
27
|
-
if onlies.empty?
|
28
|
-
default
|
29
|
-
else
|
30
|
-
puts "\nNOTE: running ONLY *__only tests for #{self}"
|
31
|
-
onlies
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def delim(char)
|
36
|
-
"\n#{char * 72}\n"
|
37
|
-
end
|
38
|
-
|
39
|
-
def mu_pp(obj)
|
40
|
-
+"" <<
|
41
|
-
delim("_") <<
|
42
|
-
obj.pretty_inspect.chomp <<
|
43
|
-
delim("=")
|
44
|
-
end
|
45
|
-
|
46
|
-
def unfixable
|
47
|
-
yield
|
48
|
-
raise "claimed to be unfixable, but assertion succeeded"
|
49
|
-
rescue MiniTest::Assertion
|
50
|
-
end
|
51
|
-
|
52
|
-
def assert_nothing_raised
|
53
|
-
yield
|
54
|
-
assert_nil nil
|
55
|
-
rescue StandardError => e
|
56
|
-
raise MiniTest::Assertion,
|
57
|
-
exception_details(e, "Expected nothing raised, but got:")
|
58
|
-
end
|
59
|
-
|
60
|
-
%w(
|
61
|
-
empty equal in_delta in_epsilon includes instance_of
|
62
|
-
kind_of match nil operator respond_to same
|
63
|
-
).each { |name|
|
64
|
-
alias_method "assert_not_#{name}", "refute_#{name}"
|
65
|
-
}
|
66
|
-
end
|
67
|
-
|
68
|
-
class BaseTest < JLMiniTest
|
69
|
-
include LiveAST.parser::Test
|
70
|
-
|
71
|
-
DATA_DIR = File.expand_path("data", File.dirname(__FILE__))
|
72
|
-
|
73
|
-
def self.stdlib_has_source?
|
74
|
-
RUBY_ENGINE != "jruby"
|
75
|
-
end
|
76
|
-
|
77
|
-
def temp_file(code, basename = nil)
|
78
|
-
basename ||= ("a".."z").to_a.shuffle.join + ".rb"
|
79
|
-
path = File.join(DATA_DIR, basename)
|
80
|
-
|
81
|
-
write_file path, code if code
|
82
|
-
begin
|
83
|
-
yield path
|
84
|
-
ensure
|
85
|
-
FileUtils.rm_f path
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def write_file(file, contents)
|
90
|
-
File.open(file, "w") { |f| f.print contents }
|
91
|
-
end
|
92
|
-
|
93
|
-
def return_block(&block)
|
94
|
-
block
|
95
|
-
end
|
96
|
-
|
97
|
-
def exception_backtrace
|
98
|
-
yield
|
99
|
-
rescue Exception => e
|
100
|
-
e.backtrace
|
101
|
-
end
|
102
|
-
|
103
|
-
def ignore(*_args); end
|
104
|
-
end
|
105
|
-
|
106
|
-
class RegularTest < BaseTest
|
107
|
-
def setup
|
108
|
-
super
|
109
|
-
require "live_ast"
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
class ReplaceEvalTest < BaseTest
|
114
|
-
def initialize(*args)
|
115
|
-
super
|
116
|
-
ok = begin
|
117
|
-
require "live_ast/full"
|
118
|
-
true
|
119
|
-
rescue LoadError
|
120
|
-
raise "need: gem install bindings" if RUBY_ENGINE == "ruby"
|
121
|
-
|
122
|
-
false
|
123
|
-
end
|
124
|
-
|
125
|
-
return if ok
|
126
|
-
|
127
|
-
self.class.class_eval do
|
128
|
-
instance_methods(false).each do |m|
|
129
|
-
remove_method(m)
|
130
|
-
define_method(m) { nil }
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
data/test/nested_test.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
|
5
|
-
class NestedTest < RegularTest
|
6
|
-
def test_lambda
|
7
|
-
a = lambda {
|
8
|
-
lambda {
|
9
|
-
"33"
|
10
|
-
}
|
11
|
-
}
|
12
|
-
|
13
|
-
assert_equal nested_lambdas("33"), a.to_ast
|
14
|
-
assert_equal no_arg_block(:lambda, "33"), a.call.to_ast
|
15
|
-
end
|
16
|
-
|
17
|
-
class A
|
18
|
-
def f
|
19
|
-
Class.new do
|
20
|
-
def g
|
21
|
-
"44"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_defs
|
28
|
-
assert_equal nested_defs(:f, :g, "44"), A.instance_method(:f).to_ast
|
29
|
-
assert_equal no_arg_def(:g, "44"), A.new.f.instance_method(:g).to_ast
|
30
|
-
end
|
31
|
-
end
|
data/test/readme_test.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
require_relative "../devel/levitate"
|
5
|
-
|
6
|
-
if RUBY_ENGINE != "jruby" # jruby takes about a minute
|
7
|
-
sections = [
|
8
|
-
"Synopsis",
|
9
|
-
"+to_ruby+",
|
10
|
-
"Noninvasive Interface",
|
11
|
-
"Pure Ruby and +ast_eval+",
|
12
|
-
"Full Integration"
|
13
|
-
]
|
14
|
-
|
15
|
-
Levitate.doc_to_test("README.rdoc", *sections)
|
16
|
-
end
|
data/test/recursive_eval_test.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
|
5
|
-
class RecursiveEvalTest < RegularTest
|
6
|
-
DEFINE = lambda do
|
7
|
-
ast_eval %{
|
8
|
-
class A
|
9
|
-
ast_eval %{
|
10
|
-
def f
|
11
|
-
"A#f"
|
12
|
-
end
|
13
|
-
}, binding
|
14
|
-
|
15
|
-
ast_eval %{
|
16
|
-
ast_eval %{
|
17
|
-
remove_method :f
|
18
|
-
def f(x, y)
|
19
|
-
x + y
|
20
|
-
end
|
21
|
-
|
22
|
-
def g
|
23
|
-
"A#g"
|
24
|
-
end
|
25
|
-
}, binding
|
26
|
-
|
27
|
-
LAMBDA = ast_eval %{
|
28
|
-
lambda { |x, y| x * y }
|
29
|
-
}, binding
|
30
|
-
}, binding
|
31
|
-
end
|
32
|
-
}, binding
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_method
|
36
|
-
defined?(A) or DEFINE.call
|
37
|
-
assert_equal "#{self.class}::A", A.name
|
38
|
-
|
39
|
-
assert_equal binop_def(:f, :+),
|
40
|
-
A.instance_method(:f).to_ast
|
41
|
-
|
42
|
-
assert_equal no_arg_def(:g, "A#g"),
|
43
|
-
A.instance_method(:g).to_ast
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_lambda
|
47
|
-
defined?(A) or DEFINE.call
|
48
|
-
assert_equal "#{self.class}::A", A.name
|
49
|
-
|
50
|
-
assert_equal binop_block(:lambda, :*),
|
51
|
-
A::LAMBDA.to_ast
|
52
|
-
end
|
53
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
|
5
|
-
class RedefineMethodTest < RegularTest
|
6
|
-
DEFINE_A = lambda do
|
7
|
-
class A
|
8
|
-
def f
|
9
|
-
"old A#f"
|
10
|
-
end
|
11
|
-
|
12
|
-
PREVIOUS_Af = instance_method(:f)
|
13
|
-
remove_method :f
|
14
|
-
|
15
|
-
def f(x, y)
|
16
|
-
x * y
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_inclass_redef
|
22
|
-
DEFINE_A.call
|
23
|
-
|
24
|
-
assert_equal binop_def(:f, :*),
|
25
|
-
A.instance_method(:f).to_ast
|
26
|
-
|
27
|
-
assert_equal no_arg_def(:f, "old A#f"),
|
28
|
-
A::PREVIOUS_Af.to_ast
|
29
|
-
end
|
30
|
-
|
31
|
-
DEFINE_B = lambda do
|
32
|
-
class B
|
33
|
-
def f
|
34
|
-
"old B#f"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_dynamic_redef
|
40
|
-
DEFINE_B.call
|
41
|
-
|
42
|
-
assert_equal "old B#f", B.new.f
|
43
|
-
assert_equal no_arg_def(:f, "old B#f"), B.instance_method(:f).to_ast
|
44
|
-
|
45
|
-
B.class_eval do
|
46
|
-
remove_method :f
|
47
|
-
define_method :f do |x, y|
|
48
|
-
x - y
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
assert_equal 11, B.new.f(44, 33)
|
53
|
-
|
54
|
-
assert_equal binop_define_method(:f, :-),
|
55
|
-
B.instance_method(:f).to_ast
|
56
|
-
end
|
57
|
-
|
58
|
-
DEFINE_C = lambda do
|
59
|
-
class C
|
60
|
-
def f
|
61
|
-
"old C#f"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_dynamic_redef_with_eval
|
67
|
-
DEFINE_C.call
|
68
|
-
|
69
|
-
assert_equal "old C#f", C.new.f
|
70
|
-
|
71
|
-
C.class_eval do
|
72
|
-
ast_eval %{
|
73
|
-
remove_method :f
|
74
|
-
define_method :f do |x, y|
|
75
|
-
x * y
|
76
|
-
end
|
77
|
-
}, binding
|
78
|
-
end
|
79
|
-
|
80
|
-
assert_equal 12, C.new.f(3, 4)
|
81
|
-
|
82
|
-
assert_equal binop_define_method(:f, :*),
|
83
|
-
C.instance_method(:f).to_ast
|
84
|
-
end
|
85
|
-
end
|
data/test/rubygems_test.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
require_relative "../devel/levitate"
|
5
|
-
|
6
|
-
class RubygemsTest < RegularTest
|
7
|
-
def test_rubygems
|
8
|
-
lib = File.expand_path("../lib", File.dirname(__FILE__))
|
9
|
-
extra_req =
|
10
|
-
if defined?(LiveASTRipper) && LiveAST.parser == LiveASTRipper
|
11
|
-
%{require 'live_ast_ripper'}
|
12
|
-
else
|
13
|
-
""
|
14
|
-
end
|
15
|
-
result = Levitate.run_code_and_capture %{
|
16
|
-
$LOAD_PATH.unshift '#{lib}'
|
17
|
-
#{extra_req}
|
18
|
-
require 'live_ast/full'
|
19
|
-
LiveAST.parser::Test
|
20
|
-
f = eval %{
|
21
|
-
lambda { 'abc' }
|
22
|
-
}
|
23
|
-
p f.to_ast
|
24
|
-
}
|
25
|
-
assert_equal no_arg_block(:lambda, "abc").to_s, result.chomp
|
26
|
-
end
|
27
|
-
end
|
data/test/rubyspec_test.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
require_relative "../devel/levitate"
|
5
|
-
|
6
|
-
#
|
7
|
-
# Tests against rubyspec branch which discards '|ast@' tokens
|
8
|
-
#
|
9
|
-
if ENV["LIVE_AST_RUBYSPEC_HOME"]
|
10
|
-
class RubySpecTest < RegularTest
|
11
|
-
FILES = [
|
12
|
-
"core/basicobject/instance_eval_spec.rb",
|
13
|
-
"core/binding/eval_spec.rb",
|
14
|
-
"core/kernel/eval_spec.rb",
|
15
|
-
"core/kernel/instance_eval_spec.rb",
|
16
|
-
"core/module/class_eval_spec.rb",
|
17
|
-
"core/module/module_eval_spec.rb"
|
18
|
-
].freeze
|
19
|
-
|
20
|
-
def setup
|
21
|
-
super
|
22
|
-
puts "\n==== rubyspec"
|
23
|
-
end
|
24
|
-
|
25
|
-
FILES.each do |file|
|
26
|
-
mname = "test_" + file.tr("/", "_").chop!.chop!.chop!
|
27
|
-
define_method mname do
|
28
|
-
Dir.chdir ENV["LIVE_AST_RUBYSPEC_HOME"] do
|
29
|
-
cmd =
|
30
|
-
["mspec", "-t", Levitate.ruby_bin] +
|
31
|
-
(["-T"] * Levitate.ruby_opts.size).zip(Levitate.ruby_opts).flatten +
|
32
|
-
[file]
|
33
|
-
|
34
|
-
assert system(*cmd)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
data/test/singleton_test.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
|
5
|
-
class SingletonTest < RegularTest
|
6
|
-
class A
|
7
|
-
def self.f
|
8
|
-
"A.f"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_self_dot
|
13
|
-
expected = singleton_no_arg_def(:f, "A.f")
|
14
|
-
assert_equal expected, A.method(:f).to_ast
|
15
|
-
end
|
16
|
-
|
17
|
-
class B
|
18
|
-
def B.f(x, y)
|
19
|
-
x + y
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_name_dot
|
24
|
-
expected = singleton_binop_def(:B, :f, :+)
|
25
|
-
assert_equal expected, B.method(:f).to_ast
|
26
|
-
end
|
27
|
-
end
|
data/test/stdlib_test.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
|
5
|
-
class StdlibTest < RegularTest
|
6
|
-
if stdlib_has_source?
|
7
|
-
def test_pp
|
8
|
-
assert_not_nil method(:pp).to_ast
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_find
|
12
|
-
assert_not_nil Find.method(:find).to_ast
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
data/test/thread_test.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "main"
|
4
|
-
|
5
|
-
require "thread"
|
6
|
-
|
7
|
-
class ThreadTest < RegularTest
|
8
|
-
def test_threads
|
9
|
-
klass = nil
|
10
|
-
mutex = Mutex.new
|
11
|
-
stop = false
|
12
|
-
results = []
|
13
|
-
num_threads = 50
|
14
|
-
|
15
|
-
workers = (0...num_threads).map {
|
16
|
-
Thread.new {
|
17
|
-
until stop
|
18
|
-
if klass
|
19
|
-
found = klass.instance_method(:f).to_ast
|
20
|
-
mutex.synchronize {
|
21
|
-
results << found
|
22
|
-
}
|
23
|
-
break
|
24
|
-
end
|
25
|
-
end
|
26
|
-
}
|
27
|
-
}
|
28
|
-
|
29
|
-
klass = Class.new do
|
30
|
-
def f
|
31
|
-
"anon#f"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
sleep(0.2)
|
36
|
-
stop = true
|
37
|
-
|
38
|
-
workers.each(&:join)
|
39
|
-
|
40
|
-
assert_equal num_threads, results.size
|
41
|
-
results.each { |result|
|
42
|
-
assert_equal no_arg_def(:f, "anon#f"), result
|
43
|
-
}
|
44
|
-
end
|
45
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "main"
|
4
|
-
|
5
|
-
require "live_ast/to_ruby"
|
6
|
-
|
7
|
-
class ToRubyFeatureTest < BaseTest
|
8
|
-
def test_defines_to_ruby
|
9
|
-
[Method, UnboundMethod, Proc].each { |obj|
|
10
|
-
assert obj.instance_methods.include?(:to_ruby)
|
11
|
-
}
|
12
|
-
end
|
13
|
-
end
|