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,197 @@
1
+ require 'lib/spec_helper'
2
+
3
+ describe Opal::Compiler do
4
+ describe 'requiring' do
5
+ it 'calls #require' do
6
+ expect_compiled("require 'pippo'").to include('self.$require("pippo")')
7
+ end
8
+ end
9
+
10
+ describe 'requirable' do
11
+ it 'executes the file' do
12
+ expect_compiled("").to include('(function($opal) {')
13
+ expect_compiled("").to end_with("})(Opal);\n")
14
+ end
15
+
16
+ it 'puts the compiled into "Opal.modules"' do
17
+ options = { :requirable => true, :file => "pippo" }
18
+ expect_compiled("", options).to include('Opal.modules["pippo"] = function($opal) {')
19
+ expect_compiled("", options).to end_with("};\n")
20
+ end
21
+ end
22
+
23
+ it "should compile simple ruby values" do
24
+ expect_compiled("3.142").to include("return 3.142")
25
+ expect_compiled("123e1").to include("return 1230")
26
+ expect_compiled("123E+10").to include("return 1230000000000")
27
+ expect_compiled("false").to include("return false")
28
+ expect_compiled("true").to include("return true")
29
+ expect_compiled("nil").to include("return nil")
30
+ end
31
+
32
+ it "should compile ruby strings" do
33
+ expect_compiled('"hello world"').to include('return "hello world"')
34
+ expect_compiled('"hello #{100}"').to include('"hello "', '100')
35
+ end
36
+
37
+ it "should compile method calls" do
38
+ expect_compiled("self.inspect").to include("$inspect()")
39
+ expect_compiled("self.map { |a| a + 10 }").to include("$map")
40
+ end
41
+
42
+ it "should compile constant lookups" do
43
+ expect_compiled("Object").to include("Object")
44
+ expect_compiled("Array").to include("Array")
45
+ end
46
+
47
+ describe "class names" do
48
+ it "generates a named function for class using $ prefix" do
49
+ expect_compiled("class Foo; end").to include("function $Foo")
50
+ end
51
+ end
52
+
53
+ describe "debugger special method" do
54
+ it "generates debugger keyword in javascript" do
55
+ expect_compiled("debugger").to include("debugger")
56
+ expect_compiled("debugger").to_not include("$debugger")
57
+ end
58
+ end
59
+
60
+ describe "DATA special variable" do
61
+ it "is not a special case unless __END__ part present in source" do
62
+ expect_compiled("DATA").to include("DATA")
63
+ expect_compiled("DATA\n__END__").to_not include("DATA")
64
+ end
65
+
66
+ it "DATA gets compiled as a reference to special $__END__ variable" do
67
+ expect_compiled("a = DATA\n__END__").to include("a = $__END__")
68
+ end
69
+
70
+ it "causes the compiler to create a reference to special __END__ variable" do
71
+ expect_compiled("DATA\n__END__\nFord Perfect").to include("$__END__ = ")
72
+ end
73
+
74
+ it "does not create a reference to __END__ vairbale unless __END__ content present" do
75
+ expect_compiled("DATA").to_not include("$__END__ = ")
76
+ end
77
+ end
78
+
79
+ describe "escapes in x-strings" do
80
+ it "compiles the exscapes directly as appearing in x-strings" do
81
+ expect_compiled('`"hello\nworld"`').to include('"hello\nworld"')
82
+ expect_compiled('%x{"hello\nworld"}').to include('"hello\nworld"')
83
+ end
84
+ end
85
+
86
+ describe "pre-processed if conditions" do
87
+ it "compiles if blocks using RUBY_ENGINE/RUBY_PLATFORM == opal" do
88
+ expect_compiled(<<-RUBY).to include("should_compile_fine")
89
+ if RUBY_ENGINE == 'opal'
90
+ :should_compile_fine
91
+ end
92
+ RUBY
93
+
94
+ expect_compiled(<<-RUBY).to include("so_should_this")
95
+ if RUBY_PLATFORM == 'opal'
96
+ :so_should_this
97
+ end
98
+ RUBY
99
+ end
100
+
101
+ it "skips elsif/else parts" do
102
+ expect_compiled(<<-RUBY).to_not include("should_be_skipped")
103
+ if RUBY_PLATFORM == "opal"
104
+ :ok
105
+ else
106
+ :should_be_skipped
107
+ end
108
+ RUBY
109
+
110
+ result = expect_compiled(<<-RUBY)
111
+ if RUBY_ENGINE == 'opal'
112
+ :this_compiles
113
+ elsif false
114
+ :this_does_not_compile
115
+ else
116
+ :this_neither
117
+ end
118
+ RUBY
119
+
120
+ result.to_not include("this_does_not_compile", "this_neither")
121
+ end
122
+
123
+ it "generates if-code as normal without check" do
124
+ expect_compiled(<<-RUBY).to include("should_compile", "and_this")
125
+ if some_conditional
126
+ :should_compile
127
+ else
128
+ :and_this
129
+ end
130
+ RUBY
131
+ end
132
+ end
133
+
134
+ describe "pre-processed unless conditionals" do
135
+ it "skips over if using RUBY_ENGINE/RUBY_PLATFORM == 'opal'" do
136
+ expect_compiled(<<-RUBY).to_not include("should_not_compile")
137
+ unless RUBY_ENGINE == 'opal'
138
+ :should_not_compile
139
+ end
140
+ RUBY
141
+ end
142
+
143
+ it "generates unless code as normal if no check" do
144
+ expect_compiled(<<-RUBY).to include("this_should_compile")
145
+ unless this_is_true
146
+ :this_should_compile
147
+ end
148
+ RUBY
149
+ end
150
+ end
151
+
152
+ describe 'pre-processing require-ish methods' do
153
+ describe '#require' do
154
+ it 'parses and resolve #require argument' do
155
+ compiler = compiler_for(%Q{require "#{__FILE__}"})
156
+ expect(compiler.requires).to eq([__FILE__])
157
+ end
158
+ end
159
+
160
+ describe '#autoload' do
161
+ it 'ignores autoload outside of context class' do
162
+ compiler = compiler_for(%Q{autoload Whatever, "#{__FILE__}"})
163
+ expect(compiler.requires).to eq([])
164
+ end
165
+
166
+ it 'parses and resolve second #autoload arguments' do
167
+ compiler = compiler_for(%Q{class Foo; autoload Whatever, "#{__FILE__}"; end})
168
+ expect(compiler.requires).to eq([__FILE__])
169
+ end
170
+ end
171
+
172
+ describe '#require_relative' do
173
+ it 'parses and resolve #require_relative argument' do
174
+ compiler = compiler_for(%Q{require_relative "./#{File.basename(__FILE__)}"}, file: __FILE__)
175
+ expect(compiler.requires).to eq([__FILE__])
176
+ end
177
+ end
178
+
179
+ describe '#require_tree' do
180
+ require 'pathname'
181
+ let(:file) { Pathname(__FILE__).join('../fixtures/require_tree_test.rb') }
182
+
183
+ it 'parses and resolve #require argument' do
184
+ compiler = compiler_for(file.read)
185
+ expect(compiler.required_trees).to eq(['../fixtures/required_tree_test'])
186
+ end
187
+ end
188
+ end
189
+
190
+ def expect_compiled(*args)
191
+ expect(Opal::Compiler.new(*args).compile)
192
+ end
193
+
194
+ def compiler_for(*args)
195
+ Opal::Compiler.new(*args).tap(&:compile)
196
+ end
197
+ end
@@ -0,0 +1,40 @@
1
+ require 'lib/spec_helper'
2
+
3
+ describe Opal::Nodes::CallNode::DependencyResolver do
4
+ let(:compiler) { double(:compiler, :dynamic_require_severity => :none) }
5
+
6
+ it "resolves simple strings to themselves" do
7
+ expect(resolve s(:str, 'foo')).to eq('foo')
8
+ end
9
+
10
+ context "using a dynamic segment not supported" do
11
+ it "raises a compiler error when severity is :error" do
12
+ compiler = double(:compiler, :dynamic_require_severity => :error)
13
+ expect(compiler).to receive(:error).once
14
+ expect(compiler).to receive(:dynamic_require_severity).once
15
+ described_class.new(compiler, s(:self)).resolve
16
+ end
17
+
18
+ it "produces a compiler warning when severity is :warning" do
19
+ compiler = double(:compiler, :dynamic_require_severity => :warning)
20
+ expect(compiler).to receive(:warning).once
21
+ expect(compiler).to receive(:dynamic_require_severity).once
22
+ described_class.new(compiler, s(:self)).resolve
23
+ end
24
+
25
+ it "does not produce a warning or error for other options" do
26
+ compiler = double(:compiler, :dynamic_require_severity => :foo)
27
+ expect(compiler).to_not receive(:warning)
28
+ expect(compiler).to_not receive(:error)
29
+ described_class.new(compiler, s(:self)).resolve
30
+ end
31
+ end
32
+
33
+ def s(*parts)
34
+ Opal::Sexp.new(parts)
35
+ end
36
+
37
+ def resolve(sexp)
38
+ described_class.new(compiler, sexp).resolve
39
+ end
40
+ end
@@ -0,0 +1 @@
1
+ puts 'hi there'
@@ -0,0 +1,2 @@
1
+ require 'opal'
2
+ puts 'hi from opal!'
@@ -0,0 +1,3 @@
1
+ require_tree '../fixtures/required_tree_test'
2
+
3
+ puts 5
@@ -0,0 +1,7 @@
1
+ require 'foo'
2
+
3
+ puts 'hello'
4
+
5
+ require 'bar'
6
+
7
+ puts 'goodbye'
@@ -0,0 +1,3 @@
1
+ require 'opal'
2
+ require 'native'
3
+ puts 'sprockets!'
@@ -0,0 +1,3 @@
1
+ #=require_tree ./required_tree_test
2
+
3
+ puts 5
@@ -0,0 +1,23 @@
1
+ require 'lib/spec_helper'
2
+ require 'lib/shared/path_finder_shared'
3
+ require 'opal/hike_path_finder'
4
+
5
+ describe Opal::HikePathFinder do
6
+ subject(:path_finder) { described_class.new(root) }
7
+ let(:root) { File.expand_path('..', __FILE__) }
8
+ let(:path) { 'fixtures/opal_file' }
9
+ let(:full_path) { File.join(root, path + ext) }
10
+ let(:ext) { '.rb' }
11
+
12
+ include_examples :path_finder
13
+
14
+ context 'with absolute paths' do
15
+ it 'returns the path if exists' do
16
+ expect(path_finder.find(full_path)).to eq(full_path)
17
+ end
18
+
19
+ it 'gives nil if it is missing' do
20
+ expect(path_finder.find(full_path+'/not-real')).to eq(nil)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,110 @@
1
+ require 'support/parser_helpers'
2
+ require 'opal/parser'
3
+
4
+ describe Opal::Lexer do
5
+ it "sets correct line information for each token" do
6
+ expect_lines("42").to eq([1])
7
+ expect_lines("\n3.142").to eq([2])
8
+ expect_lines("3.142\n42\n57").to eq([1, 2, 3])
9
+ end
10
+
11
+ it "increments the line count over multiple new lines" do
12
+ expect_lines("1\n\n\n2").to eq([1, 4])
13
+ expect_lines("\n\n\n3\n\n5\n\n").to eq([4, 6])
14
+ end
15
+
16
+ it "increments line numbers over =begin...=end blocks" do
17
+ expect_lines("=begin\n=end\n1").to eq([3])
18
+ expect_lines("=begin\nfoo\nbar\n=end\n42\n43").to eq([5, 6])
19
+ end
20
+
21
+ it "sets correct column for each token" do
22
+ expect_columns("1").to eq([0])
23
+ expect_columns("1;2; 3").to eq([0, 2, 5])
24
+ expect_columns(" \t3").to eq([5])
25
+ end
26
+
27
+ it "sets the column to 0 on each new line" do
28
+ expect_columns("1\n2\n\n\n3\n 4").to eq([0, 0, 0, 1])
29
+ end
30
+
31
+ it "sets column with regard to whitespace and other tokens before it" do
32
+ expect_columns("true; false; self\n ni;").to eq([0, 7, 15, 2])
33
+ end
34
+
35
+ describe "double-quoted strings" do
36
+ it "escape backslashes in strings" do
37
+ expect_parsed_string("\"foo\"").to eq("foo")
38
+ expect_parsed_string("\"foo\\tbar\"").to eq("foo\tbar")
39
+ expect_parsed_string("\"\\\"foo\"").to eq("\"foo")
40
+ end
41
+
42
+ it "removes new line in string directly after backslash" do
43
+ expect_parsed_string("\"foo\\\nbar\"").to eq("foobar")
44
+ end
45
+ end
46
+
47
+ describe "single-quoted strings" do
48
+ it "do not support interpolation" do
49
+ expect_parsed_string("'foo\#{self}'").to eq('foo#{self}')
50
+ expect_parsed_string("'\#@bar'").to eq('#@bar')
51
+ expect_parsed_string("'\#$baz'").to eq('#$baz')
52
+ end
53
+
54
+ it "do not escape backslashed characters" do
55
+ expect_parsed_string("'foo'").to eq("foo")
56
+ expect_parsed_string("'foo\\tbar'").to eq("foo\\tbar")
57
+ end
58
+
59
+ it "can escape \\ and \' characters" do
60
+ expect_parsed_string("'a\\\\b\\'c'").to eq("a\\b'c")
61
+ end
62
+ end
63
+
64
+ describe "escaped characters" do
65
+ it "can parse octal escape sequences" do
66
+ expect_parsed_string('"\\101\\103\\102"').to eq("ACB")
67
+ end
68
+
69
+ it "can parse hex escape sequences" do
70
+ expect_parsed_string('"\\x61\\x63\\x62"').to eq('acb')
71
+ end
72
+
73
+ if defined?(::Encoding)
74
+ it "can parse simple unicode sequences" do
75
+ expect_parsed_string('"\\u1234"').to eq("\u1234")
76
+ end
77
+ end
78
+ end
79
+
80
+ describe "__END__ content in a source file" do
81
+ it "ignores token and following content if at start of line and followed by newline" do
82
+ expect_parsed("42\n__END__").to eq([:int, 42])
83
+ expect_parsed("42\n__END__\nFred").to eq([:int, 42])
84
+ expect_parsed(" __END__").to eq([:call, nil, :__END__, [:arglist]])
85
+ expect_parsed("__END__ ").to eq([:call, nil, :__END__, [:arglist]])
86
+ expect_parsed("__END__ 42").to eq([:call, nil, :__END__, [:arglist, [:int, 42]]])
87
+ end
88
+
89
+ it "adds any __END__ content to lexer.eof_content" do
90
+ parser = Opal::Parser.new
91
+ parser.parse("42")
92
+ expect(parser.lexer.eof_content).to eq(nil)
93
+
94
+ parser = Opal::Parser.new
95
+ parser.parse("42\n__END__\nFord\nPerfect")
96
+ expect(parser.lexer.eof_content).to eq("Ford\nPerfect")
97
+
98
+ parser = Opal::Parser.new
99
+ parser.parse("42\n__END__\n")
100
+ expect(parser.lexer.eof_content).to eq("")
101
+ end
102
+ end
103
+
104
+ describe "variable dereferencing ([])" do
105
+ it "handles referencing correctly on local variables in scope" do
106
+ expect_parsed("x = 0; x [0]").to eq([:block, [:lasgn, :x, [:int, 0]],
107
+ [:call, [:lvar, :x], :[], [:arglist, [:int, 0]]]])
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,26 @@
1
+ require 'support/parser_helpers'
2
+
3
+ describe "The alias keyword" do
4
+ describe "with fitem" do
5
+ it "should return an s(:alias) with s(:sym)" do
6
+ parsed("alias a b").should == [:alias, [:sym, :a], [:sym, :b]]
7
+ parsed("alias == equals").should == [:alias, [:sym, :==], [:sym, :equals]]
8
+ end
9
+
10
+ it "should accept symbols as names" do
11
+ parsed("alias :foo :bar").should == [:alias, [:sym, :foo], [:sym, :bar]]
12
+ end
13
+ end
14
+
15
+ describe "with gvar" do
16
+ it "should return a s(:valias) with two gvars as arguments" do
17
+ parsed("alias $foo $bar").should == [:valias, :$foo, :$bar]
18
+ end
19
+ end
20
+
21
+ describe "with gvar and nth ref" do
22
+ it "should return a s(:valias) with two values as arguments" do
23
+ parsed("alias $foo $1").should == [:valias, :$foo, :"1"]
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ require 'support/parser_helpers'
2
+
3
+ describe "The and statement" do
4
+ it "should always return s(:and)" do
5
+ parsed("1 and 2").should == [:and, [:int, 1], [:int, 2]]
6
+ end
7
+ end
8
+
9
+ describe "The && expression" do
10
+ it "should always return s(:and)" do
11
+ parsed("1 && 2").should == [:and, [:int, 1], [:int, 2]]
12
+ end
13
+ end