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