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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.rdoc +5 -0
  3. data/README.rdoc +14 -0
  4. data/lib/live_ast/base.rb +7 -9
  5. data/lib/live_ast/irb_spy.rb +1 -1
  6. data/lib/live_ast/replace_caller.rb +14 -0
  7. data/lib/live_ast/version.rb +1 -1
  8. metadata +75 -116
  9. data/Rakefile +0 -62
  10. data/devel/levitate.rb +0 -184
  11. data/devel/levitate_config.rb +0 -4
  12. data/test/alias_test.rb +0 -25
  13. data/test/ast_eval/ast_eval_test.rb +0 -13
  14. data/test/ast_load/ast_load_test.rb +0 -47
  15. data/test/attr_test.rb +0 -26
  16. data/test/backtrace_test.rb +0 -161
  17. data/test/base/noninvasive_test.rb +0 -55
  18. data/test/base/reload_test.rb +0 -43
  19. data/test/covert_define_method_test.rb +0 -25
  20. data/test/def_test.rb +0 -37
  21. data/test/define_method_test.rb +0 -69
  22. data/test/define_singleton_method_test.rb +0 -17
  23. data/test/encoding_test/bad.rb +0 -1
  24. data/test/encoding_test/cp932.rb +0 -6
  25. data/test/encoding_test/default.rb +0 -5
  26. data/test/encoding_test/eucjp.rb +0 -6
  27. data/test/encoding_test/koi8.rb +0 -6
  28. data/test/encoding_test/koi8_shebang.rb +0 -7
  29. data/test/encoding_test/koi8_with_utf8bom.rb +0 -6
  30. data/test/encoding_test/usascii.rb +0 -6
  31. data/test/encoding_test/usascii_with_utf8bom.rb +0 -6
  32. data/test/encoding_test/utf8.rb +0 -6
  33. data/test/encoding_test/utf8bom.rb +0 -6
  34. data/test/encoding_test/utf8bom_only.rb +0 -5
  35. data/test/encoding_test/utf8dos.rb +0 -6
  36. data/test/encoding_test/utf8mac.rb +0 -6
  37. data/test/encoding_test/utf8mac_alt.rb +0 -6
  38. data/test/encoding_test/utf8unix.rb +0 -6
  39. data/test/encoding_test.rb +0 -54
  40. data/test/error_test.rb +0 -118
  41. data/test/eval_test.rb +0 -271
  42. data/test/flush_cache_test.rb +0 -102
  43. data/test/full/ast_reload_test.rb +0 -41
  44. data/test/full/replace_eval_test.rb +0 -433
  45. data/test/irb_test.rb +0 -43
  46. data/test/lambda_test.rb +0 -65
  47. data/test/load_path_test.rb +0 -77
  48. data/test/load_test.rb +0 -125
  49. data/test/main.rb +0 -134
  50. data/test/nested_test.rb +0 -31
  51. data/test/readme_test.rb +0 -16
  52. data/test/recursive_eval_test.rb +0 -53
  53. data/test/redefine_method_test.rb +0 -85
  54. data/test/rubygems_test.rb +0 -27
  55. data/test/rubyspec_test.rb +0 -39
  56. data/test/singleton_test.rb +0 -27
  57. data/test/stdlib_test.rb +0 -15
  58. data/test/thread_test.rb +0 -45
  59. data/test/to_ast/to_ast_feature_test.rb +0 -13
  60. data/test/to_ruby/to_ruby_feature_test.rb +0 -13
  61. data/test/to_ruby/to_ruby_test.rb +0 -101
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e96ab3dab36ef2a9b745f3a878b71b79bb8b8ecfd870b0c8ad29dcef5520a943
4
- data.tar.gz: b8b7f606c175caff1522b70db8287392160d8352e44f57fca8e6709011599bd5
3
+ metadata.gz: c77dc5f539e5e56367987217f1a7389f37806f2da4ec1c3f55fb9b53d03c2172
4
+ data.tar.gz: 75a943f11e62f41dd4cfcd2984b8d7fd972d180d7e8b551e8f13282d55eba95c
5
5
  SHA512:
6
- metadata.gz: ac889c697aa0c722078437135a3c57db7b05126178920e1224e4728616ab38cabbcb682d6eae3194a9361f2032400a6b55d2e89726f95abe006fa33d9e8c6ef9
7
- data.tar.gz: ecc774511be6e4bb0d89559c8e6186ec766aa30ad31376f6e310ef5e9d0e116f603b648ce1a8f8a722116daadc1150913bdcbb977ed653c2784b0e84525c59c7
6
+ metadata.gz: 0e4a9b8778a9ba187553712fcfb20611df3ed73e6cbf441dea5e2505c3f345d5644acc2a5f8c69977d8ad4fb9fdad6045304b853841f94446d2c99887ab64c40
7
+ data.tar.gz: c45e2c0739d6c2da44c696779eb61bb69fb47c2f5a9612c949f2cab86ca9378fd4f4e371c3dcebcbd2cdaafdf57cd2461af827048e7db225484c0361178d9b9f
data/CHANGES.rdoc CHANGED
@@ -1,5 +1,10 @@
1
1
  = live_ast Changes
2
2
 
3
+ == Version 2.1.0
4
+
5
+ * Add support for Ruby 3.1
6
+ * Add `live_ast/replace_caller` similar to `replace_raise`
7
+
3
8
  == Version 2.0.0
4
9
 
5
10
  * Breaking change: Use bindings gem instead of binding_of_caller.
data/README.rdoc CHANGED
@@ -224,6 +224,20 @@ code. An exception from within a native method will likely still
224
224
  contain the token in its backtrace (e.g., in MRI the exception raised
225
225
  by <code>1/0</code> comes from C).
226
226
 
227
+ Similarly to replace_raise, there is a replace_caller for libraries that
228
+ use the output of Kernel.caller directly to identify files. This has the
229
+ same caveats as replace_raise.
230
+
231
+ require 'live_ast'
232
+
233
+ f = ast_eval %{ lambda { caller.first } }, binding
234
+ f.call
235
+ => "(irb)|ast@o:7:in `irb_binding'"
236
+
237
+ require 'live_ast/replace_caller'
238
+ f.call
239
+ => "(irb):7:in `block in irb_binding'"
240
+
227
241
  == Replacing the Parser
228
242
 
229
243
  Despite its name, LiveAST knows nothing about ASTs. It merely reports
data/lib/live_ast/base.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "thread"
4
-
5
3
  require "live_ast/common"
6
4
  require "live_ast/reader"
7
5
  require "live_ast/evaler"
@@ -11,12 +9,12 @@ require "live_ast/error"
11
9
  require "live_ast/irb_spy" if defined?(IRB)
12
10
 
13
11
  module LiveAST
14
- NATIVE_EVAL = Kernel.method(:eval) #:nodoc:
12
+ NATIVE_EVAL = Kernel.method(:eval) # :nodoc:
15
13
 
16
14
  class << self
17
- attr_writer :parser #:nodoc:
15
+ attr_writer :parser # :nodoc:
18
16
 
19
- def parser #:nodoc:
17
+ def parser # :nodoc:
20
18
  @parser ||=
21
19
  begin
22
20
  require "live_ast/ruby_parser"
@@ -29,7 +27,7 @@ module LiveAST
29
27
  #
30
28
  # Equivalent to <code>obj.to_ast</code>.
31
29
  #
32
- def ast(obj) #:nodoc:
30
+ def ast(obj) # :nodoc:
33
31
  case obj
34
32
  when Method, UnboundMethod
35
33
  Linker.find_method_ast(obj.owner, obj.name, *obj.source_location)
@@ -53,7 +51,7 @@ module LiveAST
53
51
  #
54
52
  # Equivalent to <code>Kernel#ast_eval</code>.
55
53
  #
56
- def eval(*args) #:nodoc:
54
+ def eval(*args) # :nodoc:
57
55
  Evaler.eval(args[0], *args)
58
56
  end
59
57
 
@@ -62,14 +60,14 @@ module LiveAST
62
60
  #
63
61
  # Equivalent to <code>Kernel#ast_load</code>.
64
62
  #
65
- def load(file, wrap = false) #:nodoc:
63
+ def load(file, wrap = false) # :nodoc:
66
64
  Loader.load(file, wrap)
67
65
  end
68
66
 
69
67
  #
70
68
  # strip the revision token from a string
71
69
  #
72
- def strip_token(file) #:nodoc:
70
+ def strip_token(file) # :nodoc:
73
71
  file.sub(/#{Regexp.quote Linker::REVISION_TOKEN}[a-z]+/, "")
74
72
  end
75
73
  end
@@ -10,7 +10,7 @@ module LiveAST
10
10
  def code_at(line)
11
11
  code = +""
12
12
  checked_history[line..].each do |code_line|
13
- code << code_line << "\n"
13
+ code += "#{code_line}\n"
14
14
  return code if can_parse code
15
15
  end
16
16
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "live_ast/base"
4
+
5
+ module Kernel
6
+ private
7
+
8
+ alias live_ast_original_caller caller
9
+ def caller(*args)
10
+ c = live_ast_original_caller(*args)
11
+ c.shift
12
+ c.map { |line| LiveAST.strip_token line }
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LiveAST
4
- VERSION = "2.0.0"
4
+ VERSION = "2.1.0"
5
5
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mvz-live_ast
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James M. Lawrence
8
8
  - Matijs van Zuijlen
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-12-26 00:00:00.000000000 Z
12
+ date: 2022-02-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby2ruby
@@ -81,6 +81,20 @@ dependencies:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '13.0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rake-manifest
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 0.2.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 0.2.0
84
98
  - !ruby/object:Gem::Dependency
85
99
  name: rdoc
86
100
  requirement: !ruby/object:Gem::Requirement
@@ -101,32 +115,75 @@ dependencies:
101
115
  requirements:
102
116
  - - "~>"
103
117
  - !ruby/object:Gem::Version
104
- version: 1.6.0
118
+ version: '1.25'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '1.25'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop-minitest
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 0.17.1
105
133
  type: :development
106
134
  prerelease: false
107
135
  version_requirements: !ruby/object:Gem::Requirement
108
136
  requirements:
109
137
  - - "~>"
110
138
  - !ruby/object:Gem::Version
111
- version: 1.6.0
139
+ version: 0.17.1
140
+ - !ruby/object:Gem::Dependency
141
+ name: rubocop-packaging
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: 0.5.0
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 0.5.0
112
154
  - !ruby/object:Gem::Dependency
113
155
  name: rubocop-performance
114
156
  requirement: !ruby/object:Gem::Requirement
115
157
  requirements:
116
158
  - - "~>"
117
159
  - !ruby/object:Gem::Version
118
- version: 1.9.1
160
+ version: '1.13'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '1.13'
168
+ - !ruby/object:Gem::Dependency
169
+ name: rubocop-rake
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: 0.6.0
119
175
  type: :development
120
176
  prerelease: false
121
177
  version_requirements: !ruby/object:Gem::Requirement
122
178
  requirements:
123
179
  - - "~>"
124
180
  - !ruby/object:Gem::Version
125
- version: 1.9.1
181
+ version: 0.6.0
126
182
  description: |2
127
183
  LiveAST enables a program to find the ASTs of objects created by dynamically
128
184
  generated code.
129
- email: matijs@matijs.net
185
+ email:
186
+ - matijs@matijs.net
130
187
  executables: []
131
188
  extensions: []
132
189
  extra_rdoc_files:
@@ -135,9 +192,6 @@ extra_rdoc_files:
135
192
  files:
136
193
  - CHANGES.rdoc
137
194
  - README.rdoc
138
- - Rakefile
139
- - devel/levitate.rb
140
- - devel/levitate_config.rb
141
195
  - lib/live_ast.rb
142
196
  - lib/live_ast/ast_eval.rb
143
197
  - lib/live_ast/ast_load.rb
@@ -150,6 +204,7 @@ files:
150
204
  - lib/live_ast/linker.rb
151
205
  - lib/live_ast/loader.rb
152
206
  - lib/live_ast/reader.rb
207
+ - lib/live_ast/replace_caller.rb
153
208
  - lib/live_ast/replace_eval.rb
154
209
  - lib/live_ast/replace_load.rb
155
210
  - lib/live_ast/replace_raise.rb
@@ -159,61 +214,15 @@ files:
159
214
  - lib/live_ast/to_ast.rb
160
215
  - lib/live_ast/to_ruby.rb
161
216
  - lib/live_ast/version.rb
162
- - test/alias_test.rb
163
- - test/ast_eval/ast_eval_test.rb
164
- - test/ast_load/ast_load_test.rb
165
- - test/attr_test.rb
166
- - test/backtrace_test.rb
167
- - test/base/noninvasive_test.rb
168
- - test/base/reload_test.rb
169
- - test/covert_define_method_test.rb
170
- - test/def_test.rb
171
- - test/define_method_test.rb
172
- - test/define_singleton_method_test.rb
173
- - test/encoding_test.rb
174
- - test/encoding_test/bad.rb
175
- - test/encoding_test/cp932.rb
176
- - test/encoding_test/default.rb
177
- - test/encoding_test/eucjp.rb
178
- - test/encoding_test/koi8.rb
179
- - test/encoding_test/koi8_shebang.rb
180
- - test/encoding_test/koi8_with_utf8bom.rb
181
- - test/encoding_test/usascii.rb
182
- - test/encoding_test/usascii_with_utf8bom.rb
183
- - test/encoding_test/utf8.rb
184
- - test/encoding_test/utf8bom.rb
185
- - test/encoding_test/utf8bom_only.rb
186
- - test/encoding_test/utf8dos.rb
187
- - test/encoding_test/utf8mac.rb
188
- - test/encoding_test/utf8mac_alt.rb
189
- - test/encoding_test/utf8unix.rb
190
- - test/error_test.rb
191
- - test/eval_test.rb
192
- - test/flush_cache_test.rb
193
- - test/full/ast_reload_test.rb
194
- - test/full/replace_eval_test.rb
195
- - test/irb_test.rb
196
- - test/lambda_test.rb
197
- - test/load_path_test.rb
198
- - test/load_test.rb
199
- - test/main.rb
200
- - test/nested_test.rb
201
- - test/readme_test.rb
202
- - test/recursive_eval_test.rb
203
- - test/redefine_method_test.rb
204
- - test/rubygems_test.rb
205
- - test/rubyspec_test.rb
206
- - test/singleton_test.rb
207
- - test/stdlib_test.rb
208
- - test/thread_test.rb
209
- - test/to_ast/to_ast_feature_test.rb
210
- - test/to_ruby/to_ruby_feature_test.rb
211
- - test/to_ruby/to_ruby_test.rb
212
217
  homepage: https://github.com/mvz/live_ast
213
218
  licenses:
214
219
  - MIT
215
- metadata: {}
216
- post_install_message:
220
+ metadata:
221
+ homepage_uri: https://github.com/mvz/live_ast
222
+ source_code_uri: https://github.com/mvz/live_ast
223
+ changelog_uri: https://github.com/mvz/live_ast/blob/master/CHANGES.rdoc
224
+ rubygems_mfa_required: 'true'
225
+ post_install_message:
217
226
  rdoc_options:
218
227
  - "--main"
219
228
  - README.rdoc
@@ -234,58 +243,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
243
  - !ruby/object:Gem::Version
235
244
  version: '0'
236
245
  requirements: []
237
- rubygems_version: 3.2.3
238
- signing_key:
246
+ rubygems_version: 3.3.3
247
+ signing_key:
239
248
  specification_version: 4
240
249
  summary: Live abstract syntax trees of methods and procs.
241
- test_files:
242
- - test/alias_test.rb
243
- - test/full/ast_reload_test.rb
244
- - test/full/replace_eval_test.rb
245
- - test/eval_test.rb
246
- - test/load_path_test.rb
247
- - test/readme_test.rb
248
- - test/stdlib_test.rb
249
- - test/encoding_test/koi8_shebang.rb
250
- - test/encoding_test/utf8dos.rb
251
- - test/encoding_test/koi8.rb
252
- - test/encoding_test/eucjp.rb
253
- - test/encoding_test/utf8bom.rb
254
- - test/encoding_test/utf8bom_only.rb
255
- - test/encoding_test/cp932.rb
256
- - test/encoding_test/usascii.rb
257
- - test/encoding_test/utf8.rb
258
- - test/encoding_test/usascii_with_utf8bom.rb
259
- - test/encoding_test/utf8mac_alt.rb
260
- - test/encoding_test/default.rb
261
- - test/encoding_test/koi8_with_utf8bom.rb
262
- - test/encoding_test/utf8unix.rb
263
- - test/encoding_test/utf8mac.rb
264
- - test/encoding_test/bad.rb
265
- - test/to_ruby/to_ruby_test.rb
266
- - test/to_ruby/to_ruby_feature_test.rb
267
- - test/nested_test.rb
268
- - test/singleton_test.rb
269
- - test/define_singleton_method_test.rb
270
- - test/irb_test.rb
271
- - test/attr_test.rb
272
- - test/lambda_test.rb
273
- - test/load_test.rb
274
- - test/base/noninvasive_test.rb
275
- - test/base/reload_test.rb
276
- - test/encoding_test.rb
277
- - test/rubyspec_test.rb
278
- - test/main.rb
279
- - test/define_method_test.rb
280
- - test/error_test.rb
281
- - test/rubygems_test.rb
282
- - test/ast_load/ast_load_test.rb
283
- - test/def_test.rb
284
- - test/recursive_eval_test.rb
285
- - test/ast_eval/ast_eval_test.rb
286
- - test/flush_cache_test.rb
287
- - test/thread_test.rb
288
- - test/redefine_method_test.rb
289
- - test/backtrace_test.rb
290
- - test/covert_define_method_test.rb
291
- - test/to_ast/to_ast_feature_test.rb
250
+ test_files: []
data/Rakefile DELETED
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rake/clean"
4
- require "bundler/gem_tasks"
5
- require "rake/testtask"
6
- require "rdoc/task"
7
-
8
- namespace :test do
9
- desc "run tests"
10
- Rake::TestTask.new(:main) do |t|
11
- t.libs = ["lib"]
12
- t.ruby_opts += ["-w -Itest"]
13
- t.test_files = FileList["test/*_test.rb"]
14
- end
15
-
16
- Rake::TestTask.new(:base) do |t|
17
- t.libs = ["lib"]
18
- t.ruby_opts += ["-w -Itest"]
19
- t.test_files = FileList["test/base/*_test.rb"]
20
- end
21
-
22
- Rake::TestTask.new(:ast_load) do |t|
23
- t.libs = ["lib"]
24
- t.ruby_opts += ["-w -Itest"]
25
- t.test_files = FileList["test/ast_load/*_test.rb"]
26
- end
27
-
28
- Rake::TestTask.new(:ast_eval) do |t|
29
- t.libs = ["lib"]
30
- t.ruby_opts += ["-w -Itest"]
31
- t.test_files = FileList["test/ast_eval/*_test.rb"]
32
- end
33
-
34
- Rake::TestTask.new(:to_ast) do |t|
35
- t.libs = ["lib"]
36
- t.ruby_opts += ["-w -Itest"]
37
- t.test_files = FileList["test/to_ast/*_test.rb"]
38
- end
39
-
40
- Rake::TestTask.new(:to_ruby) do |t|
41
- t.libs = ["lib"]
42
- t.ruby_opts += ["-w -Itest"]
43
- t.test_files = FileList["test/to_ruby/*_test.rb"]
44
- end
45
-
46
- Rake::TestTask.new(:full) do |t|
47
- t.libs = ["lib"]
48
- t.ruby_opts += ["-w -Itest"]
49
- t.test_files = FileList["test/full/*_test.rb"]
50
- end
51
-
52
- task all: [:main, :base, :ast_load, :to_ast, :to_ruby, :full]
53
- end
54
-
55
- RDoc::Task.new(:rdoc) do |t|
56
- t.main = "README.rdoc"
57
- t.title = "LiveAST: Live Abstract Syntax Trees"
58
- t.options += ["--visibility", "private"]
59
- t.rdoc_files.include("README.rdoc", "CHANGES.rdoc", "lib")
60
- end
61
-
62
- task default: "test:all"
data/devel/levitate.rb DELETED
@@ -1,184 +0,0 @@
1
- class Levitate
2
- #### utility for instance and class
3
- module Util
4
- def ruby_bin
5
- require 'rbconfig'
6
-
7
- name = File.join(
8
- RbConfig::CONFIG["bindir"],
9
- RbConfig::CONFIG["RUBY_INSTALL_NAME"]
10
- )
11
-
12
- if RbConfig::CONFIG["host"] =~ %r!(mswin|cygwin|mingw)! and
13
- File.basename(name) !~ %r!\.(exe|com|bat|cmd)\Z!i
14
- name + RbConfig::CONFIG["EXEEXT"]
15
- else
16
- name
17
- end
18
- end
19
-
20
- def ruby_command
21
- [ruby_bin] + Levitate.ruby_opts.to_a
22
- end
23
-
24
- def ruby_command_string
25
- ruby_command.join(" ")
26
- end
27
-
28
- def run(*args)
29
- cmd = ruby_command + args
30
- unless system(*cmd)
31
- cmd_str = cmd.map { |t| "'#{t}'" }.join(", ")
32
- raise "system(#{cmd_str}) failed with status #{$?.exitstatus}"
33
- end
34
- end
35
-
36
- def run_each_file(*files)
37
- files.each { |file|
38
- run("-w", file)
39
- }
40
- end
41
-
42
- def run_code_and_capture(code)
43
- IO.popen(ruby_command_string, "r+") { |pipe|
44
- pipe.print(code)
45
- pipe.flush
46
- pipe.close_write
47
- pipe.read
48
- }
49
- end
50
-
51
- def run_file_and_capture(file)
52
- unless File.file? file
53
- raise "file does not exist: `#{file}'"
54
- end
55
- IO.popen(ruby_command_string + " " + file, "r") { |pipe|
56
- pipe.read
57
- }
58
- end
59
-
60
- def with_warnings(value = true)
61
- previous = $VERBOSE
62
- $VERBOSE = value
63
- begin
64
- yield
65
- ensure
66
- $VERBOSE = previous
67
- end
68
- end
69
-
70
- def no_warnings(&block)
71
- with_warnings(nil, &block)
72
- end
73
-
74
- def to_camel_case(str)
75
- str.split('_').map { |t| t.capitalize }.join
76
- end
77
-
78
- def write_file(file)
79
- contents = yield
80
- File.open(file, "wb") { |out|
81
- out.print(contents)
82
- }
83
- contents
84
- end
85
-
86
- def instance_exec2(obj, *args, &block)
87
- method_name = ["_", obj.object_id, "_", Thread.current.object_id].join
88
- (class << obj; self; end).class_eval do
89
- define_method method_name, &block
90
- begin
91
- obj.send(method_name, *args)
92
- ensure
93
- remove_method method_name
94
- end
95
- end
96
- end
97
- end
98
- extend Util
99
- include Util
100
-
101
- #### public helpers for testing
102
-
103
- class << self
104
- def run_doc_code(code, expected, index, instance, &block)
105
- lib = File.expand_path(File.dirname(__FILE__) + "/../lib")
106
- header = %{
107
- $LOAD_PATH.unshift "#{lib}"
108
- begin
109
- }
110
- footer = %{
111
- rescue Exception => __levitate_exception
112
- puts "raises \#{__levitate_exception.class}"
113
- end
114
- }
115
- final_code = header + code + footer
116
-
117
- # Sometimes code is required to be inside a file.
118
- actual = nil
119
- require 'tempfile'
120
- Tempfile.open("run-rdoc-code") { |temp_file|
121
- temp_file.print(final_code)
122
- temp_file.close
123
- actual = run_file_and_capture(temp_file.path).chomp
124
- }
125
-
126
- instance_exec2(instance, expected, actual, index, &block)
127
- end
128
-
129
- def run_doc_section(file, section, instance, &block)
130
- contents = File.read(file)
131
- re = %r!^=+[ \t]#{Regexp.quote(section)}.*?\n(.*?)^=!m
132
- if (section_contents = contents[re, 1])
133
- index = 0
134
- section_contents.scan(%r!^( \S.*?)(?=(^\S|\Z))!m) { |indented, unused|
135
- code_sections = indented.split(%r!^ \#\#\#\# output:\s*$!)
136
- code, expected = (
137
- case code_sections.size
138
- when 1
139
- [indented, indented.scan(%r!\# => (.*?)\n!).flatten.join("\n")]
140
- when 2
141
- code_sections
142
- else
143
- raise "parse error"
144
- end
145
- )
146
- code.gsub!(/^\s*%.*$/, "") # ignore shell command examples
147
- run_doc_code(code, expected, index, instance, &block)
148
- index += 1
149
- }
150
- else
151
- raise "couldn't find section `#{section}' of `#{file}'"
152
- end
153
- end
154
-
155
- def doc_to_test(file, *sections, &block)
156
- levitate = self
157
- klass = Class.new MiniTest::Test do
158
- sections.each { |section|
159
- define_method "test_#{file}_#{section}" do
160
- if block
161
- levitate.run_doc_section(file, section, self, &block)
162
- else
163
- levitate.run_doc_section(file, section, self) {
164
- |expected, actual, index|
165
- assert_equal expected, actual
166
- }
167
- end
168
- end
169
- }
170
- end
171
- Object.const_set("Test#{file}".gsub(".", ""), klass)
172
- end
173
-
174
- def ruby_opts
175
- @ruby_opts ||= []
176
- end
177
- attr_writer :ruby_opts
178
- end
179
- end
180
-
181
- lambda do
182
- config = File.join(File.dirname(__FILE__), "levitate_config.rb")
183
- require config if File.file? config
184
- end.call
@@ -1,4 +0,0 @@
1
-
2
- if RUBY_ENGINE == "jruby"
3
- Levitate.ruby_opts = %w[--1.9]
4
- end
data/test/alias_test.rb DELETED
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "main"
4
-
5
- class AliasTest < RegularTest
6
- class A
7
- def f
8
- "A#f"
9
- end
10
-
11
- alias g f
12
- end
13
-
14
- def test_alias_unbound_method
15
- expected = no_arg_def(:f, "A#f")
16
- assert_equal expected, A.instance_method(:f).to_ast
17
- assert_equal expected, A.instance_method(:g).to_ast
18
- end
19
-
20
- def test_alias_method
21
- expected = no_arg_def(:f, "A#f")
22
- assert_equal expected, A.new.method(:f).to_ast
23
- assert_equal expected, A.new.method(:g).to_ast
24
- end
25
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "main"
4
-
5
- require "live_ast/ast_eval"
6
-
7
- class ASTEvalTest < BaseTest
8
- def test_defines_ast_eval
9
- assert respond_to?(:ast_eval)
10
-
11
- assert private_methods.include?(:ast_eval)
12
- end
13
- end