opal-wedge 0.9.0.dev

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 (830) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.gitmodules +7 -0
  4. data/.inch.yml +19 -0
  5. data/.jshintrc +48 -0
  6. data/.rspec +3 -0
  7. data/.spectator +2 -0
  8. data/.spectator-mspec +3 -0
  9. data/.travis.yml +60 -0
  10. data/.yardopts +6 -0
  11. data/CHANGELOG.md +571 -0
  12. data/CODE_OF_CONDUCT.md +15 -0
  13. data/CONTRIBUTING.md +192 -0
  14. data/Gemfile +26 -0
  15. data/Guardfile +77 -0
  16. data/LICENSE +19 -0
  17. data/README.md +167 -0
  18. data/Rakefile +15 -0
  19. data/benchmark/benchmarks +103 -0
  20. data/benchmark/bm_array_intersection_numbers.rb +7 -0
  21. data/benchmark/bm_array_intersection_objects.rb +7 -0
  22. data/benchmark/bm_array_intersection_strings.rb +7 -0
  23. data/benchmark/bm_array_minus_numbers.rb +7 -0
  24. data/benchmark/bm_array_minus_objects.rb +7 -0
  25. data/benchmark/bm_array_minus_strings.rb +7 -0
  26. data/benchmark/bm_array_union_numbers.rb +7 -0
  27. data/benchmark/bm_array_union_objects.rb +7 -0
  28. data/benchmark/bm_array_union_strings.rb +7 -0
  29. data/benchmark/bm_array_uniq_bang_numbers.rb +5 -0
  30. data/benchmark/bm_array_uniq_bang_objects.rb +5 -0
  31. data/benchmark/bm_array_uniq_bang_strings.rb +5 -0
  32. data/benchmark/bm_array_uniq_numbers.rb +5 -0
  33. data/benchmark/bm_array_uniq_objects.rb +5 -0
  34. data/benchmark/bm_array_uniq_strings.rb +5 -0
  35. data/benchmark/bm_dispatch_bind_table.rb +57 -0
  36. data/benchmark/bm_dispatch_code_gen.rb +65 -0
  37. data/benchmark/bm_dispatch_code_gen_if.rb +64 -0
  38. data/benchmark/bm_dispatch_hardcoded.rb +44 -0
  39. data/benchmark/bm_dispatch_send.rb +38 -0
  40. data/benchmark/bm_dispatch_send_table.rb +57 -0
  41. data/benchmark/bm_hash_assoc_object.rb +11 -0
  42. data/benchmark/bm_hash_assoc_string.rb +9 -0
  43. data/benchmark/bm_hash_clone_object.rb +9 -0
  44. data/benchmark/bm_hash_clone_string.rb +9 -0
  45. data/benchmark/bm_hash_delete_object.rb +11 -0
  46. data/benchmark/bm_hash_delete_string.rb +9 -0
  47. data/benchmark/bm_hash_each_key_object.rb +9 -0
  48. data/benchmark/bm_hash_each_key_string.rb +9 -0
  49. data/benchmark/bm_hash_each_object.rb +9 -0
  50. data/benchmark/bm_hash_each_string.rb +9 -0
  51. data/benchmark/bm_hash_each_value_object.rb +9 -0
  52. data/benchmark/bm_hash_each_value_string.rb +9 -0
  53. data/benchmark/bm_hash_element_reference_object.rb +11 -0
  54. data/benchmark/bm_hash_element_reference_string.rb +9 -0
  55. data/benchmark/bm_hash_element_set_object.rb +5 -0
  56. data/benchmark/bm_hash_element_set_string.rb +5 -0
  57. data/benchmark/bm_hash_equal_value_object.rb +14 -0
  58. data/benchmark/bm_hash_equal_value_string.rb +11 -0
  59. data/benchmark/bm_hash_fetch_object.rb +11 -0
  60. data/benchmark/bm_hash_fetch_string.rb +9 -0
  61. data/benchmark/bm_hash_flatten_object.rb +9 -0
  62. data/benchmark/bm_hash_flatten_string.rb +9 -0
  63. data/benchmark/bm_hash_has_key_object.rb +11 -0
  64. data/benchmark/bm_hash_has_key_string.rb +9 -0
  65. data/benchmark/bm_hash_has_value_object.rb +9 -0
  66. data/benchmark/bm_hash_has_value_string.rb +9 -0
  67. data/benchmark/bm_hash_hash_object.rb +9 -0
  68. data/benchmark/bm_hash_hash_string.rb +9 -0
  69. data/benchmark/bm_hash_inspect_object.rb +9 -0
  70. data/benchmark/bm_hash_inspect_string.rb +9 -0
  71. data/benchmark/bm_hash_invert_object.rb +9 -0
  72. data/benchmark/bm_hash_invert_string.rb +9 -0
  73. data/benchmark/bm_hash_keep_if_object.rb +9 -0
  74. data/benchmark/bm_hash_keep_if_string.rb +9 -0
  75. data/benchmark/bm_hash_key_object.rb +9 -0
  76. data/benchmark/bm_hash_key_string.rb +9 -0
  77. data/benchmark/bm_hash_keys_object.rb +9 -0
  78. data/benchmark/bm_hash_keys_string.rb +9 -0
  79. data/benchmark/bm_hash_literal_mixed_large.rb +3 -0
  80. data/benchmark/bm_hash_literal_mixed_small.rb +3 -0
  81. data/benchmark/bm_hash_literal_object_large.rb +4 -0
  82. data/benchmark/bm_hash_literal_object_small.rb +3 -0
  83. data/benchmark/bm_hash_literal_string_large.rb +4 -0
  84. data/benchmark/bm_hash_literal_string_small.rb +3 -0
  85. data/benchmark/bm_hash_merge_object.rb +22 -0
  86. data/benchmark/bm_hash_merge_string.rb +18 -0
  87. data/benchmark/bm_hash_rassoc_object.rb +9 -0
  88. data/benchmark/bm_hash_rassoc_string.rb +9 -0
  89. data/benchmark/bm_hash_rehash_object.rb +9 -0
  90. data/benchmark/bm_hash_rehash_string.rb +9 -0
  91. data/benchmark/bm_hash_reject_bang_object.rb +9 -0
  92. data/benchmark/bm_hash_reject_bang_string.rb +9 -0
  93. data/benchmark/bm_hash_reject_object.rb +9 -0
  94. data/benchmark/bm_hash_reject_string.rb +9 -0
  95. data/benchmark/bm_hash_replace_object.rb +18 -0
  96. data/benchmark/bm_hash_replace_string.rb +14 -0
  97. data/benchmark/bm_hash_select_bang_object.rb +9 -0
  98. data/benchmark/bm_hash_select_bang_string.rb +9 -0
  99. data/benchmark/bm_hash_select_object.rb +9 -0
  100. data/benchmark/bm_hash_select_string.rb +9 -0
  101. data/benchmark/bm_hash_shift_object.rb +10 -0
  102. data/benchmark/bm_hash_shift_string.rb +10 -0
  103. data/benchmark/bm_hash_to_a_object.rb +9 -0
  104. data/benchmark/bm_hash_to_a_string.rb +9 -0
  105. data/benchmark/bm_hash_to_h_object.rb +10 -0
  106. data/benchmark/bm_hash_to_h_string.rb +10 -0
  107. data/benchmark/bm_hash_values_object.rb +9 -0
  108. data/benchmark/bm_hash_values_string.rb +9 -0
  109. data/benchmark/run.rb +37 -0
  110. data/bin/opal +27 -0
  111. data/bin/opal-build +77 -0
  112. data/bin/opal-mspec +10 -0
  113. data/bin/opal-repl +72 -0
  114. data/config.ru +14 -0
  115. data/docs/compiler_directives.md +127 -0
  116. data/examples/rack/.gitignore +1 -0
  117. data/examples/rack/Gemfile +3 -0
  118. data/examples/rack/app/application.rb +13 -0
  119. data/examples/rack/app/user.rb +22 -0
  120. data/examples/rack/config.ru +20 -0
  121. data/examples/rack/index.html.erb +10 -0
  122. data/examples/sinatra/Gemfile +5 -0
  123. data/examples/sinatra/app/application.rb +7 -0
  124. data/examples/sinatra/config.ru +38 -0
  125. data/lib/mspec/opal/main.rb.erb +9 -0
  126. data/lib/mspec/opal/new.html.erb +1 -0
  127. data/lib/mspec/opal/rake_task.rb +248 -0
  128. data/lib/mspec/opal/runner.rb +281 -0
  129. data/lib/mspec/opal/special_calls.rb +44 -0
  130. data/lib/mspec/opal/sprockets.js +57 -0
  131. data/lib/opal-wedge.rb +4 -0
  132. data/lib/opal.rb +11 -0
  133. data/lib/opal/builder.rb +161 -0
  134. data/lib/opal/builder_processors.rb +149 -0
  135. data/lib/opal/cli.rb +162 -0
  136. data/lib/opal/cli_options.rb +158 -0
  137. data/lib/opal/cli_runners.rb +11 -0
  138. data/lib/opal/cli_runners/apple_script.rb +65 -0
  139. data/lib/opal/cli_runners/nodejs.rb +63 -0
  140. data/lib/opal/cli_runners/phantom.js +44 -0
  141. data/lib/opal/cli_runners/phantomjs.rb +28 -0
  142. data/lib/opal/cli_runners/server.rb +56 -0
  143. data/lib/opal/compiler.rb +381 -0
  144. data/lib/opal/config.rb +48 -0
  145. data/lib/opal/erb.rb +84 -0
  146. data/lib/opal/fragment.rb +53 -0
  147. data/lib/opal/hike_path_finder.rb +18 -0
  148. data/lib/opal/nodes.rb +26 -0
  149. data/lib/opal/nodes/arglist.rb +56 -0
  150. data/lib/opal/nodes/array.rb +54 -0
  151. data/lib/opal/nodes/base.rb +151 -0
  152. data/lib/opal/nodes/call.rb +290 -0
  153. data/lib/opal/nodes/call_special.rb +252 -0
  154. data/lib/opal/nodes/case.rb +96 -0
  155. data/lib/opal/nodes/class.rb +42 -0
  156. data/lib/opal/nodes/constants.rb +78 -0
  157. data/lib/opal/nodes/def.rb +281 -0
  158. data/lib/opal/nodes/defined.rb +113 -0
  159. data/lib/opal/nodes/definitions.rb +168 -0
  160. data/lib/opal/nodes/for.rb +48 -0
  161. data/lib/opal/nodes/hash.rb +67 -0
  162. data/lib/opal/nodes/helpers.rb +116 -0
  163. data/lib/opal/nodes/if.rb +81 -0
  164. data/lib/opal/nodes/iter.rb +136 -0
  165. data/lib/opal/nodes/literal.rb +247 -0
  166. data/lib/opal/nodes/logic.rb +217 -0
  167. data/lib/opal/nodes/masgn.rb +62 -0
  168. data/lib/opal/nodes/module.rb +45 -0
  169. data/lib/opal/nodes/rescue.rb +143 -0
  170. data/lib/opal/nodes/runtime_helpers.rb +45 -0
  171. data/lib/opal/nodes/scope.rb +281 -0
  172. data/lib/opal/nodes/singleton_class.rb +26 -0
  173. data/lib/opal/nodes/super.rb +97 -0
  174. data/lib/opal/nodes/top.rb +103 -0
  175. data/lib/opal/nodes/variables.rb +191 -0
  176. data/lib/opal/nodes/while.rb +65 -0
  177. data/lib/opal/nodes/yield.rb +95 -0
  178. data/lib/opal/parser.rb +742 -0
  179. data/lib/opal/parser/grammar.rb +5723 -0
  180. data/lib/opal/parser/grammar.y +1787 -0
  181. data/lib/opal/parser/keywords.rb +66 -0
  182. data/lib/opal/parser/lexer.rb +1260 -0
  183. data/lib/opal/parser/parser_scope.rb +28 -0
  184. data/lib/opal/parser/sexp.rb +81 -0
  185. data/lib/opal/path_reader.rb +35 -0
  186. data/lib/opal/paths.rb +55 -0
  187. data/lib/opal/regexp_anchors.rb +5 -0
  188. data/lib/opal/source_map.rb +70 -0
  189. data/lib/opal/sprockets.rb +3 -0
  190. data/lib/opal/sprockets/cache_key_fix.rb +17 -0
  191. data/lib/opal/sprockets/environment.rb +31 -0
  192. data/lib/opal/sprockets/erb.rb +23 -0
  193. data/lib/opal/sprockets/path_reader.rb +36 -0
  194. data/lib/opal/sprockets/processor.rb +167 -0
  195. data/lib/opal/sprockets/server.rb +160 -0
  196. data/lib/opal/sprockets/source_map_header_patch.rb +41 -0
  197. data/lib/opal/sprockets/source_map_server.rb +115 -0
  198. data/lib/opal/util.rb +69 -0
  199. data/lib/opal/version.rb +5 -0
  200. data/lib/tilt/opal.rb +54 -0
  201. data/opal.gemspec +37 -0
  202. data/opal/README.md +6 -0
  203. data/opal/corelib/array.rb +2073 -0
  204. data/opal/corelib/array/inheritance.rb +127 -0
  205. data/opal/corelib/basic_object.rb +82 -0
  206. data/opal/corelib/boolean.rb +47 -0
  207. data/opal/corelib/class.rb +55 -0
  208. data/opal/corelib/comparable.rb +57 -0
  209. data/opal/corelib/complex.rb +3 -0
  210. data/opal/corelib/dir.rb +20 -0
  211. data/opal/corelib/enumerable.rb +1138 -0
  212. data/opal/corelib/enumerator.rb +426 -0
  213. data/opal/corelib/error.rb +77 -0
  214. data/opal/corelib/file.rb +59 -0
  215. data/opal/corelib/hash.rb +951 -0
  216. data/opal/corelib/helpers.rb +102 -0
  217. data/opal/corelib/io.rb +73 -0
  218. data/opal/corelib/kernel.rb +1124 -0
  219. data/opal/corelib/main.rb +7 -0
  220. data/opal/corelib/match_data.rb +128 -0
  221. data/opal/corelib/method.rb +62 -0
  222. data/opal/corelib/module.rb +553 -0
  223. data/opal/corelib/nil_class.rb +57 -0
  224. data/opal/corelib/numeric.rb +564 -0
  225. data/opal/corelib/proc.rb +105 -0
  226. data/opal/corelib/process.rb +27 -0
  227. data/opal/corelib/range.rb +116 -0
  228. data/opal/corelib/rational.rb +3 -0
  229. data/opal/corelib/regexp.rb +203 -0
  230. data/opal/corelib/runtime.js +1637 -0
  231. data/opal/corelib/string.rb +1762 -0
  232. data/opal/corelib/string/inheritance.rb +117 -0
  233. data/opal/corelib/struct.rb +159 -0
  234. data/opal/corelib/time.rb +746 -0
  235. data/opal/corelib/variables.rb +28 -0
  236. data/opal/opal.rb +33 -0
  237. data/spec/README.md +8 -0
  238. data/spec/filters/bugs/array.rb +77 -0
  239. data/spec/filters/bugs/basicobject.rb +33 -0
  240. data/spec/filters/bugs/class.rb +15 -0
  241. data/spec/filters/bugs/comparable.rb +4 -0
  242. data/spec/filters/bugs/date.rb +173 -0
  243. data/spec/filters/bugs/enumerable.rb +62 -0
  244. data/spec/filters/bugs/enumerator.rb +45 -0
  245. data/spec/filters/bugs/exception.rb +84 -0
  246. data/spec/filters/bugs/fixnum.rb +35 -0
  247. data/spec/filters/bugs/float.rb +100 -0
  248. data/spec/filters/bugs/hash.rb +17 -0
  249. data/spec/filters/bugs/integer.rb +63 -0
  250. data/spec/filters/bugs/kernel.rb +395 -0
  251. data/spec/filters/bugs/language.rb +246 -0
  252. data/spec/filters/bugs/math.rb +89 -0
  253. data/spec/filters/bugs/method.rb +5 -0
  254. data/spec/filters/bugs/module.rb +372 -0
  255. data/spec/filters/bugs/nil.rb +7 -0
  256. data/spec/filters/bugs/numeric.rb +123 -0
  257. data/spec/filters/bugs/proc.rb +65 -0
  258. data/spec/filters/bugs/range.rb +148 -0
  259. data/spec/filters/bugs/regexp.rb +252 -0
  260. data/spec/filters/bugs/set.rb +51 -0
  261. data/spec/filters/bugs/singleton.rb +6 -0
  262. data/spec/filters/bugs/string.rb +99 -0
  263. data/spec/filters/bugs/strscan.rb +106 -0
  264. data/spec/filters/bugs/struct.rb +22 -0
  265. data/spec/filters/bugs/time.rb +28 -0
  266. data/spec/filters/bugs/unboundmethod.rb +22 -0
  267. data/spec/filters/unsupported/array.rb +176 -0
  268. data/spec/filters/unsupported/basicobject.rb +12 -0
  269. data/spec/filters/unsupported/class.rb +4 -0
  270. data/spec/filters/unsupported/delegator.rb +5 -0
  271. data/spec/filters/unsupported/enumerable.rb +8 -0
  272. data/spec/filters/unsupported/enumerator.rb +13 -0
  273. data/spec/filters/unsupported/fixnum.rb +15 -0
  274. data/spec/filters/unsupported/float.rb +6 -0
  275. data/spec/filters/unsupported/hash.rb +55 -0
  276. data/spec/filters/unsupported/integer.rb +3 -0
  277. data/spec/filters/unsupported/kernel.rb +22 -0
  278. data/spec/filters/unsupported/language.rb +31 -0
  279. data/spec/filters/unsupported/matchdata.rb +33 -0
  280. data/spec/filters/unsupported/math.rb +3 -0
  281. data/spec/filters/unsupported/module.rb +36 -0
  282. data/spec/filters/unsupported/pathname.rb +3 -0
  283. data/spec/filters/unsupported/regexp.rb +94 -0
  284. data/spec/filters/unsupported/set.rb +4 -0
  285. data/spec/filters/unsupported/singleton.rb +6 -0
  286. data/spec/filters/unsupported/string.rb +538 -0
  287. data/spec/filters/unsupported/struct.rb +3 -0
  288. data/spec/filters/unsupported/time.rb +208 -0
  289. data/spec/lib/builder_processors_spec.rb +27 -0
  290. data/spec/lib/builder_spec.rb +72 -0
  291. data/spec/lib/cli_spec.rb +150 -0
  292. data/spec/lib/compiler/pre_processed_conditionals_spec.rb +87 -0
  293. data/spec/lib/compiler_spec.rb +131 -0
  294. data/spec/lib/dependency_resolver_spec.rb +40 -0
  295. data/spec/lib/fixtures/complex_sprockets.js.rb.erb +4 -0
  296. data/spec/lib/fixtures/file_with_directives.js +2 -0
  297. data/spec/lib/fixtures/jst_file.js.jst +1 -0
  298. data/spec/lib/fixtures/no_requires.rb +1 -0
  299. data/spec/lib/fixtures/opal_file.rb +2 -0
  300. data/spec/lib/fixtures/require_tree_test.rb +3 -0
  301. data/spec/lib/fixtures/required_file.js +1 -0
  302. data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
  303. data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
  304. data/spec/lib/fixtures/requires.rb +7 -0
  305. data/spec/lib/fixtures/source_map.rb +1 -0
  306. data/spec/lib/fixtures/source_map/subfolder/other_file.rb +1 -0
  307. data/spec/lib/fixtures/sprockets_file.js.rb +3 -0
  308. data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
  309. data/spec/lib/hike_path_finder_spec.rb +23 -0
  310. data/spec/lib/lexer_spec.rb +110 -0
  311. data/spec/lib/parser/alias_spec.rb +26 -0
  312. data/spec/lib/parser/and_spec.rb +13 -0
  313. data/spec/lib/parser/attrasgn_spec.rb +28 -0
  314. data/spec/lib/parser/begin_spec.rb +42 -0
  315. data/spec/lib/parser/block_spec.rb +12 -0
  316. data/spec/lib/parser/break_spec.rb +17 -0
  317. data/spec/lib/parser/call_spec.rb +165 -0
  318. data/spec/lib/parser/class_spec.rb +35 -0
  319. data/spec/lib/parser/comments_spec.rb +11 -0
  320. data/spec/lib/parser/def_spec.rb +80 -0
  321. data/spec/lib/parser/if_spec.rb +26 -0
  322. data/spec/lib/parser/iter_spec.rb +59 -0
  323. data/spec/lib/parser/lambda_spec.rb +64 -0
  324. data/spec/lib/parser/literal_spec.rb +118 -0
  325. data/spec/lib/parser/masgn_spec.rb +37 -0
  326. data/spec/lib/parser/module_spec.rb +27 -0
  327. data/spec/lib/parser/not_spec.rb +21 -0
  328. data/spec/lib/parser/op_asgn1_spec.rb +23 -0
  329. data/spec/lib/parser/op_asgn2_spec.rb +23 -0
  330. data/spec/lib/parser/or_spec.rb +13 -0
  331. data/spec/lib/parser/return_spec.rb +17 -0
  332. data/spec/lib/parser/sclass_spec.rb +21 -0
  333. data/spec/lib/parser/string_spec.rb +276 -0
  334. data/spec/lib/parser/super_spec.rb +20 -0
  335. data/spec/lib/parser/unary_spec.rb +48 -0
  336. data/spec/lib/parser/undef_spec.rb +15 -0
  337. data/spec/lib/parser/unless_spec.rb +13 -0
  338. data/spec/lib/parser/variables_spec.rb +92 -0
  339. data/spec/lib/parser/while_spec.rb +15 -0
  340. data/spec/lib/parser/yield_spec.rb +20 -0
  341. data/spec/lib/path_reader_spec.rb +36 -0
  342. data/spec/lib/shared/path_finder_shared.rb +19 -0
  343. data/spec/lib/shared/path_reader_shared.rb +31 -0
  344. data/spec/lib/spec_helper.rb +9 -0
  345. data/spec/lib/sprockets/erb_spec.rb +38 -0
  346. data/spec/lib/sprockets/path_reader_spec.rb +41 -0
  347. data/spec/lib/sprockets/processor_spec.rb +67 -0
  348. data/spec/lib/sprockets/server_spec.rb +102 -0
  349. data/spec/lib/tilt/opal_spec.rb +37 -0
  350. data/spec/opal/compiler/irb_spec.rb +44 -0
  351. data/spec/opal/core/array/intersection_spec.rb +38 -0
  352. data/spec/opal/core/array/minus_spec.rb +38 -0
  353. data/spec/opal/core/array/select_spec.rb +14 -0
  354. data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
  355. data/spec/opal/core/array/union_spec.rb +38 -0
  356. data/spec/opal/core/array/uniq_spec.rb +49 -0
  357. data/spec/opal/core/date_spec.rb +177 -0
  358. data/spec/opal/core/enumerable/all_break_spec.rb +5 -0
  359. data/spec/opal/core/enumerable/any_break_spec.rb +5 -0
  360. data/spec/opal/core/enumerable/collect_break_spec.rb +13 -0
  361. data/spec/opal/core/enumerable/count_break_spec.rb +5 -0
  362. data/spec/opal/core/enumerable/detect_break_spec.rb +5 -0
  363. data/spec/opal/core/enumerable/drop_while_break_spec.rb +5 -0
  364. data/spec/opal/core/enumerable/each_slice_break.rb +6 -0
  365. data/spec/opal/core/enumerable/each_with_index_break_spec.rb +5 -0
  366. data/spec/opal/core/enumerable/each_with_object_break_spec.rb +5 -0
  367. data/spec/opal/core/enumerable/find_all_break_spec.rb +5 -0
  368. data/spec/opal/core/enumerable/find_index_break_spec.rb +5 -0
  369. data/spec/opal/core/enumerable/grep_break_spec.rb +5 -0
  370. data/spec/opal/core/enumerable/max_break_spec.rb +5 -0
  371. data/spec/opal/core/enumerable/max_by_break_spec.rb +5 -0
  372. data/spec/opal/core/enumerable/min_break_spec.rb +5 -0
  373. data/spec/opal/core/enumerable/min_by_break_spec.rb +5 -0
  374. data/spec/opal/core/enumerable/none_break_spec.rb +5 -0
  375. data/spec/opal/core/enumerable/one_break_spec.rb +5 -0
  376. data/spec/opal/core/enumerable/reduce_break_spec.rb +5 -0
  377. data/spec/opal/core/enumerable/take_while_break_spec.rb +5 -0
  378. data/spec/opal/core/exception_spec.rb +13 -0
  379. data/spec/opal/core/fixtures/class.rb +124 -0
  380. data/spec/opal/core/fixtures/class_variables.rb +0 -0
  381. data/spec/opal/core/fixtures/constants.rb +33 -0
  382. data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
  383. data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
  384. data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
  385. data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
  386. data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
  387. data/spec/opal/core/fixtures/require_tree_files/nested/nested 1.rb +1 -0
  388. data/spec/opal/core/fixtures/require_tree_files/nested/nested 2.rb +1 -0
  389. data/spec/opal/core/fixtures/require_tree_files/other/other 1.rb +1 -0
  390. data/spec/opal/core/fixtures/require_tree_with_dot/file 1.rb +1 -0
  391. data/spec/opal/core/fixtures/require_tree_with_dot/file 2.rb +1 -0
  392. data/spec/opal/core/fixtures/require_tree_with_dot/file 3.rb +1 -0
  393. data/spec/opal/core/fixtures/require_tree_with_dot/index.rb +3 -0
  394. data/spec/opal/core/hash/has_value_spec.rb +13 -0
  395. data/spec/opal/core/hash/internals_spec.rb +332 -0
  396. data/spec/opal/core/kernel/Array_spec.rb +10 -0
  397. data/spec/opal/core/kernel/block_given_spec.rb +30 -0
  398. data/spec/opal/core/kernel/class_spec.rb +6 -0
  399. data/spec/opal/core/kernel/define_singleton_method_spec.rb +21 -0
  400. data/spec/opal/core/kernel/equal_value_spec.rb +12 -0
  401. data/spec/opal/core/kernel/extend_spec.rb +21 -0
  402. data/spec/opal/core/kernel/format_spec.rb +122 -0
  403. data/spec/opal/core/kernel/freeze_spec.rb +15 -0
  404. data/spec/opal/core/kernel/instance_eval_spec.rb +28 -0
  405. data/spec/opal/core/kernel/instance_variable_defined_spec.rb +15 -0
  406. data/spec/opal/core/kernel/instance_variable_get_spec.rb +14 -0
  407. data/spec/opal/core/kernel/instance_variable_set_spec.rb +10 -0
  408. data/spec/opal/core/kernel/loop_spec.rb +23 -0
  409. data/spec/opal/core/kernel/match_spec.rb +5 -0
  410. data/spec/opal/core/kernel/method_spec.rb +31 -0
  411. data/spec/opal/core/kernel/methods_spec.rb +25 -0
  412. data/spec/opal/core/kernel/nil_spec.rb +7 -0
  413. data/spec/opal/core/kernel/p_spec.rb +15 -0
  414. data/spec/opal/core/kernel/printf_spec.rb +11 -0
  415. data/spec/opal/core/kernel/proc_spec.rb +13 -0
  416. data/spec/opal/core/kernel/rand_spec.rb +23 -0
  417. data/spec/opal/core/kernel/require_tree_spec.rb +18 -0
  418. data/spec/opal/core/kernel/respond_to_spec.rb +41 -0
  419. data/spec/opal/core/kernel/send_spec.rb +56 -0
  420. data/spec/opal/core/kernel/sprintf_spec.rb +5 -0
  421. data/spec/opal/core/language/block_spec.rb +538 -0
  422. data/spec/opal/core/language/fixtures/array.rb +11 -0
  423. data/spec/opal/core/language/fixtures/block.rb +57 -0
  424. data/spec/opal/core/language/fixtures/break.rb +240 -0
  425. data/spec/opal/core/language/fixtures/ensure.rb +72 -0
  426. data/spec/opal/core/language/fixtures/literal_lambda.rb +7 -0
  427. data/spec/opal/core/language/fixtures/metaclass.rb +33 -0
  428. data/spec/opal/core/language/fixtures/module.rb +24 -0
  429. data/spec/opal/core/language/fixtures/next.rb +128 -0
  430. data/spec/opal/core/language/fixtures/return.rb +118 -0
  431. data/spec/opal/core/language/fixtures/send.rb +110 -0
  432. data/spec/opal/core/language/fixtures/send_1.9.rb +22 -0
  433. data/spec/opal/core/language/fixtures/super.rb +308 -0
  434. data/spec/opal/core/language/fixtures/variables.rb +58 -0
  435. data/spec/opal/core/language/fixtures/yield.rb +28 -0
  436. data/spec/opal/core/language/predefined_spec.rb +138 -0
  437. data/spec/opal/core/language/proc_spec.rb +263 -0
  438. data/spec/opal/core/language/regexp_spec.rb +20 -0
  439. data/spec/opal/core/language/send_spec.rb +225 -0
  440. data/spec/opal/core/language/string_spec.rb +44 -0
  441. data/spec/opal/core/language/variables_spec.rb +1366 -0
  442. data/spec/opal/core/language/versions/array_1.9.rb +39 -0
  443. data/spec/opal/core/language/versions/block_1.9.rb +0 -0
  444. data/spec/opal/core/language/versions/break_1.9.rb +0 -0
  445. data/spec/opal/core/language/versions/case_1.9.rb +20 -0
  446. data/spec/opal/core/language/versions/def_2_0_spec.rb +62 -0
  447. data/spec/opal/core/language/versions/hash_1.9.rb +18 -0
  448. data/spec/opal/core/language/versions/literal_lambda_1.9.rb +143 -0
  449. data/spec/opal/core/language/versions/not_1.9.rb +22 -0
  450. data/spec/opal/core/language/versions/send_1.9.rb +241 -0
  451. data/spec/opal/core/language/versions/symbol_1.9.rb +15 -0
  452. data/spec/opal/core/language/versions/variables_1.9.rb +8 -0
  453. data/spec/opal/core/language_spec.rb +23 -0
  454. data/spec/opal/core/method/to_proc_spec.rb +28 -0
  455. data/spec/opal/core/module/alias_method_spec.rb +28 -0
  456. data/spec/opal/core/module/ancestors_spec.rb +11 -0
  457. data/spec/opal/core/module/append_features_spec.rb +14 -0
  458. data/spec/opal/core/module/attr_accessor_spec.rb +26 -0
  459. data/spec/opal/core/module/const_defined_spec.rb +85 -0
  460. data/spec/opal/core/module/const_get_spec.rb +85 -0
  461. data/spec/opal/core/module/const_missing_spec.rb +17 -0
  462. data/spec/opal/core/module/const_set_spec.rb +64 -0
  463. data/spec/opal/core/module/constants_spec.rb +49 -0
  464. data/spec/opal/core/module/fixtures/classes.rb +434 -0
  465. data/spec/opal/core/module/method_defined_spec.rb +48 -0
  466. data/spec/opal/core/module/module_function_spec.rb +25 -0
  467. data/spec/opal/core/module/name_spec.rb +52 -0
  468. data/spec/opal/core/module/public_method_defined_spec.rb +18 -0
  469. data/spec/opal/core/module/remove_const_spec.rb +22 -0
  470. data/spec/opal/core/module/undef_method_spec.rb +66 -0
  471. data/spec/opal/core/numeric/bit_and_spec.rb +7 -0
  472. data/spec/opal/core/numeric/bit_or_spec.rb +8 -0
  473. data/spec/opal/core/numeric/bit_xor_spec.rb +6 -0
  474. data/spec/opal/core/numeric/ceil_spec.rb +8 -0
  475. data/spec/opal/core/numeric/chr_spec.rb +8 -0
  476. data/spec/opal/core/numeric/comparison_spec.rb +24 -0
  477. data/spec/opal/core/numeric/complement_spec.rb +8 -0
  478. data/spec/opal/core/numeric/divide_spec.rb +10 -0
  479. data/spec/opal/core/numeric/eql_spec.rb +9 -0
  480. data/spec/opal/core/numeric/exponent_spec.rb +33 -0
  481. data/spec/opal/core/numeric/floor_spec.rb +8 -0
  482. data/spec/opal/core/numeric/gt_spec.rb +11 -0
  483. data/spec/opal/core/numeric/gte_spec.rb +12 -0
  484. data/spec/opal/core/numeric/integer_spec.rb +9 -0
  485. data/spec/opal/core/numeric/left_shift_spec.rb +21 -0
  486. data/spec/opal/core/numeric/lt_spec.rb +11 -0
  487. data/spec/opal/core/numeric/lte_spec.rb +12 -0
  488. data/spec/opal/core/numeric/minus_spec.rb +8 -0
  489. data/spec/opal/core/numeric/modulo_spec.rb +19 -0
  490. data/spec/opal/core/numeric/multiply_spec.rb +9 -0
  491. data/spec/opal/core/numeric/next_spec.rb +9 -0
  492. data/spec/opal/core/numeric/ord_spec.rb +9 -0
  493. data/spec/opal/core/numeric/plus_spec.rb +8 -0
  494. data/spec/opal/core/numeric/pred_spec.rb +7 -0
  495. data/spec/opal/core/numeric/right_shift_spec.rb +25 -0
  496. data/spec/opal/core/numeric/step_spec.rb +11 -0
  497. data/spec/opal/core/numeric/succ_spec.rb +9 -0
  498. data/spec/opal/core/numeric/times_spec.rb +36 -0
  499. data/spec/opal/core/numeric/to_f_spec.rb +7 -0
  500. data/spec/opal/core/numeric/to_i_spec.rb +7 -0
  501. data/spec/opal/core/numeric/to_json_spec.rb +8 -0
  502. data/spec/opal/core/numeric/to_s_spec.rb +26 -0
  503. data/spec/opal/core/numeric/uminus_spec.rb +9 -0
  504. data/spec/opal/core/numeric/upto_spec.rb +19 -0
  505. data/spec/opal/core/numeric/zero_spec.rb +7 -0
  506. data/spec/opal/core/object_id_spec.rb +56 -0
  507. data/spec/opal/core/proc/call_spec.rb +21 -0
  508. data/spec/opal/core/proc/element_reference_spec.rb +21 -0
  509. data/spec/opal/core/proc/proc_tricks_spec.rb +7 -0
  510. data/spec/opal/core/runtime/begin_spec.rb +39 -0
  511. data/spec/opal/core/runtime/block_send_spec.rb +28 -0
  512. data/spec/opal/core/runtime/block_spec.rb +23 -0
  513. data/spec/opal/core/runtime/bridged_classes_spec.rb +111 -0
  514. data/spec/opal/core/runtime/constants_spec.rb +13 -0
  515. data/spec/opal/core/runtime/donate_spec.rb +53 -0
  516. data/spec/opal/core/runtime/eval_spec.rb +5 -0
  517. data/spec/opal/core/runtime/main_methods_spec.rb +27 -0
  518. data/spec/opal/core/runtime/method_missing_spec.rb +62 -0
  519. data/spec/opal/core/runtime/method_spec.rb +31 -0
  520. data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
  521. data/spec/opal/core/runtime/paren_spec.rb +14 -0
  522. data/spec/opal/core/runtime/rescue_spec.rb +38 -0
  523. data/spec/opal/core/runtime/return_spec.rb +38 -0
  524. data/spec/opal/core/runtime/send_spec.rb +34 -0
  525. data/spec/opal/core/runtime/singleton_class_spec.rb +13 -0
  526. data/spec/opal/core/runtime/super_spec.rb +212 -0
  527. data/spec/opal/core/runtime/truthy_spec.rb +23 -0
  528. data/spec/opal/core/runtime/variables_spec.rb +20 -0
  529. data/spec/opal/core/runtime_spec.rb +58 -0
  530. data/spec/opal/core/source_map_spec.rb +15 -0
  531. data/spec/opal/core/string_spec.rb +11 -0
  532. data/spec/opal/stdlib/erb/erb_spec.rb +30 -0
  533. data/spec/opal/stdlib/erb/inline_block.opalerb +3 -0
  534. data/spec/opal/stdlib/erb/quoted.opalerb +1 -0
  535. data/spec/opal/stdlib/erb/simple.opalerb +1 -0
  536. data/spec/opal/stdlib/js_spec.rb +66 -0
  537. data/spec/opal/stdlib/json/ext_spec.rb +48 -0
  538. data/spec/opal/stdlib/json/parse_spec.rb +33 -0
  539. data/spec/opal/stdlib/native/alias_native_spec.rb +27 -0
  540. data/spec/opal/stdlib/native/each_spec.rb +13 -0
  541. data/spec/opal/stdlib/native/element_reference_spec.rb +16 -0
  542. data/spec/opal/stdlib/native/exposure_spec.rb +33 -0
  543. data/spec/opal/stdlib/native/ext_spec.rb +19 -0
  544. data/spec/opal/stdlib/native/initialize_spec.rb +17 -0
  545. data/spec/opal/stdlib/native/method_missing_spec.rb +51 -0
  546. data/spec/opal/stdlib/native/native_alias_spec.rb +19 -0
  547. data/spec/opal/stdlib/native/native_class_spec.rb +18 -0
  548. data/spec/opal/stdlib/native/native_module_spec.rb +13 -0
  549. data/spec/opal/stdlib/native/native_reader_spec.rb +22 -0
  550. data/spec/opal/stdlib/native/native_writer_spec.rb +30 -0
  551. data/spec/opal/stdlib/native/new_spec.rb +8 -0
  552. data/spec/opal/stdlib/promise/always_spec.rb +30 -0
  553. data/spec/opal/stdlib/promise/error_spec.rb +15 -0
  554. data/spec/opal/stdlib/promise/rescue_spec.rb +44 -0
  555. data/spec/opal/stdlib/promise/then_spec.rb +71 -0
  556. data/spec/opal/stdlib/promise/trace_spec.rb +52 -0
  557. data/spec/opal/stdlib/promise/value_spec.rb +15 -0
  558. data/spec/opal/stdlib/promise/when_spec.rb +34 -0
  559. data/spec/opal/stdlib/template/paths_spec.rb +10 -0
  560. data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
  561. data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
  562. data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
  563. data/spec/rubyspecs +144 -0
  564. data/spec/spec_helper.rb +53 -0
  565. data/spec/support/mspec_rspec_adapter.rb +33 -0
  566. data/spec/support/parser_helpers.rb +37 -0
  567. data/stdlib/README.md +3 -0
  568. data/stdlib/base64.rb +152 -0
  569. data/stdlib/benchmark.rb +557 -0
  570. data/stdlib/buffer.rb +41 -0
  571. data/stdlib/buffer/array.rb +66 -0
  572. data/stdlib/buffer/view.rb +70 -0
  573. data/stdlib/date.rb +248 -0
  574. data/stdlib/delegate.rb +29 -0
  575. data/stdlib/dir.rb +1 -0
  576. data/stdlib/encoding.rb +170 -0
  577. data/stdlib/enumerator.rb +1 -0
  578. data/stdlib/erb.rb +16 -0
  579. data/stdlib/file.rb +1 -0
  580. data/stdlib/fileutils.rb +0 -0
  581. data/stdlib/forwardable.rb +71 -0
  582. data/stdlib/iconv.rb +0 -0
  583. data/stdlib/js.rb +56 -0
  584. data/stdlib/json.rb +190 -0
  585. data/stdlib/math.rb +370 -0
  586. data/stdlib/native.rb +530 -0
  587. data/stdlib/nodejs.rb +7 -0
  588. data/stdlib/nodejs/dir.rb +13 -0
  589. data/stdlib/nodejs/file.rb +98 -0
  590. data/stdlib/nodejs/fileutils.rb +26 -0
  591. data/stdlib/nodejs/io.rb +2 -0
  592. data/stdlib/nodejs/irb.rb +45 -0
  593. data/stdlib/nodejs/kernel.rb +33 -0
  594. data/stdlib/nodejs/node_modules/.bin/js-yaml +140 -0
  595. data/stdlib/nodejs/node_modules/glob/LICENSE +15 -0
  596. data/stdlib/nodejs/node_modules/glob/README.md +357 -0
  597. data/stdlib/nodejs/node_modules/glob/common.js +177 -0
  598. data/stdlib/nodejs/node_modules/glob/glob.js +649 -0
  599. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/.eslintrc +17 -0
  600. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/LICENSE +15 -0
  601. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/README.md +37 -0
  602. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/inflight.js +44 -0
  603. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE +15 -0
  604. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md +36 -0
  605. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json +52 -0
  606. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js +51 -0
  607. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js +33 -0
  608. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/package.json +61 -0
  609. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/test.js +97 -0
  610. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/LICENSE +16 -0
  611. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/README.md +42 -0
  612. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits.js +1 -0
  613. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits_browser.js +23 -0
  614. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/package.json +51 -0
  615. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/test.js +25 -0
  616. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.npmignore +1 -0
  617. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.travis.yml +4 -0
  618. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/LICENSE +23 -0
  619. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/README.md +216 -0
  620. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/benchmark.js +15 -0
  621. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/browser.js +1181 -0
  622. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/minimatch.js +845 -0
  623. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore +2 -0
  624. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml +3 -0
  625. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md +121 -0
  626. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js +8 -0
  627. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js +191 -0
  628. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore +2 -0
  629. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml +4 -0
  630. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile +6 -0
  631. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md +80 -0
  632. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js +5 -0
  633. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js +38 -0
  634. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json +73 -0
  635. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js +56 -0
  636. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml +4 -0
  637. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE +18 -0
  638. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown +62 -0
  639. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js +6 -0
  640. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js +13 -0
  641. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json +83 -0
  642. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js +39 -0
  643. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json +75 -0
  644. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js +32 -0
  645. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt +1075 -0
  646. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt +182 -0
  647. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js +9 -0
  648. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js +10 -0
  649. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh +24 -0
  650. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js +15 -0
  651. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js +16 -0
  652. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js +10 -0
  653. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js +13 -0
  654. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js +7 -0
  655. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js +50 -0
  656. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/package.json +60 -0
  657. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/basic.js +399 -0
  658. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/brace-expand.js +45 -0
  659. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/defaults.js +274 -0
  660. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js +8 -0
  661. data/stdlib/nodejs/node_modules/glob/node_modules/once/LICENSE +27 -0
  662. data/stdlib/nodejs/node_modules/glob/node_modules/once/README.md +51 -0
  663. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE +15 -0
  664. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/README.md +36 -0
  665. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/package.json +52 -0
  666. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js +51 -0
  667. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js +33 -0
  668. data/stdlib/nodejs/node_modules/glob/node_modules/once/once.js +21 -0
  669. data/stdlib/nodejs/node_modules/glob/node_modules/once/package.json +60 -0
  670. data/stdlib/nodejs/node_modules/glob/node_modules/once/test/once.js +23 -0
  671. data/stdlib/nodejs/node_modules/glob/package.json +72 -0
  672. data/stdlib/nodejs/node_modules/glob/sync.js +409 -0
  673. data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +277 -0
  674. data/stdlib/nodejs/node_modules/js-yaml/LICENSE +21 -0
  675. data/stdlib/nodejs/node_modules/js-yaml/README.md +288 -0
  676. data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +140 -0
  677. data/stdlib/nodejs/node_modules/js-yaml/bower.json +23 -0
  678. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.js +3666 -0
  679. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +3 -0
  680. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +102 -0
  681. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +18 -0
  682. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +31 -0
  683. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +22 -0
  684. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +18 -0
  685. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +197 -0
  686. data/stdlib/nodejs/node_modules/js-yaml/index.js +7 -0
  687. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +39 -0
  688. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +62 -0
  689. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +554 -0
  690. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +25 -0
  691. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +1581 -0
  692. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +78 -0
  693. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +103 -0
  694. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +18 -0
  695. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +25 -0
  696. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +28 -0
  697. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +17 -0
  698. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +25 -0
  699. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +61 -0
  700. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +133 -0
  701. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +37 -0
  702. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +110 -0
  703. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +183 -0
  704. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +85 -0
  705. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +84 -0
  706. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +27 -0
  707. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +8 -0
  708. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +12 -0
  709. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +36 -0
  710. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +56 -0
  711. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +61 -0
  712. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +8 -0
  713. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +33 -0
  714. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +8 -0
  715. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +98 -0
  716. data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esparse +117 -0
  717. data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esvalidate +177 -0
  718. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +115 -0
  719. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +21 -0
  720. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +239 -0
  721. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +36 -0
  722. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +22 -0
  723. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +59 -0
  724. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +13 -0
  725. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +33 -0
  726. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +28 -0
  727. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +23 -0
  728. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +49 -0
  729. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +35 -0
  730. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +270 -0
  731. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +1 -0
  732. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +146 -0
  733. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +55 -0
  734. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +47 -0
  735. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +40 -0
  736. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +48 -0
  737. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +50 -0
  738. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +43 -0
  739. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +27 -0
  740. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +26 -0
  741. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +148 -0
  742. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +50 -0
  743. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +481 -0
  744. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +14 -0
  745. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +50 -0
  746. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +54 -0
  747. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +75 -0
  748. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +1168 -0
  749. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +18 -0
  750. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +88 -0
  751. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +798 -0
  752. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +77 -0
  753. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +2 -0
  754. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +8 -0
  755. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +825 -0
  756. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +33 -0
  757. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +11 -0
  758. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +10 -0
  759. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +26 -0
  760. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +673 -0
  761. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
  762. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +107 -0
  763. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +23 -0
  764. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +22 -0
  765. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +69 -0
  766. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +6 -0
  767. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +1415 -0
  768. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +62 -0
  769. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +73 -0
  770. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +117 -0
  771. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +177 -0
  772. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +3908 -0
  773. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +69 -0
  774. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +239 -0
  775. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +422 -0
  776. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +66 -0
  777. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +387 -0
  778. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +20238 -0
  779. data/stdlib/nodejs/node_modules/js-yaml/package.json +83 -0
  780. data/stdlib/nodejs/package.json +6 -0
  781. data/stdlib/nodejs/require.rb +30 -0
  782. data/stdlib/nodejs/rubygems.rb +68 -0
  783. data/stdlib/nodejs/yaml.rb +11 -0
  784. data/stdlib/observer.rb +202 -0
  785. data/stdlib/opal-parser.rb +54 -0
  786. data/stdlib/opal-source-maps.rb +2 -0
  787. data/stdlib/ostruct.rb +69 -0
  788. data/stdlib/pathname.rb +55 -0
  789. data/stdlib/phantomjs.rb +3 -0
  790. data/stdlib/pp.rb +35 -0
  791. data/stdlib/promise.rb +427 -0
  792. data/stdlib/racc/parser.rb +215 -0
  793. data/stdlib/rbconfig.rb +18 -0
  794. data/stdlib/securerandom.rb +12 -0
  795. data/stdlib/set.rb +170 -0
  796. data/stdlib/singleton.rb +40 -0
  797. data/stdlib/source_map.rb +5 -0
  798. data/stdlib/source_map/map.rb +220 -0
  799. data/stdlib/source_map/mapping.rb +26 -0
  800. data/stdlib/source_map/offset.rb +88 -0
  801. data/stdlib/source_map/version.rb +3 -0
  802. data/stdlib/source_map/vlq.rb +98 -0
  803. data/stdlib/sourcemap.rb +1 -0
  804. data/stdlib/stringio.rb +181 -0
  805. data/stdlib/strscan.rb +166 -0
  806. data/stdlib/template.rb +46 -0
  807. data/stdlib/thread.rb +164 -0
  808. data/stdlib/time.rb +9 -0
  809. data/stdlib/yaml.rb +1 -0
  810. data/tasks/benchmarking.rake +88 -0
  811. data/tasks/building.rake +58 -0
  812. data/tasks/documenting.rake +37 -0
  813. data/tasks/github.rake +19 -0
  814. data/tasks/linting.rake +18 -0
  815. data/tasks/testing.rake +125 -0
  816. data/vendored-minitest/minitest.rb +780 -0
  817. data/vendored-minitest/minitest/assertions.rb +662 -0
  818. data/vendored-minitest/minitest/autorun.rb +12 -0
  819. data/vendored-minitest/minitest/benchmark.rb +426 -0
  820. data/vendored-minitest/minitest/expectations.rb +281 -0
  821. data/vendored-minitest/minitest/hell.rb +11 -0
  822. data/vendored-minitest/minitest/mock.rb +220 -0
  823. data/vendored-minitest/minitest/parallel.rb +65 -0
  824. data/vendored-minitest/minitest/pride.rb +4 -0
  825. data/vendored-minitest/minitest/pride_plugin.rb +142 -0
  826. data/vendored-minitest/minitest/spec.rb +310 -0
  827. data/vendored-minitest/minitest/test.rb +293 -0
  828. data/vendored-minitest/minitest/unit.rb +45 -0
  829. data/vendored-minitest/test/unit.rb +28 -0
  830. metadata +1058 -0
@@ -0,0 +1,20 @@
1
+ describe "Literal Regexps" do
2
+ it "yields a Regexp" do
3
+ /Hello/.should be_kind_of(Regexp)
4
+ end
5
+ end
6
+
7
+ describe "Regexps with interpolation" do
8
+ it "allows interpolation of strings" do
9
+ str = "foo|bar"
10
+ /#{str}/.should == /foo|bar/
11
+ end
12
+
13
+ it "allows interpolation to interact with other Regexp constructs" do
14
+ str = "foo)|(bar"
15
+ /(#{str})/.should == /(foo)|(bar)/
16
+
17
+ str = "a"
18
+ /[#{str}-z]/.should == /[a-z]/
19
+ end
20
+ end
@@ -0,0 +1,225 @@
1
+ require File.expand_path('../fixtures/send', __FILE__)
2
+
3
+ # Why so many fixed arg tests? JRuby and I assume other Ruby impls have
4
+ # separate call paths for simple fixed arity methods. Testing up to five
5
+ # will verify special and generic arity code paths for all impls.
6
+ #
7
+ # Method naming conventions:
8
+ # M - Manditory Args
9
+ # O - Optional Arg
10
+ # R - Rest Arg
11
+ # Q - Post Manditory Args (1.9)
12
+
13
+ specs = LangSendSpecs
14
+
15
+ describe "Invoking a method" do
16
+ describe "with zero arguments" do
17
+ it "requires no arguments passed" do
18
+ specs.fooM0.should == 100
19
+ end
20
+
21
+ it "raises ArgumentError if the method has a positive arity" do
22
+ lambda {
23
+ specs.fooM1
24
+ }.should raise_error(ArgumentError)
25
+ end
26
+ end
27
+
28
+ describe "with only manditory arguments" do
29
+ it "requires exactly the same number of passed values" do
30
+ specs.fooM1(1).should == [1]
31
+ specs.fooM2(1,2).should == [1,2]
32
+ specs.fooM3(1,2,3).should == [1,2,3]
33
+ specs.fooM4(1,2,3,4).should == [1,2,3,4]
34
+ specs.fooM5(1,2,3,4,5).should == [1,2,3,4,5]
35
+ end
36
+
37
+ it "raises ArgumentError if the methods arity doesn't match" do
38
+ lambda {
39
+ specs.fooM1(1,2)
40
+ }.should raise_error(ArgumentError)
41
+ end
42
+ end
43
+
44
+ describe "with optional arguments" do
45
+ it "uses the optional argument if none is is passed" do
46
+ specs.fooM0O1.should == [1]
47
+ end
48
+
49
+ it "uses the passed argument if available" do
50
+ specs.fooM0O1(2).should == [2]
51
+ end
52
+
53
+ it "raises ArgumentError if extra arguments are passed" do
54
+ lambda {
55
+ specs.fooM0O1(2,3)
56
+ }.should raise_error(ArgumentError)
57
+ end
58
+ end
59
+
60
+ describe "with manditory and optional arguments" do
61
+ it "uses the passed values in left to right order" do
62
+ specs.fooM1O1(2).should == [2,1]
63
+ end
64
+
65
+ it "raises an ArgumentError if there are no values for the manditory args" do
66
+ lambda {
67
+ specs.fooM1O1
68
+ }.should raise_error(ArgumentError)
69
+ end
70
+
71
+ it "raises an ArgumentError if too many values are passed" do
72
+ lambda {
73
+ specs.fooM1O1(1,2,3)
74
+ }.should raise_error(ArgumentError)
75
+ end
76
+ end
77
+
78
+ describe "with a rest argument" do
79
+ it "is an empty array if there are no additional arguments" do
80
+ specs.fooM0R().should == []
81
+ specs.fooM1R(1).should == [1, []]
82
+ end
83
+
84
+ it "gathers unused arguments" do
85
+ specs.fooM0R(1).should == [1]
86
+ specs.fooM1R(1,2).should == [1, [2]]
87
+ end
88
+ end
89
+
90
+ it "with a block makes it available to yield" do
91
+ specs.oneb(10) { 200 }.should == [10,200]
92
+ end
93
+
94
+ it "with a block converts the block to a Proc" do
95
+ prc = specs.makeproc { "hello" }
96
+ prc.should be_kind_of(Proc)
97
+ prc.call.should == "hello"
98
+ end
99
+
100
+ it "with an object as a block uses 'to_proc' for coercion" do
101
+ o = LangSendSpecs::ToProc.new(:from_to_proc)
102
+
103
+ specs.makeproc(&o).call.should == :from_to_proc
104
+
105
+ specs.yield_now(&o).should == :from_to_proc
106
+ end
107
+
108
+ it "raises a SyntaxError with both a literal block and an object as block" do
109
+ lambda {
110
+ eval "specs.oneb(10, &l){ 42 }"
111
+ }.should raise_error(SyntaxError)
112
+ end
113
+
114
+ it "with same names as existing variables is ok" do
115
+ foobar = 100
116
+
117
+ def foobar; 200; end
118
+
119
+ foobar.should == 100
120
+ foobar().should == 200
121
+ end
122
+
123
+ it "with splat operator makes the object the direct arguments" do
124
+ a = [1,2,3]
125
+ specs.fooM3(*a).should == [1,2,3]
126
+ end
127
+
128
+ it "without parentheses works" do
129
+ (specs.fooM3 1,2,3).should == [1,2,3]
130
+ end
131
+
132
+ it "with a space separating method name and parenthesis treats expression in parenthesis as first argument" do
133
+ specs.weird_parens().should == "55"
134
+ end
135
+
136
+ ruby_version_is "" ... "1.9" do
137
+ describe "allows []=" do
138
+ before :each do
139
+ @obj = LangSendSpecs::AttrSet.new
140
+ end
141
+
142
+ it "with *args in the [] expanded to individual arguments" do
143
+ ary = [2,3]
144
+ (@obj[1, *ary] = 4).should == 4
145
+ @obj.result.should == [1,2,3,4]
146
+ end
147
+
148
+ it "with multiple *args" do
149
+ ary = [2,3]
150
+ post = [4,5]
151
+ (@obj[1, *ary] = *post).should == [4,5]
152
+ @obj.result.should == [1,2,3,[4,5]]
153
+ end
154
+
155
+ it "with multiple *args and unwraps the last splat" do
156
+ ary = [2,3]
157
+ post = [4]
158
+ (@obj[1, *ary] = *post).should == 4
159
+ @obj.result.should == [1,2,3,4]
160
+ end
161
+
162
+ it "with a *args and multiple rhs args" do
163
+ ary = [2,3]
164
+ (@obj[1, *ary] = 4, 5).should == [4,5]
165
+ @obj.result.should == [1,2,3,[4,5]]
166
+ end
167
+ end
168
+ end
169
+
170
+ it "passes literal hashes without curly braces as the last parameter" do
171
+ specs.fooM3('abc', 456, 'rbx' => 'cool',
172
+ 'specs' => 'fail sometimes', 'oh' => 'weh').should == \
173
+ ['abc', 456, {'rbx' => 'cool', 'specs' => 'fail sometimes', 'oh' => 'weh'}]
174
+ end
175
+
176
+ it "passes a literal hash without curly braces or parens" do
177
+ (specs.fooM3 'abc', 456, 'rbx' => 'cool',
178
+ 'specs' => 'fail sometimes', 'oh' => 'weh').should == \
179
+ ['abc', 456, { 'rbx' => 'cool', 'specs' => 'fail sometimes', 'oh' => 'weh'}]
180
+ end
181
+
182
+ it "allows to literal hashes without curly braces as the only parameter" do
183
+ specs.fooM1(:rbx => :cool, :specs => :fail_sometimes).should ==
184
+ [{ :rbx => :cool, :specs => :fail_sometimes }]
185
+
186
+ (specs.fooM1 :rbx => :cool, :specs => :fail_sometimes).should ==
187
+ [{ :rbx => :cool, :specs => :fail_sometimes }]
188
+ end
189
+
190
+ describe "when the method is not available" do
191
+ it "invokes method_missing" do
192
+ o = LangSendSpecs::MethodMissing.new
193
+ o.not_there(1,2)
194
+ o.message.should == :not_there
195
+ o.args.should == [1,2]
196
+ end
197
+ end
198
+
199
+ end
200
+
201
+ describe "Invoking a private setter method" do
202
+ describe "permits self as a receiver" do
203
+ it "for normal assignment" do
204
+ receiver = LangSendSpecs::PrivateSetter.new
205
+ receiver.call_self_foo_equals(42)
206
+ receiver.foo.should == 42
207
+ end
208
+
209
+ it "for multiple assignment" do
210
+ receiver = LangSendSpecs::PrivateSetter.new
211
+ receiver.call_self_foo_equals_masgn(42)
212
+ receiver.foo.should == 42
213
+ end
214
+ end
215
+ end
216
+
217
+ describe "Invoking a private getter method" do
218
+ it "does not permit self as a receiver" do
219
+ receiver = LangSendSpecs::PrivateGetter.new
220
+ lambda { receiver.call_self_foo }.should raise_error(NoMethodError)
221
+ lambda { receiver.call_self_foo_or_equals(6) }.should raise_error(NoMethodError)
222
+ end
223
+ end
224
+
225
+ # language_version __FILE__, "send"
@@ -0,0 +1,44 @@
1
+ describe "Ruby character strings" do
2
+ it "are produced from character shortcuts" do
3
+ ?z.should == 'z'
4
+ end
5
+
6
+ it "should parse string into %[]" do
7
+ %[foo].should == "foo"
8
+ %|bar|.should == "bar"
9
+ %'baz'.should == "baz"
10
+ end
11
+
12
+ it "interpolate string" do
13
+ a = 1
14
+ %[#{a}23].should == "123"
15
+ end
16
+
17
+ it "should not process escape characters in single-quoted heredocs" do
18
+ s = <<'EOD'
19
+ hey\now\brown\cow
20
+ EOD
21
+ s.strip.should == 'hey\now\brown\cow'
22
+ end
23
+
24
+ it "should ignore single-quote escapes in single-quoted heredocs" do
25
+ s = <<'EOD'
26
+ they\'re greeeeaaat!
27
+ EOD
28
+ s.strip.should == 'they\\\'re greeeeaaat!'
29
+ end
30
+
31
+ it "should process escape characters in double quoted heredocs" do
32
+ s = <<"EOD"
33
+ hey\now\brown\cow
34
+ EOD
35
+ s.strip.should == "hey\now\brown\cow"
36
+ end
37
+
38
+ it "should treat bare-word heredoc identifiers as double-quoted" do
39
+ s = <<EOD
40
+ hey\now\brown\cow
41
+ EOD
42
+ s.strip.should == "hey\now\brown\cow"
43
+ end
44
+ end
@@ -0,0 +1,1366 @@
1
+ require File.expand_path('../fixtures/variables', __FILE__)
2
+
3
+ # TODO: partition these specs into distinct cases based on the
4
+ # real parsed forms, not the superficial code forms.
5
+ describe "Basic assignment" do
6
+ it "allows the rhs to be assigned to the lhs" do
7
+ a = nil
8
+ a.should == nil
9
+ end
10
+
11
+ it "assigns nil to lhs when rhs is an empty expression" do
12
+ a = ()
13
+ a.should be_nil
14
+ end
15
+
16
+ ruby_version_is "" ... "1.9" do
17
+ it "assigns nil to lhs when rhs is an empty splat expression" do
18
+ a = *()
19
+ a.should be_nil
20
+ end
21
+ end
22
+
23
+ ruby_version_is "1.9" do
24
+ it "assigns [] to lhs when rhs is an empty splat expression" do
25
+ a = *()
26
+ a.should == []
27
+ end
28
+ end
29
+
30
+ ruby_version_is "" ... "1.9" do
31
+ it "allows the assignment of the rhs to the lhs using the rhs splat operator" do
32
+ a = *nil; a.should == nil
33
+ a = *1; a.should == 1
34
+ a = *[]; a.should == nil
35
+ a = *[1]; a.should == 1
36
+ a = *[nil]; a.should == nil
37
+ a = *[[]]; a.should == []
38
+ a = *[1,2]; a.should == [1,2]
39
+ end
40
+ end
41
+
42
+ ruby_version_is "1.9" do
43
+ it "allows the assignment of the rhs to the lhs using the rhs splat operator" do
44
+ a = *nil; a.should == []
45
+ a = *1; a.should == [1]
46
+ a = *[]; a.should == []
47
+ a = *[1]; a.should == [1]
48
+ a = *[nil]; a.should == [nil]
49
+ a = *[[]]; a.should == [[]]
50
+ a = *[1,2]; a.should == [1,2]
51
+ end
52
+ end
53
+
54
+ ruby_version_is "" ... "1.9" do
55
+ it "allows the assignment of the rhs to the lhs using the lhs splat operator" do
56
+ # * = 1,2 # Valid syntax, but pretty useless! Nothing to test
57
+ *a = nil; a.should == [nil]
58
+ *a = 1; a.should == [1]
59
+ *a = []; a.should == [[]]
60
+ *a = [1]; a.should == [[1]]
61
+ *a = [1,2]; a.should == [[1,2]]
62
+ end
63
+ end
64
+
65
+ ruby_version_is "1.9" do
66
+ it "allows the assignment of the rhs to the lhs using the lhs splat operator" do
67
+ # * = 1,2 # Valid syntax, but pretty useless! Nothing to test
68
+ *a = nil; a.should == [nil]
69
+ *a = 1; a.should == [1]
70
+ *a = []; a.should == []
71
+ *a = [1]; a.should == [1]
72
+ *a = [1,2]; a.should == [1,2]
73
+ end
74
+ end
75
+
76
+ ruby_version_is "" ... "1.9" do
77
+ it "allows the assignment of rhs to the lhs using the lhs and rhs splat operators simultaneously" do
78
+ *a = *nil; a.should == [nil]
79
+ *a = *1; a.should == [1]
80
+ *a = *[]; a.should == []
81
+ *a = *[1]; a.should == [1]
82
+ *a = *[nil]; a.should == [nil]
83
+ *a = *[1,2]; a.should == [1,2]
84
+ end
85
+ end
86
+
87
+ ruby_version_is "1.9" do
88
+ it "allows the assignment of rhs to the lhs using the lhs and rhs splat operators simultaneously" do
89
+ *a = *nil; a.should == []
90
+ *a = *1; a.should == [1]
91
+ *a = *[]; a.should == []
92
+ *a = *[1]; a.should == [1]
93
+ *a = *[nil]; a.should == [nil]
94
+ *a = *[1,2]; a.should == [1,2]
95
+ end
96
+ end
97
+
98
+ it "sets unavailable values to nil" do
99
+ ary = []
100
+ a, b, c = ary
101
+
102
+ a.should be_nil
103
+ b.should be_nil
104
+ c.should be_nil
105
+ end
106
+
107
+ it "sets the splat to an empty Array if there are no more values" do
108
+ ary = []
109
+ a, b, *c = ary
110
+
111
+ a.should be_nil
112
+ b.should be_nil
113
+ c.should == []
114
+ end
115
+
116
+ it "allows multiple values to be assigned" do
117
+ a,b,*c = nil; [a,b,c].should == [nil, nil, []]
118
+ a,b,*c = 1; [a,b,c].should == [1, nil, []]
119
+ a,b,*c = []; [a,b,c].should == [nil, nil, []]
120
+ a,b,*c = [1]; [a,b,c].should == [1, nil, []]
121
+ a,b,*c = [nil]; [a,b,c].should == [nil, nil, []]
122
+ a,b,*c = [[]]; [a,b,c].should == [[], nil, []]
123
+ a,b,*c = [1,2]; [a,b,c].should == [1,2,[]]
124
+
125
+ a,b,*c = *nil; [a,b,c].should == [nil, nil, []]
126
+ a,b,*c = *1; [a,b,c].should == [1, nil, []]
127
+ a,b,*c = *[]; [a,b,c].should == [nil, nil, []]
128
+ a,b,*c = *[1]; [a,b,c].should == [1, nil, []]
129
+ a,b,*c = *[nil]; [a,b,c].should == [nil, nil, []]
130
+ a,b,*c = *[[]]; [a,b,c].should == [[], nil, []]
131
+ a,b,*c = *[1,2]; [a,b,c].should == [1,2,[]]
132
+ end
133
+
134
+ it "calls to_a on the given argument when using a splat" do
135
+ a,b = *VariablesSpecs::ArrayLike.new([1,2]); [a,b].should == [1,2]
136
+ end
137
+
138
+ it "supports the {|r,| } form of block assignment" do
139
+ f = lambda {|r,| r.should == []}
140
+ f.call([], *[])
141
+
142
+ f = lambda{|x,| x}
143
+ f.call(42).should == 42
144
+ f.call([42]).should == [42]
145
+ f.call([[42]]).should == [[42]]
146
+ f.call([42,55]).should == [42,55]
147
+ end
148
+
149
+ it "allows assignment through lambda" do
150
+ f = lambda {|r,*l| r.should == []; l.should == [1]}
151
+ f.call([], *[1])
152
+
153
+ f = lambda{|x| x}
154
+ f.call(42).should == 42
155
+ f.call([42]).should == [42]
156
+ f.call([[42]]).should == [[42]]
157
+ f.call([42,55]).should == [42,55]
158
+
159
+ f = lambda{|*x| x}
160
+ f.call(42).should == [42]
161
+ f.call([42]).should == [[42]]
162
+ f.call([[42]]).should == [[[42]]]
163
+ f.call([42,55]).should == [[42,55]]
164
+ f.call(42,55).should == [42,55]
165
+ end
166
+
167
+ it "allows chained assignment" do
168
+ (a = 1 + b = 2 + c = 4 + d = 8).should == 15
169
+ d.should == 8
170
+ c.should == 12
171
+ b.should == 14
172
+ a.should == 15
173
+ end
174
+ end
175
+
176
+ describe "Assignment using expansion" do
177
+ ruby_version_is "" ... "1.9" do
178
+ it "succeeds without conversion" do
179
+ *x = (1..7).to_a
180
+ x.should == [[1, 2, 3, 4, 5, 6, 7]]
181
+ end
182
+ end
183
+
184
+ ruby_version_is "1.9" do
185
+ it "succeeds without conversion" do
186
+ *x = (1..7).to_a
187
+ x.should == [1, 2, 3, 4, 5, 6, 7]
188
+ end
189
+ end
190
+ end
191
+
192
+ describe "Basic multiple assignment" do
193
+ describe "with a single RHS value" do
194
+ it "does not call #to_ary on an Array instance" do
195
+ x = [1, 2]
196
+ x.should_not_receive(:to_ary)
197
+
198
+ a, b = x
199
+ a.should == 1
200
+ b.should == 2
201
+ end
202
+
203
+ it "does not call #to_a on an Array instance" do
204
+ x = [1, 2]
205
+ x.should_not_receive(:to_a)
206
+
207
+ a, b = x
208
+ a.should == 1
209
+ b.should == 2
210
+ end
211
+
212
+ it "does not call #to_ary on an Array subclass instance" do
213
+ x = VariablesSpecs::ArraySubclass.new [1, 2]
214
+ x.should_not_receive(:to_ary)
215
+
216
+ a, b = x
217
+ a.should == 1
218
+ b.should == 2
219
+ end
220
+
221
+ it "does not call #to_a on an Array subclass instance" do
222
+ x = VariablesSpecs::ArraySubclass.new [1, 2]
223
+ x.should_not_receive(:to_a)
224
+
225
+ a, b = x
226
+ a.should == 1
227
+ b.should == 2
228
+ end
229
+
230
+ it "calls #to_ary on an object" do
231
+ x = mock("single rhs value for masgn")
232
+ x.should_receive(:to_ary).and_return([1, 2])
233
+
234
+ a, b = x
235
+ a.should == 1
236
+ b.should == 2
237
+ end
238
+
239
+ it "does not call #to_a on an object if #to_ary is not defined" do
240
+ x = mock("single rhs value for masgn")
241
+ x.should_not_receive(:to_a)
242
+
243
+ a, b = x
244
+ a.should == x
245
+ b.should be_nil
246
+ end
247
+
248
+ it "does not call #to_a on a String" do
249
+ x = "one\ntwo"
250
+
251
+ a, b = x
252
+ a.should == x
253
+ b.should be_nil
254
+ end
255
+ end
256
+
257
+ describe "with a splatted single RHS value" do
258
+ it "does not call #to_ary on an Array instance" do
259
+ x = [1, 2]
260
+ x.should_not_receive(:to_ary)
261
+
262
+ a, b = *x
263
+ a.should == 1
264
+ b.should == 2
265
+ end
266
+
267
+ it "does not call #to_a on an Array instance" do
268
+ x = [1, 2]
269
+ x.should_not_receive(:to_a)
270
+
271
+ a, b = *x
272
+ a.should == 1
273
+ b.should == 2
274
+ end
275
+
276
+ it "does not call #to_ary on an Array subclass instance" do
277
+ x = VariablesSpecs::ArraySubclass.new [1, 2]
278
+ x.should_not_receive(:to_ary)
279
+
280
+ a, b = *x
281
+ a.should == 1
282
+ b.should == 2
283
+ end
284
+
285
+ it "does not call #to_a on an Array subclass instance" do
286
+ x = VariablesSpecs::ArraySubclass.new [1, 2]
287
+ x.should_not_receive(:to_a)
288
+
289
+ a, b = *x
290
+ a.should == 1
291
+ b.should == 2
292
+ end
293
+
294
+ it "calls #to_a on an object if #to_ary is not defined" do
295
+ x = mock("single splatted rhs value for masgn")
296
+ x.should_receive(:to_a).and_return([1, 2])
297
+
298
+ a, b = *x
299
+ a.should == 1
300
+ b.should == 2
301
+ end
302
+
303
+ ruby_version_is ""..."1.9" do
304
+ it "calls #to_ary on an object" do
305
+ x = mock("single splatted rhs value for masgn")
306
+ x.should_receive(:to_ary).and_return([1, 2])
307
+
308
+ a, b = *x
309
+ a.should == 1
310
+ b.should == 2
311
+ end
312
+
313
+ it "calls #to_a on a String" do
314
+ x = "one\ntwo"
315
+
316
+ a, b = *x
317
+ a.should == "one\n"
318
+ b.should == "two"
319
+ end
320
+ end
321
+
322
+ ruby_version_is "1.9" do
323
+ it "does not call #to_ary on an object" do
324
+ x = mock("single splatted rhs value for masgn")
325
+ x.should_not_receive(:to_ary)
326
+
327
+ a, b = *x
328
+ a.should == x
329
+ b.should be_nil
330
+ end
331
+
332
+ it "does not call #to_a on a String" do
333
+ x = "one\ntwo"
334
+
335
+ a, b = *x
336
+ a.should == x
337
+ b.should be_nil
338
+ end
339
+ end
340
+ end
341
+ end
342
+
343
+ describe "Assigning multiple values" do
344
+ it "allows parallel assignment" do
345
+ a, b = 1, 2
346
+ a.should == 1
347
+ b.should == 2
348
+
349
+ # a, = 1,2
350
+ a.should == 1
351
+ end
352
+
353
+ it "allows safe parallel swapping" do
354
+ a, b = 1, 2
355
+ a, b = b, a
356
+ a.should == 2
357
+ b.should == 1
358
+ end
359
+
360
+ not_compliant_on :rubinius do
361
+ it "returns the rhs values used for assignment as an array" do
362
+ # x = begin; a, b, c = 1, 2, 3; end
363
+ x.should == [1,2,3]
364
+ end
365
+ end
366
+
367
+ ruby_version_is "" ... "1.9" do
368
+ it "wraps a single value in an Array" do
369
+ *a = 1
370
+ a.should == [1]
371
+
372
+ b = [1]
373
+ *a = b
374
+ a.should == [b]
375
+ end
376
+ end
377
+
378
+ ruby_version_is "1.9" do
379
+ it "wraps a single value in an Array if it's not already one" do
380
+ *a = 1
381
+ a.should == [1]
382
+
383
+ b = [1]
384
+ *a = b
385
+ a.should == b
386
+ end
387
+ end
388
+
389
+ it "evaluates rhs left-to-right" do
390
+ a = VariablesSpecs::ParAsgn.new
391
+ d, e ,f = a.inc, a.inc, a.inc
392
+ d.should == 1
393
+ e.should == 2
394
+ f.should == 3
395
+ end
396
+
397
+ it "supports parallel assignment to lhs args via object.method=" do
398
+ a = VariablesSpecs::ParAsgn.new
399
+ a.x, b = 1, 2
400
+
401
+ a.x.should == 1
402
+ b.should == 2
403
+
404
+ c = VariablesSpecs::ParAsgn.new
405
+ c.x, a.x = a.x, b
406
+
407
+ c.x.should == 1
408
+ a.x.should == 2
409
+ end
410
+
411
+ it "supports parallel assignment to lhs args using []=" do
412
+ a = [1,2,3]
413
+ a[3], b = 4,5
414
+
415
+ a.should == [1,2,3,4]
416
+ b.should == 5
417
+ end
418
+
419
+ it "bundles remaining values to an array when using the splat operator" do
420
+ a, *b = 1, 2, 3
421
+ a.should == 1
422
+ b.should == [2, 3]
423
+
424
+ *a = 1, 2, 3
425
+ a.should == [1, 2, 3]
426
+
427
+ *a = 4
428
+ a.should == [4]
429
+
430
+ *a = nil
431
+ a.should == [nil]
432
+
433
+ a, = *[1]
434
+ a.should == 1
435
+ end
436
+
437
+ ruby_version_is ""..."1.9" do
438
+ it "calls #to_ary on rhs arg if rhs has only a single arg" do
439
+ x = VariablesSpecs::ParAsgn.new
440
+ a,b,c = x
441
+ a.should == 1
442
+ b.should == 2
443
+ c.should == 3
444
+
445
+ a,b,c = x,5
446
+ a.should == x
447
+ b.should == 5
448
+ c.should == nil
449
+
450
+ a,b,c = 5,x
451
+ a.should == 5
452
+ b.should == x
453
+ c.should == nil
454
+
455
+ a,b,*c = x,5
456
+ a.should == x
457
+ b.should == 5
458
+ c.should == []
459
+
460
+ # a,(b,c) = 5,x
461
+ a.should == 5
462
+ b.should == 1
463
+ c.should == 2
464
+
465
+ # a,(b,*c) = 5,x
466
+ a.should == 5
467
+ b.should == 1
468
+ c.should == [2,3,4]
469
+
470
+ # a,(b,(*c)) = 5,x
471
+ a.should == 5
472
+ b.should == 1
473
+ c.should == [2]
474
+
475
+ # a,(b,(*c),(*d)) = 5,x
476
+ a.should == 5
477
+ b.should == 1
478
+ c.should == [2]
479
+ d.should == [3]
480
+
481
+ # a,(b,(*c),(d,*e)) = 5,x
482
+ a.should == 5
483
+ b.should == 1
484
+ c.should == [2]
485
+ d.should == 3
486
+ e.should == []
487
+ end
488
+ end
489
+
490
+ ruby_version_is "1.9" do
491
+ it "calls #to_ary on RHS arg if the corresponding LHS var is a splat" do
492
+ x = VariablesSpecs::ParAsgn.new
493
+
494
+ # a,(*b),c = 5,x
495
+ a.should == 5
496
+ b.should == x.to_ary
497
+ c.should == nil
498
+ end
499
+ end
500
+
501
+ ruby_version_is ""..."1.9" do
502
+ it "doen't call #to_ary on RHS arg when the corresponding LHS var is a splat" do
503
+ x = VariablesSpecs::ParAsgn.new
504
+
505
+ # a,(*b),c = 5,x
506
+ a.should == 5
507
+ b.should == [x]
508
+ c.should == nil
509
+ end
510
+ end
511
+
512
+ it "allows complex parallel assignment" do
513
+ # a, (b, c), d = 1, [2, 3], 4
514
+ a.should == 1
515
+ b.should == 2
516
+ c.should == 3
517
+ d.should == 4
518
+
519
+ # x, (y, z) = 1, 2, 3
520
+ [x,y,z].should == [1,2,nil]
521
+ # x, (y, z) = 1, [2,3]
522
+ [x,y,z].should == [1,2,3]
523
+ # x, (y, z) = 1, [2]
524
+ [x,y,z].should == [1,2,nil]
525
+
526
+ # a,(b,c,*d),(e,f),*g = 0,[1,2,3,4],[5,6],7,8
527
+ a.should == 0
528
+ b.should == 1
529
+ c.should == 2
530
+ d.should == [3,4]
531
+ e.should == 5
532
+ f.should == 6
533
+ g.should == [7,8]
534
+
535
+ x = VariablesSpecs::ParAsgn.new
536
+ # a,(b,c,*d),(e,f),*g = 0,x,[5,6],7,8
537
+ a.should == 0
538
+ b.should == 1
539
+ c.should == 2
540
+ d.should == [3,4]
541
+ e.should == 5
542
+ f.should == 6
543
+ g.should == [7,8]
544
+ end
545
+
546
+ it "allows a lhs arg to be used in another lhs args parallel assignment" do
547
+ c = [4,5,6]
548
+ a,b,c[a] = 1,2,3
549
+ a.should == 1
550
+ b.should == 2
551
+ c.should == [4,3,6]
552
+
553
+ c[a],b,a = 7,8,9
554
+ a.should == 9
555
+ b.should == 8
556
+ c.should == [4,7,6]
557
+ end
558
+ end
559
+
560
+ describe "Conditional assignment" do
561
+ it "assigns the lhs if previously unassigned" do
562
+ a=[]
563
+ a[0] ||= "bar"
564
+ a[0].should == "bar"
565
+
566
+ h={}
567
+ h["foo"] ||= "bar"
568
+ h["foo"].should == "bar"
569
+
570
+ h["foo".to_sym] ||= "bar"
571
+ h["foo".to_sym].should == "bar"
572
+
573
+ aa = 5
574
+ aa ||= 25
575
+ aa.should == 5
576
+
577
+ bb ||= 25
578
+ bb.should == 25
579
+
580
+ cc &&=33
581
+ cc.should == nil
582
+
583
+ cc = 5
584
+ cc &&=44
585
+ cc.should == 44
586
+ end
587
+
588
+ it "checks for class variable definition before fetching its value" do
589
+ class VariableSpecCVarSpec
590
+ @@cvarspec ||= 5
591
+ @@cvarspec.should == 5
592
+ end
593
+ end
594
+ end
595
+
596
+ describe "Unconditional operator assignment 'var op= expr'" do
597
+ it "is equivalent to 'var = var op expr'" do
598
+ x = 13
599
+ (x += 5).should == 18
600
+ x.should == 18
601
+
602
+ x = 17
603
+ (x -= 11).should == 6
604
+ x.should == 6
605
+
606
+ x = 2
607
+ (x *= 5).should == 10
608
+ x.should == 10
609
+
610
+ x = 36
611
+ (x /= 9).should == 4
612
+ x.should == 4
613
+
614
+ x = 23
615
+ (x %= 5).should == 3
616
+ x.should == 3
617
+ (x %= 3).should == 0
618
+ x.should == 0
619
+
620
+ x = 2
621
+ (x **= 3).should == 8
622
+ x.should == 8
623
+
624
+ x = 4
625
+ (x |= 3).should == 7
626
+ x.should == 7
627
+ (x |= 4).should == 7
628
+ x.should == 7
629
+
630
+ x = 6
631
+ (x &= 3).should == 2
632
+ x.should == 2
633
+ (x &= 4).should == 0
634
+ x.should == 0
635
+
636
+ # XOR
637
+ x = 2
638
+ (x ^= 3).should == 1
639
+ x.should == 1
640
+ (x ^= 4).should == 5
641
+ x.should == 5
642
+
643
+ # Bit-shift left
644
+ x = 17
645
+ (x <<= 3).should == 136
646
+ x.should == 136
647
+
648
+ # Bit-shift right
649
+ x = 5
650
+ (x >>= 1).should == 2
651
+ x.should == 2
652
+ end
653
+ end
654
+
655
+ describe "Conditional operator assignment 'var op= expr'" do
656
+ it "assigns the lhs if its truthiness is false for ||, true for &&" do
657
+ x = nil
658
+ (x ||= 17).should == 17
659
+ x.should == 17
660
+ (x ||= 2).should == 17
661
+ x.should == 17
662
+
663
+ x = false
664
+ (x &&= true).should == false
665
+ x.should == false
666
+ (x &&= false).should == false
667
+ x.should == false
668
+ x = true
669
+ (x &&= true).should == true
670
+ x.should == true
671
+ (x &&= false).should == false
672
+ x.should == false
673
+ end
674
+
675
+ it "may not assign at all, depending on the truthiness of lhs" do
676
+ Object.new.instance_eval do
677
+ @falsey = false
678
+ @truthy = true
679
+ freeze
680
+ # lambda{ @truthy ||= 42 }.should_not raise_error
681
+ # lambda{ @falsey &&= 42 }.should_not raise_error
682
+ end
683
+ end
684
+
685
+ it "uses short-circuit arg evaluation" do
686
+ x = 8
687
+ y = VariablesSpecs::OpAsgn.new
688
+ (x ||= y.do_side_effect).should == 8
689
+ y.side_effect.should == nil
690
+
691
+ x = nil
692
+ (x &&= y.do_side_effect).should == nil
693
+ y.side_effect.should == nil
694
+
695
+ y.a = 5
696
+ (x ||= y.do_side_effect).should == 5
697
+ y.side_effect.should == true
698
+ end
699
+ end
700
+
701
+ describe "Unconditional operator assignment 'obj.meth op= expr'" do
702
+ it "is equivalent to 'obj.meth = obj.meth op expr'" do
703
+ @x = VariablesSpecs::OpAsgn.new
704
+ @x.a = 13
705
+ (@x.a += 5).should == 18
706
+ @x.a.should == 18
707
+
708
+ @x.a = 17
709
+ (@x.a -= 11).should == 6
710
+ @x.a.should == 6
711
+
712
+ @x.a = 2
713
+ (@x.a *= 5).should == 10
714
+ @x.a.should == 10
715
+
716
+ @x.a = 36
717
+ (@x.a /= 9).should == 4
718
+ @x.a.should == 4
719
+
720
+ @x.a = 23
721
+ (@x.a %= 5).should == 3
722
+ @x.a.should == 3
723
+ (@x.a %= 3).should == 0
724
+ @x.a.should == 0
725
+
726
+ @x.a = 2
727
+ (@x.a **= 3).should == 8
728
+ @x.a.should == 8
729
+
730
+ @x.a = 4
731
+ (@x.a |= 3).should == 7
732
+ @x.a.should == 7
733
+ (@x.a |= 4).should == 7
734
+ @x.a.should == 7
735
+
736
+ @x.a = 6
737
+ (@x.a &= 3).should == 2
738
+ @x.a.should == 2
739
+ (@x.a &= 4).should == 0
740
+ @x.a.should == 0
741
+
742
+ # XOR
743
+ @x.a = 2
744
+ (@x.a ^= 3).should == 1
745
+ @x.a.should == 1
746
+ (@x.a ^= 4).should == 5
747
+ @x.a.should == 5
748
+
749
+ @x.a = 17
750
+ (@x.a <<= 3).should == 136
751
+ @x.a.should == 136
752
+
753
+ @x.a = 5
754
+ (@x.a >>= 1).should == 2
755
+ @x.a.should == 2
756
+ end
757
+ end
758
+
759
+ describe "Conditional operator assignment 'obj.meth op= expr'" do
760
+ it "is equivalent to 'obj.meth op obj.meth = expr'" do
761
+ @x = VariablesSpecs::OpAsgn.new
762
+ @x.a = nil
763
+ (@x.a ||= 17).should == 17
764
+ @x.a.should == 17
765
+ (@x.a ||= 2).should == 17
766
+ @x.a.should == 17
767
+
768
+ @x.a = false
769
+ (@x.a &&= true).should == false
770
+ @x.a.should == false
771
+ (@x.a &&= false).should == false
772
+ @x.a.should == false
773
+ @x.a = true
774
+ (@x.a &&= true).should == true
775
+ @x.a.should == true
776
+ (@x.a &&= false).should == false
777
+ @x.a.should == false
778
+ end
779
+
780
+ it "may not assign at all, depending on the truthiness of lhs" do
781
+ m = mock("object")
782
+ m.should_receive(:foo).and_return(:truthy)
783
+ m.should_not_receive(:foo=)
784
+ # m.foo ||= 42
785
+
786
+ m.should_receive(:bar).and_return(false)
787
+ m.should_not_receive(:bar=)
788
+ # m.bar &&= 42
789
+ end
790
+
791
+ it "uses short-circuit arg evaluation" do
792
+ x = 8
793
+ y = VariablesSpecs::OpAsgn.new
794
+ (x ||= y.do_side_effect).should == 8
795
+ y.side_effect.should == nil
796
+
797
+ x = nil
798
+ (x &&= y.do_side_effect).should == nil
799
+ y.side_effect.should == nil
800
+
801
+ y.a = 5
802
+ (x ||= y.do_side_effect).should == 5
803
+ y.side_effect.should == true
804
+ end
805
+ end
806
+
807
+ describe "Operator assignment 'obj.meth op= expr'" do
808
+ it "evaluates lhs one time" do
809
+ x = VariablesSpecs::OpAsgn.new
810
+ x.a = 5
811
+ (x.do_more_side_effects.a += 5).should == 15
812
+ x.a.should == 15
813
+
814
+ x.a = 5
815
+ (x.do_more_side_effects.a -= 4).should == 6
816
+ x.a.should == 6
817
+
818
+ x.a = 2
819
+ (x.do_more_side_effects.a *= 5).should == 35
820
+ x.a.should == 35
821
+
822
+ x.a = 31
823
+ (x.do_more_side_effects.a /= 9).should == 4
824
+ x.a.should == 4
825
+
826
+ x.a = 18
827
+ (x.do_more_side_effects.a %= 5).should == 3
828
+ x.a.should == 3
829
+
830
+ x.a = 0
831
+ (x.do_more_side_effects.a **= 3).should == 125
832
+ x.a.should == 125
833
+
834
+ x.a = -1
835
+ (x.do_more_side_effects.a |= 3).should == 7
836
+ x.a.should == 7
837
+
838
+ x.a = 1
839
+ (x.do_more_side_effects.a &= 3).should == 2
840
+ x.a.should == 2
841
+
842
+ # XOR
843
+ x.a = -3
844
+ (x.do_more_side_effects.a ^= 3).should == 1
845
+ x.a.should == 1
846
+
847
+ x.a = 12
848
+ (x.do_more_side_effects.a <<= 3).should == 136
849
+ x.a.should == 136
850
+
851
+ x.a = 0
852
+ (x.do_more_side_effects.a >>= 1).should == 2
853
+ x.a.should == 2
854
+
855
+ x.a = nil
856
+ x.b = 0
857
+ (x.do_bool_side_effects.a ||= 17).should == 17
858
+ x.a.should == 17
859
+ x.b.should == 1
860
+
861
+ x.a = false
862
+ x.b = 0
863
+ (x.do_bool_side_effects.a &&= true).should == false
864
+ x.a.should == false
865
+ x.b.should == 1
866
+ (x.do_bool_side_effects.a &&= false).should == false
867
+ x.a.should == false
868
+ x.b.should == 2
869
+ x.a = true
870
+ x.b = 0
871
+ (x.do_bool_side_effects.a &&= true).should == true
872
+ x.a.should == true
873
+ x.b.should == 1
874
+ (x.do_bool_side_effects.a &&= false).should == false
875
+ x.a.should == false
876
+ x.b.should == 2
877
+ end
878
+ end
879
+
880
+ describe "Unconditional operator assignment 'obj[idx] op= expr'" do
881
+ it "is equivalent to 'obj[idx] = obj[idx] op expr'" do
882
+ # x = [2,13,7]
883
+ # (x[1] += 5).should == 18
884
+ # x.should == [2,18,7]
885
+
886
+ # x = [17,6]
887
+ # (x[0] -= 11).should == 6
888
+ # x.should == [6,6]
889
+
890
+ # x = [nil,2,28]
891
+ # (x[2] *= 2).should == 56
892
+ # x.should == [nil,2,56]
893
+
894
+ # x = [3,9,36]
895
+ # (x[2] /= x[1]).should == 4
896
+ # x.should == [3,9,4]
897
+
898
+ # x = [23,4]
899
+ # (x[0] %= 5).should == 3
900
+ # x.should == [3,4]
901
+ # (x[0] %= 3).should == 0
902
+ # x.should == [0,4]
903
+
904
+ # x = [1,2,3]
905
+ # (x[1] **= 3).should == 8
906
+ # x.should == [1,8,3]
907
+
908
+ # x = [4,5,nil]
909
+ # (x[0] |= 3).should == 7
910
+ # x.should == [7,5,nil]
911
+ # (x[0] |= 4).should == 7
912
+ # x.should == [7,5,nil]
913
+
914
+ # x = [3,6,9]
915
+ # (x[1] &= 3).should == 2
916
+ # x.should == [3,2,9]
917
+ # (x[1] &= 4).should == 0
918
+ # x.should == [3,0,9]
919
+
920
+ # # XOR
921
+ # x = [0,1,2]
922
+ # (x[2] ^= 3).should == 1
923
+ # x.should == [0,1,1]
924
+ # (x[2] ^= 4).should == 5
925
+ # x.should == [0,1,5]
926
+
927
+ # x = [17]
928
+ # (x[0] <<= 3).should == 136
929
+ # x.should == [136]
930
+
931
+ # x = [nil,5,8]
932
+ # (x[1] >>= 1).should == 2
933
+ # x.should == [nil,2,8]
934
+ end
935
+ end
936
+
937
+ describe "Conditional operator assignment 'obj[idx] op= expr'" do
938
+ it "is equivalent to 'obj[idx] op obj[idx] = expr'" do
939
+ # x = [1,nil,12]
940
+ # (x[1] ||= 17).should == 17
941
+ # x.should == [1,17,12]
942
+ # (x[1] ||= 2).should == 17
943
+ # x.should == [1,17,12]
944
+
945
+ # x = [true, false, false]
946
+ # (x[1] &&= true).should == false
947
+ # x.should == [true, false, false]
948
+ # (x[1] &&= false).should == false
949
+ # x.should == [true, false, false]
950
+ # (x[0] &&= true).should == true
951
+ # x.should == [true, false, false]
952
+ # (x[0] &&= false).should == false
953
+ # x.should == [false, false, false]
954
+ end
955
+
956
+ it "may not assign at all, depending on the truthiness of lhs" do
957
+ # m = mock("object")
958
+ # m.should_receive(:[]).and_return(:truthy)
959
+ # m.should_not_receive(:[]=)
960
+ # m[:foo] ||= 42
961
+
962
+ # m = mock("object")
963
+ # m.should_receive(:[]).and_return(false)
964
+ # m.should_not_receive(:[]=)
965
+ # m[:bar] &&= 42
966
+ end
967
+
968
+ it "uses short-circuit arg evaluation" do
969
+ # x = 8
970
+ # y = VariablesSpecs::OpAsgn.new
971
+ # (x ||= y.do_side_effect).should == 8
972
+ # y.side_effect.should == nil
973
+
974
+ # x = nil
975
+ # (x &&= y.do_side_effect).should == nil
976
+ # y.side_effect.should == nil
977
+
978
+ # y.a = 5
979
+ # (x ||= y.do_side_effect).should == 5
980
+ # y.side_effect.should == true
981
+ end
982
+ end
983
+
984
+ describe "Operator assignment 'obj[idx] op= expr'" do
985
+ class ArrayWithDefaultIndex < Array
986
+ def [](index=nil)
987
+ super(index || 0)
988
+ end
989
+
990
+ def []=(first_arg, second_arg=nil)
991
+ if second_arg
992
+ index = fist_arg
993
+ value = second_arg
994
+ else
995
+ index = 0
996
+ value = first_arg
997
+ end
998
+
999
+ super(index, value)
1000
+ end
1001
+ end
1002
+
1003
+ it "handles empty index (idx) arguments" do
1004
+ # array = ArrayWithDefaultIndex.new
1005
+ # array << 1
1006
+ # (array[] += 5).should == 6
1007
+ end
1008
+
1009
+ it "handles complex index (idx) arguments" do
1010
+ # x = [1,2,3,4]
1011
+ # (x[0,2] += [5]).should == [1,2,5]
1012
+ # x.should == [1,2,5,3,4]
1013
+ # (x[0,2] += [3,4]).should == [1,2,3,4]
1014
+ # x.should == [1,2,3,4,5,3,4]
1015
+
1016
+ # (x[2..3] += [8]).should == [3,4,8]
1017
+ # x.should == [1,2,3,4,8,5,3,4]
1018
+
1019
+ # y = VariablesSpecs::OpAsgn.new
1020
+ # y.a = 1
1021
+ # (x[y.do_side_effect] *= 2).should == 4
1022
+ # x.should == [1,4,3,4,8,5,3,4]
1023
+
1024
+ # h = {'key1' => 23, 'key2' => 'val'}
1025
+ # (h['key1'] %= 5).should == 3
1026
+ # (h['key2'] += 'ue').should == 'value'
1027
+ # h.should == {'key1' => 3, 'key2' => 'value'}
1028
+ end
1029
+
1030
+ it "handles empty splat index (idx) arguments" do
1031
+ # array = ArrayWithDefaultIndex.new
1032
+ # array << 5
1033
+ # splat_index = []
1034
+
1035
+ # (array[*splat_index] += 5).should == 10
1036
+ # array.should== [10]
1037
+ end
1038
+
1039
+ it "handles single splat index (idx) arguments" do
1040
+ # array = [1,2,3,4]
1041
+ # splat_index = [0]
1042
+
1043
+ # (array[*splat_index] += 5).should == 6
1044
+ # array.should == [6,2,3,4]
1045
+ end
1046
+
1047
+ it "handles multiple splat index (idx) arguments" do
1048
+ # array = [1,2,3,4]
1049
+ # splat_index = [0,2]
1050
+
1051
+ # (array[*splat_index] += [5]).should == [1,2,5]
1052
+ # array.should == [1,2,5,3,4]
1053
+ end
1054
+
1055
+ it "handles splat index (idx) arguments with normal arguments" do
1056
+ # array = [1,2,3,4]
1057
+ # splat_index = [2]
1058
+
1059
+ # (array[0, *splat_index] += [5]).should == [1,2,5]
1060
+ # array.should == [1,2,5,3,4]
1061
+ end
1062
+
1063
+ # This example fails on 1.9 because of bug #2050
1064
+ it "returns result of rhs not result of []=" do
1065
+ # a = VariablesSpecs::Hashalike.new
1066
+
1067
+ # (a[123] = 2).should == 2
1068
+ # (a[123] += 2).should == 125
1069
+ # (a[123] -= 2).should == 121
1070
+ # (a[123] *= 2).should == 246
1071
+ # # Guard against the Mathn library
1072
+ # # TODO: Make these specs not rely on specific behaviour / result values
1073
+ # # by using mocks.
1074
+ # conflicts_with :Prime do
1075
+ # (a[123] /= 2).should == 61
1076
+ # end
1077
+ # (a[123] %= 2).should == 1
1078
+ # (a[123] **= 2).should == 15129
1079
+ # (a[123] |= 2).should == 123
1080
+ # (a[123] &= 2).should == 2
1081
+ # (a[123] ^= 2).should == 121
1082
+ # (a[123] <<= 2).should == 492
1083
+ # (a[123] >>= 2).should == 30
1084
+ # (a[123] ||= 2).should == 123
1085
+ # (a[nil] ||= 2).should == 2
1086
+ # (a[123] &&= 2).should == 2
1087
+ # (a[nil] &&= 2).should == nil
1088
+ end
1089
+ end
1090
+
1091
+ describe "Single assignment" do
1092
+ it "Assignment does not modify the lhs, it reassigns its reference" do
1093
+ a = 'Foobar'
1094
+ b = a
1095
+ b = 'Bazquux'
1096
+ a.should == 'Foobar'
1097
+ b.should == 'Bazquux'
1098
+ end
1099
+
1100
+ it "Assignment does not copy the object being assigned, just creates a new reference to it" do
1101
+ a = []
1102
+ b = a
1103
+ b << 1
1104
+ a.should == [1]
1105
+ end
1106
+
1107
+ it "If rhs has multiple arguments, lhs becomes an Array of them" do
1108
+ a = 1, 2, 3
1109
+ a.should == [1, 2, 3]
1110
+
1111
+ a = 1, (), 3
1112
+ a.should == [1, nil, 3]
1113
+ end
1114
+ end
1115
+
1116
+ describe "Multiple assignment without grouping or splatting" do
1117
+ it "An equal number of arguments on lhs and rhs assigns positionally" do
1118
+ a, b, c, d = 1, 2, 3, 4
1119
+ a.should == 1
1120
+ b.should == 2
1121
+ c.should == 3
1122
+ d.should == 4
1123
+ end
1124
+
1125
+ it "If rhs has too few arguments, the missing ones on lhs are assigned nil" do
1126
+ a, b, c = 1, 2
1127
+ a.should == 1
1128
+ b.should == 2
1129
+ c.should == nil
1130
+ end
1131
+
1132
+ it "If rhs has too many arguments, the extra ones are silently not assigned anywhere" do
1133
+ a, b = 1, 2, 3
1134
+ a.should == 1
1135
+ b.should == 2
1136
+ end
1137
+
1138
+ it "The assignments are done in parallel so that lhs and rhs are independent of eachother without copying" do
1139
+ o_of_a, o_of_b = mock('a'), mock('b')
1140
+ a, b = o_of_a, o_of_b
1141
+ a, b = b, a
1142
+ a.should equal(o_of_b)
1143
+ b.should equal(o_of_a)
1144
+ end
1145
+ end
1146
+
1147
+ describe "Multiple assignments with splats" do
1148
+ ruby_version_is ""..."1.9" do
1149
+ it "* on the lhs has to be applied to the last parameter" do
1150
+ lambda { eval 'a, *b, c = 1, 2, 3' }.should raise_error(SyntaxError)
1151
+ end
1152
+ end
1153
+
1154
+ it "* on the lhs collects all parameters from its position onwards as an Array or an empty Array" do
1155
+ a, *b = 1, 2
1156
+ c, *d = 1
1157
+ e, *f = 1, 2, 3
1158
+ g, *h = 1, [2, 3]
1159
+ *i = 1, [2,3]
1160
+ *k = 1,2,3
1161
+
1162
+ a.should == 1
1163
+ b.should == [2]
1164
+ c.should == 1
1165
+ d.should == []
1166
+ e.should == 1
1167
+ f.should == [2, 3]
1168
+ g.should == 1
1169
+ h.should == [[2, 3]]
1170
+ i.should == [1, [2, 3]]
1171
+ k.should == [1,2,3]
1172
+ end
1173
+
1174
+ ruby_version_is ""..."1.9" do
1175
+ it "* on the LHS returns the Array on the RHS enclosed in an Array" do
1176
+ *j = [1,2,3]
1177
+ j.should == [[1,2,3]]
1178
+ end
1179
+ end
1180
+
1181
+ ruby_version_is "1.9" do
1182
+ it "* on the LHS returns the Array on the RHS without enclosing it in an Array" do
1183
+ *j = [1,2,3]
1184
+ j.should == [1,2,3]
1185
+ end
1186
+ end
1187
+ end
1188
+
1189
+ describe "Multiple assignments with grouping" do
1190
+ it "A group on the lhs is considered one position and treats its corresponding rhs position like an Array" do
1191
+ # a, (b, c), d = 1, 2, 3, 4
1192
+ # e, (f, g), h = 1, [2, 3, 4], 5
1193
+ # i, (j, k), l = 1, 2, 3
1194
+ a.should == 1
1195
+ b.should == 2
1196
+ c.should == nil
1197
+ d.should == 3
1198
+ e.should == 1
1199
+ f.should == 2
1200
+ g.should == 3
1201
+ h.should == 5
1202
+ i.should == 1
1203
+ j.should == 2
1204
+ k.should == nil
1205
+ l.should == 3
1206
+ end
1207
+
1208
+ it "supports multiple levels of nested groupings" do
1209
+ # a,(b,(c,d)) = 1,[2,[3,4]]
1210
+ a.should == 1
1211
+ b.should == 2
1212
+ c.should == 3
1213
+ d.should == 4
1214
+
1215
+ # a,(b,(c,d)) = [1,[2,[3,4]]]
1216
+ a.should == 1
1217
+ b.should == 2
1218
+ c.should == 3
1219
+ d.should == 4
1220
+
1221
+ x = [1,[2,[3,4]]]
1222
+ # a,(b,(c,d)) = x
1223
+ a.should == 1
1224
+ b.should == 2
1225
+ c.should == 3
1226
+ d.should == 4
1227
+ end
1228
+
1229
+ it "rhs cannot use parameter grouping, it is a syntax error" do
1230
+ lambda { eval '(a, b) = (1, 2)' }.should raise_error(SyntaxError)
1231
+ end
1232
+ end
1233
+
1234
+ # TODO: merge the following two describe blocks and partition the specs
1235
+ # into distinct cases.
1236
+ describe "Multiple assignment" do
1237
+ not_compliant_on :rubinius do
1238
+ it "has the proper return value" do
1239
+ # (a,b,*c = *[5,6,7,8,9,10]).should == [5,6,7,8,9,10]
1240
+ # (d,e = VariablesSpecs.reverse_foo(4,3)).should == [3,4]
1241
+ # (f,g,h = VariablesSpecs.reverse_foo(6,7)).should == [7,6]
1242
+ # (i,*j = *[5,6,7]).should == [5,6,7]
1243
+ # (k,*l = [5,6,7]).should == [5,6,7]
1244
+ a.should == 5
1245
+ b.should == 6
1246
+ c.should == [7,8,9,10]
1247
+ d.should == 3
1248
+ e.should == 4
1249
+ f.should == 7
1250
+ g.should == 6
1251
+ h.should == nil
1252
+ i.should == 5
1253
+ j.should == [6,7]
1254
+ k.should == 5
1255
+ l.should == [6,7]
1256
+ end
1257
+ end
1258
+
1259
+ # TODO: write Rubinius versions
1260
+ end
1261
+
1262
+ # For now, masgn is deliberately non-compliant with MRI wrt the return val from an masgn.
1263
+ # Rubinius returns true as the result of the assignment, but MRI returns an array
1264
+ # containing all the elements on the rhs. As this result is never used, the cost
1265
+ # of creating and then discarding this array is avoided
1266
+ describe "Multiple assignment, array-style" do
1267
+ not_compliant_on :rubinius do
1268
+ it "returns an array of all rhs values" do
1269
+ (a,b = 5,6,7).should == [5,6,7]
1270
+ a.should == 5
1271
+ b.should == 6
1272
+
1273
+ (c,d,*e = 99,8).should == [99,8]
1274
+ c.should == 99
1275
+ d.should == 8
1276
+ e.should == []
1277
+
1278
+ (f,g,h = 99,8).should == [99,8]
1279
+ f.should == 99
1280
+ g.should == 8
1281
+ h.should == nil
1282
+ end
1283
+ end
1284
+
1285
+ deviates_on :rubinius do
1286
+ it "returns true" do
1287
+ (a,b = 5,6,7).should == true
1288
+ a.should == 5
1289
+ b.should == 6
1290
+
1291
+ (c,d,*e = 99,8).should == true
1292
+ c.should == 99
1293
+ d.should == 8
1294
+ e.should == []
1295
+
1296
+ (f,g,h = 99,8).should == true
1297
+ f.should == 99
1298
+ g.should == 8
1299
+ h.should == nil
1300
+ end
1301
+ end
1302
+ end
1303
+
1304
+ describe "Scope of variables" do
1305
+ it "instance variables not overwritten by local variable in each block" do
1306
+
1307
+ class ScopeVariables
1308
+ attr_accessor :v
1309
+
1310
+ def initialize
1311
+ @v = ['a', 'b', 'c']
1312
+ end
1313
+
1314
+ def check_access
1315
+ v.should == ['a', 'b', 'c']
1316
+ self.v.should == ['a', 'b', 'c']
1317
+ end
1318
+
1319
+ def check_local_variable
1320
+ v = nil
1321
+ self.v.should == ['a', 'b', 'c']
1322
+ end
1323
+
1324
+ def check_each_block
1325
+ self.v.each { |v|
1326
+ # Don't actually do anything
1327
+ }
1328
+ self.v.should == ['a', 'b', 'c']
1329
+ v.should == ['a', 'b', 'c']
1330
+ self.v.object_id.should == v.object_id
1331
+ end
1332
+ end # Class ScopeVariables
1333
+
1334
+ instance = ScopeVariables.new()
1335
+ instance.check_access
1336
+ instance.check_local_variable
1337
+ instance.check_each_block
1338
+ end
1339
+ end
1340
+
1341
+ describe "A local variable in a #define_method scope" do
1342
+ ruby_bug '#1322', '1.8.7.228' do
1343
+ it "shares the lexical scope containing the call to #define_method" do
1344
+ # We need a new scope to reproduce this bug.
1345
+ handle = mock("handle for containing scope method")
1346
+
1347
+ def handle.produce_bug
1348
+ local = 1
1349
+
1350
+ klass = Class.new
1351
+ klass.send :define_method, :set_local do |arg|
1352
+ lambda { local = 2 }.call
1353
+ end
1354
+
1355
+ # We must call with at least one argument to reproduce the bug.
1356
+ klass.new.set_local(nil)
1357
+
1358
+ local
1359
+ end
1360
+
1361
+ handle.produce_bug.should == 2
1362
+ end
1363
+ end
1364
+ end
1365
+
1366
+ language_version __FILE__, "variables"