ikra 0.0.1

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 (220) hide show
  1. checksums.yaml +7 -0
  2. data/lib/ast/builder.rb +100 -0
  3. data/lib/ast/lexical_variables_enumerator.rb +34 -0
  4. data/lib/ast/method_definition.rb +37 -0
  5. data/lib/ast/nodes.rb +208 -0
  6. data/lib/ast/printer.rb +99 -0
  7. data/lib/ast/translator.rb +264 -0
  8. data/lib/ast/visitor.rb +173 -0
  9. data/lib/config/configuration.rb +18 -0
  10. data/lib/config/os_configuration.rb +56 -0
  11. data/lib/entity.rb +11 -0
  12. data/lib/ikra.rb +7 -0
  13. data/lib/parsing.rb +32 -0
  14. data/lib/resources/cuda/block_function_head.cpp +1 -0
  15. data/lib/resources/cuda/env_builder_copy_array.cpp +4 -0
  16. data/lib/resources/cuda/header.cpp +46 -0
  17. data/lib/resources/cuda/kernel.cpp +8 -0
  18. data/lib/resources/cuda/kernel_launcher.cpp +28 -0
  19. data/lib/resources/cuda/soa_header.cpp +4 -0
  20. data/lib/scope.rb +166 -0
  21. data/lib/sourcify/Gemfile +10 -0
  22. data/lib/sourcify/HISTORY.txt +88 -0
  23. data/lib/sourcify/LICENSE +20 -0
  24. data/lib/sourcify/README.rdoc +352 -0
  25. data/lib/sourcify/Rakefile +111 -0
  26. data/lib/sourcify/lib/sourcify.rb +44 -0
  27. data/lib/sourcify/lib/sourcify/common/parser/converter.rb +29 -0
  28. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/comment.rb +23 -0
  29. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/counter.rb +43 -0
  30. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/dstring.rb +58 -0
  31. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/extensions.rb +140 -0
  32. data/lib/sourcify/lib/sourcify/common/parser/raw_scanner/heredoc.rb +26 -0
  33. data/lib/sourcify/lib/sourcify/common/parser/source_code.rb +45 -0
  34. data/lib/sourcify/lib/sourcify/common/ragel/common.rl +5 -0
  35. data/lib/sourcify/lib/sourcify/common/ragel/expressions.rl +38 -0
  36. data/lib/sourcify/lib/sourcify/common/ragel/machines.rl +317 -0
  37. data/lib/sourcify/lib/sourcify/errors.rb +4 -0
  38. data/lib/sourcify/lib/sourcify/method.rb +138 -0
  39. data/lib/sourcify/lib/sourcify/method/methods.rb +3 -0
  40. data/lib/sourcify/lib/sourcify/method/methods/to_raw_source.rb +30 -0
  41. data/lib/sourcify/lib/sourcify/method/methods/to_sexp.rb +30 -0
  42. data/lib/sourcify/lib/sourcify/method/methods/to_source.rb +30 -0
  43. data/lib/sourcify/lib/sourcify/method/parser.rb +110 -0
  44. data/lib/sourcify/lib/sourcify/method/parser/converter.rb +8 -0
  45. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rb +2494 -0
  46. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner.rl +144 -0
  47. data/lib/sourcify/lib/sourcify/method/parser/raw_scanner_extensions.rb +68 -0
  48. data/lib/sourcify/lib/sourcify/method/parser/scanner.rb +52 -0
  49. data/lib/sourcify/lib/sourcify/method/parser/source_code.rb +8 -0
  50. data/lib/sourcify/lib/sourcify/patches.rb +63 -0
  51. data/lib/sourcify/lib/sourcify/proc.rb +183 -0
  52. data/lib/sourcify/lib/sourcify/proc/methods.rb +3 -0
  53. data/lib/sourcify/lib/sourcify/proc/methods/source_location.rb +61 -0
  54. data/lib/sourcify/lib/sourcify/proc/methods/to_raw_source.rb +20 -0
  55. data/lib/sourcify/lib/sourcify/proc/methods/to_sexp.rb +40 -0
  56. data/lib/sourcify/lib/sourcify/proc/methods/to_source.rb +48 -0
  57. data/lib/sourcify/lib/sourcify/proc/parser.rb +51 -0
  58. data/lib/sourcify/lib/sourcify/proc/parser/converter.rb +8 -0
  59. data/lib/sourcify/lib/sourcify/proc/parser/normalizer.rb +43 -0
  60. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rb +2498 -0
  61. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner.rl +149 -0
  62. data/lib/sourcify/lib/sourcify/proc/parser/raw_scanner_extensions.rb +74 -0
  63. data/lib/sourcify/lib/sourcify/proc/parser/scanner.rb +49 -0
  64. data/lib/sourcify/lib/sourcify/proc/parser/source_code.rb +8 -0
  65. data/lib/sourcify/lib/sourcify/version.rb +3 -0
  66. data/lib/sourcify/sourcify.gemspec +31 -0
  67. data/lib/sourcify/spec/dump_object_space_procs.rb +84 -0
  68. data/lib/sourcify/spec/method/encoding_from_def_end_block_spec.rb +33 -0
  69. data/lib/sourcify/spec/method/encoding_from_define_method_spec.rb +37 -0
  70. data/lib/sourcify/spec/method/others_from_def_end_block_spec.rb +49 -0
  71. data/lib/sourcify/spec/method/others_from_define_method_spec.rb +63 -0
  72. data/lib/sourcify/spec/method/raw_scanner/block_comment_spec.rb +8 -0
  73. data/lib/sourcify/spec/method/raw_scanner/double_colons_spec.rb +8 -0
  74. data/lib/sourcify/spec/method/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
  75. data/lib/sourcify/spec/method/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
  76. data/lib/sourcify/spec/method/raw_scanner/heredoc_w_indent_spec.rb +8 -0
  77. data/lib/sourcify/spec/method/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
  78. data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
  79. data/lib/sourcify/spec/method/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
  80. data/lib/sourcify/spec/method/raw_scanner/per_line_comment_spec.rb +8 -0
  81. data/lib/sourcify/spec/method/raw_scanner/single_quote_str_spec.rb +8 -0
  82. data/lib/sourcify/spec/method/raw_scanner/slash_operator_spec.rb +8 -0
  83. data/lib/sourcify/spec/method/raw_scanner/spec_helper.rb +80 -0
  84. data/lib/sourcify/spec/method/spec_helper.rb +1 -0
  85. data/lib/sourcify/spec/method/to_raw_source_spec.rb +31 -0
  86. data/lib/sourcify/spec/method/to_raw_source_w_specified_strip_enclosure_spec.rb +148 -0
  87. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_w_variables_spec.rb +46 -0
  88. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_irb_spec.rb +38 -0
  89. data/lib/sourcify/spec/method/to_sexp_from_def_end_block_within_pry_spec.rb +38 -0
  90. data/lib/sourcify/spec/method/to_sexp_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +56 -0
  91. data/lib/sourcify/spec/method/to_sexp_from_define_method_w_variables_spec.rb +52 -0
  92. data/lib/sourcify/spec/method/to_sexp_from_define_method_within_irb_spec.rb +42 -0
  93. data/lib/sourcify/spec/method/to_sexp_from_define_method_within_pry_spec.rb +42 -0
  94. data/lib/sourcify/spec/method/to_sexp_w_specified_strip_enclosure_spec.rb +74 -0
  95. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_19_extras_spec.rb +23 -0
  96. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_begin_spec.rb +35 -0
  97. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_case_spec.rb +35 -0
  98. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_class_spec.rb +51 -0
  99. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_do_end_block_spec.rb +33 -0
  100. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_for_spec.rb +126 -0
  101. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_if_spec.rb +83 -0
  102. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_literal_keyword_spec.rb +141 -0
  103. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_method_spec.rb +33 -0
  104. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_module_spec.rb +59 -0
  105. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_unless_spec.rb +83 -0
  106. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_until_spec.rb +179 -0
  107. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_nested_while_spec.rb +179 -0
  108. data/lib/sourcify/spec/method/to_source_from_def_end_block_w_singleton_method_spec.rb +19 -0
  109. data/lib/sourcify/spec/method/to_source_from_def_end_block_within_irb_spec.rb +30 -0
  110. data/lib/sourcify/spec/method/to_source_from_def_end_block_within_pry_spec.rb +45 -0
  111. data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_many_matches_spec.rb +30 -0
  112. data/lib/sourcify/spec/method/to_source_from_def_end_w_multi_blocks_and_single_match_spec.rb +36 -0
  113. data/lib/sourcify/spec/method/to_source_from_define_method_w_braced_block_spec.rb +113 -0
  114. data/lib/sourcify/spec/method/to_source_from_define_method_w_do_end_block_spec.rb +145 -0
  115. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_many_matches_spec.rb +56 -0
  116. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_single_match_spec.rb +73 -0
  117. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_many_matches_spec.rb +36 -0
  118. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_no_match_spec.rb +36 -0
  119. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_and_single_match_spec.rb +28 -0
  120. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_attached_to_spec.rb +103 -0
  121. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_many_matches_spec.rb +36 -0
  122. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_no_match_spec.rb +36 -0
  123. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_body_matcher_and_single_match_spec.rb +28 -0
  124. data/lib/sourcify/spec/method/to_source_from_define_method_w_multi_blocks_and_specified_ignore_nested_spec.rb +36 -0
  125. data/lib/sourcify/spec/method/to_source_from_define_method_within_irb_spec.rb +32 -0
  126. data/lib/sourcify/spec/method/to_source_from_define_method_within_pry_spec.rb +49 -0
  127. data/lib/sourcify/spec/method/to_source_magic_file_var_spec.rb +176 -0
  128. data/lib/sourcify/spec/method/to_source_magic_line_var_spec.rb +298 -0
  129. data/lib/sourcify/spec/method/to_source_w_specified_strip_enclosure_spec.rb +39 -0
  130. data/lib/sourcify/spec/no_method/unsupported_platform_spec.rb +26 -0
  131. data/lib/sourcify/spec/proc/19x_extras.rb +27 -0
  132. data/lib/sourcify/spec/proc/created_on_the_fly_proc_spec.rb +80 -0
  133. data/lib/sourcify/spec/proc/encoding_spec.rb +36 -0
  134. data/lib/sourcify/spec/proc/others_spec.rb +40 -0
  135. data/lib/sourcify/spec/proc/raw_scanner/block_comment_spec.rb +8 -0
  136. data/lib/sourcify/spec/proc/raw_scanner/double_colons_spec.rb +8 -0
  137. data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_w_interpolation_spec.rb +8 -0
  138. data/lib/sourcify/spec/proc/raw_scanner/double_quote_str_wo_interpolation_spec.rb +8 -0
  139. data/lib/sourcify/spec/proc/raw_scanner/heredoc_w_indent_spec.rb +8 -0
  140. data/lib/sourcify/spec/proc/raw_scanner/heredoc_wo_indent_spec.rb +8 -0
  141. data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias1_spec.rb +20 -0
  142. data/lib/sourcify/spec/proc/raw_scanner/kw_block_start_alias2_spec.rb +20 -0
  143. data/lib/sourcify/spec/proc/raw_scanner/per_line_comment_spec.rb +8 -0
  144. data/lib/sourcify/spec/proc/raw_scanner/single_quote_str_spec.rb +8 -0
  145. data/lib/sourcify/spec/proc/raw_scanner/slash_operator_spec.rb +8 -0
  146. data/lib/sourcify/spec/proc/raw_scanner/spec_helper.rb +63 -0
  147. data/lib/sourcify/spec/proc/readme +5 -0
  148. data/lib/sourcify/spec/proc/spec_helper.rb +1 -0
  149. data/lib/sourcify/spec/proc/to_raw_source_spec.rb +33 -0
  150. data/lib/sourcify/spec/proc/to_raw_source_w_specified_strip_enclosure_spec.rb +69 -0
  151. data/lib/sourcify/spec/proc/to_sexp_from_multi_blocks_w_specified_attached_to_spec.rb +46 -0
  152. data/lib/sourcify/spec/proc/to_sexp_variables_spec.rb +146 -0
  153. data/lib/sourcify/spec/proc/to_sexp_w_specified_strip_enclosure_spec.rb +60 -0
  154. data/lib/sourcify/spec/proc/to_sexp_within_irb_spec.rb +146 -0
  155. data/lib/sourcify/spec/proc/to_sexp_within_pry_spec.rb +149 -0
  156. data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb +33 -0
  157. data/lib/sourcify/spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb +82 -0
  158. data/lib/sourcify/spec/proc/to_source_from_braced_block_wo_nesting_complication_spec.rb +46 -0
  159. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_begin_spec.rb +35 -0
  160. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_case_spec.rb +35 -0
  161. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_class_spec.rb +89 -0
  162. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_do_end_block_spec.rb +33 -0
  163. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_for_spec.rb +132 -0
  164. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_if_spec.rb +87 -0
  165. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_literal_keyword_spec.rb +103 -0
  166. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_method_spec.rb +33 -0
  167. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_module_spec.rb +49 -0
  168. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_unless_spec.rb +87 -0
  169. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_until_spec.rb +189 -0
  170. data/lib/sourcify/spec/proc/to_source_from_do_end_block_w_nested_while_spec.rb +189 -0
  171. data/lib/sourcify/spec/proc/to_source_from_do_end_block_wo_nesting_complication_spec.rb +46 -0
  172. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_many_matches_spec.rb +43 -0
  173. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_single_match_spec.rb +20 -0
  174. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_many_matches_spec.rb +45 -0
  175. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_no_match_spec.rb +45 -0
  176. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_and_single_match_spec.rb +22 -0
  177. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_attached_to_spec.rb +84 -0
  178. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_many_matches_spec.rb +45 -0
  179. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_no_match_spec.rb +45 -0
  180. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_body_matcher_and_single_match_spec.rb +22 -0
  181. data/lib/sourcify/spec/proc/to_source_from_multi_blocks_w_specified_ignore_nested_spec.rb +43 -0
  182. data/lib/sourcify/spec/proc/to_source_from_multi_do_end_blocks_w_single_match_spec.rb +31 -0
  183. data/lib/sourcify/spec/proc/to_source_magic_file_var_spec.rb +127 -0
  184. data/lib/sourcify/spec/proc/to_source_magic_line_var_spec.rb +127 -0
  185. data/lib/sourcify/spec/proc/to_source_variables_spec.rb +29 -0
  186. data/lib/sourcify/spec/proc/to_source_w_specified_strip_enclosure_spec.rb +33 -0
  187. data/lib/sourcify/spec/proc/to_source_within_irb_spec.rb +38 -0
  188. data/lib/sourcify/spec/proc/to_source_within_pry_spec.rb +61 -0
  189. data/lib/sourcify/spec/raw_scanner/block_comment_shared_spec.rb +57 -0
  190. data/lib/sourcify/spec/raw_scanner/double_colons_shared_spec.rb +11 -0
  191. data/lib/sourcify/spec/raw_scanner/double_quote_str_w_interpolation_shared_spec.rb +60 -0
  192. data/lib/sourcify/spec/raw_scanner/double_quote_str_wo_interpolation_shared_spec.rb +86 -0
  193. data/lib/sourcify/spec/raw_scanner/heredoc_w_indent_shared_spec.rb +69 -0
  194. data/lib/sourcify/spec/raw_scanner/heredoc_wo_indent_shared_spec.rb +70 -0
  195. data/lib/sourcify/spec/raw_scanner/kw_block_start_alias1_shared_spec.rb +73 -0
  196. data/lib/sourcify/spec/raw_scanner/kw_block_start_alias2_shared_spec.rb +73 -0
  197. data/lib/sourcify/spec/raw_scanner/per_line_comment_shared_spec.rb +32 -0
  198. data/lib/sourcify/spec/raw_scanner/shared_specs.rb +3 -0
  199. data/lib/sourcify/spec/raw_scanner/single_quote_str_shared_spec.rb +79 -0
  200. data/lib/sourcify/spec/raw_scanner/slash_operator_shared_spec.rb +71 -0
  201. data/lib/sourcify/spec/run_build.sh +25 -0
  202. data/lib/sourcify/spec/spec_helper.rb +130 -0
  203. data/lib/symbolic/symbolic.rb +248 -0
  204. data/lib/symbolic/visitor.rb +51 -0
  205. data/lib/translator/block_translator.rb +123 -0
  206. data/lib/translator/command_translator.rb +421 -0
  207. data/lib/translator/last_returns_visitor.rb +57 -0
  208. data/lib/translator/local_variables_enumerator.rb +35 -0
  209. data/lib/translator/method_translator.rb +24 -0
  210. data/lib/translator/translator.rb +49 -0
  211. data/lib/type_aware_array.rb +71 -0
  212. data/lib/types/array_type.rb +51 -0
  213. data/lib/types/class_type.rb +128 -0
  214. data/lib/types/object_tracer.rb +162 -0
  215. data/lib/types/primitive_type.rb +73 -0
  216. data/lib/types/ruby_extension.rb +67 -0
  217. data/lib/types/ruby_type.rb +45 -0
  218. data/lib/types/type_inference.rb +382 -0
  219. data/lib/types/union_type.rb +155 -0
  220. metadata +321 -0
@@ -0,0 +1,49 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe 'Method#to_source (from define_method)' do
4
+ describe 'within PRY' do
5
+
6
+ class << self
7
+
8
+ def pry_eval(string)
9
+ pry_exec(string)[-1]
10
+ end
11
+
12
+ def equal_to(expected)
13
+ lambda {|found| normalize_code(found) == normalize_code(expected) }
14
+ end
15
+
16
+ end
17
+
18
+ should 'handle' do
19
+ pry_eval(%\
20
+ thing = Object.new
21
+ blk = lambda { x }
22
+ thing.class.send(:define_method, :m1, &blk)
23
+ thing.method(:m1).to_source
24
+ \).should.be equal_to(%(
25
+ def m1
26
+ x
27
+ end
28
+ ))
29
+ end
30
+
31
+ should 'handle upward scroll' do
32
+ pry_eval(%Q(
33
+ thing = Object.new
34
+ b1 = lambda { x1 }
35
+ b2 = lambda { x2 }
36
+ thing.class.send(:define_method, :m1, &b1)
37
+ thing.class.send(:define_method, :m2, &b2)
38
+ thing.method(:m1).to_source
39
+ thing.method(:m2).to_source
40
+ 
41
+ )).should.be equal_to(%(
42
+ def m1
43
+ x1
44
+ end
45
+ ))
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,176 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (magic var __FILE__)" do
4
+
5
+ should 'handle single standalone' do
6
+ def m1; __FILE__; end
7
+ method(:m1).should.be having_source(%(
8
+ def m1; "#{__FILE__}"; end
9
+ ))
10
+ end
11
+
12
+ should 'handle multiple standalones' do
13
+ def m2
14
+ [
15
+ __FILE__, __FILE__,
16
+ __FILE__
17
+ ]
18
+ end
19
+ method(:m2).should.be having_source(%Q(
20
+ def m2
21
+ [
22
+ "#{__FILE__}", "#{__FILE__}",
23
+ "#{__FILE__}"
24
+ ]
25
+ end
26
+ ))
27
+ end
28
+
29
+ should 'handle single interpolation' do
30
+ def m3; "#{__FILE__}"; end
31
+ method(:m3).should.be having_source(%(
32
+ def m3; "#{__FILE__}"; end
33
+ ))
34
+ end
35
+
36
+ should 'handle multiple interpolation (separate)' do
37
+ def m4
38
+ [
39
+ "#{__FILE__}", "#{__FILE__}",
40
+ "#{__FILE__}"
41
+ ]
42
+ end
43
+ method(:m4).should.be having_source(%(
44
+ def m4
45
+ [
46
+ "#{__FILE__}", "#{__FILE__}",
47
+ "#{__FILE__}"
48
+ ]
49
+ end
50
+ ))
51
+ end
52
+
53
+ should 'handle multiple interpolation (together)' do
54
+ def m5
55
+ <<EOL
56
+ #{__FILE__}, #{__FILE__},
57
+ #{__FILE__}
58
+ EOL
59
+ end
60
+ method(:m5).should.be having_source(%(
61
+ def m5
62
+ <<EOL
63
+ #{__FILE__}, #{__FILE__},
64
+ #{__FILE__}
65
+ EOL
66
+ end
67
+ ))
68
+ end
69
+
70
+ should 'handle interpolation in (") quoted string' do
71
+ def m6; "#{__FILE__}"; end
72
+ method(:m6).should.be having_source(%(
73
+ def m6; "#{__FILE__}"; end
74
+ ))
75
+ end
76
+
77
+ should 'handle interpolation in (%) quoted string' do
78
+ def m7; %(#{__FILE__}); end
79
+ method(:m7).should.be having_source(%(
80
+ def m7; "#{__FILE__}"; end
81
+ ))
82
+ end
83
+
84
+ should 'handle interpolation in (%Q) quoted string' do
85
+ def m8; %Q(#{__FILE__}); end
86
+ method(:m8).should.be having_source(%(
87
+ def m8; "#{__FILE__}"; end
88
+ ))
89
+ end
90
+
91
+ should 'handle interpolation in heredoc string' do
92
+ def m9
93
+ <<-EOL
94
+ #{__FILE__}
95
+ EOL
96
+ end
97
+ method(:m9).should.be having_source(%(
98
+ def m9
99
+ <<-EOL
100
+ #{__FILE__}
101
+ EOL
102
+ end
103
+ ))
104
+ end
105
+
106
+ should 'handle interpolation in (%r) regexp' do
107
+ def m10; %r(#{__FILE__}); end
108
+ method(:m10).should.be having_source(%(
109
+ def m10; %r(#{__FILE__}); end
110
+ ))
111
+ end
112
+
113
+ should 'handle interpolation in (/) regexp' do
114
+ def m11; /#{__FILE__}/ ; end
115
+ method(:m11).should.be having_source(%(
116
+ def m11; %r(#{__FILE__}); end
117
+ ))
118
+ end
119
+
120
+ should 'handle interpolation in (%x) command' do
121
+ def m12; %x(echo #{__FILE__}); end
122
+ method(:m12).should.be having_source(%(
123
+ def m12; %x(echo #{__FILE__}); end
124
+ ))
125
+ end
126
+
127
+ should 'handle interpolation in (`) command' do
128
+ def m13; `echo #{__FILE__}`; end
129
+ method(:m13).should.be having_source(%(
130
+ def m13; `echo #{__FILE__}`; end
131
+ ))
132
+ end
133
+
134
+ should 'handle interpolation in (%W) array' do
135
+ def m14; %W(#{__FILE__}); end
136
+ method(:m14).should.be having_source(%(
137
+ def m14; %W(#{__FILE__}); end
138
+ ))
139
+ end
140
+
141
+ should 'not handle interpolation in (\') quoted string' do
142
+ def m15; '#{__FILE__}'; end
143
+ method(:m15).should.be having_source(%(
144
+ def m15; '\#{__FILE__}'; end
145
+ ))
146
+ end
147
+
148
+ should 'not handle interpolation in (%q) quoted string' do
149
+ def m16; %q(#{__FILE__}); end
150
+ method(:m16).should.be having_source(%(
151
+ def m16; '\#{__FILE__}'; end
152
+ ))
153
+ end
154
+
155
+ should 'not handle interpolation in (%w) array' do
156
+ def m17; %w(#{__FILE__}); end
157
+ method(:m17).should.be having_source(%(
158
+ def m17; %w{\#{__FILE__}}; end
159
+ ))
160
+ end
161
+
162
+ should 'not handle escaped-interpolation' do
163
+ def m18; "\#{__FILE__}"; end
164
+ method(:m18).should.be having_source(%(
165
+ def m18; "\\\#{__FILE__}"; end
166
+ ))
167
+ end
168
+
169
+ should 'not handle non-interpolated' do
170
+ def m19; "__FILE__"; end
171
+ method(:m19).should.be having_source(%(
172
+ def m19; "__FILE__"; end
173
+ ))
174
+ end
175
+
176
+ end
@@ -0,0 +1,298 @@
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
2
+
3
+ describe "Method#to_source (magic var __LINE__)" do
4
+
5
+ should 'handle single standalone' do
6
+ def m1; __LINE__; end
7
+ method(:m1).should.be having_source(%(
8
+ def m1; #{__LINE__ - 2}; end
9
+ ))
10
+ end
11
+
12
+ should 'handle multiple standalones' do
13
+ def m2
14
+ [
15
+ __LINE__, __LINE__,
16
+ __LINE__
17
+ ]
18
+ end
19
+ method(:m2).should.be having_source(%Q(
20
+ def m2
21
+ [
22
+ #{__LINE__ - 7}, #{__LINE__ - 7},
23
+ #{__LINE__ - 7}
24
+ ]
25
+ end
26
+ ))
27
+ end
28
+
29
+ should 'handle single interpolation' do
30
+ def m3; "#{__LINE__}"; end
31
+ method(:m3).should.be having_source(%(
32
+ def m3; "\#{#{__LINE__ - 2}}"; end
33
+ ))
34
+ end
35
+
36
+ should 'handle multiple interpolation (separate)' do
37
+ def m4
38
+ [
39
+ "#{__LINE__}", "#{__LINE__}",
40
+ "#{__LINE__}"
41
+ ]
42
+ end
43
+ method(:m4).should.be having_source(%(
44
+ def m4
45
+ [
46
+ "\#{#{__LINE__ - 7}}", "\#{#{__LINE__ - 7}}",
47
+ "\#{#{__LINE__ - 7}}"
48
+ ]
49
+ end
50
+ ))
51
+ end
52
+
53
+ should 'handle multiple interpolation (together)' do
54
+ def m5
55
+ <<EOL
56
+ #{__LINE__}, #{__LINE__},
57
+ #{__LINE__}
58
+ EOL
59
+ end
60
+ method(:m5).should.be having_source(%(
61
+ def m5
62
+ <<EOL
63
+ \#{#{__LINE__ - 7}}, \#{#{__LINE__ - 7}},
64
+ \#{#{__LINE__ - 7}}
65
+ EOL
66
+ end
67
+ ))
68
+ end
69
+
70
+ should 'handle interpolation in (") quoted string' do
71
+ def m6; "#{__LINE__}"; end
72
+ method(:m6).should.be having_source(%(
73
+ def m6; "\#{#{__LINE__ - 2}}"; end
74
+ ))
75
+ end
76
+
77
+ should 'handle interpolation in (%) quoted string' do
78
+ def m7; %(#{__LINE__}); end
79
+ method(:m7).should.be having_source(%(
80
+ def m7; "\#{#{__LINE__ - 2}}"; end
81
+ ))
82
+ end
83
+
84
+ should 'handle interpolation in (%Q) quoted string' do
85
+ def m8; %Q(#{__LINE__}); end
86
+ method(:m8).should.be having_source(%(
87
+ def m8; "\#{#{__LINE__ - 2}}"; end
88
+ ))
89
+ end
90
+
91
+ should 'handle interpolation in heredoc string' do
92
+ def m9
93
+ <<-EOL
94
+ #{__LINE__}
95
+ EOL
96
+ end
97
+ method(:m9).should.be having_source(%(
98
+ def m9
99
+ <<-EOL
100
+ \#{#{__LINE__ - 6}}
101
+ EOL
102
+ end
103
+ ))
104
+ end
105
+
106
+ should 'handle interpolation in (%r) regexp' do
107
+ def m10; %r(#{__LINE__}); end
108
+ method(:m10).should.be having_source(%(
109
+ def m10; %r(\#{#{__LINE__ - 2}}); end
110
+ ))
111
+ end
112
+
113
+ should 'handle interpolation in (/) regexp' do
114
+ def m11; /#{__LINE__}/ ; end
115
+ method(:m11).should.be having_source(%(
116
+ def m11; %r(\#{#{__LINE__ - 2}}); end
117
+ ))
118
+ end
119
+
120
+ should 'handle interpolation in (%x) command' do
121
+ def m12; %x(echo #{__LINE__}); end
122
+ method(:m12).should.be having_source(%(
123
+ def m12; %x(echo \#{#{__LINE__ - 2}}); end
124
+ ))
125
+ end
126
+
127
+ should 'handle interpolation in (`) command' do
128
+ def m13; `echo #{__LINE__}`; end
129
+ method(:m13).should.be having_source(%(
130
+ def m13; `echo \#{#{__LINE__ - 2}}`; end
131
+ ))
132
+ end
133
+
134
+ should 'handle interpolation in (%W) array' do
135
+ def m14; %W(#{__LINE__}); end
136
+ method(:m14).should.be having_source(%(
137
+ def m14; %W(\#{#{__LINE__ - 2}}); end
138
+ ))
139
+ end
140
+
141
+ should 'not handle interpolation in (\') quoted string' do
142
+ def m15; '#{__LINE__}'; end
143
+ method(:m15).should.be having_source(%(
144
+ def m15; '\#{__LINE__}'; end
145
+ ))
146
+ end
147
+
148
+ should 'not handle interpolation in (%q) quoted string' do
149
+ def m16; %q(#{__LINE__}); end
150
+ method(:m16).should.be having_source(%(
151
+ def m16; '\#{__LINE__}'; end
152
+ ))
153
+ end
154
+
155
+ should 'not handle interpolation in (%w) array' do
156
+ def m17; %w(#{__LINE__}); end
157
+ method(:m17).should.be having_source(%(
158
+ def m17; %w{\#{__LINE__}}; end
159
+ ))
160
+ end
161
+
162
+ should 'not handle escaped-interpolation' do
163
+ def m18; "\#{__LINE__}"; end
164
+ method(:m18).should.be having_source(%(
165
+ def m18; "\\\#{__LINE__}"; end
166
+ ))
167
+ end
168
+
169
+ should 'not handle non-interpolated' do
170
+ def m19; "__LINE__"; end
171
+ method(:m19).should.be having_source(%(
172
+ def m19; "__LINE__"; end
173
+ ))
174
+ end
175
+
176
+ # should 'handle single standalone' do
177
+ # lambda { __LINE__ }.should.be having_source(%(proc { #{__LINE__} }))
178
+ # end
179
+ #
180
+ # should 'handle multiple standalones' do
181
+ # lambda {
182
+ # [
183
+ # __LINE__, __LINE__,
184
+ # __LINE__
185
+ # ]
186
+ # }.should.be having_source(%Q(
187
+ # proc do
188
+ # [
189
+ # #{__LINE__ - 6}, #{__LINE__ - 6},
190
+ # #{__LINE__ - 6}
191
+ # ]
192
+ # end
193
+ # ))
194
+ # end
195
+ #
196
+ # should 'handle single interpolation' do
197
+ # lambda { "#{__LINE__}" }.should.be having_source(%(proc { "\#{#{__LINE__}}" }))
198
+ # end
199
+ #
200
+ # should 'handle multiple interpolation (separate)' do
201
+ # lambda {
202
+ # [
203
+ # "#{__LINE__}", "#{__LINE__}",
204
+ # "#{__LINE__}"
205
+ # ]
206
+ # }.should.be having_source(%Q(
207
+ # proc do
208
+ # [
209
+ # "\#{#{__LINE__ - 6}}", "\#{#{__LINE__ - 6}}",
210
+ # "\#{#{__LINE__ - 6}}"
211
+ # ]
212
+ # end
213
+ # ))
214
+ # end
215
+ #
216
+ # should 'handle multiple interpolation (together)' do
217
+ # lambda {
218
+ # <<EOL
219
+ ##{__LINE__}, #{__LINE__},
220
+ ##{__LINE__}
221
+ #EOL
222
+ # }.should.be having_source(%Q(
223
+ # proc do
224
+ # <<EOL
225
+ #\#{#{__LINE__ - 6}}, \#{#{__LINE__ - 6}},
226
+ #\#{#{__LINE__ - 6}}
227
+ #EOL
228
+ # end
229
+ # ))
230
+ # end
231
+ #
232
+ # should 'handle interpolation in (") quoted string' do
233
+ # lambda { "#{__LINE__}" }.should.be having_source(%Q(proc { "\#{#{__LINE__}}" }))
234
+ # end
235
+ #
236
+ # should 'handle interpolation in (%) quoted string' do
237
+ # lambda { %(#{__LINE__}) }.should.be having_source(%Q(proc { "\#{#{__LINE__}}" }))
238
+ # end
239
+ #
240
+ # should 'handle interpolation in (%Q) quoted string' do
241
+ # lambda { %Q(#{__LINE__}) }.should.be having_source(%Q(proc { "\#{#{__LINE__}}" }))
242
+ # end
243
+ #
244
+ # should 'handle interpolation in heredoc string' do
245
+ # lambda {
246
+ # <<-EOL
247
+ ##{__LINE__}
248
+ #EOL
249
+ # }.should.be having_source(%Q(
250
+ # proc do
251
+ # <<-EOL
252
+ #\#{#{__LINE__ - 5}}
253
+ #EOL
254
+ # end
255
+ # ))
256
+ # end
257
+ #
258
+ # should 'handle interpolation in (%r) regexp' do
259
+ # lambda { %r(#{__LINE__}) }.should.be having_source(%Q(proc { %r(\#{#{__LINE__}}) }))
260
+ # end
261
+ #
262
+ # should 'handle interpolation in (/) regexp' do
263
+ # lambda { /#{__LINE__}/ }.should.be having_source(%Q(proc { %r(\#{#{__LINE__}}) }))
264
+ # end
265
+ #
266
+ # should 'handle interpolation in (%x) command' do
267
+ # lambda { %x(echo #{__LINE__}) }.should.be having_source(%Q(proc { %x(echo \#{#{__LINE__}}) }))
268
+ # end
269
+ #
270
+ # should 'handle interpolation in (`) command' do
271
+ # lambda { `echo #{__LINE__}` }.should.be having_source(%Q(proc { `echo \#{#{__LINE__}}` }))
272
+ # end
273
+ #
274
+ # should 'handle interpolation in (%W) array' do
275
+ # lambda { %W(#{__LINE__}) }.should.be having_source(%Q(proc { %W(\#{#{__LINE__}}) }))
276
+ # end
277
+ #
278
+ # should 'not handle interpolation in (\') quoted string' do
279
+ # lambda { '#{__LINE__}' }.should.be having_source(%Q(proc { '\#{__LINE__}' }))
280
+ # end
281
+ #
282
+ # should 'not handle interpolation in (%q) quoted string' do
283
+ # lambda { %q(#{__LINE__}) }.should.be having_source(%Q(proc { '\#{__LINE__}' }))
284
+ # end
285
+ #
286
+ # should 'not handle interpolation in (%w) array' do
287
+ # lambda { %w(#{__LINE__}) }.should.be having_source(%Q(proc { %w{\#{__LINE__}} }))
288
+ # end
289
+ #
290
+ # should 'not handle escaped-interpolation' do
291
+ # lambda { "\#{__LINE__}" }.should.be having_source('proc { "\#{__LINE__}" }')
292
+ # end
293
+ #
294
+ # should 'not handle non-interpolated' do
295
+ # lambda { "__LINE__" }.should.be having_source(%(proc { "__LINE__" }))
296
+ # end
297
+
298
+ end