opal 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (796) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +8 -0
  5. data/CONTRIBUTING.md +46 -2
  6. data/Gemfile +17 -0
  7. data/README.md +13 -4
  8. data/Rakefile +22 -119
  9. data/bin/opal +11 -2
  10. data/bin/opal-repl +71 -0
  11. data/corelib/array.rb +554 -356
  12. data/corelib/basic_object.rb +22 -18
  13. data/corelib/boolean.rb +15 -6
  14. data/corelib/class.rb +12 -6
  15. data/corelib/comparable.rb +40 -9
  16. data/corelib/encoding.rb +164 -0
  17. data/corelib/enumerable.rb +532 -300
  18. data/corelib/enumerator.rb +31 -6
  19. data/corelib/error.rb +14 -3
  20. data/corelib/hash.rb +108 -97
  21. data/corelib/io.rb +30 -0
  22. data/corelib/kernel.rb +151 -82
  23. data/corelib/main.rb +7 -0
  24. data/corelib/match_data.rb +118 -0
  25. data/corelib/method.rb +58 -0
  26. data/corelib/module.rb +145 -77
  27. data/corelib/native.rb +144 -22
  28. data/corelib/nil_class.rb +2 -0
  29. data/corelib/numeric.rb +259 -61
  30. data/corelib/opal.rb +43 -28
  31. data/corelib/proc.rb +21 -9
  32. data/corelib/range.rb +42 -23
  33. data/corelib/regexp.rb +51 -9
  34. data/corelib/runtime.js +470 -129
  35. data/corelib/string.rb +170 -246
  36. data/corelib/struct.rb +13 -1
  37. data/corelib/time.rb +414 -43
  38. data/doc/compiler.md +42 -0
  39. data/doc/compiler_options.md +5 -0
  40. data/doc/examples/node_http_server.rb +49 -0
  41. data/doc/external_libraries.md +9 -0
  42. data/doc/generated_javascript.md +272 -0
  43. data/doc/home.md +17 -0
  44. data/doc/method_missing.md +58 -0
  45. data/doc/static_applications.md +60 -0
  46. data/doc/using_ruby_from_javascript.md +18 -0
  47. data/doc/using_sprockets.md +65 -0
  48. data/lib/opal.rb +18 -15
  49. data/lib/opal/builder.rb +26 -9
  50. data/lib/opal/cli.rb +143 -90
  51. data/lib/opal/cli_options.rb +19 -13
  52. data/lib/opal/compiler.rb +307 -0
  53. data/lib/opal/erb.rb +3 -3
  54. data/lib/opal/fragment.rb +34 -0
  55. data/lib/opal/nodes.rb +25 -0
  56. data/lib/opal/nodes/arglist.rb +56 -0
  57. data/lib/opal/nodes/array.rb +54 -0
  58. data/lib/opal/nodes/base.rb +150 -0
  59. data/lib/opal/nodes/base_scope.rb +11 -0
  60. data/lib/opal/nodes/call.rb +195 -0
  61. data/lib/opal/nodes/call_special.rb +153 -0
  62. data/lib/opal/nodes/case.rb +96 -0
  63. data/lib/opal/nodes/class.rb +43 -0
  64. data/lib/opal/nodes/constants.rb +91 -0
  65. data/lib/opal/nodes/def.rb +157 -0
  66. data/lib/opal/nodes/defined.rb +113 -0
  67. data/lib/opal/nodes/definitions.rb +182 -0
  68. data/lib/opal/nodes/hash.rb +67 -0
  69. data/lib/opal/nodes/helpers.rb +105 -0
  70. data/lib/opal/nodes/if.rb +60 -0
  71. data/lib/opal/nodes/iter.rb +118 -0
  72. data/lib/opal/nodes/literal.rb +193 -0
  73. data/lib/opal/nodes/logic.rb +211 -0
  74. data/lib/opal/nodes/masgn.rb +62 -0
  75. data/lib/opal/nodes/module.rb +46 -0
  76. data/lib/opal/nodes/rescue.rb +134 -0
  77. data/lib/opal/nodes/singleton_class.rb +26 -0
  78. data/lib/opal/nodes/super.rb +97 -0
  79. data/lib/opal/nodes/top.rb +63 -0
  80. data/lib/opal/nodes/variables.rb +155 -0
  81. data/lib/opal/nodes/while.rb +65 -0
  82. data/lib/opal/nodes/yield.rb +84 -0
  83. data/lib/opal/parser.rb +294 -2169
  84. data/lib/opal/parser/grammar.rb +5326 -0
  85. data/lib/opal/{grammar.y → parser/grammar.y} +180 -113
  86. data/lib/opal/parser/keywords.rb +64 -0
  87. data/lib/opal/{lexer.rb → parser/lexer.rb} +278 -327
  88. data/lib/opal/{lexer_scope.rb → parser/parser_scope.rb} +2 -5
  89. data/lib/opal/parser/sexp.rb +63 -0
  90. data/lib/opal/source_map.rb +6 -5
  91. data/lib/opal/target_scope.rb +15 -17
  92. data/lib/opal/version.rb +1 -1
  93. data/mri_spec/cli_spec.rb +67 -6
  94. data/opal.gemspec +4 -4
  95. data/spec/config.ru +2 -1
  96. data/spec/corelib/enumerable/all_break_spec.rb +5 -0
  97. data/spec/corelib/enumerable/any_break_spec.rb +5 -0
  98. data/spec/corelib/enumerable/collect_break_spec.rb +13 -0
  99. data/spec/corelib/enumerable/count_break_spec.rb +5 -0
  100. data/spec/corelib/enumerable/detect_break_spec.rb +5 -0
  101. data/spec/corelib/enumerable/drop_while_break_spec.rb +5 -0
  102. data/spec/corelib/enumerable/each_slice_break.rb +6 -0
  103. data/spec/corelib/enumerable/each_with_index_break_spec.rb +5 -0
  104. data/spec/corelib/enumerable/each_with_object_break_spec.rb +5 -0
  105. data/spec/corelib/enumerable/find_all_break_spec.rb +5 -0
  106. data/spec/corelib/enumerable/find_index_break_spec.rb +5 -0
  107. data/spec/corelib/enumerable/grep_break_spec.rb +5 -0
  108. data/spec/corelib/enumerable/max_break_spec.rb +5 -0
  109. data/spec/corelib/enumerable/max_by_break_spec.rb +5 -0
  110. data/spec/corelib/enumerable/min_break_spec.rb +5 -0
  111. data/spec/corelib/enumerable/min_by_break_spec.rb +5 -0
  112. data/spec/corelib/enumerable/none_break_spec.rb +5 -0
  113. data/spec/corelib/enumerable/one_break_spec.rb +5 -0
  114. data/spec/corelib/enumerable/reduce_break_spec.rb +5 -0
  115. data/spec/corelib/enumerable/take_while_break_spec.rb +5 -0
  116. data/spec/{rubyspec → corelib}/fixtures/class.rb +0 -0
  117. data/spec/{rubyspec → corelib}/fixtures/class_variables.rb +0 -0
  118. data/spec/{rubyspec → corelib}/fixtures/constants.rb +0 -0
  119. data/spec/{rubyspec/core → corelib}/kernel/Array_spec.rb +0 -0
  120. data/spec/{opal → corelib}/kernel/block_given_spec.rb +0 -0
  121. data/spec/{opal → corelib}/kernel/class_spec.rb +0 -0
  122. data/spec/{rubyspec/core → corelib}/kernel/define_singleton_method_spec.rb +0 -0
  123. data/spec/{rubyspec/core → corelib}/kernel/equal_value_spec.rb +0 -0
  124. data/spec/{opal → corelib}/kernel/extend_spec.rb +0 -0
  125. data/spec/{opal → corelib}/kernel/format_spec.rb +0 -0
  126. data/spec/{opal → corelib}/kernel/freeze_spec.rb +0 -0
  127. data/spec/{rubyspec/core → corelib}/kernel/instance_eval_spec.rb +0 -0
  128. data/spec/{opal → corelib}/kernel/instance_variable_defined_spec.rb +0 -0
  129. data/spec/{rubyspec/core → corelib}/kernel/instance_variable_get_spec.rb +0 -0
  130. data/spec/{rubyspec/core → corelib}/kernel/instance_variable_set_spec.rb +0 -0
  131. data/spec/{rubyspec/core → corelib}/kernel/loop_spec.rb +0 -0
  132. data/spec/{opal → corelib}/kernel/match_spec.rb +0 -0
  133. data/spec/{opal → corelib}/kernel/method_spec.rb +0 -0
  134. data/spec/{opal → corelib}/kernel/methods_spec.rb +0 -0
  135. data/spec/{opal → corelib}/kernel/nil_spec.rb +0 -0
  136. data/spec/{opal → corelib}/kernel/p_spec.rb +8 -6
  137. data/spec/{opal → corelib}/kernel/printf_spec.rb +4 -2
  138. data/spec/{opal → corelib}/kernel/proc_spec.rb +0 -0
  139. data/spec/{opal → corelib}/kernel/rand_spec.rb +0 -0
  140. data/spec/{opal → corelib}/kernel/respond_to_spec.rb +0 -0
  141. data/spec/{rubyspec/core → corelib}/kernel/send_spec.rb +0 -0
  142. data/spec/{opal → corelib}/kernel/sprintf_spec.rb +0 -0
  143. data/spec/corelib/kernel/warn_spec.rb +83 -0
  144. data/spec/{rubyspec → corelib}/language/block_spec.rb +17 -18
  145. data/spec/{rubyspec → corelib}/language/fixtures/array.rb +0 -0
  146. data/spec/{rubyspec → corelib}/language/fixtures/block.rb +0 -0
  147. data/spec/{rubyspec → corelib}/language/fixtures/break.rb +0 -0
  148. data/spec/{rubyspec → corelib}/language/fixtures/ensure.rb +0 -0
  149. data/spec/{rubyspec → corelib}/language/fixtures/literal_lambda.rb +0 -0
  150. data/spec/{rubyspec → corelib}/language/fixtures/metaclass.rb +0 -0
  151. data/spec/{rubyspec → corelib}/language/fixtures/module.rb +0 -0
  152. data/spec/{rubyspec → corelib}/language/fixtures/next.rb +0 -0
  153. data/spec/{rubyspec → corelib}/language/fixtures/return.rb +0 -0
  154. data/spec/{rubyspec → corelib}/language/fixtures/send.rb +1 -1
  155. data/spec/{rubyspec → corelib}/language/fixtures/send_1.9.rb +0 -0
  156. data/spec/{rubyspec → corelib}/language/fixtures/super.rb +0 -0
  157. data/spec/{rubyspec → corelib}/language/fixtures/variables.rb +0 -0
  158. data/spec/{rubyspec → corelib}/language/fixtures/yield.rb +0 -0
  159. data/spec/{rubyspec → corelib}/language/numbers_spec.rb +0 -2
  160. data/spec/{rubyspec → corelib}/language/predefined_spec.rb +0 -0
  161. data/spec/{rubyspec → corelib}/language/proc_spec.rb +0 -2
  162. data/spec/{rubyspec → corelib}/language/regexp_spec.rb +0 -0
  163. data/spec/{rubyspec → corelib}/language/send_spec.rb +6 -7
  164. data/spec/{rubyspec → corelib}/language/string_spec.rb +0 -0
  165. data/spec/{rubyspec → corelib}/language/symbol_spec.rb +0 -0
  166. data/spec/{rubyspec → corelib}/language/variables_spec.rb +1 -2
  167. data/spec/{rubyspec → corelib}/language/versions/array_1.9.rb +0 -0
  168. data/spec/{rubyspec → corelib}/language/versions/block_1.9.rb +0 -0
  169. data/spec/{rubyspec → corelib}/language/versions/break_1.9.rb +0 -0
  170. data/spec/{rubyspec → corelib}/language/versions/case_1.9.rb +0 -0
  171. data/spec/{rubyspec → corelib}/language/versions/hash_1.9.rb +0 -0
  172. data/spec/{rubyspec → corelib}/language/versions/literal_lambda_1.9.rb +0 -0
  173. data/spec/{rubyspec → corelib}/language/versions/not_1.9.rb +0 -0
  174. data/spec/{rubyspec → corelib}/language/versions/send_1.9.rb +0 -0
  175. data/spec/{rubyspec → corelib}/language/versions/symbol_1.9.rb +0 -0
  176. data/spec/{rubyspec → corelib}/language/versions/variables_1.9.rb +1 -1
  177. data/spec/corelib/module/alias_method_spec.rb +28 -0
  178. data/spec/{opal → corelib}/module/ancestors_spec.rb +0 -0
  179. data/spec/{opal → corelib}/module/append_features_spec.rb +0 -0
  180. data/spec/corelib/module/attr_accessor_spec.rb +26 -0
  181. data/spec/{rubyspec/core → corelib}/module/const_defined_spec.rb +1 -2
  182. data/spec/{rubyspec/core → corelib}/module/const_get_spec.rb +1 -2
  183. data/spec/{rubyspec/core → corelib}/module/const_missing_spec.rb +1 -2
  184. data/spec/{rubyspec/core → corelib}/module/const_set_spec.rb +1 -2
  185. data/spec/{opal → corelib}/module/constants_spec.rb +0 -0
  186. data/spec/{rubyspec/core → corelib}/module/fixtures/classes.rb +0 -0
  187. data/spec/{rubyspec/core → corelib}/module/method_defined_spec.rb +0 -1
  188. data/spec/{opal → corelib}/module/module_function_spec.rb +0 -2
  189. data/spec/corelib/module/name_spec.rb +52 -0
  190. data/spec/{rubyspec/core → corelib}/module/public_method_defined_spec.rb +0 -1
  191. data/spec/{rubyspec/core → corelib}/module/remove_const_spec.rb +0 -1
  192. data/spec/{rubyspec/core → corelib}/module/undef_method_spec.rb +0 -1
  193. data/spec/{opal → corelib}/native/alias_native_spec.rb +7 -0
  194. data/spec/{opal → corelib}/native/each_spec.rb +2 -5
  195. data/spec/{opal → corelib}/native/element_reference_spec.rb +0 -0
  196. data/spec/{rubyspec/core/hash/to_native_spec.rb → corelib/native/ext_spec.rb} +0 -0
  197. data/spec/corelib/native/initialize_spec.rb +17 -0
  198. data/spec/{opal → corelib}/native/method_missing_spec.rb +0 -0
  199. data/spec/corelib/native/new_spec.rb +6 -0
  200. data/spec/{rubyspec/core → corelib}/numeric/abs_spec.rb +0 -0
  201. data/spec/{rubyspec/core → corelib}/numeric/bit_and_spec.rb +0 -0
  202. data/spec/{rubyspec/core → corelib}/numeric/bit_or_spec.rb +0 -0
  203. data/spec/{rubyspec/core → corelib}/numeric/bit_xor_spec.rb +0 -0
  204. data/spec/{rubyspec/core → corelib}/numeric/ceil_spec.rb +0 -0
  205. data/spec/{rubyspec/core → corelib}/numeric/chr_spec.rb +0 -0
  206. data/spec/{rubyspec/core → corelib}/numeric/comparison_spec.rb +0 -0
  207. data/spec/{rubyspec/core → corelib}/numeric/complement_spec.rb +0 -0
  208. data/spec/{rubyspec/core → corelib}/numeric/divide_spec.rb +0 -0
  209. data/spec/{rubyspec/core → corelib}/numeric/downto_spec.rb +0 -0
  210. data/spec/{rubyspec/core → corelib}/numeric/eql_spec.rb +0 -0
  211. data/spec/{rubyspec/core → corelib}/numeric/equal_value_spec.rb +0 -0
  212. data/spec/{rubyspec/core → corelib}/numeric/even_spec.rb +0 -0
  213. data/spec/{rubyspec/core → corelib}/numeric/exponent_spec.rb +0 -0
  214. data/spec/{rubyspec/core → corelib}/numeric/floor_spec.rb +0 -0
  215. data/spec/{rubyspec/core → corelib}/numeric/gt_spec.rb +0 -0
  216. data/spec/{rubyspec/core → corelib}/numeric/gte_spec.rb +0 -0
  217. data/spec/{rubyspec/core → corelib}/numeric/integer_spec.rb +0 -0
  218. data/spec/{rubyspec/core → corelib}/numeric/left_shift_spec.rb +0 -0
  219. data/spec/{rubyspec/core → corelib}/numeric/lt_spec.rb +0 -0
  220. data/spec/{rubyspec/core → corelib}/numeric/lte_spec.rb +0 -0
  221. data/spec/{rubyspec/core → corelib}/numeric/magnitude_spec.rb +0 -0
  222. data/spec/{rubyspec/core → corelib}/numeric/minus_spec.rb +0 -0
  223. data/spec/{rubyspec/core → corelib}/numeric/modulo_spec.rb +0 -0
  224. data/spec/{rubyspec/core → corelib}/numeric/multiply_spec.rb +0 -0
  225. data/spec/{rubyspec/core → corelib}/numeric/next_spec.rb +0 -0
  226. data/spec/{rubyspec/core → corelib}/numeric/odd_spec.rb +0 -0
  227. data/spec/{rubyspec/core → corelib}/numeric/ord_spec.rb +0 -0
  228. data/spec/{rubyspec/core → corelib}/numeric/plus_spec.rb +0 -0
  229. data/spec/{rubyspec/core → corelib}/numeric/pred_spec.rb +0 -0
  230. data/spec/{rubyspec/core → corelib}/numeric/right_shift_spec.rb +0 -0
  231. data/spec/{rubyspec/core → corelib}/numeric/step_spec.rb +0 -3
  232. data/spec/{rubyspec/core → corelib}/numeric/succ_spec.rb +0 -0
  233. data/spec/{rubyspec/core → corelib}/numeric/times_spec.rb +0 -0
  234. data/spec/{rubyspec/core → corelib}/numeric/to_f_spec.rb +0 -0
  235. data/spec/{rubyspec/core → corelib}/numeric/to_i_spec.rb +0 -0
  236. data/spec/{rubyspec/core → corelib}/numeric/to_json_spec.rb +0 -0
  237. data/spec/corelib/numeric/to_s_spec.rb +26 -0
  238. data/spec/{rubyspec/core → corelib}/numeric/uminus_spec.rb +0 -0
  239. data/spec/{rubyspec/core → corelib}/numeric/upto_spec.rb +0 -0
  240. data/spec/{rubyspec/core → corelib}/numeric/zero_spec.rb +0 -0
  241. data/spec/{rubyspec/core → corelib}/proc/call_spec.rb +0 -0
  242. data/spec/{rubyspec/core → corelib}/proc/element_reference_spec.rb +0 -0
  243. data/spec/{opal → corelib}/proc/proc_tricks_spec.rb +0 -0
  244. data/spec/corelib/runtime/begin_spec.rb +39 -0
  245. data/spec/{opal → corelib}/runtime/block_send_spec.rb +0 -0
  246. data/spec/{opal/language → corelib/runtime}/block_spec.rb +10 -0
  247. data/spec/corelib/runtime/bridged_classes_spec.rb +64 -0
  248. data/spec/{opal → corelib/runtime}/constants_spec.rb +0 -0
  249. data/spec/{opal → corelib}/runtime/eval_spec.rb +0 -0
  250. data/spec/{opal → corelib}/runtime/main_methods_spec.rb +0 -0
  251. data/spec/{opal → corelib/runtime}/method_missing_spec.rb +0 -0
  252. data/spec/corelib/runtime/method_spec.rb +31 -0
  253. data/spec/corelib/runtime/paren_spec.rb +14 -0
  254. data/spec/{opal/language → corelib/runtime}/rescue_spec.rb +11 -0
  255. data/spec/{opal/language → corelib/runtime}/return_spec.rb +0 -0
  256. data/spec/{opal → corelib}/runtime/send_spec.rb +0 -0
  257. data/spec/{opal/language → corelib/runtime}/singleton_class_spec.rb +0 -0
  258. data/spec/{opal/language → corelib/runtime}/super_spec.rb +113 -0
  259. data/spec/{opal/language → corelib/runtime}/variables_spec.rb +0 -0
  260. data/spec/{opal → corelib}/source_map_spec.rb +3 -3
  261. data/spec/{rubyspec/core → corelib}/string/chop_spec.rb +0 -0
  262. data/spec/{rubyspec/core → corelib}/string/chr_spec.rb +0 -0
  263. data/spec/{rubyspec/core → corelib}/string/clone_spec.rb +0 -0
  264. data/spec/{rubyspec/core → corelib}/string/comparison_spec.rb +0 -0
  265. data/spec/{rubyspec/core → corelib}/string/dup_spec.rb +0 -0
  266. data/spec/{rubyspec/core → corelib}/string/element_reference_spec.rb +0 -1
  267. data/spec/{rubyspec/core → corelib}/string/fixtures/classes.rb +0 -0
  268. data/spec/{rubyspec/core → corelib}/string/format_spec.rb +0 -0
  269. data/spec/{opal → corelib}/string/freeze_spec.rb +0 -0
  270. data/spec/{rubyspec/core → corelib}/string/gsub_spec.rb +0 -0
  271. data/spec/{rubyspec/core → corelib}/string/lines_spec.rb +0 -0
  272. data/spec/{rubyspec/core → corelib}/string/ljust_spec.rb +0 -1
  273. data/spec/{rubyspec/core → corelib}/string/lstrip_spec.rb +0 -0
  274. data/spec/{rubyspec/core → corelib}/string/match_spec.rb +0 -0
  275. data/spec/{rubyspec/core → corelib}/string/next_spec.rb +0 -0
  276. data/spec/{rubyspec/core → corelib}/string/ord_spec.rb +0 -0
  277. data/spec/{rubyspec/core → corelib}/string/partition_spec.rb +0 -0
  278. data/spec/{rubyspec/core → corelib}/string/rindex_spec.rb +0 -0
  279. data/spec/{rubyspec/core → corelib}/string/rjust_spec.rb +0 -1
  280. data/spec/{rubyspec/core → corelib}/string/rstrip_spec.rb +0 -0
  281. data/spec/{rubyspec/core → corelib}/string/scan_spec.rb +0 -0
  282. data/spec/{rubyspec/core → corelib}/string/slice_spec.rb +1 -2
  283. data/spec/{rubyspec/core → corelib}/string/split_spec.rb +0 -0
  284. data/spec/{rubyspec/core → corelib}/string/strip_spec.rb +0 -0
  285. data/spec/{rubyspec/core → corelib}/string/sub_spec.rb +0 -0
  286. data/spec/{rubyspec/core → corelib}/string/succ_spec.rb +0 -0
  287. data/spec/{rubyspec/core → corelib}/string/sum_spec.rb +0 -0
  288. data/spec/{rubyspec/core → corelib}/string/to_f_spec.rb +0 -0
  289. data/spec/{rubyspec/core → corelib}/string/to_i_spec.rb +0 -0
  290. data/spec/{rubyspec/core → corelib}/string/tr_s_spec.rb +0 -0
  291. data/spec/{rubyspec/core → corelib}/string/tr_spec.rb +0 -0
  292. data/spec/filters/bugs/array.rb +236 -4
  293. data/spec/filters/bugs/basic_object.rb +4 -0
  294. data/spec/filters/bugs/class.rb +4 -0
  295. data/spec/filters/bugs/enumerable.rb +58 -0
  296. data/spec/filters/bugs/enumerator.rb +6 -0
  297. data/spec/filters/bugs/hash.rb +146 -0
  298. data/spec/filters/bugs/kernel.rb +10 -0
  299. data/spec/filters/bugs/language.rb +366 -0
  300. data/spec/filters/bugs/module.rb +14 -0
  301. data/spec/filters/bugs/regexp.rb +7 -0
  302. data/spec/filters/bugs/set.rb +7 -0
  303. data/spec/filters/bugs/{singleton/instance.rb → singleton.rb} +3 -1
  304. data/spec/filters/bugs/string.rb +37 -0
  305. data/spec/filters/bugs/stringscanner.rb +18 -0
  306. data/spec/filters/bugs/struct.rb +11 -0
  307. data/spec/filters/bugs/symbol.rb +5 -0
  308. data/spec/filters/bugs/time.rb +28 -0
  309. data/spec/filters/bugs/unknown.rb +11 -0
  310. data/spec/filters/unsupported/array_subclasses.rb +32 -0
  311. data/spec/filters/unsupported/encoding.rb +14 -0
  312. data/spec/filters/unsupported/float.rb +4 -0
  313. data/spec/filters/unsupported/frozen.rb +57 -0
  314. data/spec/filters/unsupported/hash_compare_by_identity.rb +16 -0
  315. data/spec/filters/unsupported/immutable_strings.rb +6 -0
  316. data/spec/filters/unsupported/mutable_strings.rb +49 -0
  317. data/spec/filters/unsupported/private_methods.rb +26 -0
  318. data/spec/filters/{mspec → unsupported}/ruby_exe.rb +0 -0
  319. data/spec/filters/unsupported/string_subclasses.rb +8 -0
  320. data/spec/filters/unsupported/tainted.rb +46 -0
  321. data/spec/filters/unsupported/time.rb +21 -0
  322. data/spec/filters/unsupported/trusted.rb +26 -0
  323. data/spec/opal/{parser → compiler}/irb_spec.rb +9 -9
  324. data/spec/{parser → opal/parser}/alias_spec.rb +0 -0
  325. data/spec/{parser → opal/parser}/and_spec.rb +0 -0
  326. data/spec/{parser → opal/parser}/array_spec.rb +0 -0
  327. data/spec/{parser → opal/parser}/attrasgn_spec.rb +0 -0
  328. data/spec/{parser → opal/parser}/begin_spec.rb +0 -0
  329. data/spec/{parser → opal/parser}/block_spec.rb +0 -0
  330. data/spec/{parser → opal/parser}/break_spec.rb +0 -0
  331. data/spec/{parser → opal/parser}/call_spec.rb +33 -8
  332. data/spec/{parser → opal/parser}/class_spec.rb +0 -0
  333. data/spec/{parser → opal/parser}/const_spec.rb +0 -0
  334. data/spec/{parser → opal/parser}/cvar_spec.rb +0 -0
  335. data/spec/{parser → opal/parser}/def_spec.rb +17 -17
  336. data/spec/{parser → opal/parser}/false_spec.rb +0 -0
  337. data/spec/{parser → opal/parser}/file_spec.rb +0 -0
  338. data/spec/{parser → opal/parser}/gvar_spec.rb +0 -0
  339. data/spec/{parser → opal/parser}/hash_spec.rb +0 -0
  340. data/spec/opal/parser/heredoc_spec.rb +30 -0
  341. data/spec/{parser → opal/parser}/iasgn_spec.rb +0 -0
  342. data/spec/{parser → opal/parser}/if_spec.rb +0 -0
  343. data/spec/{parser → opal/parser}/int_spec.rb +0 -0
  344. data/spec/opal/parser/iter_spec.rb +59 -0
  345. data/spec/{parser → opal/parser}/ivar_spec.rb +0 -0
  346. data/spec/opal/parser/lambda_spec.rb +64 -0
  347. data/spec/{parser → opal/parser}/lasgn_spec.rb +0 -0
  348. data/spec/{parser → opal/parser}/line_spec.rb +0 -0
  349. data/spec/{parser → opal/parser}/lvar_spec.rb +6 -6
  350. data/spec/{parser → opal/parser}/masgn_spec.rb +0 -0
  351. data/spec/{parser → opal/parser}/module_spec.rb +0 -0
  352. data/spec/{parser → opal/parser}/nil_spec.rb +0 -0
  353. data/spec/{parser → opal/parser}/not_spec.rb +0 -0
  354. data/spec/{parser → opal/parser}/nth_ref_spec.rb +0 -0
  355. data/spec/{parser → opal/parser}/op_asgn1_spec.rb +0 -0
  356. data/spec/{parser → opal/parser}/op_asgn2_spec.rb +0 -0
  357. data/spec/{parser → opal/parser}/or_spec.rb +0 -0
  358. data/spec/{parser → opal/parser}/parse_spec.rb +17 -17
  359. data/spec/{parser → opal/parser}/regexp_spec.rb +0 -0
  360. data/spec/{parser → opal/parser}/return_spec.rb +0 -0
  361. data/spec/{parser → opal/parser}/sclass_spec.rb +0 -0
  362. data/spec/{parser → opal/parser}/self_spec.rb +0 -0
  363. data/spec/{parser → opal/parser}/str_spec.rb +1 -12
  364. data/spec/{parser → opal/parser}/string_spec.rb +0 -0
  365. data/spec/opal/parser/super_spec.rb +20 -0
  366. data/spec/{parser → opal/parser}/true_spec.rb +0 -0
  367. data/spec/{parser → opal/parser}/undef_spec.rb +0 -0
  368. data/spec/{parser → opal/parser}/unless_spec.rb +0 -0
  369. data/spec/{parser → opal/parser}/while_spec.rb +0 -0
  370. data/spec/{parser → opal/parser}/xstr_spec.rb +2 -2
  371. data/spec/{parser → opal/parser}/yield_spec.rb +0 -0
  372. data/spec/ospec/main.rb.erb +1 -13
  373. data/spec/ospec/mspec_fixes.rb +87 -0
  374. data/spec/ospec/runner.rb +188 -0
  375. data/spec/rubyspecs +351 -0
  376. data/spec/spec_helper.rb +8 -198
  377. data/spec/{opal → stdlib}/erb/erb_spec.rb +3 -3
  378. data/spec/{opal → stdlib}/erb/inline_block.opalerb +0 -0
  379. data/spec/{opal → stdlib}/erb/quoted.opalerb +0 -0
  380. data/spec/{opal → stdlib}/erb/simple.opalerb +0 -0
  381. data/spec/stdlib/json/ext_spec.rb +48 -0
  382. data/spec/{opal → stdlib}/json/parse_spec.rb +0 -0
  383. data/spec/stdlib/template/paths_spec.rb +10 -0
  384. data/stdlib/delegate.rb +29 -0
  385. data/stdlib/dir.rb +5 -0
  386. data/stdlib/file.rb +7 -0
  387. data/stdlib/json.rb +82 -27
  388. data/stdlib/opal-parser.rb +46 -0
  389. data/stdlib/opal-source-maps.js.erb +1 -1
  390. data/stdlib/pathname.rb +31 -0
  391. data/stdlib/{racc.rb → racc/parser.rb} +0 -0
  392. data/stdlib/securerandom.rb +12 -0
  393. data/stdlib/set.rb +89 -0
  394. data/stdlib/stringio.rb +12 -4
  395. data/stdlib/strscan.rb +19 -0
  396. data/stdlib/template.rb +4 -0
  397. data/stdlib/thread.rb +20 -0
  398. data/tasks/mspec.rake +147 -0
  399. metadata +650 -1266
  400. data/lib/opal/core_ext.rb +0 -5
  401. data/lib/opal/grammar.rb +0 -5137
  402. data/lib/opal/grammar_helpers.rb +0 -364
  403. data/lib/opal/require_parser.rb +0 -77
  404. data/spec/filters/bugs/alias.rb +0 -6
  405. data/spec/filters/bugs/ancestors.rb +0 -4
  406. data/spec/filters/bugs/array/combination.rb +0 -11
  407. data/spec/filters/bugs/array/count.rb +0 -3
  408. data/spec/filters/bugs/array/delete_if.rb +0 -3
  409. data/spec/filters/bugs/array/drop.rb +0 -3
  410. data/spec/filters/bugs/array/drop_while.rb +0 -5
  411. data/spec/filters/bugs/array/eql.rb +0 -3
  412. data/spec/filters/bugs/array/flatten.rb +0 -9
  413. data/spec/filters/bugs/array/minus.rb +0 -5
  414. data/spec/filters/bugs/array/multipliy.rb +0 -9
  415. data/spec/filters/bugs/array/new.rb +0 -3
  416. data/spec/filters/bugs/array/pop.rb +0 -6
  417. data/spec/filters/bugs/array/rassoc.rb +0 -4
  418. data/spec/filters/bugs/array/rindex.rb +0 -6
  419. data/spec/filters/bugs/array/select.rb +0 -3
  420. data/spec/filters/bugs/array/shift.rb +0 -7
  421. data/spec/filters/bugs/array/shuffle.rb +0 -11
  422. data/spec/filters/bugs/array/slice.rb +0 -7
  423. data/spec/filters/bugs/array/take.rb +0 -3
  424. data/spec/filters/bugs/array/to_a.rb +0 -3
  425. data/spec/filters/bugs/array/try_convert.rb +0 -7
  426. data/spec/filters/bugs/array/uniq.rb +0 -10
  427. data/spec/filters/bugs/array/zip.rb +0 -4
  428. data/spec/filters/bugs/array_delete.rb +0 -4
  429. data/spec/filters/bugs/array_fetch.rb +0 -3
  430. data/spec/filters/bugs/array_first.rb +0 -3
  431. data/spec/filters/bugs/array_flatten.rb +0 -14
  432. data/spec/filters/bugs/array_intersection.rb +0 -5
  433. data/spec/filters/bugs/array_join.rb +0 -6
  434. data/spec/filters/bugs/break.rb +0 -10
  435. data/spec/filters/bugs/case.rb +0 -4
  436. data/spec/filters/bugs/coerce_integer.rb +0 -9
  437. data/spec/filters/bugs/enumerable_sort_by.rb +0 -3
  438. data/spec/filters/bugs/kernel/instance_variables.rb +0 -3
  439. data/spec/filters/bugs/kernel/rand.rb +0 -4
  440. data/spec/filters/bugs/language/array.rb +0 -3
  441. data/spec/filters/bugs/language/block.rb +0 -6
  442. data/spec/filters/bugs/language/break.rb +0 -3
  443. data/spec/filters/bugs/language/class.rb +0 -12
  444. data/spec/filters/bugs/language/class_variables.rb +0 -12
  445. data/spec/filters/bugs/language/def.rb +0 -27
  446. data/spec/filters/bugs/language/defined.rb +0 -3
  447. data/spec/filters/bugs/language/ensure.rb +0 -4
  448. data/spec/filters/bugs/language/execution.rb +0 -4
  449. data/spec/filters/bugs/language/for.rb +0 -18
  450. data/spec/filters/bugs/language/if.rb +0 -13
  451. data/spec/filters/bugs/language/loop.rb +0 -4
  452. data/spec/filters/bugs/language/metaclass.rb +0 -14
  453. data/spec/filters/bugs/language/module.rb +0 -6
  454. data/spec/filters/bugs/language/next.rb +0 -3
  455. data/spec/filters/bugs/language/or.rb +0 -3
  456. data/spec/filters/bugs/language/order.rb +0 -4
  457. data/spec/filters/bugs/language/precedence.rb +0 -10
  458. data/spec/filters/bugs/language/proc.rb +0 -24
  459. data/spec/filters/bugs/language/redo.rb +0 -5
  460. data/spec/filters/bugs/language/rescue.rb +0 -9
  461. data/spec/filters/bugs/language/retry.rb +0 -5
  462. data/spec/filters/bugs/language/send.rb +0 -10
  463. data/spec/filters/bugs/language/super.rb +0 -9
  464. data/spec/filters/bugs/language/until.rb +0 -8
  465. data/spec/filters/bugs/language/variables.rb +0 -37
  466. data/spec/filters/bugs/language/while.rb +0 -6
  467. data/spec/filters/bugs/language/yield.rb +0 -5
  468. data/spec/filters/bugs/module/class_variables.rb +0 -6
  469. data/spec/filters/bugs/module/method_defined.rb +0 -6
  470. data/spec/filters/bugs/public_methods.rb +0 -4
  471. data/spec/filters/bugs/return.rb +0 -7
  472. data/spec/filters/bugs/source_map.rb +0 -3
  473. data/spec/filters/bugs/string/center.rb +0 -4
  474. data/spec/filters/bugs/string/lines.rb +0 -3
  475. data/spec/filters/mspec/mocks.rb +0 -3
  476. data/spec/filters/mspec/should_receive.rb +0 -5
  477. data/spec/filters/parser/block_args.rb +0 -51
  478. data/spec/mspec/guards/block_device.rb +0 -0
  479. data/spec/mspec/guards/endian.rb +0 -0
  480. data/spec/mspec/helpers/environment.rb +0 -0
  481. data/spec/mspec/helpers/language_version.rb +0 -0
  482. data/spec/mspec/helpers/tmp.rb +0 -0
  483. data/spec/opal/array/element_reference_spec.rb +0 -206
  484. data/spec/opal/array/equal_value_spec.rb +0 -19
  485. data/spec/opal/array/fill_spec.rb +0 -26
  486. data/spec/opal/array/reduce_spec.rb +0 -31
  487. data/spec/opal/array/to_json_spec.rb +0 -9
  488. data/spec/opal/basic_object/send_spec.rb +0 -28
  489. data/spec/opal/boolean/singleton_class_spec.rb +0 -9
  490. data/spec/opal/boolean/to_json_spec.rb +0 -11
  491. data/spec/opal/browser/local_storage_spec.rb +0 -55
  492. data/spec/opal/class/constants_spec.rb +0 -7
  493. data/spec/opal/class/extend_spec.rb +0 -47
  494. data/spec/opal/class/instance_methods_spec.rb +0 -13
  495. data/spec/opal/class/last_value_spec.rb +0 -67
  496. data/spec/opal/class/proc_methods_spec.rb +0 -23
  497. data/spec/opal/class/singleton_methods_spec.rb +0 -41
  498. data/spec/opal/hash/allocate_spec.rb +0 -16
  499. data/spec/opal/hash/new_spec.rb +0 -10
  500. data/spec/opal/hash/to_s_spec.rb +0 -9
  501. data/spec/opal/kernel/to_json_spec.rb +0 -7
  502. data/spec/opal/module/alias_method_spec.rb +0 -10
  503. data/spec/opal/module/attr_accessor_spec.rb +0 -8
  504. data/spec/opal/native/new_spec.rb +0 -19
  505. data/spec/opal/native/nil_spec.rb +0 -14
  506. data/spec/opal/nil/to_json_spec.rb +0 -7
  507. data/spec/opal/numeric/equal_spec.rb +0 -9
  508. data/spec/opal/runtime2/call_spec.rb +0 -16
  509. data/spec/opal/runtime2/class_hierarchy_spec.rb +0 -21
  510. data/spec/opal/runtime2/defined_spec.rb +0 -11
  511. data/spec/opal/runtime2/super_spec.rb +0 -16
  512. data/spec/opal/string/to_json_spec.rb +0 -8
  513. data/spec/parser/iter_spec.rb +0 -59
  514. data/spec/parser/lambda_spec.rb +0 -64
  515. data/spec/parser/parser_spec.rb +0 -41
  516. data/spec/parser/strscan/check_spec.rb +0 -13
  517. data/spec/parser/strscan/get_byte_spec.rb +0 -29
  518. data/spec/parser/strscan/scan_spec.rb +0 -33
  519. data/spec/parser/strscan/skip_spec.rb +0 -40
  520. data/spec/parser/super_spec.rb +0 -20
  521. data/spec/rubyspec/core/array/allocate_spec.rb +0 -19
  522. data/spec/rubyspec/core/array/append_spec.rb +0 -43
  523. data/spec/rubyspec/core/array/array_spec.rb +0 -7
  524. data/spec/rubyspec/core/array/assoc_spec.rb +0 -40
  525. data/spec/rubyspec/core/array/at_spec.rb +0 -56
  526. data/spec/rubyspec/core/array/choice_spec.rb +0 -20
  527. data/spec/rubyspec/core/array/clear_spec.rb +0 -61
  528. data/spec/rubyspec/core/array/clone_spec.rb +0 -15
  529. data/spec/rubyspec/core/array/collect_spec.rb +0 -53
  530. data/spec/rubyspec/core/array/combination_spec.rb +0 -55
  531. data/spec/rubyspec/core/array/compact_spec.rb +0 -111
  532. data/spec/rubyspec/core/array/comparison_spec.rb +0 -16
  533. data/spec/rubyspec/core/array/concat_spec.rb +0 -19
  534. data/spec/rubyspec/core/array/constructor_spec.rb +0 -24
  535. data/spec/rubyspec/core/array/count_spec.rb +0 -17
  536. data/spec/rubyspec/core/array/delete_at_spec.rb +0 -71
  537. data/spec/rubyspec/core/array/delete_if_spec.rb +0 -71
  538. data/spec/rubyspec/core/array/delete_spec.rb +0 -104
  539. data/spec/rubyspec/core/array/drop_spec.rb +0 -29
  540. data/spec/rubyspec/core/array/drop_while_spec.rb +0 -17
  541. data/spec/rubyspec/core/array/dup_spec.rb +0 -15
  542. data/spec/rubyspec/core/array/each_index_spec.rb +0 -40
  543. data/spec/rubyspec/core/array/each_spec.rb +0 -30
  544. data/spec/rubyspec/core/array/empty_spec.rb +0 -10
  545. data/spec/rubyspec/core/array/eql_spec.rb +0 -14
  546. data/spec/rubyspec/core/array/fetch_spec.rb +0 -52
  547. data/spec/rubyspec/core/array/find_index_spec.rb +0 -8
  548. data/spec/rubyspec/core/array/first_spec.rb +0 -89
  549. data/spec/rubyspec/core/array/fixtures/classes.rb +0 -538
  550. data/spec/rubyspec/core/array/flatten_spec.rb +0 -232
  551. data/spec/rubyspec/core/array/frozen_spec.rb +0 -32
  552. data/spec/rubyspec/core/array/include_spec.rb +0 -33
  553. data/spec/rubyspec/core/array/index_spec.rb +0 -6
  554. data/spec/rubyspec/core/array/insert_spec.rb +0 -90
  555. data/spec/rubyspec/core/array/inspect_spec.rb +0 -7
  556. data/spec/rubyspec/core/array/intersection_spec.rb +0 -78
  557. data/spec/rubyspec/core/array/join_spec.rb +0 -34
  558. data/spec/rubyspec/core/array/keep_if_spec.rb +0 -12
  559. data/spec/rubyspec/core/array/last_spec.rb +0 -88
  560. data/spec/rubyspec/core/array/length_spec.rb +0 -7
  561. data/spec/rubyspec/core/array/map_spec.rb +0 -11
  562. data/spec/rubyspec/core/array/max_spec.rb +0 -32
  563. data/spec/rubyspec/core/array/min_spec.rb +0 -32
  564. data/spec/rubyspec/core/array/minus_spec.rb +0 -89
  565. data/spec/rubyspec/core/array/multiply_spec.rb +0 -143
  566. data/spec/rubyspec/core/array/new_spec.rb +0 -137
  567. data/spec/rubyspec/core/array/ntimes_spec.rb +0 -26
  568. data/spec/rubyspec/core/array/plus_spec.rb +0 -64
  569. data/spec/rubyspec/core/array/pop_spec.rb +0 -196
  570. data/spec/rubyspec/core/array/push_spec.rb +0 -44
  571. data/spec/rubyspec/core/array/rassoc_spec.rb +0 -38
  572. data/spec/rubyspec/core/array/reject_spec.rb +0 -134
  573. data/spec/rubyspec/core/array/replace_spec.rb +0 -7
  574. data/spec/rubyspec/core/array/reverse_each_spec.rb +0 -37
  575. data/spec/rubyspec/core/array/reverse_spec.rb +0 -58
  576. data/spec/rubyspec/core/array/rindex_spec.rb +0 -71
  577. data/spec/rubyspec/core/array/select_spec.rb +0 -36
  578. data/spec/rubyspec/core/array/shared/collect.rb +0 -7
  579. data/spec/rubyspec/core/array/shared/enumeratorize.rb +0 -12
  580. data/spec/rubyspec/core/array/shared/eql.rb +0 -95
  581. data/spec/rubyspec/core/array/shared/index.rb +0 -37
  582. data/spec/rubyspec/core/array/shared/inspect.rb +0 -3
  583. data/spec/rubyspec/core/array/shared/join.rb +0 -7
  584. data/spec/rubyspec/core/array/shared/keep_if.rb +0 -3
  585. data/spec/rubyspec/core/array/shared/length.rb +0 -3
  586. data/spec/rubyspec/core/array/shared/replace.rb +0 -3
  587. data/spec/rubyspec/core/array/shared/slice.rb +0 -3
  588. data/spec/rubyspec/core/array/shift_spec.rb +0 -160
  589. data/spec/rubyspec/core/array/shuffle_spec.rb +0 -87
  590. data/spec/rubyspec/core/array/size_spec.rb +0 -7
  591. data/spec/rubyspec/core/array/slice_spec.rb +0 -166
  592. data/spec/rubyspec/core/array/sort_spec.rb +0 -271
  593. data/spec/rubyspec/core/array/take_spec.rb +0 -29
  594. data/spec/rubyspec/core/array/take_while_spec.rb +0 -17
  595. data/spec/rubyspec/core/array/to_a_spec.rb +0 -24
  596. data/spec/rubyspec/core/array/to_ary_spec.rb +0 -20
  597. data/spec/rubyspec/core/array/try_convert_spec.rb +0 -52
  598. data/spec/rubyspec/core/array/uniq_spec.rb +0 -167
  599. data/spec/rubyspec/core/array/unshift_spec.rb +0 -64
  600. data/spec/rubyspec/core/array/zip_spec.rb +0 -55
  601. data/spec/rubyspec/core/class/fixtures/classes.rb +0 -9
  602. data/spec/rubyspec/core/class/new_spec.rb +0 -113
  603. data/spec/rubyspec/core/enumerable/all_spec.rb +0 -130
  604. data/spec/rubyspec/core/enumerable/any_spec.rb +0 -150
  605. data/spec/rubyspec/core/enumerable/collect_spec.rb +0 -39
  606. data/spec/rubyspec/core/enumerable/count_spec.rb +0 -45
  607. data/spec/rubyspec/core/enumerable/detect_spec.rb +0 -48
  608. data/spec/rubyspec/core/enumerable/drop_spec.rb +0 -20
  609. data/spec/rubyspec/core/enumerable/drop_while_spec.rb +0 -18
  610. data/spec/rubyspec/core/enumerable/each_slice_spec.rb +0 -25
  611. data/spec/rubyspec/core/enumerable/each_with_index_spec.rb +0 -14
  612. data/spec/rubyspec/core/enumerable/each_with_object_spec.rb +0 -20
  613. data/spec/rubyspec/core/enumerable/entries_spec.rb +0 -9
  614. data/spec/rubyspec/core/enumerable/find_all_spec.rb +0 -16
  615. data/spec/rubyspec/core/enumerable/find_index_spec.rb +0 -44
  616. data/spec/rubyspec/core/enumerable/find_spec.rb +0 -56
  617. data/spec/rubyspec/core/enumerable/first_spec.rb +0 -43
  618. data/spec/rubyspec/core/enumerable/fixtures/classes.rb +0 -240
  619. data/spec/rubyspec/core/enumerable/grep_spec.rb +0 -24
  620. data/spec/rubyspec/core/enumerable/group_by_spec.rb +0 -16
  621. data/spec/rubyspec/core/enumerable/none_spec.rb +0 -68
  622. data/spec/rubyspec/core/enumerable/select_spec.rb +0 -16
  623. data/spec/rubyspec/core/enumerable/sort_by_spec.rb +0 -31
  624. data/spec/rubyspec/core/enumerable/take_spec.rb +0 -43
  625. data/spec/rubyspec/core/enumerable/to_a_spec.rb +0 -9
  626. data/spec/rubyspec/core/enumerator/each_spec.rb +0 -11
  627. data/spec/rubyspec/core/enumerator/new_spec.rb +0 -17
  628. data/spec/rubyspec/core/enumerator/next_spec.rb +0 -25
  629. data/spec/rubyspec/core/enumerator/rewind_spec.rb +0 -28
  630. data/spec/rubyspec/core/false/and_spec.rb +0 -11
  631. data/spec/rubyspec/core/false/inspect_spec.rb +0 -7
  632. data/spec/rubyspec/core/false/or_spec.rb +0 -11
  633. data/spec/rubyspec/core/false/to_s_spec.rb +0 -7
  634. data/spec/rubyspec/core/false/xor_spec.rb +0 -11
  635. data/spec/rubyspec/core/hash/allocate_spec.rb +0 -13
  636. data/spec/rubyspec/core/hash/assoc_spec.rb +0 -25
  637. data/spec/rubyspec/core/hash/clear_spec.rb +0 -19
  638. data/spec/rubyspec/core/hash/clone_spec.rb +0 -10
  639. data/spec/rubyspec/core/hash/constructor_spec.rb +0 -13
  640. data/spec/rubyspec/core/hash/default_proc_spec.rb +0 -20
  641. data/spec/rubyspec/core/hash/default_spec.rb +0 -17
  642. data/spec/rubyspec/core/hash/delete_if_spec.rb +0 -13
  643. data/spec/rubyspec/core/hash/delete_spec.rb +0 -11
  644. data/spec/rubyspec/core/hash/dup_spec.rb +0 -10
  645. data/spec/rubyspec/core/hash/each_key_spec.rb +0 -15
  646. data/spec/rubyspec/core/hash/each_pair_spec.rb +0 -30
  647. data/spec/rubyspec/core/hash/each_spec.rb +0 -36
  648. data/spec/rubyspec/core/hash/each_value_spec.rb +0 -15
  649. data/spec/rubyspec/core/hash/element_reference_spec.rb +0 -41
  650. data/spec/rubyspec/core/hash/element_set_spec.rb +0 -7
  651. data/spec/rubyspec/core/hash/empty_spec.rb +0 -10
  652. data/spec/rubyspec/core/hash/fetch_spec.rb +0 -24
  653. data/spec/rubyspec/core/hash/flatten_spec.rb +0 -46
  654. data/spec/rubyspec/core/hash/has_key_spec.rb +0 -24
  655. data/spec/rubyspec/core/hash/has_value_spec.rb +0 -12
  656. data/spec/rubyspec/core/hash/include_spec.rb +0 -24
  657. data/spec/rubyspec/core/hash/index_spec.rb +0 -13
  658. data/spec/rubyspec/core/hash/indexes_spec.rb +0 -9
  659. data/spec/rubyspec/core/hash/indices_spec.rb +0 -9
  660. data/spec/rubyspec/core/hash/invert_spec.rb +0 -12
  661. data/spec/rubyspec/core/hash/keep_if_spec.rb +0 -18
  662. data/spec/rubyspec/core/hash/key_spec.rb +0 -24
  663. data/spec/rubyspec/core/hash/keys_spec.rb +0 -10
  664. data/spec/rubyspec/core/hash/length_spec.rb +0 -10
  665. data/spec/rubyspec/core/hash/member_spec.rb +0 -24
  666. data/spec/rubyspec/core/hash/merge_spec.rb +0 -37
  667. data/spec/rubyspec/core/hash/new_spec.rb +0 -19
  668. data/spec/rubyspec/core/hash/rassoc_spec.rb +0 -34
  669. data/spec/rubyspec/core/hash/reject_spec.rb +0 -18
  670. data/spec/rubyspec/core/hash/replace_spec.rb +0 -7
  671. data/spec/rubyspec/core/hash/select_spec.rb +0 -52
  672. data/spec/rubyspec/core/hash/shift_spec.rb +0 -19
  673. data/spec/rubyspec/core/hash/size_spec.rb +0 -10
  674. data/spec/rubyspec/core/hash/to_a_spec.rb +0 -13
  675. data/spec/rubyspec/core/hash/to_json_spec.rb +0 -11
  676. data/spec/rubyspec/core/hash/update_spec.rb +0 -17
  677. data/spec/rubyspec/core/hash/value_spec.rb +0 -12
  678. data/spec/rubyspec/core/hash/values_at_spec.rb +0 -9
  679. data/spec/rubyspec/core/hash/values_spec.rb +0 -7
  680. data/spec/rubyspec/core/kernel/eql_spec.rb +0 -15
  681. data/spec/rubyspec/core/kernel/equal_spec.rb +0 -12
  682. data/spec/rubyspec/core/kernel/tap_spec.rb +0 -10
  683. data/spec/rubyspec/core/kernel/to_s_spec.rb +0 -5
  684. data/spec/rubyspec/core/matchdata/to_a_spec.rb +0 -5
  685. data/spec/rubyspec/core/nil/and_spec.rb +0 -11
  686. data/spec/rubyspec/core/nil/dup_spec.rb +0 -7
  687. data/spec/rubyspec/core/nil/inspect_spec.rb +0 -7
  688. data/spec/rubyspec/core/nil/nil_spec.rb +0 -7
  689. data/spec/rubyspec/core/nil/or_spec.rb +0 -11
  690. data/spec/rubyspec/core/nil/to_a_spec.rb +0 -7
  691. data/spec/rubyspec/core/nil/to_f_spec.rb +0 -11
  692. data/spec/rubyspec/core/nil/to_h_spec.rb +0 -10
  693. data/spec/rubyspec/core/nil/to_i_spec.rb +0 -11
  694. data/spec/rubyspec/core/nil/to_s_spec.rb +0 -7
  695. data/spec/rubyspec/core/nil/xor_spec.rb +0 -11
  696. data/spec/rubyspec/core/numeric/to_s_spec.rb +0 -8
  697. data/spec/rubyspec/core/range/begin_spec.rb +0 -9
  698. data/spec/rubyspec/core/range/case_compare_spec.rb +0 -15
  699. data/spec/rubyspec/core/range/end_spec.rb +0 -9
  700. data/spec/rubyspec/core/regexp/match_spec.rb +0 -95
  701. data/spec/rubyspec/core/string/capitalize_spec.rb +0 -10
  702. data/spec/rubyspec/core/string/casecmp_spec.rb +0 -16
  703. data/spec/rubyspec/core/string/center_spec.rb +0 -49
  704. data/spec/rubyspec/core/string/chomp_spec.rb +0 -48
  705. data/spec/rubyspec/core/string/downcase_spec.rb +0 -6
  706. data/spec/rubyspec/core/string/empty_spec.rb +0 -7
  707. data/spec/rubyspec/core/string/end_with_spec.rb +0 -16
  708. data/spec/rubyspec/core/string/include_spec.rb +0 -6
  709. data/spec/rubyspec/core/string/index_spec.rb +0 -405
  710. data/spec/rubyspec/core/string/intern_spec.rb +0 -9
  711. data/spec/rubyspec/core/string/length_spec.rb +0 -9
  712. data/spec/rubyspec/core/string/reverse_spec.rb +0 -7
  713. data/spec/rubyspec/core/string/size_spec.rb +0 -9
  714. data/spec/rubyspec/core/string/start_with_spec.rb +0 -12
  715. data/spec/rubyspec/core/string/swapcase_spec.rb +0 -13
  716. data/spec/rubyspec/core/string/to_a_spec.rb +0 -9
  717. data/spec/rubyspec/core/string/to_s_spec.rb +0 -6
  718. data/spec/rubyspec/core/string/to_str_spec.rb +0 -6
  719. data/spec/rubyspec/core/string/to_sym_spec.rb +0 -9
  720. data/spec/rubyspec/core/string/upcase_spec.rb +0 -6
  721. data/spec/rubyspec/core/struct/fixtures/classes.rb +0 -26
  722. data/spec/rubyspec/core/struct/initialize_spec.rb +0 -11
  723. data/spec/rubyspec/core/struct/new_spec.rb +0 -24
  724. data/spec/rubyspec/core/symbol/to_proc_spec.rb +0 -12
  725. data/spec/rubyspec/core/time/at_spec.rb +0 -7
  726. data/spec/rubyspec/core/time/day_spec.rb +0 -5
  727. data/spec/rubyspec/core/time/friday_spec.rb +0 -9
  728. data/spec/rubyspec/core/time/hour_spec.rb +0 -5
  729. data/spec/rubyspec/core/time/min_spec.rb +0 -5
  730. data/spec/rubyspec/core/time/monday_spec.rb +0 -9
  731. data/spec/rubyspec/core/time/month_spec.rb +0 -5
  732. data/spec/rubyspec/core/time/now_spec.rb +0 -5
  733. data/spec/rubyspec/core/time/saturday_spec.rb +0 -9
  734. data/spec/rubyspec/core/true/and_spec.rb +0 -11
  735. data/spec/rubyspec/core/true/inspect_spec.rb +0 -7
  736. data/spec/rubyspec/core/true/or_spec.rb +0 -11
  737. data/spec/rubyspec/core/true/to_s_spec.rb +0 -7
  738. data/spec/rubyspec/core/true/xor_spec.rb +0 -11
  739. data/spec/rubyspec/language/alias_spec.rb +0 -160
  740. data/spec/rubyspec/language/and_spec.rb +0 -66
  741. data/spec/rubyspec/language/array_spec.rb +0 -117
  742. data/spec/rubyspec/language/break_spec.rb +0 -332
  743. data/spec/rubyspec/language/case_spec.rb +0 -310
  744. data/spec/rubyspec/language/class_spec.rb +0 -190
  745. data/spec/rubyspec/language/class_variable_spec.rb +0 -56
  746. data/spec/rubyspec/language/def_spec.rb +0 -551
  747. data/spec/rubyspec/language/defined_spec.rb +0 -107
  748. data/spec/rubyspec/language/ensure_spec.rb +0 -104
  749. data/spec/rubyspec/language/execution_spec.rb +0 -15
  750. data/spec/rubyspec/language/for_spec.rb +0 -192
  751. data/spec/rubyspec/language/hash_spec.rb +0 -65
  752. data/spec/rubyspec/language/if_spec.rb +0 -356
  753. data/spec/rubyspec/language/literal_lambda_spec.rb +0 -1
  754. data/spec/rubyspec/language/loop_spec.rb +0 -67
  755. data/spec/rubyspec/language/metaclass_spec.rb +0 -159
  756. data/spec/rubyspec/language/module_spec.rb +0 -56
  757. data/spec/rubyspec/language/next_spec.rb +0 -469
  758. data/spec/rubyspec/language/not_spec.rb +0 -55
  759. data/spec/rubyspec/language/or_spec.rb +0 -90
  760. data/spec/rubyspec/language/order_spec.rb +0 -77
  761. data/spec/rubyspec/language/precedence_spec.rb +0 -483
  762. data/spec/rubyspec/language/redo_spec.rb +0 -65
  763. data/spec/rubyspec/language/rescue_spec.rb +0 -121
  764. data/spec/rubyspec/language/retry_spec.rb +0 -56
  765. data/spec/rubyspec/language/return_spec.rb +0 -281
  766. data/spec/rubyspec/language/singleton_class_spec.rb +0 -32
  767. data/spec/rubyspec/language/super_spec.rb +0 -284
  768. data/spec/rubyspec/language/undef_spec.rb +0 -16
  769. data/spec/rubyspec/language/unless_spec.rb +0 -45
  770. data/spec/rubyspec/language/until_spec.rb +0 -234
  771. data/spec/rubyspec/language/while_spec.rb +0 -238
  772. data/spec/rubyspec/language/yield_spec.rb +0 -128
  773. data/spec/rubyspec/library/date/new_spec.rb +0 -10
  774. data/spec/rubyspec/library/date/to_s_spec.rb +0 -7
  775. data/spec/rubyspec/library/date/today_spec.rb +0 -7
  776. data/spec/rubyspec/library/erb/util/html_escape_spec.rb +0 -10
  777. data/spec/rubyspec/library/observer/add_observer_spec.rb +0 -31
  778. data/spec/rubyspec/library/observer/count_observers_spec.rb +0 -33
  779. data/spec/rubyspec/library/observer/delete_observer_spec.rb +0 -19
  780. data/spec/rubyspec/library/observer/delete_observers_spec.rb +0 -19
  781. data/spec/rubyspec/library/observer/fixtures/classes.rb +0 -25
  782. data/spec/rubyspec/library/observer/notify_observers_spec.rb +0 -31
  783. data/spec/rubyspec/library/rbconfig/config_spec.rb +0 -47
  784. data/spec/rubyspec/library/singleton/clone_spec.rb +0 -8
  785. data/spec/rubyspec/library/singleton/dup_spec.rb +0 -8
  786. data/spec/rubyspec/library/singleton/fixtures/classes.rb +0 -18
  787. data/spec/rubyspec/library/singleton/instance_spec.rb +0 -30
  788. data/spec/rubyspec/library/stringscanner/element_reference_spec.rb +0 -29
  789. data/spec/rubyspec/library/stringscanner/pos_spec.rb +0 -20
  790. data/spec/rubyspec/spec_helper.rb +0 -96
  791. data/stdlib/fileutils.rb +0 -0
  792. data/stdlib/iconv.rb +0 -0
  793. data/stdlib/opal-browser/local_storage.rb +0 -27
  794. data/stdlib/opal-browser/script_loader.rb +0 -35
  795. data/stdlib/opal-parser.js.erb +0 -13
  796. data/stdlib/yaml.rb +0 -0
@@ -1,66 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
-
3
- describe "The '&&' statement" do
4
-
5
- it "short-circuits evaluation at the first condition to be false" do
6
- x = nil
7
- true && false && x = 1
8
- x.should be_nil
9
- end
10
-
11
- it "evalutes to the first condition not to be true" do
12
- ("yes" && 1 && nil && true).should == nil
13
- ("yes" && 1 && false && true).should == false
14
- end
15
-
16
- it "evalutes to the last condition if all are true" do
17
- ("yes" && 1).should == 1
18
- (1 && "yes").should == "yes"
19
- end
20
-
21
- it "evaluates the full set of chained conditions during assignment" do
22
- x, y = nil
23
- x = 1 && y = 2
24
- # "1 && y = 2" is evaluated and then assigned to x
25
- x.should == 2
26
- end
27
-
28
- it "treats empty expressions as nil" do
29
- (() && true).should be_nil
30
- (true && ()).should be_nil
31
- (() && ()).should be_nil
32
- end
33
-
34
- end
35
-
36
- describe "The 'and' statement" do
37
- it "short-circuits evaluation at the first condition to be false" do
38
- x = nil
39
- true and false and x = 1
40
- x.should be_nil
41
- end
42
-
43
- it "evalutes to the first condition not to be true" do
44
- ("yes" and 1 and nil and true).should == nil
45
- ("yes" and 1 and false and true).should == false
46
- end
47
-
48
- it "evalutes to the last condition if all are true" do
49
- ("yes" and 1).should == 1
50
- (1 and "yes").should == "yes"
51
- end
52
-
53
- it "when used in assignment, evaluates and assigns expressions individually" do
54
- x, y = nil
55
- x = 1 and y = 2
56
- # evaluates (x=1) and (y=2)
57
- x.should == 1
58
- end
59
-
60
- it "treats empty expressions as nil" do
61
- (() and true).should be_nil
62
- (true and ()).should be_nil
63
- (() and ()).should be_nil
64
- end
65
-
66
- end
@@ -1,117 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- require File.expand_path('../fixtures/array', __FILE__)
3
-
4
- describe "Array literals" do
5
- it "[] should return a new array populated with the given elements" do
6
- array = [1, 'a', nil]
7
- array.should be_kind_of(Array)
8
- array[0].should == 1
9
- array[1].should == 'a'
10
- array[2].should == nil
11
- end
12
-
13
- it "[] treats empty expressions as nil elements" do
14
- array = [0, (), 2, (), 4]
15
- array.should be_kind_of(Array)
16
- array[0].should == 0
17
- array[1].should == nil
18
- array[2].should == 2
19
- array[3].should == nil
20
- array[4].should == 4
21
- end
22
-
23
- it "[] accepts a literal hash without curly braces as its only parameter" do
24
- ["foo" => :bar, :baz => 42].should == [{"foo" => :bar, :baz => 42}]
25
- end
26
- end
27
-
28
- describe "Bareword array literal" do
29
- it "%w() transforms unquoted barewords into an array" do
30
- a = 3
31
- %w(a #{3+a} 3).should == ["a", '#{3+a}', "3"]
32
- end
33
-
34
- it "%W() transforms unquoted barewords into an array, supporting interpolation" do
35
- a = 3
36
- %W(a #{3+a} 3).should == ["a", '6', "3"]
37
- end
38
-
39
- it "%W() always treats interpolated expressions as a single word" do
40
- a = "hello world"
41
- %W(a b c #{a} d e).should == ["a", "b", "c", "hello world", "d", "e"]
42
- end
43
-
44
- it "treats consecutive whitespace characters the same as one" do
45
- %w(a b c d).should == ["a", "b", "c", "d"]
46
- %W(hello
47
- world).should == ["hello", "world"]
48
- end
49
-
50
- it "treats whitespace as literals characters when escaped by a backslash" do
51
- %w(a b\ c d e).should == ["a", "b c", "d", "e"]
52
- %w(a b\
53
- c d).should == ["a", "b\nc", "d"]
54
- %W(a\ b\tc).should == ["a ", "b\tc"]
55
- %W(white\ \ \ \ \ space).should == ["white ", " ", " ", " space"]
56
- end
57
- end
58
-
59
- describe "The unpacking splat operator (*)" do
60
- it "when applied to a literal nested array, unpacks its elements into the containing array" do
61
- [1, 2, *[3, 4, 5]].should == [1, 2, 3, 4, 5]
62
- end
63
-
64
- it "when applied to a nested referenced array, unpacks its elements into the containing array" do
65
- splatted_array = [3, 4, 5]
66
- [1, 2, *splatted_array].should == [1, 2, 3, 4, 5]
67
- end
68
-
69
- ruby_bug "#5124", "1.9.3.194" do
70
- it "returns a new array containing the same values when applied to an array inside an empty array" do
71
- splatted_array = [3, 4, 5]
72
- [*splatted_array].should == splatted_array
73
- [*splatted_array].should_not equal(splatted_array)
74
- end
75
- end
76
-
77
- it "unpacks the start and count arguments in an array slice assignment" do
78
- alphabet_1 = ['a'..'z'].to_a
79
- alphabet_2 = alphabet_1.dup
80
- start_and_count_args = [1, 10]
81
-
82
- alphabet_1[1, 10] = 'a'
83
- alphabet_2[*start_and_count_args] = 'a'
84
-
85
- alphabet_1.should == alphabet_2
86
- end
87
-
88
- it "unpacks arguments as if they were listed statically" do
89
- static = [1,2,3,4]
90
- receiver = static.dup
91
- args = [0,1]
92
- static[0,1] = []
93
- static.should == [2,3,4]
94
- receiver[*args] = []
95
- receiver.should == static
96
- end
97
-
98
- it "unpacks a literal array into arguments in a method call" do
99
- tester = ArraySpec::Splat.new
100
- tester.unpack_3args(*[1, 2, 3]).should == [1, 2, 3]
101
- tester.unpack_4args(1, 2, *[3, 4]).should == [1, 2, 3, 4]
102
- tester.unpack_4args("a", %w(b c), *%w(d e)).should == ["a", ["b", "c"], "d", "e"]
103
- end
104
-
105
- it "unpacks a referenced array into arguments in a method call" do
106
- args = [1, 2, 3]
107
- tester = ArraySpec::Splat.new
108
- tester.unpack_3args(*args).should == [1, 2, 3]
109
- tester.unpack_4args(0, *args).should == [0, 1, 2, 3]
110
- end
111
- end
112
-
113
- describe "The packing splat operator (*)" do
114
-
115
- end
116
-
117
- language_version __FILE__, "array"
@@ -1,332 +0,0 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
2
- require File.expand_path('../fixtures/break', __FILE__)
3
-
4
- describe "The break statement in a block" do
5
- before :each do
6
- ScratchPad.record []
7
- @program = BreakSpecs::Block.new
8
- end
9
-
10
- it "returns nil to method invoking the method yielding to the block when not passed an argument" do
11
- @program.break_nil
12
- ScratchPad.recorded.should == [:a, :aa, :b, nil, :d]
13
- end
14
-
15
- it "returns a value to the method invoking the method yielding to the block" do
16
- @program.break_value
17
- ScratchPad.recorded.should == [:a, :aa, :b, :break, :d]
18
- end
19
- end
20
-
21
- describe "The break statement in a captured block" do
22
- before :each do
23
- ScratchPad.record []
24
- @program = BreakSpecs::Block.new
25
- end
26
-
27
- describe "when the invocation of the scope creating the block is still active" do
28
- deviates_on :rubinius do
29
- it "returns a value to the invoking scope when invoking the block from the scope creating the block" do
30
- @program.break_in_method
31
- ScratchPad.recorded.should == [:a, :xa, :d, :b, :break, :e]
32
- end
33
-
34
- it "returns a value to the scope invoking the method when invoking the block from a method" do
35
- @program.break_in_nested_method
36
- ScratchPad.recorded.should == [:a, :xa, :c, :aa, :b, :break, :d]
37
- end
38
-
39
- it "returns a value to the scope calling the yielding scope when yielding to the block" do
40
- @program.break_in_yielding_method
41
- ScratchPad.recorded.should == [:a, :xa, :c, :aa, :b, :break, :d]
42
- end
43
- end
44
-
45
- not_compliant_on :rubinius do
46
- it "raises a LocalJumpError when invoking the block from the scope creating the block" do
47
- lambda { @program.break_in_method }.should raise_error(LocalJumpError)
48
- ScratchPad.recorded.should == [:a, :xa, :d, :b]
49
- end
50
-
51
- it "raises a LocalJumpError when invoking the block from a method" do
52
- lambda { @program.break_in_nested_method }.should raise_error(LocalJumpError)
53
- ScratchPad.recorded.should == [:a, :xa, :c, :aa, :b]
54
- end
55
-
56
- it "raises a LocalJumpError when yielding to the block" do
57
- lambda { @program.break_in_yielding_method }.should raise_error(LocalJumpError)
58
- ScratchPad.recorded.should == [:a, :xa, :c, :aa, :b]
59
- end
60
- end
61
- end
62
-
63
- describe "from a scope that has returned" do
64
- it "raises a LocalJumpError when calling the block from a method" do
65
- lambda { @program.break_in_method_captured }.should raise_error(LocalJumpError)
66
- ScratchPad.recorded.should == [:a, :za, :xa, :zd, :zb]
67
- end
68
-
69
- it "raises a LocalJumpError when yielding to the block" do
70
- lambda { @program.break_in_yield_captured }.should raise_error(LocalJumpError)
71
- ScratchPad.recorded.should == [:a, :za, :xa, :zd, :aa, :zb]
72
- end
73
- end
74
- end
75
-
76
- describe "The break statement in a lambda" do
77
- before :each do
78
- ScratchPad.record []
79
- @program = BreakSpecs::Lambda.new
80
- end
81
-
82
- describe "when the invocation of the scope creating the lambda is still active" do
83
- it "returns nil when not passed an argument" do
84
- @program.break_in_defining_scope false
85
- ScratchPad.recorded.should == [:a, :b, nil, :d]
86
- end
87
-
88
- it "returns a value to the scope creating and calling the lambda" do
89
- @program.break_in_defining_scope
90
- ScratchPad.recorded.should == [:a, :b, :break, :d]
91
- end
92
-
93
- it "returns a value to the method scope below invoking the lambda" do
94
- @program.break_in_nested_scope
95
- ScratchPad.recorded.should == [:a, :d, :aa, :b, :break, :bb, :e]
96
- end
97
-
98
- it "returns a value to a block scope invoking the lambda in a method below" do
99
- @program.break_in_nested_scope_block
100
- ScratchPad.recorded.should == [:a, :d, :aa, :aaa, :bb, :b, :break, :cc, :bbb, :dd, :e]
101
- end
102
-
103
- deviates_on :rubinius do
104
- it "returns a value when yielding to a lambda passed as a block argument" do
105
- @program.break_in_nested_scope_yield
106
- ScratchPad.recorded.should == [:a, :d, :aaa, :b, :break, :e]
107
- end
108
- end
109
-
110
- not_compliant_on :rubinius do
111
- it "raises a LocalJumpError when yielding to a lambda passed as a block argument" do
112
- lambda { @program.break_in_nested_scope_yield }.should raise_error(LocalJumpError)
113
- ScratchPad.recorded.should == [:a, :d, :aaa, :b]
114
- end
115
- end
116
- end
117
-
118
- describe "created at the toplevel" do
119
- it "returns a value when invoking from the toplevel" do
120
- code = fixture __FILE__, "break_lambda_toplevel.rb"
121
- ruby_exe(code).chomp.should == "a,b,break,d"
122
- end
123
-
124
- it "returns a value when invoking from a method" do
125
- code = fixture __FILE__, "break_lambda_toplevel_method.rb"
126
- ruby_exe(code).chomp.should == "a,d,b,break,e,f"
127
- end
128
-
129
- it "returns a value when invoking from a block" do
130
- code = fixture __FILE__, "break_lambda_toplevel_block.rb"
131
- ruby_exe(code).chomp.should == "a,d,f,b,break,g,e,h"
132
- end
133
- end
134
-
135
- describe "from a scope that has returned" do
136
- it "returns a value to the method scope invoking the lambda" do
137
- @program.break_in_method
138
- ScratchPad.recorded.should == [:a, :la, :ld, :lb, :break, :b]
139
- end
140
-
141
- it "returns a value to the block scope invoking the lambda in a method" do
142
- @program.break_in_block_in_method
143
- ScratchPad.recorded.should == [:a, :aaa, :b, :la, :ld, :lb, :break, :c, :bbb, :d]
144
- end
145
-
146
- # By passing a lambda as a block argument, the user is requesting to treat
147
- # the lambda as a block, which in this case means breaking to a scope that
148
- # has returned. This is a subtle and confusing semantic where a block pass
149
- # is removing the lambda-ness of a lambda.
150
- it "raises a LocalJumpError when yielding to a lambda passed as a block argument" do
151
- lambda { @program.break_in_method_yield }.should raise_error(LocalJumpError)
152
- ScratchPad.recorded.should == [:a, :la, :ld, :aaa, :lb]
153
- end
154
- end
155
- end
156
-
157
- describe "Break inside a while loop" do
158
- describe "with a value" do
159
- it "exits the loop and returns the value" do
160
- a = while true; break; end; a.should == nil
161
- a = while true; break nil; end; a.should == nil
162
- a = while true; break 1; end; a.should == 1
163
- a = while true; break []; end; a.should == []
164
- a = while true; break [1]; end; a.should == [1]
165
- end
166
- end
167
-
168
- describe "with a splat" do
169
- it "exits the loop and makes the splat an Array" do
170
- a = while true; break *[1,2]; end; a.should == [1,2]
171
- end
172
-
173
- ruby_version_is "" ... "1.9" do
174
- it "unwraps the value if there is only one value" do
175
- a = while true; break *1; end; a.should == 1
176
- end
177
-
178
- it "makes the value nil if the splat is empty" do
179
- a = while true; break *[]; end; a.should == nil
180
- end
181
- end
182
-
183
- ruby_version_is "1.9" do
184
- it "treats nil as an empty array" do
185
- a = while true; break *nil; end; a.should == []
186
- end
187
-
188
- it "preserves an array as is" do
189
- a = while true; break *[]; end; a.should == []
190
- a = while true; break *[1,2]; end; a.should == [1,2]
191
- a = while true; break *[nil]; end; a.should == [nil]
192
- a = while true; break *[[]]; end; a.should == [[]]
193
- end
194
-
195
- it "wraps a non-Array in an Array" do
196
- a = while true; break *1; end; a.should == [1]
197
- end
198
- end
199
- end
200
-
201
- it "stops a while loop when run" do
202
- i = 0
203
- while true
204
- break if i == 2
205
- i+=1
206
- end
207
- i.should == 2
208
- end
209
-
210
- it "causes a call with a block to return when run" do
211
- at = 0
212
- 0.upto(5) do |i|
213
- at = i
214
- break i if i == 2
215
- end.should == 2
216
- at.should == 2
217
- end
218
- end
219
-
220
-
221
- # TODO: Rewrite all the specs from here to the end of the file in the style
222
- # above.
223
- describe "Executing break from within a block" do
224
-
225
- before :each do
226
- ScratchPad.clear
227
- end
228
-
229
- # Discovered in JRuby (see JRUBY-2756)
230
- it "returns from the original invoking method even in case of chained calls" do
231
- class BreakTest
232
- # case #1: yield
233
- def self.meth_with_yield(&b)
234
- yield
235
- fail("break returned from yield to wrong place")
236
- end
237
- def self.invoking_method(&b)
238
- meth_with_yield(&b)
239
- fail("break returned from 'meth_with_yield' method to wrong place")
240
- end
241
-
242
- # case #2: block.call
243
- def self.meth_with_block_call(&b)
244
- b.call
245
- fail("break returned from b.call to wrong place")
246
- end
247
- def self.invoking_method2(&b)
248
- meth_with_block_call(&b)
249
- fail("break returned from 'meth_with_block_call' method to wrong place")
250
- end
251
- end
252
-
253
- # this calls a method that calls another method that yields to the block
254
- BreakTest.invoking_method do
255
- break
256
- fail("break didn't, well, break")
257
- end
258
-
259
- # this calls a method that calls another method that calls the block
260
- BreakTest.invoking_method2 do
261
- break
262
- fail("break didn't, well, break")
263
- end
264
-
265
- res = BreakTest.invoking_method do
266
- break :return_value
267
- fail("break didn't, well, break")
268
- end
269
- res.should == :return_value
270
-
271
- res = BreakTest.invoking_method2 do
272
- break :return_value
273
- fail("break didn't, well, break")
274
- end
275
- res.should == :return_value
276
-
277
- end
278
-
279
- class BreakTest2
280
- def one
281
- two { yield }
282
- end
283
-
284
- def two
285
- yield
286
- ensure
287
- ScratchPad << :two_ensure
288
- end
289
-
290
- def three
291
- begin
292
- one { break }
293
- ScratchPad << :three_post
294
- ensure
295
- ScratchPad << :three_ensure
296
- end
297
- end
298
- end
299
-
300
- it "runs ensures when continuing upward" do
301
- ScratchPad.record []
302
-
303
- bt2 = BreakTest2.new
304
- bt2.one { break }
305
- ScratchPad.recorded.should == [:two_ensure]
306
- end
307
-
308
- it "runs ensures when breaking from a loop" do
309
- ScratchPad.record []
310
-
311
- while true
312
- begin
313
- ScratchPad << :begin
314
- break if true
315
- ensure
316
- ScratchPad << :ensure
317
- end
318
- end
319
-
320
- ScratchPad.recorded.should == [:begin, :ensure]
321
- end
322
-
323
- it "doesn't run ensures in the destination method" do
324
- ScratchPad.record []
325
-
326
- bt2 = BreakTest2.new
327
- bt2.three
328
- ScratchPad.recorded.should == [:two_ensure, :three_post, :three_ensure]
329
- end
330
- end
331
-
332
- language_version __FILE__, "break"