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
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
|