mvz-live_ast 1.3.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 +21 -1
- data/README.rdoc +17 -3
- data/lib/live_ast/ast_eval.rb +3 -1
- data/lib/live_ast/ast_load.rb +3 -1
- data/lib/live_ast/base.rb +20 -19
- data/lib/live_ast/common.rb +11 -1
- data/lib/live_ast/error.rb +2 -0
- data/lib/live_ast/evaler.rb +5 -3
- data/lib/live_ast/full.rb +4 -2
- data/lib/live_ast/irb_spy.rb +7 -5
- data/lib/live_ast/linker.rb +6 -2
- data/lib/live_ast/loader.rb +7 -2
- data/lib/live_ast/reader.rb +4 -3
- data/lib/live_ast/replace_caller.rb +14 -0
- data/lib/live_ast/replace_eval.rb +15 -14
- data/lib/live_ast/replace_load.rb +3 -1
- data/lib/live_ast/replace_raise.rb +5 -3
- data/lib/live_ast/ruby_parser/test.rb +13 -0
- data/lib/live_ast/ruby_parser/unparser.rb +3 -1
- data/lib/live_ast/ruby_parser.rb +6 -4
- data/lib/live_ast/to_ast.rb +15 -18
- data/lib/live_ast/to_ruby.rb +10 -18
- data/lib/live_ast/version.rb +3 -1
- data/lib/live_ast.rb +6 -4
- metadata +106 -134
- data/Rakefile +0 -60
- data/devel/levitate.rb +0 -184
- data/devel/levitate_config.rb +0 -4
- data/test/alias_test.rb +0 -23
- data/test/ast_eval/ast_eval_test.rb +0 -11
- data/test/ast_load/ast_load_test.rb +0 -45
- data/test/attr_test.rb +0 -24
- data/test/backtrace_test.rb +0 -159
- data/test/base/noninvasive_test.rb +0 -53
- data/test/base/reload_test.rb +0 -41
- data/test/covert_define_method_test.rb +0 -23
- data/test/def_test.rb +0 -35
- data/test/define_method_test.rb +0 -67
- data/test/define_singleton_method_test.rb +0 -15
- 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 -52
- data/test/error_test.rb +0 -116
- data/test/eval_test.rb +0 -269
- data/test/flush_cache_test.rb +0 -98
- data/test/full/ast_reload_test.rb +0 -39
- data/test/full/replace_eval_test.rb +0 -431
- data/test/irb_test.rb +0 -41
- data/test/lambda_test.rb +0 -63
- data/test/load_path_test.rb +0 -75
- data/test/load_test.rb +0 -123
- data/test/main.rb +0 -129
- data/test/nested_test.rb +0 -29
- data/test/readme_test.rb +0 -14
- data/test/recursive_eval_test.rb +0 -51
- data/test/redefine_method_test.rb +0 -83
- data/test/rubygems_test.rb +0 -25
- data/test/rubyspec_test.rb +0 -37
- data/test/singleton_test.rb +0 -25
- data/test/stdlib_test.rb +0 -13
- data/test/thread_test.rb +0 -43
- data/test/to_ast/to_ast_feature_test.rb +0 -11
- data/test/to_ruby/to_ruby_feature_test.rb +0 -11
- data/test/to_ruby/to_ruby_test.rb +0 -99
data/test/main.rb
DELETED
@@ -1,129 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
2
|
-
|
3
|
-
# require first for stdlib_test
|
4
|
-
require 'pp'
|
5
|
-
require 'find'
|
6
|
-
require 'fileutils'
|
7
|
-
|
8
|
-
require 'minitest/mock'
|
9
|
-
require 'minitest/autorun'
|
10
|
-
|
11
|
-
$VERBOSE = true
|
12
|
-
|
13
|
-
require 'live_ast/base'
|
14
|
-
|
15
|
-
def define_unsorted_test_case(name, superclass, &block)
|
16
|
-
klass = Class.new superclass, &block
|
17
|
-
letter = ('A'..'Z').to_a[rand(26)]
|
18
|
-
Object.const_set "#{letter}#{name}", klass
|
19
|
-
end
|
20
|
-
|
21
|
-
class JLMiniTest < MiniTest::Test
|
22
|
-
def self.test_methods
|
23
|
-
default = super
|
24
|
-
onlies = default.select { |m| m =~ /__only\Z/ }
|
25
|
-
if onlies.empty?
|
26
|
-
default
|
27
|
-
else
|
28
|
-
puts "\nNOTE: running ONLY *__only tests for #{self}"
|
29
|
-
onlies
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def delim(char)
|
34
|
-
"\n" << (char * 72) << "\n"
|
35
|
-
end
|
36
|
-
|
37
|
-
def mu_pp(obj)
|
38
|
-
delim("_") <<
|
39
|
-
obj.pretty_inspect.chomp <<
|
40
|
-
delim("=")
|
41
|
-
end
|
42
|
-
|
43
|
-
def unfixable
|
44
|
-
yield
|
45
|
-
raise "claimed to be unfixable, but assertion succeeded"
|
46
|
-
rescue MiniTest::Assertion
|
47
|
-
end
|
48
|
-
|
49
|
-
def assert_nothing_raised
|
50
|
-
yield
|
51
|
-
assert_nil nil
|
52
|
-
rescue StandardError => ex
|
53
|
-
raise MiniTest::Assertion,
|
54
|
-
exception_details(ex, "Expected nothing raised, but got:")
|
55
|
-
end
|
56
|
-
|
57
|
-
%w(
|
58
|
-
empty equal in_delta in_epsilon includes instance_of
|
59
|
-
kind_of match nil operator respond_to same
|
60
|
-
).each { |name|
|
61
|
-
alias_method "assert_not_#{name}", "refute_#{name}"
|
62
|
-
}
|
63
|
-
end
|
64
|
-
|
65
|
-
class BaseTest < JLMiniTest
|
66
|
-
include LiveAST.parser::Test
|
67
|
-
|
68
|
-
DATA_DIR = File.expand_path(File.dirname(__FILE__) + "/data")
|
69
|
-
|
70
|
-
def self.stdlib_has_source?
|
71
|
-
RUBY_ENGINE != "jruby"
|
72
|
-
end
|
73
|
-
|
74
|
-
def temp_file(code, basename = nil)
|
75
|
-
basename ||= ('a'..'z').to_a.shuffle.join + ".rb"
|
76
|
-
path = DATA_DIR + "/" + basename
|
77
|
-
|
78
|
-
write_file path, code if code
|
79
|
-
begin
|
80
|
-
yield path
|
81
|
-
ensure
|
82
|
-
FileUtils.rm_f path
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def write_file(file, contents)
|
87
|
-
File.open(file, "w") { |f| f.print contents }
|
88
|
-
end
|
89
|
-
|
90
|
-
def return_block(&block)
|
91
|
-
block
|
92
|
-
end
|
93
|
-
|
94
|
-
def exception_backtrace
|
95
|
-
yield
|
96
|
-
rescue Exception => e
|
97
|
-
e.backtrace
|
98
|
-
end
|
99
|
-
|
100
|
-
def ignore(*_args); end
|
101
|
-
end
|
102
|
-
|
103
|
-
class RegularTest < BaseTest
|
104
|
-
def setup
|
105
|
-
super
|
106
|
-
require 'live_ast'
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
class ReplaceEvalTest < BaseTest
|
111
|
-
def initialize(*args)
|
112
|
-
super
|
113
|
-
ok = begin
|
114
|
-
require 'live_ast/full'
|
115
|
-
true
|
116
|
-
rescue LoadError
|
117
|
-
raise "need: gem install binding_of_caller" if RUBY_ENGINE == "ruby"
|
118
|
-
false
|
119
|
-
end
|
120
|
-
|
121
|
-
return if ok
|
122
|
-
self.class.class_eval do
|
123
|
-
instance_methods(false).each do |m|
|
124
|
-
remove_method(m)
|
125
|
-
define_method(m) {}
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
data/test/nested_test.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require_relative 'main'
|
2
|
-
|
3
|
-
class NestedTest < RegularTest
|
4
|
-
def test_lambda
|
5
|
-
a = lambda {
|
6
|
-
lambda {
|
7
|
-
"33"
|
8
|
-
}
|
9
|
-
}
|
10
|
-
|
11
|
-
assert_equal nested_lambdas("33"), a.to_ast
|
12
|
-
assert_equal no_arg_block(:lambda, "33"), a.call.to_ast
|
13
|
-
end
|
14
|
-
|
15
|
-
class A
|
16
|
-
def f
|
17
|
-
Class.new do
|
18
|
-
def g
|
19
|
-
"44"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_defs
|
26
|
-
assert_equal nested_defs(:f, :g, "44"), A.instance_method(:f).to_ast
|
27
|
-
assert_equal no_arg_def(:g, "44"), A.new.f.instance_method(:g).to_ast
|
28
|
-
end
|
29
|
-
end
|
data/test/readme_test.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require_relative 'main'
|
2
|
-
require_relative '../devel/levitate'
|
3
|
-
|
4
|
-
if RUBY_ENGINE != "jruby" # jruby takes about a minute
|
5
|
-
sections = [
|
6
|
-
"Synopsis",
|
7
|
-
"+to_ruby+",
|
8
|
-
"Noninvasive Interface",
|
9
|
-
"Pure Ruby and +ast_eval+",
|
10
|
-
"Full Integration",
|
11
|
-
]
|
12
|
-
|
13
|
-
Levitate.doc_to_test("README.rdoc", *sections)
|
14
|
-
end
|
data/test/recursive_eval_test.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
require_relative 'main'
|
2
|
-
|
3
|
-
class RecursiveEvalTest < RegularTest
|
4
|
-
DEFINE = lambda do
|
5
|
-
ast_eval %{
|
6
|
-
class A
|
7
|
-
ast_eval %{
|
8
|
-
def f
|
9
|
-
"A#f"
|
10
|
-
end
|
11
|
-
}, binding
|
12
|
-
|
13
|
-
ast_eval %{
|
14
|
-
ast_eval %{
|
15
|
-
remove_method :f
|
16
|
-
def f(x, y)
|
17
|
-
x + y
|
18
|
-
end
|
19
|
-
|
20
|
-
def g
|
21
|
-
"A#g"
|
22
|
-
end
|
23
|
-
}, binding
|
24
|
-
|
25
|
-
LAMBDA = ast_eval %{
|
26
|
-
lambda { |x, y| x * y }
|
27
|
-
}, binding
|
28
|
-
}, binding
|
29
|
-
end
|
30
|
-
}, binding
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_method
|
34
|
-
defined?(A) or DEFINE.call
|
35
|
-
assert_equal "#{self.class}::A", A.name
|
36
|
-
|
37
|
-
assert_equal binop_def(:f, :+),
|
38
|
-
A.instance_method(:f).to_ast
|
39
|
-
|
40
|
-
assert_equal no_arg_def(:g, "A#g"),
|
41
|
-
A.instance_method(:g).to_ast
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_lambda
|
45
|
-
defined?(A) or DEFINE.call
|
46
|
-
assert_equal "#{self.class}::A", A.name
|
47
|
-
|
48
|
-
assert_equal binop_block(:lambda, :*),
|
49
|
-
A::LAMBDA.to_ast
|
50
|
-
end
|
51
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
require_relative 'main'
|
2
|
-
|
3
|
-
class RedefineMethodTest < RegularTest
|
4
|
-
DEFINE_A = lambda do
|
5
|
-
class A
|
6
|
-
def f
|
7
|
-
"old A#f"
|
8
|
-
end
|
9
|
-
|
10
|
-
PREVIOUS_Af = instance_method(:f)
|
11
|
-
remove_method :f
|
12
|
-
|
13
|
-
def f(x, y)
|
14
|
-
x * y
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_inclass_redef
|
20
|
-
DEFINE_A.call
|
21
|
-
|
22
|
-
assert_equal binop_def(:f, :*),
|
23
|
-
A.instance_method(:f).to_ast
|
24
|
-
|
25
|
-
assert_equal no_arg_def(:f, "old A#f"),
|
26
|
-
A::PREVIOUS_Af.to_ast
|
27
|
-
end
|
28
|
-
|
29
|
-
DEFINE_B = lambda do
|
30
|
-
class B
|
31
|
-
def f
|
32
|
-
"old B#f"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_dynamic_redef
|
38
|
-
DEFINE_B.call
|
39
|
-
|
40
|
-
assert_equal "old B#f", B.new.f
|
41
|
-
assert_equal no_arg_def(:f, "old B#f"), B.instance_method(:f).to_ast
|
42
|
-
|
43
|
-
B.class_eval do
|
44
|
-
remove_method :f
|
45
|
-
define_method :f do |x, y|
|
46
|
-
x - y
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
assert_equal 11, B.new.f(44, 33)
|
51
|
-
|
52
|
-
assert_equal binop_define_method(:f, :-),
|
53
|
-
B.instance_method(:f).to_ast
|
54
|
-
end
|
55
|
-
|
56
|
-
DEFINE_C = lambda do
|
57
|
-
class C
|
58
|
-
def f
|
59
|
-
"old C#f"
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_dynamic_redef_with_eval
|
65
|
-
DEFINE_C.call
|
66
|
-
|
67
|
-
assert_equal "old C#f", C.new.f
|
68
|
-
|
69
|
-
C.class_eval do
|
70
|
-
ast_eval %{
|
71
|
-
remove_method :f
|
72
|
-
define_method :f do |x, y|
|
73
|
-
x * y
|
74
|
-
end
|
75
|
-
}, binding
|
76
|
-
end
|
77
|
-
|
78
|
-
assert_equal 12, C.new.f(3, 4)
|
79
|
-
|
80
|
-
assert_equal binop_define_method(:f, :*),
|
81
|
-
C.instance_method(:f).to_ast
|
82
|
-
end
|
83
|
-
end
|
data/test/rubygems_test.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require_relative 'main'
|
2
|
-
require_relative '../devel/levitate'
|
3
|
-
|
4
|
-
class RubygemsTest < RegularTest
|
5
|
-
def test_rubygems
|
6
|
-
lib = File.expand_path(File.dirname(__FILE__) + "/../lib")
|
7
|
-
extra_req =
|
8
|
-
if defined?(LiveASTRipper) && LiveAST.parser == LiveASTRipper
|
9
|
-
%{require 'live_ast_ripper'}
|
10
|
-
else
|
11
|
-
""
|
12
|
-
end
|
13
|
-
result = Levitate.run_code_and_capture %{
|
14
|
-
$LOAD_PATH.unshift '#{lib}'
|
15
|
-
#{extra_req}
|
16
|
-
require 'live_ast/full'
|
17
|
-
LiveAST.parser::Test
|
18
|
-
f = eval %{
|
19
|
-
lambda { 'abc' }
|
20
|
-
}
|
21
|
-
p f.to_ast
|
22
|
-
}
|
23
|
-
assert_equal no_arg_block(:lambda, 'abc').to_s, result.chomp
|
24
|
-
end
|
25
|
-
end
|
data/test/rubyspec_test.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
require_relative 'main'
|
2
|
-
require_relative '../devel/levitate'
|
3
|
-
|
4
|
-
#
|
5
|
-
# Tests against rubyspec branch which discards '|ast@' tokens
|
6
|
-
#
|
7
|
-
if ENV["LIVE_AST_RUBYSPEC_HOME"]
|
8
|
-
class RubySpecTest < RegularTest
|
9
|
-
FILES = [
|
10
|
-
'core/basicobject/instance_eval_spec.rb',
|
11
|
-
'core/binding/eval_spec.rb',
|
12
|
-
'core/kernel/eval_spec.rb',
|
13
|
-
'core/kernel/instance_eval_spec.rb',
|
14
|
-
'core/module/class_eval_spec.rb',
|
15
|
-
'core/module/module_eval_spec.rb',
|
16
|
-
].freeze
|
17
|
-
|
18
|
-
def setup
|
19
|
-
super
|
20
|
-
puts "\n==== rubyspec"
|
21
|
-
end
|
22
|
-
|
23
|
-
FILES.each do |file|
|
24
|
-
mname = "test_" + file.tr("/", "_").chop!.chop!.chop!
|
25
|
-
define_method mname do
|
26
|
-
Dir.chdir ENV["LIVE_AST_RUBYSPEC_HOME"] do
|
27
|
-
cmd =
|
28
|
-
["mspec", "-t", Levitate.ruby_bin] +
|
29
|
-
(["-T"] * Levitate.ruby_opts.size).zip(Levitate.ruby_opts).flatten +
|
30
|
-
[file]
|
31
|
-
|
32
|
-
assert system(*cmd)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
data/test/singleton_test.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require_relative 'main'
|
2
|
-
|
3
|
-
class SingletonTest < RegularTest
|
4
|
-
class A
|
5
|
-
def self.f
|
6
|
-
"A.f"
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_self_dot
|
11
|
-
expected = singleton_no_arg_def(:f, "A.f")
|
12
|
-
assert_equal expected, A.method(:f).to_ast
|
13
|
-
end
|
14
|
-
|
15
|
-
class B
|
16
|
-
def B.f(x, y)
|
17
|
-
x + y
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_name_dot
|
22
|
-
expected = singleton_binop_def(:B, :f, :+)
|
23
|
-
assert_equal expected, B.method(:f).to_ast
|
24
|
-
end
|
25
|
-
end
|
data/test/stdlib_test.rb
DELETED
data/test/thread_test.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require_relative 'main'
|
2
|
-
|
3
|
-
require 'thread'
|
4
|
-
|
5
|
-
class ThreadTest < RegularTest
|
6
|
-
def test_threads
|
7
|
-
klass = nil
|
8
|
-
mutex = Mutex.new
|
9
|
-
stop = false
|
10
|
-
results = []
|
11
|
-
num_threads = 50
|
12
|
-
|
13
|
-
workers = (0...num_threads).map {
|
14
|
-
Thread.new {
|
15
|
-
until stop
|
16
|
-
if klass
|
17
|
-
found = klass.instance_method(:f).to_ast
|
18
|
-
mutex.synchronize {
|
19
|
-
results << found
|
20
|
-
}
|
21
|
-
break
|
22
|
-
end
|
23
|
-
end
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
klass = Class.new do
|
28
|
-
def f
|
29
|
-
"anon#f"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
sleep(0.2)
|
34
|
-
stop = true
|
35
|
-
|
36
|
-
workers.each(&:join)
|
37
|
-
|
38
|
-
assert_equal num_threads, results.size
|
39
|
-
results.each { |result|
|
40
|
-
assert_equal no_arg_def(:f, "anon#f"), result
|
41
|
-
}
|
42
|
-
end
|
43
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
require 'main'
|
2
|
-
|
3
|
-
if LiveAST.parser::Test.respond_to?(:unparser_matches_ruby2ruby?) &&
|
4
|
-
LiveAST.parser::Test.unparser_matches_ruby2ruby?
|
5
|
-
class ToRubyTest < RegularTest
|
6
|
-
def setup
|
7
|
-
super
|
8
|
-
require 'live_ast/to_ruby'
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_lambda_0
|
12
|
-
src = %{lambda { "moo" }}
|
13
|
-
dst = ast_eval(src, binding).to_ruby
|
14
|
-
assert_equal src, dst
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_lambda_1
|
18
|
-
src = %{lambda { |x| (x ** 2) }}
|
19
|
-
dst = ast_eval(src, binding).to_ruby
|
20
|
-
assert_equal src, dst
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_lambda_2
|
24
|
-
src = %{lambda { |x, y| (x + y) }}
|
25
|
-
dst = ast_eval(src, binding).to_ruby
|
26
|
-
assert_equal src, dst
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_proc_0
|
30
|
-
src = %{proc { "moo" }}
|
31
|
-
dst = ast_eval(src, binding).to_ruby
|
32
|
-
assert_equal src, dst
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_proc_1
|
36
|
-
src = %{proc { |x| (x ** 2) }}
|
37
|
-
dst = ast_eval(src, binding).to_ruby
|
38
|
-
assert_equal src, dst
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_proc_2
|
42
|
-
src = %{proc { |x, y| (x * y) }}
|
43
|
-
dst = ast_eval(src, binding).to_ruby
|
44
|
-
assert_equal src, dst
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_block_0
|
48
|
-
src = %{return_block { "moo" }}
|
49
|
-
dst = ast_eval(src, binding).to_ruby
|
50
|
-
assert_equal src, dst
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_block_1
|
54
|
-
src = %{return_block { |x| (x ** 2) }}
|
55
|
-
dst = ast_eval(src, binding).to_ruby
|
56
|
-
assert_equal src, dst
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_block_2
|
60
|
-
src = %{return_block { |x, y| (x - y) }}
|
61
|
-
dst = ast_eval(src, binding).to_ruby
|
62
|
-
assert_equal src, dst
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_method_0
|
66
|
-
src = %{def f\n "moo"\nend}
|
67
|
-
dst = Class.new do
|
68
|
-
ast_eval(src, binding)
|
69
|
-
end.instance_method(:f).to_ruby
|
70
|
-
assert_equal src, dst
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_method_1
|
74
|
-
src = %{def f(x)\n (x ** 2)\nend}
|
75
|
-
dst = Class.new do
|
76
|
-
ast_eval(src, binding)
|
77
|
-
end.instance_method(:f).to_ruby
|
78
|
-
assert_equal src, dst
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_method_2
|
82
|
-
src = %{def f(x, y)\n (x / y)\nend}
|
83
|
-
dst = Class.new do
|
84
|
-
ast_eval(src, binding)
|
85
|
-
end.instance_method(:f).to_ruby
|
86
|
-
assert_equal src, dst
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_to_ast_after_to_ruby
|
90
|
-
src = %{lambda { "moo" }}
|
91
|
-
expected_ast = ast_eval(src, binding).to_ast
|
92
|
-
|
93
|
-
lmb = ast_eval(src, binding)
|
94
|
-
lmb.to_ruby
|
95
|
-
|
96
|
-
assert_equal expected_ast, lmb.to_ast
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|