opal-cj 0.7.0.beta1

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 (470) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.gitmodules +27 -0
  4. data/.rspec +3 -0
  5. data/.spectator +2 -0
  6. data/.spectator-mspec +3 -0
  7. data/.travis.yml +45 -0
  8. data/CHANGELOG.md +406 -0
  9. data/CONTRIBUTING.md +41 -0
  10. data/Gemfile +27 -0
  11. data/Guardfile +77 -0
  12. data/LICENSE +19 -0
  13. data/README.md +178 -0
  14. data/Rakefile +116 -0
  15. data/benchmarks/operators.rb +11 -0
  16. data/bin/opal +22 -0
  17. data/bin/opal-build +77 -0
  18. data/bin/opal-mspec +10 -0
  19. data/bin/opal-repl +72 -0
  20. data/config.ru +14 -0
  21. data/examples/rack/Gemfile +3 -0
  22. data/examples/rack/app/application.rb +13 -0
  23. data/examples/rack/app/user.rb +21 -0
  24. data/examples/rack/config.ru +7 -0
  25. data/examples/rack/index.html.erb +10 -0
  26. data/examples/sinatra/Gemfile +4 -0
  27. data/examples/sinatra/app/application.rb +7 -0
  28. data/examples/sinatra/config.ru +28 -0
  29. data/lib/mspec/opal/main.rb.erb +9 -0
  30. data/lib/mspec/opal/rake_task.rb +278 -0
  31. data/lib/mspec/opal/runner.rb +206 -0
  32. data/lib/mspec/opal/sprockets.js +57 -0
  33. data/lib/opal.rb +11 -0
  34. data/lib/opal/builder.rb +135 -0
  35. data/lib/opal/builder_processors.rb +165 -0
  36. data/lib/opal/cli.rb +145 -0
  37. data/lib/opal/cli_options.rb +149 -0
  38. data/lib/opal/cli_runners.rb +10 -0
  39. data/lib/opal/cli_runners/nodejs.rb +56 -0
  40. data/lib/opal/cli_runners/phantom.js +35 -0
  41. data/lib/opal/cli_runners/phantomjs.rb +28 -0
  42. data/lib/opal/cli_runners/server.rb +54 -0
  43. data/lib/opal/compiler.rb +307 -0
  44. data/lib/opal/erb.rb +64 -0
  45. data/lib/opal/fragment.rb +41 -0
  46. data/lib/opal/hike_path_finder.rb +18 -0
  47. data/lib/opal/nodes.rb +26 -0
  48. data/lib/opal/nodes/arglist.rb +56 -0
  49. data/lib/opal/nodes/array.rb +54 -0
  50. data/lib/opal/nodes/base.rb +151 -0
  51. data/lib/opal/nodes/call.rb +283 -0
  52. data/lib/opal/nodes/call_special.rb +178 -0
  53. data/lib/opal/nodes/case.rb +96 -0
  54. data/lib/opal/nodes/class.rb +42 -0
  55. data/lib/opal/nodes/constants.rb +78 -0
  56. data/lib/opal/nodes/def.rb +157 -0
  57. data/lib/opal/nodes/defined.rb +113 -0
  58. data/lib/opal/nodes/definitions.rb +168 -0
  59. data/lib/opal/nodes/for.rb +35 -0
  60. data/lib/opal/nodes/hash.rb +67 -0
  61. data/lib/opal/nodes/helpers.rb +114 -0
  62. data/lib/opal/nodes/if.rb +67 -0
  63. data/lib/opal/nodes/iter.rb +131 -0
  64. data/lib/opal/nodes/literal.rb +230 -0
  65. data/lib/opal/nodes/logic.rb +217 -0
  66. data/lib/opal/nodes/masgn.rb +62 -0
  67. data/lib/opal/nodes/module.rb +46 -0
  68. data/lib/opal/nodes/rescue.rb +135 -0
  69. data/lib/opal/nodes/runtime_helpers.rb +45 -0
  70. data/lib/opal/nodes/scope.rb +293 -0
  71. data/lib/opal/nodes/singleton_class.rb +25 -0
  72. data/lib/opal/nodes/super.rb +97 -0
  73. data/lib/opal/nodes/top.rb +101 -0
  74. data/lib/opal/nodes/variables.rb +158 -0
  75. data/lib/opal/nodes/while.rb +65 -0
  76. data/lib/opal/nodes/yield.rb +95 -0
  77. data/lib/opal/parser.rb +658 -0
  78. data/lib/opal/parser/grammar.rb +5452 -0
  79. data/lib/opal/parser/grammar.y +1684 -0
  80. data/lib/opal/parser/keywords.rb +66 -0
  81. data/lib/opal/parser/lexer.rb +1208 -0
  82. data/lib/opal/parser/parser_scope.rb +25 -0
  83. data/lib/opal/parser/sexp.rb +75 -0
  84. data/lib/opal/path_reader.rb +28 -0
  85. data/lib/opal/paths.rb +38 -0
  86. data/lib/opal/source_map.rb +70 -0
  87. data/lib/opal/sprockets.rb +4 -0
  88. data/lib/opal/sprockets/cache_key_fix.rb +17 -0
  89. data/lib/opal/sprockets/environment.rb +37 -0
  90. data/lib/opal/sprockets/erb.rb +37 -0
  91. data/lib/opal/sprockets/path_reader.rb +34 -0
  92. data/lib/opal/sprockets/processor.rb +124 -0
  93. data/lib/opal/sprockets/server.rb +180 -0
  94. data/lib/opal/util.rb +64 -0
  95. data/lib/opal/version.rb +3 -0
  96. data/opal.gemspec +36 -0
  97. data/opal/README.md +6 -0
  98. data/opal/corelib/array.rb +1556 -0
  99. data/opal/corelib/array/inheritance.rb +113 -0
  100. data/opal/corelib/basic_object.rb +73 -0
  101. data/opal/corelib/boolean.rb +41 -0
  102. data/opal/corelib/class.rb +55 -0
  103. data/opal/corelib/comparable.rb +56 -0
  104. data/opal/corelib/complex.rb +3 -0
  105. data/opal/corelib/dir.rb +20 -0
  106. data/opal/corelib/enumerable.rb +1132 -0
  107. data/opal/corelib/enumerator.rb +422 -0
  108. data/opal/corelib/error.rb +63 -0
  109. data/opal/corelib/file.rb +56 -0
  110. data/opal/corelib/hash.rb +728 -0
  111. data/opal/corelib/helpers.rb +102 -0
  112. data/opal/corelib/io.rb +59 -0
  113. data/opal/corelib/kernel.rb +569 -0
  114. data/opal/corelib/main.rb +7 -0
  115. data/opal/corelib/match_data.rb +114 -0
  116. data/opal/corelib/method.rb +58 -0
  117. data/opal/corelib/module.rb +462 -0
  118. data/opal/corelib/nil_class.rb +62 -0
  119. data/opal/corelib/numeric.rb +532 -0
  120. data/opal/corelib/proc.rb +52 -0
  121. data/opal/corelib/range.rb +116 -0
  122. data/opal/corelib/rational.rb +3 -0
  123. data/opal/corelib/regexp.rb +133 -0
  124. data/opal/corelib/runtime.js +1240 -0
  125. data/opal/corelib/string.rb +1212 -0
  126. data/opal/corelib/string/inheritance.rb +78 -0
  127. data/opal/corelib/struct.rb +141 -0
  128. data/opal/corelib/time.rb +584 -0
  129. data/opal/corelib/variables.rb +24 -0
  130. data/opal/opal.rb +32 -0
  131. data/package.json +9 -0
  132. data/spec/filters/bugs/array.rb +232 -0
  133. data/spec/filters/bugs/basic_object.rb +14 -0
  134. data/spec/filters/bugs/class.rb +21 -0
  135. data/spec/filters/bugs/enumerable.rb +69 -0
  136. data/spec/filters/bugs/enumerator.rb +3 -0
  137. data/spec/filters/bugs/hash.rb +128 -0
  138. data/spec/filters/bugs/kernel.rb +10 -0
  139. data/spec/filters/bugs/language.rb +415 -0
  140. data/spec/filters/bugs/math.rb +95 -0
  141. data/spec/filters/bugs/module.rb +14 -0
  142. data/spec/filters/bugs/nil.rb +7 -0
  143. data/spec/filters/bugs/numeric.rb +20 -0
  144. data/spec/filters/bugs/opal.rb +14 -0
  145. data/spec/filters/bugs/regexp.rb +11 -0
  146. data/spec/filters/bugs/set.rb +7 -0
  147. data/spec/filters/bugs/singleton.rb +6 -0
  148. data/spec/filters/bugs/string.rb +360 -0
  149. data/spec/filters/bugs/stringscanner.rb +22 -0
  150. data/spec/filters/bugs/struct.rb +45 -0
  151. data/spec/filters/bugs/time.rb +177 -0
  152. data/spec/filters/bugs/unknown.rb +11 -0
  153. data/spec/filters/unsupported/encoding.rb +95 -0
  154. data/spec/filters/unsupported/enumerator.rb +14 -0
  155. data/spec/filters/unsupported/float.rb +5 -0
  156. data/spec/filters/unsupported/frozen.rb +90 -0
  157. data/spec/filters/unsupported/hash_compare_by_identity.rb +16 -0
  158. data/spec/filters/unsupported/integer_size.rb +7 -0
  159. data/spec/filters/unsupported/method_added.rb +10 -0
  160. data/spec/filters/unsupported/mutable_strings.rb +361 -0
  161. data/spec/filters/unsupported/private_constants.rb +30 -0
  162. data/spec/filters/unsupported/private_methods.rb +44 -0
  163. data/spec/filters/unsupported/random.rb +4 -0
  164. data/spec/filters/unsupported/ruby_exe.rb +5 -0
  165. data/spec/filters/unsupported/tainted.rb +155 -0
  166. data/spec/filters/unsupported/time.rb +21 -0
  167. data/spec/filters/unsupported/trusted.rb +80 -0
  168. data/spec/lib/builder_processors_spec.rb +27 -0
  169. data/spec/lib/builder_spec.rb +66 -0
  170. data/spec/lib/cli_spec.rb +134 -0
  171. data/spec/lib/compiler_spec.rb +197 -0
  172. data/spec/lib/dependency_resolver_spec.rb +40 -0
  173. data/spec/lib/fixtures/no_requires.rb +1 -0
  174. data/spec/lib/fixtures/opal_file.rb +2 -0
  175. data/spec/lib/fixtures/require_tree_test.rb +3 -0
  176. data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
  177. data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
  178. data/spec/lib/fixtures/requires.rb +7 -0
  179. data/spec/lib/fixtures/sprockets_file.js.rb +3 -0
  180. data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
  181. data/spec/lib/hike_path_finder_spec.rb +23 -0
  182. data/spec/lib/lexer_spec.rb +110 -0
  183. data/spec/lib/parser/alias_spec.rb +26 -0
  184. data/spec/lib/parser/and_spec.rb +13 -0
  185. data/spec/lib/parser/attrasgn_spec.rb +28 -0
  186. data/spec/lib/parser/begin_spec.rb +42 -0
  187. data/spec/lib/parser/block_spec.rb +12 -0
  188. data/spec/lib/parser/break_spec.rb +17 -0
  189. data/spec/lib/parser/call_spec.rb +139 -0
  190. data/spec/lib/parser/class_spec.rb +35 -0
  191. data/spec/lib/parser/comments_spec.rb +11 -0
  192. data/spec/lib/parser/def_spec.rb +61 -0
  193. data/spec/lib/parser/if_spec.rb +26 -0
  194. data/spec/lib/parser/iter_spec.rb +59 -0
  195. data/spec/lib/parser/lambda_spec.rb +64 -0
  196. data/spec/lib/parser/literal_spec.rb +118 -0
  197. data/spec/lib/parser/masgn_spec.rb +37 -0
  198. data/spec/lib/parser/module_spec.rb +27 -0
  199. data/spec/lib/parser/not_spec.rb +27 -0
  200. data/spec/lib/parser/op_asgn1_spec.rb +23 -0
  201. data/spec/lib/parser/op_asgn2_spec.rb +23 -0
  202. data/spec/lib/parser/or_spec.rb +13 -0
  203. data/spec/lib/parser/return_spec.rb +17 -0
  204. data/spec/lib/parser/sclass_spec.rb +21 -0
  205. data/spec/lib/parser/string_spec.rb +276 -0
  206. data/spec/lib/parser/super_spec.rb +20 -0
  207. data/spec/lib/parser/unary_spec.rb +48 -0
  208. data/spec/lib/parser/undef_spec.rb +15 -0
  209. data/spec/lib/parser/unless_spec.rb +13 -0
  210. data/spec/lib/parser/variables_spec.rb +92 -0
  211. data/spec/lib/parser/while_spec.rb +15 -0
  212. data/spec/lib/parser/yield_spec.rb +20 -0
  213. data/spec/lib/path_reader_spec.rb +24 -0
  214. data/spec/lib/shared/path_finder_shared.rb +19 -0
  215. data/spec/lib/shared/path_reader_shared.rb +31 -0
  216. data/spec/lib/spec_helper.rb +9 -0
  217. data/spec/lib/sprockets/environment_spec.rb +30 -0
  218. data/spec/lib/sprockets/erb_spec.rb +25 -0
  219. data/spec/lib/sprockets/path_reader_spec.rb +25 -0
  220. data/spec/lib/sprockets/processor_spec.rb +35 -0
  221. data/spec/lib/sprockets/server_spec.rb +20 -0
  222. data/spec/opal/compiler/irb_spec.rb +44 -0
  223. data/spec/opal/core/array/select_spec.rb +14 -0
  224. data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
  225. data/spec/opal/core/date_spec.rb +122 -0
  226. data/spec/opal/core/enumerable/all_break_spec.rb +5 -0
  227. data/spec/opal/core/enumerable/any_break_spec.rb +5 -0
  228. data/spec/opal/core/enumerable/collect_break_spec.rb +13 -0
  229. data/spec/opal/core/enumerable/count_break_spec.rb +5 -0
  230. data/spec/opal/core/enumerable/detect_break_spec.rb +5 -0
  231. data/spec/opal/core/enumerable/drop_while_break_spec.rb +5 -0
  232. data/spec/opal/core/enumerable/each_slice_break.rb +6 -0
  233. data/spec/opal/core/enumerable/each_with_index_break_spec.rb +5 -0
  234. data/spec/opal/core/enumerable/each_with_object_break_spec.rb +5 -0
  235. data/spec/opal/core/enumerable/find_all_break_spec.rb +5 -0
  236. data/spec/opal/core/enumerable/find_index_break_spec.rb +5 -0
  237. data/spec/opal/core/enumerable/grep_break_spec.rb +5 -0
  238. data/spec/opal/core/enumerable/max_break_spec.rb +5 -0
  239. data/spec/opal/core/enumerable/max_by_break_spec.rb +5 -0
  240. data/spec/opal/core/enumerable/min_break_spec.rb +5 -0
  241. data/spec/opal/core/enumerable/min_by_break_spec.rb +5 -0
  242. data/spec/opal/core/enumerable/none_break_spec.rb +5 -0
  243. data/spec/opal/core/enumerable/one_break_spec.rb +5 -0
  244. data/spec/opal/core/enumerable/reduce_break_spec.rb +5 -0
  245. data/spec/opal/core/enumerable/take_while_break_spec.rb +5 -0
  246. data/spec/opal/core/fixtures/class.rb +124 -0
  247. data/spec/opal/core/fixtures/class_variables.rb +0 -0
  248. data/spec/opal/core/fixtures/constants.rb +33 -0
  249. data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
  250. data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
  251. data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
  252. data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
  253. data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
  254. data/spec/opal/core/kernel/Array_spec.rb +10 -0
  255. data/spec/opal/core/kernel/block_given_spec.rb +30 -0
  256. data/spec/opal/core/kernel/class_spec.rb +6 -0
  257. data/spec/opal/core/kernel/define_singleton_method_spec.rb +21 -0
  258. data/spec/opal/core/kernel/equal_value_spec.rb +12 -0
  259. data/spec/opal/core/kernel/extend_spec.rb +21 -0
  260. data/spec/opal/core/kernel/format_spec.rb +122 -0
  261. data/spec/opal/core/kernel/freeze_spec.rb +15 -0
  262. data/spec/opal/core/kernel/instance_eval_spec.rb +28 -0
  263. data/spec/opal/core/kernel/instance_variable_defined_spec.rb +15 -0
  264. data/spec/opal/core/kernel/instance_variable_get_spec.rb +14 -0
  265. data/spec/opal/core/kernel/instance_variable_set_spec.rb +10 -0
  266. data/spec/opal/core/kernel/loop_spec.rb +23 -0
  267. data/spec/opal/core/kernel/match_spec.rb +5 -0
  268. data/spec/opal/core/kernel/method_spec.rb +31 -0
  269. data/spec/opal/core/kernel/methods_spec.rb +25 -0
  270. data/spec/opal/core/kernel/nil_spec.rb +7 -0
  271. data/spec/opal/core/kernel/p_spec.rb +15 -0
  272. data/spec/opal/core/kernel/printf_spec.rb +11 -0
  273. data/spec/opal/core/kernel/proc_spec.rb +13 -0
  274. data/spec/opal/core/kernel/rand_spec.rb +23 -0
  275. data/spec/opal/core/kernel/require_tree_spec.rb +7 -0
  276. data/spec/opal/core/kernel/respond_to_spec.rb +41 -0
  277. data/spec/opal/core/kernel/send_spec.rb +56 -0
  278. data/spec/opal/core/kernel/sprintf_spec.rb +5 -0
  279. data/spec/opal/core/language/block_spec.rb +538 -0
  280. data/spec/opal/core/language/fixtures/array.rb +11 -0
  281. data/spec/opal/core/language/fixtures/block.rb +57 -0
  282. data/spec/opal/core/language/fixtures/break.rb +240 -0
  283. data/spec/opal/core/language/fixtures/ensure.rb +72 -0
  284. data/spec/opal/core/language/fixtures/literal_lambda.rb +7 -0
  285. data/spec/opal/core/language/fixtures/metaclass.rb +33 -0
  286. data/spec/opal/core/language/fixtures/module.rb +24 -0
  287. data/spec/opal/core/language/fixtures/next.rb +128 -0
  288. data/spec/opal/core/language/fixtures/return.rb +118 -0
  289. data/spec/opal/core/language/fixtures/send.rb +110 -0
  290. data/spec/opal/core/language/fixtures/send_1.9.rb +22 -0
  291. data/spec/opal/core/language/fixtures/super.rb +308 -0
  292. data/spec/opal/core/language/fixtures/variables.rb +58 -0
  293. data/spec/opal/core/language/fixtures/yield.rb +28 -0
  294. data/spec/opal/core/language/predefined_spec.rb +85 -0
  295. data/spec/opal/core/language/proc_spec.rb +263 -0
  296. data/spec/opal/core/language/regexp_spec.rb +20 -0
  297. data/spec/opal/core/language/send_spec.rb +225 -0
  298. data/spec/opal/core/language/string_spec.rb +44 -0
  299. data/spec/opal/core/language/symbol_spec.rb +40 -0
  300. data/spec/opal/core/language/variables_spec.rb +1366 -0
  301. data/spec/opal/core/language/versions/array_1.9.rb +39 -0
  302. data/spec/opal/core/language/versions/block_1.9.rb +0 -0
  303. data/spec/opal/core/language/versions/break_1.9.rb +0 -0
  304. data/spec/opal/core/language/versions/case_1.9.rb +20 -0
  305. data/spec/opal/core/language/versions/hash_1.9.rb +18 -0
  306. data/spec/opal/core/language/versions/literal_lambda_1.9.rb +143 -0
  307. data/spec/opal/core/language/versions/not_1.9.rb +22 -0
  308. data/spec/opal/core/language/versions/send_1.9.rb +241 -0
  309. data/spec/opal/core/language/versions/symbol_1.9.rb +15 -0
  310. data/spec/opal/core/language/versions/variables_1.9.rb +8 -0
  311. data/spec/opal/core/module/alias_method_spec.rb +28 -0
  312. data/spec/opal/core/module/ancestors_spec.rb +11 -0
  313. data/spec/opal/core/module/append_features_spec.rb +14 -0
  314. data/spec/opal/core/module/attr_accessor_spec.rb +26 -0
  315. data/spec/opal/core/module/const_defined_spec.rb +85 -0
  316. data/spec/opal/core/module/const_get_spec.rb +85 -0
  317. data/spec/opal/core/module/const_missing_spec.rb +17 -0
  318. data/spec/opal/core/module/const_set_spec.rb +64 -0
  319. data/spec/opal/core/module/constants_spec.rb +49 -0
  320. data/spec/opal/core/module/fixtures/classes.rb +434 -0
  321. data/spec/opal/core/module/method_defined_spec.rb +48 -0
  322. data/spec/opal/core/module/module_function_spec.rb +25 -0
  323. data/spec/opal/core/module/name_spec.rb +52 -0
  324. data/spec/opal/core/module/public_method_defined_spec.rb +18 -0
  325. data/spec/opal/core/module/remove_const_spec.rb +22 -0
  326. data/spec/opal/core/module/undef_method_spec.rb +66 -0
  327. data/spec/opal/core/numeric/bit_and_spec.rb +7 -0
  328. data/spec/opal/core/numeric/bit_or_spec.rb +8 -0
  329. data/spec/opal/core/numeric/bit_xor_spec.rb +6 -0
  330. data/spec/opal/core/numeric/ceil_spec.rb +8 -0
  331. data/spec/opal/core/numeric/chr_spec.rb +8 -0
  332. data/spec/opal/core/numeric/comparison_spec.rb +24 -0
  333. data/spec/opal/core/numeric/complement_spec.rb +8 -0
  334. data/spec/opal/core/numeric/divide_spec.rb +10 -0
  335. data/spec/opal/core/numeric/eql_spec.rb +9 -0
  336. data/spec/opal/core/numeric/exponent_spec.rb +33 -0
  337. data/spec/opal/core/numeric/floor_spec.rb +8 -0
  338. data/spec/opal/core/numeric/gt_spec.rb +11 -0
  339. data/spec/opal/core/numeric/gte_spec.rb +12 -0
  340. data/spec/opal/core/numeric/integer_spec.rb +9 -0
  341. data/spec/opal/core/numeric/left_shift_spec.rb +21 -0
  342. data/spec/opal/core/numeric/lt_spec.rb +11 -0
  343. data/spec/opal/core/numeric/lte_spec.rb +12 -0
  344. data/spec/opal/core/numeric/minus_spec.rb +8 -0
  345. data/spec/opal/core/numeric/modulo_spec.rb +19 -0
  346. data/spec/opal/core/numeric/multiply_spec.rb +9 -0
  347. data/spec/opal/core/numeric/next_spec.rb +9 -0
  348. data/spec/opal/core/numeric/ord_spec.rb +9 -0
  349. data/spec/opal/core/numeric/plus_spec.rb +8 -0
  350. data/spec/opal/core/numeric/pred_spec.rb +7 -0
  351. data/spec/opal/core/numeric/right_shift_spec.rb +25 -0
  352. data/spec/opal/core/numeric/step_spec.rb +11 -0
  353. data/spec/opal/core/numeric/succ_spec.rb +9 -0
  354. data/spec/opal/core/numeric/times_spec.rb +36 -0
  355. data/spec/opal/core/numeric/to_f_spec.rb +7 -0
  356. data/spec/opal/core/numeric/to_i_spec.rb +7 -0
  357. data/spec/opal/core/numeric/to_json_spec.rb +8 -0
  358. data/spec/opal/core/numeric/to_s_spec.rb +26 -0
  359. data/spec/opal/core/numeric/uminus_spec.rb +9 -0
  360. data/spec/opal/core/numeric/upto_spec.rb +19 -0
  361. data/spec/opal/core/numeric/zero_spec.rb +7 -0
  362. data/spec/opal/core/proc/call_spec.rb +21 -0
  363. data/spec/opal/core/proc/element_reference_spec.rb +21 -0
  364. data/spec/opal/core/proc/proc_tricks_spec.rb +7 -0
  365. data/spec/opal/core/runtime/begin_spec.rb +39 -0
  366. data/spec/opal/core/runtime/block_send_spec.rb +28 -0
  367. data/spec/opal/core/runtime/block_spec.rb +23 -0
  368. data/spec/opal/core/runtime/bridged_classes_spec.rb +64 -0
  369. data/spec/opal/core/runtime/constants_spec.rb +13 -0
  370. data/spec/opal/core/runtime/eval_spec.rb +5 -0
  371. data/spec/opal/core/runtime/main_methods_spec.rb +27 -0
  372. data/spec/opal/core/runtime/method_missing_spec.rb +62 -0
  373. data/spec/opal/core/runtime/method_spec.rb +31 -0
  374. data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
  375. data/spec/opal/core/runtime/paren_spec.rb +14 -0
  376. data/spec/opal/core/runtime/rescue_spec.rb +38 -0
  377. data/spec/opal/core/runtime/return_spec.rb +38 -0
  378. data/spec/opal/core/runtime/send_spec.rb +34 -0
  379. data/spec/opal/core/runtime/singleton_class_spec.rb +13 -0
  380. data/spec/opal/core/runtime/super_spec.rb +212 -0
  381. data/spec/opal/core/runtime/truthy_spec.rb +23 -0
  382. data/spec/opal/core/runtime/variables_spec.rb +20 -0
  383. data/spec/opal/core/source_map_spec.rb +15 -0
  384. data/spec/opal/core/string_spec.rb +11 -0
  385. data/spec/opal/stdlib/erb/erb_spec.rb +30 -0
  386. data/spec/opal/stdlib/erb/inline_block.opalerb +3 -0
  387. data/spec/opal/stdlib/erb/quoted.opalerb +1 -0
  388. data/spec/opal/stdlib/erb/simple.opalerb +1 -0
  389. data/spec/opal/stdlib/json/ext_spec.rb +48 -0
  390. data/spec/opal/stdlib/json/parse_spec.rb +33 -0
  391. data/spec/opal/stdlib/native/alias_native_spec.rb +27 -0
  392. data/spec/opal/stdlib/native/each_spec.rb +13 -0
  393. data/spec/opal/stdlib/native/element_reference_spec.rb +16 -0
  394. data/spec/opal/stdlib/native/exposure_spec.rb +33 -0
  395. data/spec/opal/stdlib/native/ext_spec.rb +19 -0
  396. data/spec/opal/stdlib/native/initialize_spec.rb +17 -0
  397. data/spec/opal/stdlib/native/method_missing_spec.rb +51 -0
  398. data/spec/opal/stdlib/native/native_reader_spec.rb +22 -0
  399. data/spec/opal/stdlib/native/native_writer_spec.rb +30 -0
  400. data/spec/opal/stdlib/native/new_spec.rb +8 -0
  401. data/spec/opal/stdlib/promise/error_spec.rb +15 -0
  402. data/spec/opal/stdlib/promise/rescue_spec.rb +35 -0
  403. data/spec/opal/stdlib/promise/then_spec.rb +54 -0
  404. data/spec/opal/stdlib/promise/trace_spec.rb +35 -0
  405. data/spec/opal/stdlib/promise/value_spec.rb +15 -0
  406. data/spec/opal/stdlib/promise/when_spec.rb +34 -0
  407. data/spec/opal/stdlib/template/paths_spec.rb +10 -0
  408. data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
  409. data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
  410. data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
  411. data/spec/rubyspecs +329 -0
  412. data/spec/spec_helper.rb +42 -0
  413. data/spec/support/mspec_rspec_adapter.rb +33 -0
  414. data/spec/support/parser_helpers.rb +37 -0
  415. data/stdlib/README.md +3 -0
  416. data/stdlib/base64.rb +152 -0
  417. data/stdlib/benchmark.rb +10 -0
  418. data/stdlib/buffer.rb +40 -0
  419. data/stdlib/buffer/array.rb +66 -0
  420. data/stdlib/buffer/view.rb +70 -0
  421. data/stdlib/date.rb +170 -0
  422. data/stdlib/delegate.rb +29 -0
  423. data/stdlib/dir.rb +1 -0
  424. data/stdlib/encoding.rb +166 -0
  425. data/stdlib/enumerator.rb +1 -0
  426. data/stdlib/erb.rb +16 -0
  427. data/stdlib/file.rb +1 -0
  428. data/stdlib/forwardable.rb +71 -0
  429. data/stdlib/json.rb +182 -0
  430. data/stdlib/math.rb +370 -0
  431. data/stdlib/native.rb +530 -0
  432. data/stdlib/nodejs.rb +5 -0
  433. data/stdlib/nodejs/dir.rb +13 -0
  434. data/stdlib/nodejs/file.rb +98 -0
  435. data/stdlib/nodejs/fileutils.rb +26 -0
  436. data/stdlib/nodejs/io.rb +2 -0
  437. data/stdlib/nodejs/irb.rb +45 -0
  438. data/stdlib/nodejs/process.rb +16 -0
  439. data/stdlib/nodejs/require.rb +32 -0
  440. data/stdlib/nodejs/rubygems.rb +68 -0
  441. data/stdlib/nodejs/runtime.rb +25 -0
  442. data/stdlib/nodejs/yaml.rb +11 -0
  443. data/stdlib/observer.rb +202 -0
  444. data/stdlib/opal-parser.rb +53 -0
  445. data/stdlib/opal-source-maps.rb +2 -0
  446. data/stdlib/ostruct.rb +69 -0
  447. data/stdlib/pathname.rb +31 -0
  448. data/stdlib/phantomjs.rb +8 -0
  449. data/stdlib/pp.rb +12 -0
  450. data/stdlib/process.rb +10 -0
  451. data/stdlib/promise.rb +300 -0
  452. data/stdlib/racc/parser.rb +215 -0
  453. data/stdlib/rbconfig.rb +20 -0
  454. data/stdlib/securerandom.rb +12 -0
  455. data/stdlib/set.rb +116 -0
  456. data/stdlib/singleton.rb +40 -0
  457. data/stdlib/source_map.rb +5 -0
  458. data/stdlib/source_map/map.rb +220 -0
  459. data/stdlib/source_map/mapping.rb +26 -0
  460. data/stdlib/source_map/offset.rb +88 -0
  461. data/stdlib/source_map/version.rb +3 -0
  462. data/stdlib/source_map/vlq.rb +98 -0
  463. data/stdlib/sourcemap.rb +1 -0
  464. data/stdlib/stringio.rb +181 -0
  465. data/stdlib/strscan.rb +155 -0
  466. data/stdlib/template.rb +46 -0
  467. data/stdlib/thread.rb +160 -0
  468. data/stdlib/time.rb +9 -0
  469. data/tasks/github.rake +19 -0
  470. metadata +690 -0
@@ -0,0 +1,58 @@
1
+ module VariablesSpecs
2
+ class ParAsgn
3
+ attr_accessor :x
4
+
5
+ def initialize
6
+ @x = 0
7
+ end
8
+
9
+ def inc
10
+ @x += 1
11
+ end
12
+
13
+ def to_ary
14
+ [1,2,3,4]
15
+ end
16
+ end
17
+
18
+ class OpAsgn
19
+ attr_accessor :a, :b, :side_effect
20
+
21
+ def do_side_effect
22
+ self.side_effect = true
23
+ return @a
24
+ end
25
+
26
+ def do_more_side_effects
27
+ @a += 5
28
+ self
29
+ end
30
+
31
+ def do_bool_side_effects
32
+ @b += 1
33
+ self
34
+ end
35
+ end
36
+
37
+ class Hashalike
38
+ def [](k) k end
39
+ def []=(k, v) [k, v] end
40
+ end
41
+
42
+ def self.reverse_foo(a, b)
43
+ return b, a
44
+ end
45
+
46
+ class ArrayLike
47
+ def initialize(array)
48
+ @array = array
49
+ end
50
+
51
+ def to_a
52
+ @array
53
+ end
54
+ end
55
+
56
+ class ArraySubclass < Array
57
+ end
58
+ end
@@ -0,0 +1,28 @@
1
+ module YieldSpecs
2
+ class Yielder
3
+ def z
4
+ yield
5
+ end
6
+
7
+ def ze(&block)
8
+ block = proc { block }
9
+ yield
10
+ end
11
+
12
+ def s(a)
13
+ yield(a)
14
+ end
15
+
16
+ def m(a, b, c)
17
+ yield(a, b, c)
18
+ end
19
+
20
+ def r(a)
21
+ yield(*a)
22
+ end
23
+
24
+ def rs(a, b, c)
25
+ yield(a, b, *c)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,85 @@
1
+ describe "predefined global $~" do
2
+ it "is set to contain the MatchData object of the last match if successful" do
3
+ md = /foo/.match 'foo'
4
+ $~.should be_kind_of(MatchData)
5
+ $~.object_id.should == md.object_id
6
+
7
+ /bar/ =~ 'bar'
8
+ $~.should be_kind_of(MatchData)
9
+ $~.object_id.should_not == md.object_id
10
+ end
11
+
12
+ it "is set to nil if the last match was unsuccessful" do
13
+ /foo/ =~ 'foo'
14
+ $~.nil?.should == false
15
+
16
+ /foo/ =~ 'bar'
17
+ $~.nil?.should == true
18
+ end
19
+ end
20
+
21
+ describe "predefined global $:" do
22
+ it "is initialized to an array of strings" do
23
+ $:.is_a?(Array).should == true
24
+ end
25
+ end
26
+
27
+ describe "predefined standard objects" do
28
+ it "includes ARGF" do
29
+ Object.const_defined?(:ARGF).should == true
30
+ end
31
+
32
+ it "includes ARGV" do
33
+ Object.const_defined?(:ARGV).should == true
34
+ ARGV.respond_to?(:[]).should == true
35
+ end
36
+
37
+ # already checked in spec_helper
38
+ #it "includes a hash-like object ENV" do
39
+ # Object.const_defined?(:ENV).should == true
40
+ # ENV.respond_to?(:[]).should == true
41
+ #end
42
+ end
43
+
44
+ describe "The predefined global constants" do
45
+ it "includes TRUE" do
46
+ Object.const_defined?(:TRUE).should == true
47
+ TRUE.should be_true
48
+ end
49
+
50
+ it "includes FALSE" do
51
+ Object.const_defined?(:FALSE).should == true
52
+ FALSE.should be_false
53
+ end
54
+
55
+ it "includes NIL" do
56
+ Object.const_defined?(:NIL).should == true
57
+ NIL.should be_nil
58
+ end
59
+
60
+ it "includes STDIN" do
61
+ Object.const_defined?(:STDIN).should == true
62
+ end
63
+
64
+ it "includes STDOUT" do
65
+ Object.const_defined?(:STDOUT).should == true
66
+ end
67
+
68
+ it "includes STDERR" do
69
+ Object.const_defined?(:STDERR).should == true
70
+ end
71
+
72
+ it "includes RUBY_VERSION" do
73
+ Object.const_defined?(:RUBY_VERSION).should == true
74
+ RUBY_VERSION.should == "2.1.1"
75
+ end
76
+
77
+ it "includes RUBY_RELEASE_DATE" do
78
+ Object.const_defined?(:RUBY_RELEASE_DATE).should == true
79
+ end
80
+
81
+ it "includes RUBY_PLATFORM" do
82
+ Object.const_defined?(:RUBY_PLATFORM).should == true
83
+ RUBY_PLATFORM.should == "opal"
84
+ end
85
+ end
@@ -0,0 +1,263 @@
1
+ describe "A Proc" do
2
+ it "captures locals from the surrounding scope" do
3
+ var = 1
4
+ lambda { var }.call.should == 1
5
+ end
6
+
7
+ ruby_version_is ""..."1.9" do
8
+ it "overwrites a captured local when used as an argument" do
9
+ var = 1
10
+ lambda { |var| var }.call(2).should == 2
11
+ var.should == 2
12
+ end
13
+ end
14
+
15
+ ruby_version_is "1.9" do
16
+ it "does not capture a local when an argument has the same name" do
17
+ var = 1
18
+ lambda { |var| var }.call(2).should == 2
19
+ var.should == 1
20
+ end
21
+ end
22
+
23
+ describe "taking zero arguments" do
24
+ before :each do
25
+ @l = lambda { 1 }
26
+ end
27
+
28
+ it "does not raise an exception if no values are passed" do
29
+ @l.call.should == 1
30
+ end
31
+
32
+ ruby_version_is ""..."1.9" do
33
+ it "does not raise an exception if a value is passed" do
34
+ @l.call(0).should == 1
35
+ end
36
+ end
37
+
38
+ ruby_version_is "1.9" do
39
+ it "raises an ArgumentErro if a value is passed" do
40
+ lambda { @l.call(0) }.should raise_error(ArgumentError)
41
+ end
42
+ end
43
+ end
44
+
45
+ describe "taking || arguments" do
46
+ before :each do
47
+ @l = lambda { || 1 }
48
+ end
49
+
50
+ it "does not raise an exception when passed no values" do
51
+ @l.call.should == 1
52
+ end
53
+
54
+ it "raises an ArgumentError if a value is passed" do
55
+ lambda { @l.call(0) }.should raise_error(ArgumentError)
56
+ end
57
+ end
58
+
59
+ describe "taking |a| arguments" do
60
+ before :each do
61
+ @l = lambda { |a| a }
62
+ end
63
+
64
+ it "assigns the value passed to the argument" do
65
+ @l.call(2).should == 2
66
+ end
67
+
68
+ it "does not destructure a single Array value" do
69
+ @l.call([1, 2]).should == [1, 2]
70
+ end
71
+
72
+ it "does not call #to_ary to convert a single passed object to an Array" do
73
+ obj = mock("block yield to_ary")
74
+ obj.should_not_receive(:to_ary)
75
+
76
+ @l.call(obj).should equal(obj)
77
+ end
78
+
79
+ ruby_version_is ""..."1.9" do
80
+ it "assigns nil to the argument if no value is passed" do
81
+ @l.call.should be_nil
82
+ end
83
+
84
+ it "assigns all the values passed to the argument as an Array" do
85
+ @l.call(1, 2).should == [1, 2]
86
+ end
87
+ end
88
+
89
+ ruby_version_is "1.9" do
90
+ it "raises an ArgumentError if no value is passed" do
91
+ lambda { @l.call }.should raise_error(ArgumentError)
92
+ end
93
+ end
94
+ end
95
+
96
+ describe "taking |a, b| arguments" do
97
+ before :each do
98
+ @l = lambda { |a, b| [a, b] }
99
+ end
100
+
101
+ it "raises an ArgumentError if passed no values" do
102
+ lambda { @l.call }.should raise_error(ArgumentError)
103
+ end
104
+
105
+ it "raises an ArgumentError if passed one value" do
106
+ lambda { @l.call(0) }.should raise_error(ArgumentError)
107
+ end
108
+
109
+ it "assigns the values passed to the arguments" do
110
+ @l.call(1, 2).should == [1, 2]
111
+ end
112
+
113
+ it "does not call #to_ary to convert a single passed object to an Array" do
114
+ obj = mock("proc call to_ary")
115
+ obj.should_not_receive(:to_ary)
116
+
117
+ lambda { @l.call(obj) }.should raise_error(ArgumentError)
118
+ end
119
+ end
120
+
121
+ describe "taking |a, *b| arguments" do
122
+ before :each do
123
+ @l = lambda { |a, *b| [a, b] }
124
+ end
125
+
126
+ it "raises an ArgumentError if passed no values" do
127
+ lambda { @l.call }.should raise_error(ArgumentError)
128
+ end
129
+
130
+ it "does not destructure a single Array value yielded" do
131
+ @l.call([1, 2, 3]).should == [[1, 2, 3], []]
132
+ end
133
+
134
+ it "assigns all passed values after the first to the rest argument" do
135
+ @l.call(1, 2, 3).should == [1, [2, 3]]
136
+ end
137
+
138
+ it "does not call #to_ary to convert a single passed object to an Array" do
139
+ obj = mock("block yield to_ary")
140
+ obj.should_not_receive(:to_ary)
141
+
142
+ @l.call(obj).should == [obj, []]
143
+ end
144
+ end
145
+
146
+ describe "taking |*| arguments" do
147
+ before :each do
148
+ # @l = lambda { |*| 1 }
149
+ end
150
+
151
+ it "does not raise an exception when passed no values" do
152
+ @l.call.should == 1
153
+ end
154
+
155
+ it "does not raise an exception when passed multiple values" do
156
+ @l.call(2, 3, 4).should == 1
157
+ end
158
+
159
+ it "does not call #to_ary to convert a single passed object to an Array" do
160
+ obj = mock("block yield to_ary")
161
+ obj.should_not_receive(:to_ary)
162
+
163
+ @l.call(obj).should == 1
164
+ end
165
+ end
166
+
167
+ describe "taking |*a| arguments" do
168
+ before :each do
169
+ @l = lambda { |*a| a }
170
+ end
171
+
172
+ it "assigns [] to the argument when passed no values" do
173
+ @l.call.should == []
174
+ end
175
+
176
+ it "assigns the argument an Array wrapping one passed value" do
177
+ @l.call(1).should == [1]
178
+ end
179
+
180
+ it "assigns the argument an Array wrapping all values passed" do
181
+ @l.call(1, 2, 3).should == [1, 2, 3]
182
+ end
183
+
184
+ it "does not call #to_ary to convert a single passed object to an Array" do
185
+ obj = mock("block yield to_ary")
186
+ obj.should_not_receive(:to_ary)
187
+
188
+ @l.call(obj).should == [obj]
189
+ end
190
+ end
191
+
192
+ describe "taking |a, | arguments" do
193
+ before :each do
194
+ # @l = lambda { |a, | a }
195
+ end
196
+
197
+ it "raises an ArgumentError when passed no values" do
198
+ lambda { @l.call }.should raise_error(ArgumentError)
199
+ end
200
+
201
+ it "raises an ArgumentError when passed more than one value" do
202
+ lambda { @l.call(1, 2) }.should raise_error(ArgumentError)
203
+ end
204
+
205
+ it "assigns the argument the value passed" do
206
+ @l.call(1).should == 1
207
+ end
208
+
209
+ it "does not destructure when passed a single Array" do
210
+ @l.call([1,2]).should == [1, 2]
211
+ end
212
+
213
+ it "does not call #to_ary to convert a single passed object to an Array" do
214
+ obj = mock("block yield to_ary")
215
+ obj.should_not_receive(:to_ary)
216
+
217
+ @l.call(obj).should == obj
218
+ end
219
+ end
220
+
221
+ describe "taking |(a, b)| arguments" do
222
+ before :each do
223
+ # @l = lambda { |(a, b)| [a, b] }
224
+ end
225
+
226
+ it "raises an ArgumentError when passed no values" do
227
+ lambda { @l.call }.should raise_error(ArgumentError)
228
+ end
229
+
230
+ ruby_version_is ""..."1.9" do
231
+ it "raises an ArgumentError when passed a single Array" do
232
+ lambda { @l.call([1, 2]) }.should raise_error(ArgumentError)
233
+ end
234
+
235
+ it "raises an ArgumentError when passed a single object" do
236
+ obj = mock("block yield to_ary")
237
+ obj.should_not_receive(:to_ary)
238
+
239
+ lambda { @l.call(obj) }.should raise_error(ArgumentError)
240
+ end
241
+ end
242
+
243
+ ruby_version_is "1.9" do
244
+ it "destructures a single Array value yielded" do
245
+ @l.call([1, 2]).should == [1, 2]
246
+ end
247
+
248
+ it "calls #to_ary to convert a single passed object to an Array" do
249
+ obj = mock("block yield to_ary")
250
+ obj.should_receive(:to_ary).and_return([1, 2])
251
+
252
+ @l.call(obj).should == [1, 2]
253
+ end
254
+
255
+ it "raises an TypeError if #to_ary does not return an Array" do
256
+ obj = mock("block yield to_ary invalid")
257
+ obj.should_receive(:to_ary).and_return(1)
258
+
259
+ lambda { @l.call(obj) }.should raise_error(TypeError)
260
+ end
261
+ end
262
+ end
263
+ end
@@ -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