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,48 @@
1
+ require File.expand_path('../fixtures/classes', __FILE__)
2
+
3
+ describe "Module#method_defined?" do
4
+ it "returns true if a public or private method with the given name is defined in self, self's ancestors or one of self's included modules" do
5
+ # Defined in Child
6
+ ModuleSpecs::Child.method_defined?(:public_child).should == true
7
+ ModuleSpecs::Child.method_defined?("private_child").should == false
8
+ ModuleSpecs::Child.method_defined?(:accessor_method).should == true
9
+
10
+ # Defined in Parent
11
+ # ModuleSpecs::Child.method_defined?("public_parent").should == true
12
+ # ModuleSpecs::Child.method_defined?(:private_parent).should == false
13
+
14
+ # Defined in Module
15
+ # ModuleSpecs::Child.method_defined?(:public_module).should == true
16
+ # ModuleSpecs::Child.method_defined?(:protected_module).should == true
17
+ # ModuleSpecs::Child.method_defined?(:private_module).should == false
18
+
19
+ # Defined in SuperModule
20
+ # ModuleSpecs::Child.method_defined?(:public_super_module).should == true
21
+ # ModuleSpecs::Child.method_defined?(:protected_super_module).should == true
22
+ # ModuleSpecs::Child.method_defined?(:private_super_module).should == false
23
+ end
24
+
25
+ # unlike alias_method, module_function, public, and friends,
26
+ it "does not search Object or Kernel when called on a module" do
27
+ m = Module.new
28
+
29
+ m.method_defined?(:module_specs_public_method_on_kernel).should be_false
30
+ end
31
+
32
+ it "raises a TypeError when the given object is not a string/symbol/fixnum" do
33
+ c = Class.new
34
+ o = mock('123')
35
+
36
+ lambda { c.method_defined?(o) }.should raise_error(TypeError)
37
+
38
+ o.should_receive(:to_str).and_return(123)
39
+ lambda { c.method_defined?(o) }.should raise_error(TypeError)
40
+ end
41
+
42
+ it "converts the given name to a string using to_str" do
43
+ c = Class.new { def test(); end }
44
+ (o = mock('test')).should_receive(:to_str).and_return("test")
45
+
46
+ c.method_defined?(o).should == true
47
+ end
48
+ end
@@ -0,0 +1,25 @@
1
+ describe "Module#module_function with specific method names" do
2
+ it "creates duplicates of the given instance methods on the Module object" do
3
+ m = Module.new do
4
+ def test() end
5
+ def test2() end
6
+ def test3() end
7
+
8
+ module_function :test, :test2
9
+ end
10
+
11
+ m.respond_to?(:test).should == true
12
+ m.respond_to?(:test2).should == true
13
+ m.respond_to?(:test3).should == false
14
+ end
15
+
16
+ it "returns the current module" do
17
+ x = nil
18
+ m = Module.new do
19
+ def test() end
20
+ x = module_function :test
21
+ end
22
+
23
+ x.should == m
24
+ end
25
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ module ModuleNameSpec
4
+ module A
5
+ class B
6
+ end
7
+ end
8
+ end
9
+
10
+ describe "Module#name" do
11
+ it "should return the class name for boot types" do
12
+ BasicObject.name.should == "BasicObject"
13
+ Object.name.should == "Object"
14
+ Class.name.should == "Class"
15
+ Module.name.should == "Module"
16
+ end
17
+
18
+ it "should return class name for bridged classes" do
19
+ Array.name.should == "Array"
20
+ end
21
+
22
+ it "should return name for modules and classes" do
23
+ Enumerator.name.should == "Enumerator"
24
+ Enumerable.name.should == "Enumerable"
25
+ end
26
+
27
+ it "should return nil for anonymous class" do
28
+ Class.new.name.should == nil
29
+ end
30
+
31
+ it "should join nested classes using '::'" do
32
+ ModuleNameSpec::A.name.should == "ModuleNameSpec::A"
33
+ ModuleNameSpec::A::B.name.should == "ModuleNameSpec::A::B"
34
+ end
35
+
36
+ it "uses just child name when class set inside anonymous parent" do
37
+ a = Class.new
38
+ b = Class.new
39
+ a.const_set :Child, b
40
+ b.name.should == "Child"
41
+ end
42
+
43
+ it "uses parent name once parent anonymous class gets name" do
44
+ a = Class.new
45
+ b = Class.new
46
+ a.const_set :Child, b
47
+ b.name.should == "Child"
48
+
49
+ ModuleNameSpec.const_set :Parent, a
50
+ b.name.should == "ModuleNameSpec::Parent::Child"
51
+ end
52
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path('../fixtures/classes', __FILE__)
2
+
3
+ describe "Module#public_method_defined?" do
4
+ it "returns true if the named public method is defined by module or its ancestors" do
5
+ ModuleSpecs::CountsMixin.public_method_defined?("public_3").should == true
6
+
7
+ ModuleSpecs::CountsParent.public_method_defined?("public_3").should == true
8
+ ModuleSpecs::CountsParent.public_method_defined?("public_2").should == true
9
+
10
+ ModuleSpecs::CountsChild.public_method_defined?("public_3").should == true
11
+ ModuleSpecs::CountsChild.public_method_defined?("public_2").should == true
12
+ ModuleSpecs::CountsChild.public_method_defined?("public_1").should == true
13
+ end
14
+
15
+ it "returns false if the named method is not defined by the module or its ancestors" do
16
+ ModuleSpecs::CountsMixin.public_method_defined?(:public_10).should == false
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../../fixtures/constants', __FILE__)
2
+
3
+ describe "Module#remove_const" do
4
+ it "removes the constant specified by a String or Symbol from the receiver's constant table" do
5
+ ConstantSpecs::ModuleM::CS_CONST252 = :const252
6
+ ConstantSpecs::ModuleM::CS_CONST252.should == :const252
7
+
8
+ ConstantSpecs::ModuleM.send :remove_const, :CS_CONST252
9
+ lambda { ConstantSpecs::ModuleM::CS_CONST252 }.should raise_error(NameError)
10
+
11
+ ConstantSpecs::ModuleM::CS_CONST253 = :const253
12
+ ConstantSpecs::ModuleM::CS_CONST253.should == :const253
13
+
14
+ ConstantSpecs::ModuleM.send :remove_const, "CS_CONST253"
15
+ lambda { ConstantSpecs::ModuleM::CS_CONST253 }.should raise_error(NameError)
16
+ end
17
+
18
+ it "returns the value of the removed constant" do
19
+ ConstantSpecs::ModuleM::CS_CONST254 = :const254
20
+ ConstantSpecs::ModuleM.send(:remove_const, :CS_CONST254).should == :const254
21
+ end
22
+ end
@@ -0,0 +1,66 @@
1
+ require File.expand_path('../fixtures/classes', __FILE__)
2
+
3
+ module ModuleSpecs
4
+ class NoInheritance
5
+ def method_to_undef() 1 end
6
+ def another_method_to_undef() 1 end
7
+ end
8
+
9
+ class Parent
10
+ def method_to_undef() 1 end
11
+ def another_method_to_undef() 1 end
12
+ end
13
+
14
+ class Child < Parent
15
+ end
16
+
17
+ class Ancestor
18
+ def method_to_undef() 1 end
19
+ def another_method_to_undef() 1 end
20
+ end
21
+
22
+ class Descendant < Ancestor
23
+ end
24
+ end
25
+
26
+ describe "Module#undef_method with symbol" do
27
+ it "removes a method defined in a class" do
28
+ x = ModuleSpecs::NoInheritance.new
29
+
30
+ x.method_to_undef.should == 1
31
+
32
+ ModuleSpecs::NoInheritance.send :undef_method, :method_to_undef
33
+
34
+ lambda { x.method_to_undef }.should raise_error(NoMethodError)
35
+ end
36
+
37
+ it "removes a method defined in a super class" do
38
+ child = ModuleSpecs::Child.new
39
+ child.method_to_undef.should == 1
40
+
41
+ ModuleSpecs::Child.send :undef_method, :method_to_undef
42
+
43
+ lambda { child.method_to_undef }.should raise_error(NoMethodError)
44
+ end
45
+ end
46
+
47
+ describe "Module#undef_method with string" do
48
+ it "removes a method defined in a class" do
49
+ x = ModuleSpecs::NoInheritance.new
50
+
51
+ x.another_method_to_undef.should == 1
52
+
53
+ ModuleSpecs::NoInheritance.send :undef_method, 'another_method_to_undef'
54
+
55
+ lambda { x.another_method_to_undef }.should raise_error(NoMethodError)
56
+ end
57
+
58
+ it "removes a method defined in a super class" do
59
+ child = ModuleSpecs::Child.new
60
+ child.another_method_to_undef.should == 1
61
+
62
+ ModuleSpecs::Child.send :undef_method, 'another_method_to_undef'
63
+
64
+ lambda { child.another_method_to_undef }.should raise_error(NoMethodError)
65
+ end
66
+ end
@@ -0,0 +1,7 @@
1
+ describe "Numeric#&" do
2
+ it "returns self bitwise AND other" do
3
+ (256 & 16).should == 0
4
+ (2010 & 5).should == 0
5
+ (65535 & 1).should == 1
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ describe "Numeric#|" do
2
+ it "returns self bitwise OR other" do
3
+ (1 | 0).should == 1
4
+ (5 | 4).should == 5
5
+ (5 | 6).should == 7
6
+ (248 | 4096).should == 4344
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ describe "Numeric#^" do
2
+ it "returns self bitwise EXCLUSIVE OR other" do
3
+ (3 ^ 5).should == 6
4
+ (-2 ^ -255).should == 255
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ describe "Numeric#ceil" do
2
+ it "returns the ceil'ed value" do
3
+ 1.ceil.should == 1
4
+ (-42).ceil.should == -42
5
+ 3.142.ceil.should == 4
6
+ 0.ceil.should == 0
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ describe "Numeric#chr" do
2
+ it "returns a string containing the ASCII character represented by self" do
3
+ 111.chr.should == 'o'
4
+ 112.chr.should == 'p'
5
+ 97.chr.should == 'a'
6
+ 108.chr.should == 'l'
7
+ end
8
+ end
@@ -0,0 +1,24 @@
1
+ describe "Numeric#<=>" do
2
+ it "returns -1 when self is less than the given argument" do
3
+ (-3 <=> -1).should == -1
4
+ (-5 <=> 10).should == -1
5
+ (-5 <=> -4.5).should == -1
6
+ end
7
+
8
+ it "returns 0 when self is equal to the given argument" do
9
+ (0 <=> 0).should == 0
10
+ (954 <=> 954).should == 0
11
+ (954 <=> 954.0).should == 0
12
+ end
13
+
14
+ it "returns 1 when self is greater than the given argument" do
15
+ (496 <=> 5).should == 1
16
+ (200 <=> 100).should == 1
17
+ (51 <=> 50.5).should == 1
18
+ end
19
+
20
+ it "returns nil when the given argument is not an Numeric" do
21
+ (3 <=> mock('x')).should == nil
22
+ (3 <=> 'test').should == nil
23
+ end
24
+ end
@@ -0,0 +1,8 @@
1
+ describe "Numeric#~" do
2
+ it "returns self with each bit flipped" do
3
+ (~0).should == -1
4
+ (~1221).should == -1222
5
+ (~-2).should == 1
6
+ (~-599).should == 598
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ describe "Numeric#/" do
2
+ it "returns self divided by the given argument" do
3
+ (2 / 2).should == 1
4
+ (3 / 2).should == 1.5
5
+ end
6
+
7
+ it "supports dividing negative numbers" do
8
+ (-1 / 10).should == -0.1
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ describe "Numeric#eql?" do
2
+ it "returns true if self has the same value as other" do
3
+ (1.eql? 1).should == true
4
+ (9.eql? 5).should == false
5
+
6
+ (9.eql? 9.0).should == true
7
+ (9.eql? 9.01).should == false
8
+ end
9
+ end
@@ -0,0 +1,33 @@
1
+ describe "Numeric#**" do
2
+ it "returns self raised to the given power" do
3
+ (2 ** 0).should == 1
4
+ (2 ** 1).should == 2
5
+ (2 ** 2).should == 4
6
+
7
+ (2 ** 40).should == 1099511627776
8
+ end
9
+
10
+ it "overflows the answer to a bignum transparantly" do
11
+ (2 ** 29).should == 536870912
12
+ (2 ** 30).should == 1073741824
13
+ (2 ** 31).should == 2147483648
14
+ (2 ** 32).should == 4294967296
15
+
16
+ (2 ** 61).should == 2305843009213693952
17
+ (2 ** 62).should == 4611686018427387904
18
+ (2 ** 63).should == 9223372036854775808
19
+ (2 ** 64).should == 18446744073709551616
20
+ end
21
+
22
+ it "raises negative numbers to the given power" do
23
+ ((-2) ** 29).should == -536870912
24
+ ((-2) ** 30).should == 1073741824
25
+ ((-2) ** 31).should == -2147483648
26
+ ((-2) ** 32).should == 4294967296
27
+
28
+ ((-2) ** 61).should == -2305843009213693952
29
+ ((-2) ** 62).should == 4611686018427387904
30
+ ((-2) ** 63).should == -9223372036854775808
31
+ ((-2) ** 64).should == 18446744073709551616
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ describe "Numeric#floor" do
2
+ it "returns the floor'ed value" do
3
+ 1.floor.should == 1
4
+ (-42).floor.should == -42
5
+ 3.142.floor.should == 3
6
+ 0.floor.should == 0
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ describe "Numeric#>" do
2
+ it "returns true if self is greater than the given argument" do
3
+ (13 > 2).should == true
4
+ (-500 > -600).should == true
5
+
6
+ (1 > 5).should == false
7
+ (5 > 5).should == false
8
+
9
+ (5 > 4.999).should == true
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ describe "Numeric#>=" do
2
+ it "returns true if self is greater than or equal to the given argument" do
3
+ (13 >= 2).should == true
4
+ (-500 >= -600).should == true
5
+
6
+ (1 >= 5).should == false
7
+ (2 >= 2).should == true
8
+ (5 >= 5).should == true
9
+
10
+ (5 >= 4.999).should == true
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ describe "Numeric#integer?" do
2
+ it "returns true if number is integer, false otherwise" do
3
+ 0.integer?.should == true
4
+ (-1).integer?.should == true
5
+ 1.integer?.should == true
6
+
7
+ 3.142.integer?.should == false
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ describe "Numeric#<< with n << m" do
2
+ it "returns n shifted left m bits when n > 0, m > 0" do
3
+ (1 << 1).should == 2
4
+ end
5
+
6
+ it "returns n shifted left m bits when n < 0, m > 0" do
7
+ (-1 << 1).should == -2
8
+ end
9
+
10
+ it "returns 0 when n == 0" do
11
+ (0 << 1).should == 0
12
+ end
13
+
14
+ it "returns n when n > 0, m == 0" do
15
+ (1 << 0).should == 1
16
+ end
17
+
18
+ it "returns n when n < 0, m == 0" do
19
+ (-1 << 0).should == -1
20
+ end
21
+ end