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,33 @@
1
+ CS_GLOBAL = "global"
2
+ CS_NIL = nil
3
+ CS_ZERO = 0
4
+ CS_BLANK = ""
5
+ CS_FALSE = false
6
+
7
+ module ConstantSpecs
8
+
9
+ # Included in ModuleD
10
+ module ModuleM
11
+ CS_CONST10 = :const10_11
12
+ CS_CONST24 = :const24
13
+ end
14
+
15
+ class ClassA
16
+ CS_CONST10 = :const10_10
17
+ CS_CONST16 = :const16
18
+ CS_CONST17 = :const17_2
19
+ CS_CONST22 = :const22_1
20
+
21
+ def self.const_missing(const)
22
+ const
23
+ end
24
+
25
+ def self.constx; CS_CONSTX; end
26
+ def self.const10; CS_CONST10; end
27
+ def self.const16; ParentA.const16; end
28
+ def self.const22; ParentA.const22 { CS_CONST22 }; end
29
+
30
+ def const10; CS_CONST10; end
31
+ def constx; CS_CONSTX; end
32
+ end
33
+ end
@@ -0,0 +1 @@
1
+ $ScratchPad << File.basename(__FILE__)
@@ -0,0 +1 @@
1
+ $ScratchPad << File.basename(__FILE__)
@@ -0,0 +1 @@
1
+ $ScratchPad << File.basename(__FILE__)
@@ -0,0 +1 @@
1
+ $ScratchPad << File.basename(__FILE__)
@@ -0,0 +1 @@
1
+ $ScratchPad << File.basename(__FILE__)
@@ -0,0 +1,10 @@
1
+ describe "Kernel#Array" do
2
+ it "returns an Array containing the argument if it responds to neither #to_ary nor #to_a" do
3
+ obj = mock('obj')
4
+ Array(obj).should == [obj]
5
+ end
6
+
7
+ it "returns an empty Array when passed nil" do
8
+ Array(nil).should == []
9
+ end
10
+ end
@@ -0,0 +1,30 @@
1
+ module BlockGivenSpecs
2
+ def self.is_block_given
3
+ block_given?
4
+ end
5
+
6
+ def self.calls_block_given_with_block(&x)
7
+ is_block_given(&x)
8
+ end
9
+ end
10
+
11
+ describe "Kernel#block_given?" do
12
+ it "can be used outside of a method scope" do
13
+ block_given?
14
+ end
15
+
16
+ it "can check if a block was given" do
17
+ BlockGivenSpecs.is_block_given.should == false
18
+ BlockGivenSpecs.is_block_given {}.should == true
19
+ end
20
+
21
+ it "works with explicitly passed blocks" do
22
+ BlockGivenSpecs.calls_block_given_with_block.should == false
23
+ BlockGivenSpecs.calls_block_given_with_block {}.should == true
24
+ end
25
+
26
+ it "works with #to_proc'd blocks" do
27
+ BlockGivenSpecs.is_block_given(&nil).should == false
28
+ BlockGivenSpecs.is_block_given(&:x).should == true
29
+ end
30
+ end if false
@@ -0,0 +1,6 @@
1
+ describe "Kernel#class" do
2
+ it "returns the class of the receiver" do
3
+ Object.new.class.should == Object
4
+ [].class.should == Array
5
+ end
6
+ end
@@ -0,0 +1,21 @@
1
+ class DefineMethodByProcScope
2
+ in_scope = true
3
+ method_proc = proc { in_scope }
4
+
5
+ define_singleton_method(:proc_test, &method_proc)
6
+ end
7
+
8
+ describe "Kernel#define_singleton_method" do
9
+ it "defines a new singleton method for objects" do
10
+ s = Object.new
11
+ s.define_singleton_method(:test) { "world!" }
12
+ s.test.should == "world!"
13
+ lambda {
14
+ Object.new.test
15
+ }.should raise_error(NoMethodError)
16
+ end
17
+
18
+ it "maintains the Proc's scope" do
19
+ DefineMethodByProcScope.proc_test.should == true
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ describe "Kernel#==" do
2
+ it "returns true only if obj and other are the same object" do
3
+ o1 = Object.new
4
+ o2 = Object.new
5
+ (o1 == o1).should == true
6
+ (o2 == o2).should == true
7
+ (o1 == o2).should == false
8
+ (nil == nil).should == true
9
+ (o1 == nil).should == false
10
+ (nil == o2).should == false
11
+ end
12
+ end
@@ -0,0 +1,21 @@
1
+ module KernelExtendSpecs
2
+ module Mod
3
+ def foo; 3.142; end
4
+ end
5
+
6
+ class A
7
+ extend Mod
8
+ end
9
+ end
10
+
11
+ describe "Kernel#extend" do
12
+ it "extends the class/module with the module" do
13
+ KernelExtendSpecs::A.foo.should == 3.142
14
+ end
15
+
16
+ it "extends the object with the module" do
17
+ obj = Object.new
18
+ obj.extend KernelExtendSpecs::Mod
19
+ obj.foo.should == 3.142
20
+ end
21
+ end
@@ -0,0 +1,122 @@
1
+ describe "Kernel#format" do
2
+ it "should prepend '+' or '-' for numbers when flag '+' is specified" do
3
+ format("%+d", 1).should == "+1"
4
+ format("%+x", -1).should == "-1"
5
+ end
6
+
7
+ it "should prepend ' ' or '-' for numbers when flag ' ' is specified" do
8
+ format("% d", 1).should == " 1"
9
+ format("% x", 1).should == " 1"
10
+ format("% x", -1).should == "-1"
11
+ end
12
+
13
+ it "should align left when flag '-' is specified" do
14
+ format("%-5d", 123).should == "123 "
15
+ end
16
+
17
+ it "should prepend '0's when flag '0' is specified" do
18
+ format("%010d", 10).should == "0000000010"
19
+ end
20
+
21
+ it "should output at least specified number of characters when width is specified" do
22
+ format("%5d", 123).should == " 123"
23
+ format("%+5d", 11).should == " +11"
24
+ format("%+-5d", 11).should == "+11 "
25
+ format("%+05d", 11).should == "+0011"
26
+
27
+ format("%0*x", 5, 10).should == "0000a"
28
+ end
29
+
30
+ describe "with precision" do
31
+ it "should output specified number of digits for integers" do
32
+ format("%10.5d", 1).should == " 00001"
33
+ format("%+10.5x", 1).should == " +00001"
34
+ end
35
+
36
+ it "should output specified number of significant digits for floats" do
37
+ format("%10.5f", 1).should == " 1.00000"
38
+ format("%10.5f", 10).should == " 10.00000"
39
+
40
+ (format("%10.5e", 1) =~ /^1\.00000e\+0*0$/).should_not == nil
41
+ (format("%10.5e", 10) =~ /^1\.00000e\+0*1$/).should_not == nil
42
+ end
43
+
44
+ it "should output at most specified number of characters for strings" do
45
+ format("%10.2s", "foo").should == " fo"
46
+
47
+ format("%5.5s", "foo").should == " foo"
48
+ format("%5.5s", "foobar").should == "fooba"
49
+
50
+ format("%.5s", "foobar").should == "fooba"
51
+ format("%.*s", 5, "foobar").should == "fooba"
52
+ end
53
+ end
54
+
55
+ it "should format a character with specifier 'c'" do
56
+ format("%c", 97).should == "a"
57
+ format("%c", 'a').should == "a"
58
+ end
59
+
60
+ it "should format a string with specifier 's'" do
61
+ format("%s", "foo").should == "foo"
62
+ end
63
+
64
+ it "should format an object with specifier 'p'" do
65
+ format("%p", "foo").should == "\"foo\""
66
+ end
67
+
68
+ it "should format an integer with specifier 'd' or 'i'" do
69
+ format("%d", -1).should == "-1"
70
+ format("%d", 3.1).should == "3"
71
+ end
72
+
73
+ it "should format an integer with specifier 'u'" do
74
+ format("%u", -1).should == "-1"
75
+ end
76
+
77
+ it "should format an integer with specifier 'b', 'B', 'o', 'x' or 'X'" do
78
+ format("%b", 10).should == "1010"
79
+ format("%B", 10).should == "1010"
80
+ format("%o", 10).should == "12"
81
+ format("%x", 10).should == "a"
82
+ format("%X", 10).should == "A"
83
+
84
+ format("%x", -1).should == "-1" # incompatible
85
+ end
86
+
87
+ it "should format a floating number with specifier 'f', 'e', 'E', 'g' or 'G'" do
88
+ format("%f", 1.0).should == "1.000000"
89
+ (format("%e", 1.0) =~ /^1\.000000e\+0*0$/).should_not == nil
90
+ format("%g", 1.0).should == "1.00000" # incompatible
91
+
92
+ format("%f", 10.1).should == "10.100000"
93
+ (format("%E", 10.1) =~ /^1\.010000E\+0*1$/).should_not == nil
94
+ format("%g", 10.1).should == "10.1000" # incompatible
95
+
96
+ (format("%g", 1000000) =~ /^1.00000e\+0*6$/).should_not == nil
97
+ (format("%G", 0.0000001) =~ /^1.00000E-0*7$/).should_not == nil
98
+ end
99
+
100
+ it "should format special floating number special values" do
101
+ format("%f", 1.0/0).should == "Infinity"
102
+ format("%f", -1.0/0).should == "-Infinity"
103
+ format("%f", 0.0/0).should == "NaN"
104
+
105
+ format("%E", 1.0/0).should == "INFINITY"
106
+ format("%E", -1.0/0).should == "-INFINITY"
107
+ format("%E", 0.0/0).should == "NAN"
108
+ end
109
+
110
+ it "should take specified index of argument if '$' is specified" do
111
+ format("%d, %x, %o", 1, 2, 3).should == "1, 2, 3"
112
+ format("%3$d, %2$x, %1$o", 1, 2, 3).should == "3, 2, 1"
113
+
114
+ format("%1$d, %1$x, %1$o", 10).should == "10, a, 12"
115
+
116
+ format("%1$*2$.*3$f", 1, 5, 2).should == " 1.00"
117
+ end
118
+
119
+ it "can output % by escaping it" do
120
+ format("%%").should == "%"
121
+ end
122
+ end
@@ -0,0 +1,15 @@
1
+ # No real support, just mocking
2
+
3
+ describe "Kernel#freeze" do
4
+ it 'responds to #freeze and #frozen?' do
5
+ o = mock('o')
6
+ o.frozen?.should be_false
7
+ o.freeze
8
+ o.frozen?.should be_true
9
+ end
10
+
11
+ it "returns self" do
12
+ o = Object.new
13
+ o.freeze.should equal(o)
14
+ end
15
+ end
@@ -0,0 +1,28 @@
1
+ describe "Kernel#instance_eval" do
2
+ before :each do
3
+ ScratchPad.clear
4
+ end
5
+
6
+ it "yields the object to the block" do
7
+ "hola".instance_eval { |o| ScratchPad.record o }
8
+ ScratchPad.recorded.should == "hola"
9
+ end
10
+
11
+ it "returns the result of the block" do
12
+ "hola".instance_eval { :result }.should == :result
13
+ end
14
+
15
+ it "binds self to the receiver" do
16
+ s = "hola"
17
+ (s == s.instance_eval { self }).should be_true
18
+ end
19
+
20
+ it "executes in the context of the receiver" do
21
+ "Ruby-fu".instance_eval { size }.should == 7
22
+ end
23
+
24
+ it "has access to receiver's instance variables" do
25
+ @foo_bar = 42
26
+ instance_eval { @foo_bar }.should == 42
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Kernel#instance_variable_defined?" do
4
+ before do
5
+ @foo = :bar
6
+ end
7
+
8
+ it "returns true if ivar is defined" do
9
+ instance_variable_defined?(:@foo).should be_true
10
+ end
11
+
12
+ it "returns false if ivar is not defined" do
13
+ instance_variable_defined?(:@this_does_not_exist).should be_false
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ describe "Kernel#instance_variable_get" do
2
+ before(:each) do
3
+ @obj = Object.new
4
+ @obj.instance_variable_set("@test", :test)
5
+ end
6
+
7
+ it "returns nil when the referred instance variable does not exist" do
8
+ @obj.instance_variable_get(:@does_not_exist).should be_nil
9
+ end
10
+
11
+ it "returns the value of the passed instance variable" do
12
+ @obj.instance_variable_get(:@test).should == :test
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ describe "Kernel#instance_variable_get" do
2
+ before(:each) do
3
+ @obj = Object.new
4
+ end
5
+
6
+ it "sets the value of the referenced variable" do
7
+ @obj.instance_variable_set(:@test, 42)
8
+ @obj.instance_variable_get(:@test).should == 42
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ describe "Kernel.loop" do
2
+ it "calls block until it is terminated by a break" do
3
+ i = 0
4
+ loop do
5
+ i += 1
6
+ break if i == 10
7
+ end
8
+
9
+ i.should == 10
10
+ end
11
+
12
+ it "returns value passed to break" do
13
+ loop do
14
+ break 123
15
+ end.should == 123
16
+ end
17
+
18
+ it "returns nil if no value passed to break" do
19
+ loop do
20
+ break
21
+ end.should == nil
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ describe "Kernel#=~" do
2
+ it "should return false" do
3
+ (Object.new =~ 'abc').should be_false
4
+ end
5
+ end
@@ -0,0 +1,31 @@
1
+ module KernelSpecs
2
+ class Foo
3
+ def bar
4
+ 'done'
5
+ end
6
+
7
+ def self.baz
8
+ 'class done'
9
+ end
10
+ end
11
+ end
12
+
13
+ describe "Kernel#method" do
14
+ it "returns a method object for a valid method" do
15
+ m = KernelSpecs::Foo.new.method(:bar)
16
+ m.should be_kind_of(Method)
17
+ m.call.should == 'done'
18
+ end
19
+
20
+ it "returns a method object for a valid singleton method" do
21
+ m = KernelSpecs::Foo.method(:baz)
22
+ m.should be_kind_of Method
23
+ m.call.should == 'class done'
24
+ end
25
+
26
+ it "raises a NameError for an invalid method name" do
27
+ lambda {
28
+ KernelSpecs::Foo.new.method(:invalid_and_silly_method_name)
29
+ }.should raise_error(NameError)
30
+ end
31
+ end
@@ -0,0 +1,25 @@
1
+ module MethodsSpecs
2
+ class Issue < Object
3
+ def unique_method_name
4
+ end
5
+ end
6
+
7
+ # Trigger stub generation
8
+ Issue.new.unique_method_name
9
+ end
10
+
11
+ describe "Kernel#methods" do
12
+ it "lists methods available on an object" do
13
+ Object.new.methods.include?("puts").should == true
14
+ end
15
+
16
+ it "lists only singleton methods if false is passed" do
17
+ o = Object.new
18
+ def o.foo; 123; end
19
+ o.methods(false).should == ["foo"]
20
+ end
21
+
22
+ it "ignores stub methods" do
23
+ Object.methods.include?(:unique_method_name).should be_false
24
+ end
25
+ end