opal-wedge 0.9.0.dev

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 (830) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.gitmodules +7 -0
  4. data/.inch.yml +19 -0
  5. data/.jshintrc +48 -0
  6. data/.rspec +3 -0
  7. data/.spectator +2 -0
  8. data/.spectator-mspec +3 -0
  9. data/.travis.yml +60 -0
  10. data/.yardopts +6 -0
  11. data/CHANGELOG.md +571 -0
  12. data/CODE_OF_CONDUCT.md +15 -0
  13. data/CONTRIBUTING.md +192 -0
  14. data/Gemfile +26 -0
  15. data/Guardfile +77 -0
  16. data/LICENSE +19 -0
  17. data/README.md +167 -0
  18. data/Rakefile +15 -0
  19. data/benchmark/benchmarks +103 -0
  20. data/benchmark/bm_array_intersection_numbers.rb +7 -0
  21. data/benchmark/bm_array_intersection_objects.rb +7 -0
  22. data/benchmark/bm_array_intersection_strings.rb +7 -0
  23. data/benchmark/bm_array_minus_numbers.rb +7 -0
  24. data/benchmark/bm_array_minus_objects.rb +7 -0
  25. data/benchmark/bm_array_minus_strings.rb +7 -0
  26. data/benchmark/bm_array_union_numbers.rb +7 -0
  27. data/benchmark/bm_array_union_objects.rb +7 -0
  28. data/benchmark/bm_array_union_strings.rb +7 -0
  29. data/benchmark/bm_array_uniq_bang_numbers.rb +5 -0
  30. data/benchmark/bm_array_uniq_bang_objects.rb +5 -0
  31. data/benchmark/bm_array_uniq_bang_strings.rb +5 -0
  32. data/benchmark/bm_array_uniq_numbers.rb +5 -0
  33. data/benchmark/bm_array_uniq_objects.rb +5 -0
  34. data/benchmark/bm_array_uniq_strings.rb +5 -0
  35. data/benchmark/bm_dispatch_bind_table.rb +57 -0
  36. data/benchmark/bm_dispatch_code_gen.rb +65 -0
  37. data/benchmark/bm_dispatch_code_gen_if.rb +64 -0
  38. data/benchmark/bm_dispatch_hardcoded.rb +44 -0
  39. data/benchmark/bm_dispatch_send.rb +38 -0
  40. data/benchmark/bm_dispatch_send_table.rb +57 -0
  41. data/benchmark/bm_hash_assoc_object.rb +11 -0
  42. data/benchmark/bm_hash_assoc_string.rb +9 -0
  43. data/benchmark/bm_hash_clone_object.rb +9 -0
  44. data/benchmark/bm_hash_clone_string.rb +9 -0
  45. data/benchmark/bm_hash_delete_object.rb +11 -0
  46. data/benchmark/bm_hash_delete_string.rb +9 -0
  47. data/benchmark/bm_hash_each_key_object.rb +9 -0
  48. data/benchmark/bm_hash_each_key_string.rb +9 -0
  49. data/benchmark/bm_hash_each_object.rb +9 -0
  50. data/benchmark/bm_hash_each_string.rb +9 -0
  51. data/benchmark/bm_hash_each_value_object.rb +9 -0
  52. data/benchmark/bm_hash_each_value_string.rb +9 -0
  53. data/benchmark/bm_hash_element_reference_object.rb +11 -0
  54. data/benchmark/bm_hash_element_reference_string.rb +9 -0
  55. data/benchmark/bm_hash_element_set_object.rb +5 -0
  56. data/benchmark/bm_hash_element_set_string.rb +5 -0
  57. data/benchmark/bm_hash_equal_value_object.rb +14 -0
  58. data/benchmark/bm_hash_equal_value_string.rb +11 -0
  59. data/benchmark/bm_hash_fetch_object.rb +11 -0
  60. data/benchmark/bm_hash_fetch_string.rb +9 -0
  61. data/benchmark/bm_hash_flatten_object.rb +9 -0
  62. data/benchmark/bm_hash_flatten_string.rb +9 -0
  63. data/benchmark/bm_hash_has_key_object.rb +11 -0
  64. data/benchmark/bm_hash_has_key_string.rb +9 -0
  65. data/benchmark/bm_hash_has_value_object.rb +9 -0
  66. data/benchmark/bm_hash_has_value_string.rb +9 -0
  67. data/benchmark/bm_hash_hash_object.rb +9 -0
  68. data/benchmark/bm_hash_hash_string.rb +9 -0
  69. data/benchmark/bm_hash_inspect_object.rb +9 -0
  70. data/benchmark/bm_hash_inspect_string.rb +9 -0
  71. data/benchmark/bm_hash_invert_object.rb +9 -0
  72. data/benchmark/bm_hash_invert_string.rb +9 -0
  73. data/benchmark/bm_hash_keep_if_object.rb +9 -0
  74. data/benchmark/bm_hash_keep_if_string.rb +9 -0
  75. data/benchmark/bm_hash_key_object.rb +9 -0
  76. data/benchmark/bm_hash_key_string.rb +9 -0
  77. data/benchmark/bm_hash_keys_object.rb +9 -0
  78. data/benchmark/bm_hash_keys_string.rb +9 -0
  79. data/benchmark/bm_hash_literal_mixed_large.rb +3 -0
  80. data/benchmark/bm_hash_literal_mixed_small.rb +3 -0
  81. data/benchmark/bm_hash_literal_object_large.rb +4 -0
  82. data/benchmark/bm_hash_literal_object_small.rb +3 -0
  83. data/benchmark/bm_hash_literal_string_large.rb +4 -0
  84. data/benchmark/bm_hash_literal_string_small.rb +3 -0
  85. data/benchmark/bm_hash_merge_object.rb +22 -0
  86. data/benchmark/bm_hash_merge_string.rb +18 -0
  87. data/benchmark/bm_hash_rassoc_object.rb +9 -0
  88. data/benchmark/bm_hash_rassoc_string.rb +9 -0
  89. data/benchmark/bm_hash_rehash_object.rb +9 -0
  90. data/benchmark/bm_hash_rehash_string.rb +9 -0
  91. data/benchmark/bm_hash_reject_bang_object.rb +9 -0
  92. data/benchmark/bm_hash_reject_bang_string.rb +9 -0
  93. data/benchmark/bm_hash_reject_object.rb +9 -0
  94. data/benchmark/bm_hash_reject_string.rb +9 -0
  95. data/benchmark/bm_hash_replace_object.rb +18 -0
  96. data/benchmark/bm_hash_replace_string.rb +14 -0
  97. data/benchmark/bm_hash_select_bang_object.rb +9 -0
  98. data/benchmark/bm_hash_select_bang_string.rb +9 -0
  99. data/benchmark/bm_hash_select_object.rb +9 -0
  100. data/benchmark/bm_hash_select_string.rb +9 -0
  101. data/benchmark/bm_hash_shift_object.rb +10 -0
  102. data/benchmark/bm_hash_shift_string.rb +10 -0
  103. data/benchmark/bm_hash_to_a_object.rb +9 -0
  104. data/benchmark/bm_hash_to_a_string.rb +9 -0
  105. data/benchmark/bm_hash_to_h_object.rb +10 -0
  106. data/benchmark/bm_hash_to_h_string.rb +10 -0
  107. data/benchmark/bm_hash_values_object.rb +9 -0
  108. data/benchmark/bm_hash_values_string.rb +9 -0
  109. data/benchmark/run.rb +37 -0
  110. data/bin/opal +27 -0
  111. data/bin/opal-build +77 -0
  112. data/bin/opal-mspec +10 -0
  113. data/bin/opal-repl +72 -0
  114. data/config.ru +14 -0
  115. data/docs/compiler_directives.md +127 -0
  116. data/examples/rack/.gitignore +1 -0
  117. data/examples/rack/Gemfile +3 -0
  118. data/examples/rack/app/application.rb +13 -0
  119. data/examples/rack/app/user.rb +22 -0
  120. data/examples/rack/config.ru +20 -0
  121. data/examples/rack/index.html.erb +10 -0
  122. data/examples/sinatra/Gemfile +5 -0
  123. data/examples/sinatra/app/application.rb +7 -0
  124. data/examples/sinatra/config.ru +38 -0
  125. data/lib/mspec/opal/main.rb.erb +9 -0
  126. data/lib/mspec/opal/new.html.erb +1 -0
  127. data/lib/mspec/opal/rake_task.rb +248 -0
  128. data/lib/mspec/opal/runner.rb +281 -0
  129. data/lib/mspec/opal/special_calls.rb +44 -0
  130. data/lib/mspec/opal/sprockets.js +57 -0
  131. data/lib/opal-wedge.rb +4 -0
  132. data/lib/opal.rb +11 -0
  133. data/lib/opal/builder.rb +161 -0
  134. data/lib/opal/builder_processors.rb +149 -0
  135. data/lib/opal/cli.rb +162 -0
  136. data/lib/opal/cli_options.rb +158 -0
  137. data/lib/opal/cli_runners.rb +11 -0
  138. data/lib/opal/cli_runners/apple_script.rb +65 -0
  139. data/lib/opal/cli_runners/nodejs.rb +63 -0
  140. data/lib/opal/cli_runners/phantom.js +44 -0
  141. data/lib/opal/cli_runners/phantomjs.rb +28 -0
  142. data/lib/opal/cli_runners/server.rb +56 -0
  143. data/lib/opal/compiler.rb +381 -0
  144. data/lib/opal/config.rb +48 -0
  145. data/lib/opal/erb.rb +84 -0
  146. data/lib/opal/fragment.rb +53 -0
  147. data/lib/opal/hike_path_finder.rb +18 -0
  148. data/lib/opal/nodes.rb +26 -0
  149. data/lib/opal/nodes/arglist.rb +56 -0
  150. data/lib/opal/nodes/array.rb +54 -0
  151. data/lib/opal/nodes/base.rb +151 -0
  152. data/lib/opal/nodes/call.rb +290 -0
  153. data/lib/opal/nodes/call_special.rb +252 -0
  154. data/lib/opal/nodes/case.rb +96 -0
  155. data/lib/opal/nodes/class.rb +42 -0
  156. data/lib/opal/nodes/constants.rb +78 -0
  157. data/lib/opal/nodes/def.rb +281 -0
  158. data/lib/opal/nodes/defined.rb +113 -0
  159. data/lib/opal/nodes/definitions.rb +168 -0
  160. data/lib/opal/nodes/for.rb +48 -0
  161. data/lib/opal/nodes/hash.rb +67 -0
  162. data/lib/opal/nodes/helpers.rb +116 -0
  163. data/lib/opal/nodes/if.rb +81 -0
  164. data/lib/opal/nodes/iter.rb +136 -0
  165. data/lib/opal/nodes/literal.rb +247 -0
  166. data/lib/opal/nodes/logic.rb +217 -0
  167. data/lib/opal/nodes/masgn.rb +62 -0
  168. data/lib/opal/nodes/module.rb +45 -0
  169. data/lib/opal/nodes/rescue.rb +143 -0
  170. data/lib/opal/nodes/runtime_helpers.rb +45 -0
  171. data/lib/opal/nodes/scope.rb +281 -0
  172. data/lib/opal/nodes/singleton_class.rb +26 -0
  173. data/lib/opal/nodes/super.rb +97 -0
  174. data/lib/opal/nodes/top.rb +103 -0
  175. data/lib/opal/nodes/variables.rb +191 -0
  176. data/lib/opal/nodes/while.rb +65 -0
  177. data/lib/opal/nodes/yield.rb +95 -0
  178. data/lib/opal/parser.rb +742 -0
  179. data/lib/opal/parser/grammar.rb +5723 -0
  180. data/lib/opal/parser/grammar.y +1787 -0
  181. data/lib/opal/parser/keywords.rb +66 -0
  182. data/lib/opal/parser/lexer.rb +1260 -0
  183. data/lib/opal/parser/parser_scope.rb +28 -0
  184. data/lib/opal/parser/sexp.rb +81 -0
  185. data/lib/opal/path_reader.rb +35 -0
  186. data/lib/opal/paths.rb +55 -0
  187. data/lib/opal/regexp_anchors.rb +5 -0
  188. data/lib/opal/source_map.rb +70 -0
  189. data/lib/opal/sprockets.rb +3 -0
  190. data/lib/opal/sprockets/cache_key_fix.rb +17 -0
  191. data/lib/opal/sprockets/environment.rb +31 -0
  192. data/lib/opal/sprockets/erb.rb +23 -0
  193. data/lib/opal/sprockets/path_reader.rb +36 -0
  194. data/lib/opal/sprockets/processor.rb +167 -0
  195. data/lib/opal/sprockets/server.rb +160 -0
  196. data/lib/opal/sprockets/source_map_header_patch.rb +41 -0
  197. data/lib/opal/sprockets/source_map_server.rb +115 -0
  198. data/lib/opal/util.rb +69 -0
  199. data/lib/opal/version.rb +5 -0
  200. data/lib/tilt/opal.rb +54 -0
  201. data/opal.gemspec +37 -0
  202. data/opal/README.md +6 -0
  203. data/opal/corelib/array.rb +2073 -0
  204. data/opal/corelib/array/inheritance.rb +127 -0
  205. data/opal/corelib/basic_object.rb +82 -0
  206. data/opal/corelib/boolean.rb +47 -0
  207. data/opal/corelib/class.rb +55 -0
  208. data/opal/corelib/comparable.rb +57 -0
  209. data/opal/corelib/complex.rb +3 -0
  210. data/opal/corelib/dir.rb +20 -0
  211. data/opal/corelib/enumerable.rb +1138 -0
  212. data/opal/corelib/enumerator.rb +426 -0
  213. data/opal/corelib/error.rb +77 -0
  214. data/opal/corelib/file.rb +59 -0
  215. data/opal/corelib/hash.rb +951 -0
  216. data/opal/corelib/helpers.rb +102 -0
  217. data/opal/corelib/io.rb +73 -0
  218. data/opal/corelib/kernel.rb +1124 -0
  219. data/opal/corelib/main.rb +7 -0
  220. data/opal/corelib/match_data.rb +128 -0
  221. data/opal/corelib/method.rb +62 -0
  222. data/opal/corelib/module.rb +553 -0
  223. data/opal/corelib/nil_class.rb +57 -0
  224. data/opal/corelib/numeric.rb +564 -0
  225. data/opal/corelib/proc.rb +105 -0
  226. data/opal/corelib/process.rb +27 -0
  227. data/opal/corelib/range.rb +116 -0
  228. data/opal/corelib/rational.rb +3 -0
  229. data/opal/corelib/regexp.rb +203 -0
  230. data/opal/corelib/runtime.js +1637 -0
  231. data/opal/corelib/string.rb +1762 -0
  232. data/opal/corelib/string/inheritance.rb +117 -0
  233. data/opal/corelib/struct.rb +159 -0
  234. data/opal/corelib/time.rb +746 -0
  235. data/opal/corelib/variables.rb +28 -0
  236. data/opal/opal.rb +33 -0
  237. data/spec/README.md +8 -0
  238. data/spec/filters/bugs/array.rb +77 -0
  239. data/spec/filters/bugs/basicobject.rb +33 -0
  240. data/spec/filters/bugs/class.rb +15 -0
  241. data/spec/filters/bugs/comparable.rb +4 -0
  242. data/spec/filters/bugs/date.rb +173 -0
  243. data/spec/filters/bugs/enumerable.rb +62 -0
  244. data/spec/filters/bugs/enumerator.rb +45 -0
  245. data/spec/filters/bugs/exception.rb +84 -0
  246. data/spec/filters/bugs/fixnum.rb +35 -0
  247. data/spec/filters/bugs/float.rb +100 -0
  248. data/spec/filters/bugs/hash.rb +17 -0
  249. data/spec/filters/bugs/integer.rb +63 -0
  250. data/spec/filters/bugs/kernel.rb +395 -0
  251. data/spec/filters/bugs/language.rb +246 -0
  252. data/spec/filters/bugs/math.rb +89 -0
  253. data/spec/filters/bugs/method.rb +5 -0
  254. data/spec/filters/bugs/module.rb +372 -0
  255. data/spec/filters/bugs/nil.rb +7 -0
  256. data/spec/filters/bugs/numeric.rb +123 -0
  257. data/spec/filters/bugs/proc.rb +65 -0
  258. data/spec/filters/bugs/range.rb +148 -0
  259. data/spec/filters/bugs/regexp.rb +252 -0
  260. data/spec/filters/bugs/set.rb +51 -0
  261. data/spec/filters/bugs/singleton.rb +6 -0
  262. data/spec/filters/bugs/string.rb +99 -0
  263. data/spec/filters/bugs/strscan.rb +106 -0
  264. data/spec/filters/bugs/struct.rb +22 -0
  265. data/spec/filters/bugs/time.rb +28 -0
  266. data/spec/filters/bugs/unboundmethod.rb +22 -0
  267. data/spec/filters/unsupported/array.rb +176 -0
  268. data/spec/filters/unsupported/basicobject.rb +12 -0
  269. data/spec/filters/unsupported/class.rb +4 -0
  270. data/spec/filters/unsupported/delegator.rb +5 -0
  271. data/spec/filters/unsupported/enumerable.rb +8 -0
  272. data/spec/filters/unsupported/enumerator.rb +13 -0
  273. data/spec/filters/unsupported/fixnum.rb +15 -0
  274. data/spec/filters/unsupported/float.rb +6 -0
  275. data/spec/filters/unsupported/hash.rb +55 -0
  276. data/spec/filters/unsupported/integer.rb +3 -0
  277. data/spec/filters/unsupported/kernel.rb +22 -0
  278. data/spec/filters/unsupported/language.rb +31 -0
  279. data/spec/filters/unsupported/matchdata.rb +33 -0
  280. data/spec/filters/unsupported/math.rb +3 -0
  281. data/spec/filters/unsupported/module.rb +36 -0
  282. data/spec/filters/unsupported/pathname.rb +3 -0
  283. data/spec/filters/unsupported/regexp.rb +94 -0
  284. data/spec/filters/unsupported/set.rb +4 -0
  285. data/spec/filters/unsupported/singleton.rb +6 -0
  286. data/spec/filters/unsupported/string.rb +538 -0
  287. data/spec/filters/unsupported/struct.rb +3 -0
  288. data/spec/filters/unsupported/time.rb +208 -0
  289. data/spec/lib/builder_processors_spec.rb +27 -0
  290. data/spec/lib/builder_spec.rb +72 -0
  291. data/spec/lib/cli_spec.rb +150 -0
  292. data/spec/lib/compiler/pre_processed_conditionals_spec.rb +87 -0
  293. data/spec/lib/compiler_spec.rb +131 -0
  294. data/spec/lib/dependency_resolver_spec.rb +40 -0
  295. data/spec/lib/fixtures/complex_sprockets.js.rb.erb +4 -0
  296. data/spec/lib/fixtures/file_with_directives.js +2 -0
  297. data/spec/lib/fixtures/jst_file.js.jst +1 -0
  298. data/spec/lib/fixtures/no_requires.rb +1 -0
  299. data/spec/lib/fixtures/opal_file.rb +2 -0
  300. data/spec/lib/fixtures/require_tree_test.rb +3 -0
  301. data/spec/lib/fixtures/required_file.js +1 -0
  302. data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
  303. data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
  304. data/spec/lib/fixtures/requires.rb +7 -0
  305. data/spec/lib/fixtures/source_map.rb +1 -0
  306. data/spec/lib/fixtures/source_map/subfolder/other_file.rb +1 -0
  307. data/spec/lib/fixtures/sprockets_file.js.rb +3 -0
  308. data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
  309. data/spec/lib/hike_path_finder_spec.rb +23 -0
  310. data/spec/lib/lexer_spec.rb +110 -0
  311. data/spec/lib/parser/alias_spec.rb +26 -0
  312. data/spec/lib/parser/and_spec.rb +13 -0
  313. data/spec/lib/parser/attrasgn_spec.rb +28 -0
  314. data/spec/lib/parser/begin_spec.rb +42 -0
  315. data/spec/lib/parser/block_spec.rb +12 -0
  316. data/spec/lib/parser/break_spec.rb +17 -0
  317. data/spec/lib/parser/call_spec.rb +165 -0
  318. data/spec/lib/parser/class_spec.rb +35 -0
  319. data/spec/lib/parser/comments_spec.rb +11 -0
  320. data/spec/lib/parser/def_spec.rb +80 -0
  321. data/spec/lib/parser/if_spec.rb +26 -0
  322. data/spec/lib/parser/iter_spec.rb +59 -0
  323. data/spec/lib/parser/lambda_spec.rb +64 -0
  324. data/spec/lib/parser/literal_spec.rb +118 -0
  325. data/spec/lib/parser/masgn_spec.rb +37 -0
  326. data/spec/lib/parser/module_spec.rb +27 -0
  327. data/spec/lib/parser/not_spec.rb +21 -0
  328. data/spec/lib/parser/op_asgn1_spec.rb +23 -0
  329. data/spec/lib/parser/op_asgn2_spec.rb +23 -0
  330. data/spec/lib/parser/or_spec.rb +13 -0
  331. data/spec/lib/parser/return_spec.rb +17 -0
  332. data/spec/lib/parser/sclass_spec.rb +21 -0
  333. data/spec/lib/parser/string_spec.rb +276 -0
  334. data/spec/lib/parser/super_spec.rb +20 -0
  335. data/spec/lib/parser/unary_spec.rb +48 -0
  336. data/spec/lib/parser/undef_spec.rb +15 -0
  337. data/spec/lib/parser/unless_spec.rb +13 -0
  338. data/spec/lib/parser/variables_spec.rb +92 -0
  339. data/spec/lib/parser/while_spec.rb +15 -0
  340. data/spec/lib/parser/yield_spec.rb +20 -0
  341. data/spec/lib/path_reader_spec.rb +36 -0
  342. data/spec/lib/shared/path_finder_shared.rb +19 -0
  343. data/spec/lib/shared/path_reader_shared.rb +31 -0
  344. data/spec/lib/spec_helper.rb +9 -0
  345. data/spec/lib/sprockets/erb_spec.rb +38 -0
  346. data/spec/lib/sprockets/path_reader_spec.rb +41 -0
  347. data/spec/lib/sprockets/processor_spec.rb +67 -0
  348. data/spec/lib/sprockets/server_spec.rb +102 -0
  349. data/spec/lib/tilt/opal_spec.rb +37 -0
  350. data/spec/opal/compiler/irb_spec.rb +44 -0
  351. data/spec/opal/core/array/intersection_spec.rb +38 -0
  352. data/spec/opal/core/array/minus_spec.rb +38 -0
  353. data/spec/opal/core/array/select_spec.rb +14 -0
  354. data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
  355. data/spec/opal/core/array/union_spec.rb +38 -0
  356. data/spec/opal/core/array/uniq_spec.rb +49 -0
  357. data/spec/opal/core/date_spec.rb +177 -0
  358. data/spec/opal/core/enumerable/all_break_spec.rb +5 -0
  359. data/spec/opal/core/enumerable/any_break_spec.rb +5 -0
  360. data/spec/opal/core/enumerable/collect_break_spec.rb +13 -0
  361. data/spec/opal/core/enumerable/count_break_spec.rb +5 -0
  362. data/spec/opal/core/enumerable/detect_break_spec.rb +5 -0
  363. data/spec/opal/core/enumerable/drop_while_break_spec.rb +5 -0
  364. data/spec/opal/core/enumerable/each_slice_break.rb +6 -0
  365. data/spec/opal/core/enumerable/each_with_index_break_spec.rb +5 -0
  366. data/spec/opal/core/enumerable/each_with_object_break_spec.rb +5 -0
  367. data/spec/opal/core/enumerable/find_all_break_spec.rb +5 -0
  368. data/spec/opal/core/enumerable/find_index_break_spec.rb +5 -0
  369. data/spec/opal/core/enumerable/grep_break_spec.rb +5 -0
  370. data/spec/opal/core/enumerable/max_break_spec.rb +5 -0
  371. data/spec/opal/core/enumerable/max_by_break_spec.rb +5 -0
  372. data/spec/opal/core/enumerable/min_break_spec.rb +5 -0
  373. data/spec/opal/core/enumerable/min_by_break_spec.rb +5 -0
  374. data/spec/opal/core/enumerable/none_break_spec.rb +5 -0
  375. data/spec/opal/core/enumerable/one_break_spec.rb +5 -0
  376. data/spec/opal/core/enumerable/reduce_break_spec.rb +5 -0
  377. data/spec/opal/core/enumerable/take_while_break_spec.rb +5 -0
  378. data/spec/opal/core/exception_spec.rb +13 -0
  379. data/spec/opal/core/fixtures/class.rb +124 -0
  380. data/spec/opal/core/fixtures/class_variables.rb +0 -0
  381. data/spec/opal/core/fixtures/constants.rb +33 -0
  382. data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
  383. data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
  384. data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
  385. data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
  386. data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
  387. data/spec/opal/core/fixtures/require_tree_files/nested/nested 1.rb +1 -0
  388. data/spec/opal/core/fixtures/require_tree_files/nested/nested 2.rb +1 -0
  389. data/spec/opal/core/fixtures/require_tree_files/other/other 1.rb +1 -0
  390. data/spec/opal/core/fixtures/require_tree_with_dot/file 1.rb +1 -0
  391. data/spec/opal/core/fixtures/require_tree_with_dot/file 2.rb +1 -0
  392. data/spec/opal/core/fixtures/require_tree_with_dot/file 3.rb +1 -0
  393. data/spec/opal/core/fixtures/require_tree_with_dot/index.rb +3 -0
  394. data/spec/opal/core/hash/has_value_spec.rb +13 -0
  395. data/spec/opal/core/hash/internals_spec.rb +332 -0
  396. data/spec/opal/core/kernel/Array_spec.rb +10 -0
  397. data/spec/opal/core/kernel/block_given_spec.rb +30 -0
  398. data/spec/opal/core/kernel/class_spec.rb +6 -0
  399. data/spec/opal/core/kernel/define_singleton_method_spec.rb +21 -0
  400. data/spec/opal/core/kernel/equal_value_spec.rb +12 -0
  401. data/spec/opal/core/kernel/extend_spec.rb +21 -0
  402. data/spec/opal/core/kernel/format_spec.rb +122 -0
  403. data/spec/opal/core/kernel/freeze_spec.rb +15 -0
  404. data/spec/opal/core/kernel/instance_eval_spec.rb +28 -0
  405. data/spec/opal/core/kernel/instance_variable_defined_spec.rb +15 -0
  406. data/spec/opal/core/kernel/instance_variable_get_spec.rb +14 -0
  407. data/spec/opal/core/kernel/instance_variable_set_spec.rb +10 -0
  408. data/spec/opal/core/kernel/loop_spec.rb +23 -0
  409. data/spec/opal/core/kernel/match_spec.rb +5 -0
  410. data/spec/opal/core/kernel/method_spec.rb +31 -0
  411. data/spec/opal/core/kernel/methods_spec.rb +25 -0
  412. data/spec/opal/core/kernel/nil_spec.rb +7 -0
  413. data/spec/opal/core/kernel/p_spec.rb +15 -0
  414. data/spec/opal/core/kernel/printf_spec.rb +11 -0
  415. data/spec/opal/core/kernel/proc_spec.rb +13 -0
  416. data/spec/opal/core/kernel/rand_spec.rb +23 -0
  417. data/spec/opal/core/kernel/require_tree_spec.rb +18 -0
  418. data/spec/opal/core/kernel/respond_to_spec.rb +41 -0
  419. data/spec/opal/core/kernel/send_spec.rb +56 -0
  420. data/spec/opal/core/kernel/sprintf_spec.rb +5 -0
  421. data/spec/opal/core/language/block_spec.rb +538 -0
  422. data/spec/opal/core/language/fixtures/array.rb +11 -0
  423. data/spec/opal/core/language/fixtures/block.rb +57 -0
  424. data/spec/opal/core/language/fixtures/break.rb +240 -0
  425. data/spec/opal/core/language/fixtures/ensure.rb +72 -0
  426. data/spec/opal/core/language/fixtures/literal_lambda.rb +7 -0
  427. data/spec/opal/core/language/fixtures/metaclass.rb +33 -0
  428. data/spec/opal/core/language/fixtures/module.rb +24 -0
  429. data/spec/opal/core/language/fixtures/next.rb +128 -0
  430. data/spec/opal/core/language/fixtures/return.rb +118 -0
  431. data/spec/opal/core/language/fixtures/send.rb +110 -0
  432. data/spec/opal/core/language/fixtures/send_1.9.rb +22 -0
  433. data/spec/opal/core/language/fixtures/super.rb +308 -0
  434. data/spec/opal/core/language/fixtures/variables.rb +58 -0
  435. data/spec/opal/core/language/fixtures/yield.rb +28 -0
  436. data/spec/opal/core/language/predefined_spec.rb +138 -0
  437. data/spec/opal/core/language/proc_spec.rb +263 -0
  438. data/spec/opal/core/language/regexp_spec.rb +20 -0
  439. data/spec/opal/core/language/send_spec.rb +225 -0
  440. data/spec/opal/core/language/string_spec.rb +44 -0
  441. data/spec/opal/core/language/variables_spec.rb +1366 -0
  442. data/spec/opal/core/language/versions/array_1.9.rb +39 -0
  443. data/spec/opal/core/language/versions/block_1.9.rb +0 -0
  444. data/spec/opal/core/language/versions/break_1.9.rb +0 -0
  445. data/spec/opal/core/language/versions/case_1.9.rb +20 -0
  446. data/spec/opal/core/language/versions/def_2_0_spec.rb +62 -0
  447. data/spec/opal/core/language/versions/hash_1.9.rb +18 -0
  448. data/spec/opal/core/language/versions/literal_lambda_1.9.rb +143 -0
  449. data/spec/opal/core/language/versions/not_1.9.rb +22 -0
  450. data/spec/opal/core/language/versions/send_1.9.rb +241 -0
  451. data/spec/opal/core/language/versions/symbol_1.9.rb +15 -0
  452. data/spec/opal/core/language/versions/variables_1.9.rb +8 -0
  453. data/spec/opal/core/language_spec.rb +23 -0
  454. data/spec/opal/core/method/to_proc_spec.rb +28 -0
  455. data/spec/opal/core/module/alias_method_spec.rb +28 -0
  456. data/spec/opal/core/module/ancestors_spec.rb +11 -0
  457. data/spec/opal/core/module/append_features_spec.rb +14 -0
  458. data/spec/opal/core/module/attr_accessor_spec.rb +26 -0
  459. data/spec/opal/core/module/const_defined_spec.rb +85 -0
  460. data/spec/opal/core/module/const_get_spec.rb +85 -0
  461. data/spec/opal/core/module/const_missing_spec.rb +17 -0
  462. data/spec/opal/core/module/const_set_spec.rb +64 -0
  463. data/spec/opal/core/module/constants_spec.rb +49 -0
  464. data/spec/opal/core/module/fixtures/classes.rb +434 -0
  465. data/spec/opal/core/module/method_defined_spec.rb +48 -0
  466. data/spec/opal/core/module/module_function_spec.rb +25 -0
  467. data/spec/opal/core/module/name_spec.rb +52 -0
  468. data/spec/opal/core/module/public_method_defined_spec.rb +18 -0
  469. data/spec/opal/core/module/remove_const_spec.rb +22 -0
  470. data/spec/opal/core/module/undef_method_spec.rb +66 -0
  471. data/spec/opal/core/numeric/bit_and_spec.rb +7 -0
  472. data/spec/opal/core/numeric/bit_or_spec.rb +8 -0
  473. data/spec/opal/core/numeric/bit_xor_spec.rb +6 -0
  474. data/spec/opal/core/numeric/ceil_spec.rb +8 -0
  475. data/spec/opal/core/numeric/chr_spec.rb +8 -0
  476. data/spec/opal/core/numeric/comparison_spec.rb +24 -0
  477. data/spec/opal/core/numeric/complement_spec.rb +8 -0
  478. data/spec/opal/core/numeric/divide_spec.rb +10 -0
  479. data/spec/opal/core/numeric/eql_spec.rb +9 -0
  480. data/spec/opal/core/numeric/exponent_spec.rb +33 -0
  481. data/spec/opal/core/numeric/floor_spec.rb +8 -0
  482. data/spec/opal/core/numeric/gt_spec.rb +11 -0
  483. data/spec/opal/core/numeric/gte_spec.rb +12 -0
  484. data/spec/opal/core/numeric/integer_spec.rb +9 -0
  485. data/spec/opal/core/numeric/left_shift_spec.rb +21 -0
  486. data/spec/opal/core/numeric/lt_spec.rb +11 -0
  487. data/spec/opal/core/numeric/lte_spec.rb +12 -0
  488. data/spec/opal/core/numeric/minus_spec.rb +8 -0
  489. data/spec/opal/core/numeric/modulo_spec.rb +19 -0
  490. data/spec/opal/core/numeric/multiply_spec.rb +9 -0
  491. data/spec/opal/core/numeric/next_spec.rb +9 -0
  492. data/spec/opal/core/numeric/ord_spec.rb +9 -0
  493. data/spec/opal/core/numeric/plus_spec.rb +8 -0
  494. data/spec/opal/core/numeric/pred_spec.rb +7 -0
  495. data/spec/opal/core/numeric/right_shift_spec.rb +25 -0
  496. data/spec/opal/core/numeric/step_spec.rb +11 -0
  497. data/spec/opal/core/numeric/succ_spec.rb +9 -0
  498. data/spec/opal/core/numeric/times_spec.rb +36 -0
  499. data/spec/opal/core/numeric/to_f_spec.rb +7 -0
  500. data/spec/opal/core/numeric/to_i_spec.rb +7 -0
  501. data/spec/opal/core/numeric/to_json_spec.rb +8 -0
  502. data/spec/opal/core/numeric/to_s_spec.rb +26 -0
  503. data/spec/opal/core/numeric/uminus_spec.rb +9 -0
  504. data/spec/opal/core/numeric/upto_spec.rb +19 -0
  505. data/spec/opal/core/numeric/zero_spec.rb +7 -0
  506. data/spec/opal/core/object_id_spec.rb +56 -0
  507. data/spec/opal/core/proc/call_spec.rb +21 -0
  508. data/spec/opal/core/proc/element_reference_spec.rb +21 -0
  509. data/spec/opal/core/proc/proc_tricks_spec.rb +7 -0
  510. data/spec/opal/core/runtime/begin_spec.rb +39 -0
  511. data/spec/opal/core/runtime/block_send_spec.rb +28 -0
  512. data/spec/opal/core/runtime/block_spec.rb +23 -0
  513. data/spec/opal/core/runtime/bridged_classes_spec.rb +111 -0
  514. data/spec/opal/core/runtime/constants_spec.rb +13 -0
  515. data/spec/opal/core/runtime/donate_spec.rb +53 -0
  516. data/spec/opal/core/runtime/eval_spec.rb +5 -0
  517. data/spec/opal/core/runtime/main_methods_spec.rb +27 -0
  518. data/spec/opal/core/runtime/method_missing_spec.rb +62 -0
  519. data/spec/opal/core/runtime/method_spec.rb +31 -0
  520. data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
  521. data/spec/opal/core/runtime/paren_spec.rb +14 -0
  522. data/spec/opal/core/runtime/rescue_spec.rb +38 -0
  523. data/spec/opal/core/runtime/return_spec.rb +38 -0
  524. data/spec/opal/core/runtime/send_spec.rb +34 -0
  525. data/spec/opal/core/runtime/singleton_class_spec.rb +13 -0
  526. data/spec/opal/core/runtime/super_spec.rb +212 -0
  527. data/spec/opal/core/runtime/truthy_spec.rb +23 -0
  528. data/spec/opal/core/runtime/variables_spec.rb +20 -0
  529. data/spec/opal/core/runtime_spec.rb +58 -0
  530. data/spec/opal/core/source_map_spec.rb +15 -0
  531. data/spec/opal/core/string_spec.rb +11 -0
  532. data/spec/opal/stdlib/erb/erb_spec.rb +30 -0
  533. data/spec/opal/stdlib/erb/inline_block.opalerb +3 -0
  534. data/spec/opal/stdlib/erb/quoted.opalerb +1 -0
  535. data/spec/opal/stdlib/erb/simple.opalerb +1 -0
  536. data/spec/opal/stdlib/js_spec.rb +66 -0
  537. data/spec/opal/stdlib/json/ext_spec.rb +48 -0
  538. data/spec/opal/stdlib/json/parse_spec.rb +33 -0
  539. data/spec/opal/stdlib/native/alias_native_spec.rb +27 -0
  540. data/spec/opal/stdlib/native/each_spec.rb +13 -0
  541. data/spec/opal/stdlib/native/element_reference_spec.rb +16 -0
  542. data/spec/opal/stdlib/native/exposure_spec.rb +33 -0
  543. data/spec/opal/stdlib/native/ext_spec.rb +19 -0
  544. data/spec/opal/stdlib/native/initialize_spec.rb +17 -0
  545. data/spec/opal/stdlib/native/method_missing_spec.rb +51 -0
  546. data/spec/opal/stdlib/native/native_alias_spec.rb +19 -0
  547. data/spec/opal/stdlib/native/native_class_spec.rb +18 -0
  548. data/spec/opal/stdlib/native/native_module_spec.rb +13 -0
  549. data/spec/opal/stdlib/native/native_reader_spec.rb +22 -0
  550. data/spec/opal/stdlib/native/native_writer_spec.rb +30 -0
  551. data/spec/opal/stdlib/native/new_spec.rb +8 -0
  552. data/spec/opal/stdlib/promise/always_spec.rb +30 -0
  553. data/spec/opal/stdlib/promise/error_spec.rb +15 -0
  554. data/spec/opal/stdlib/promise/rescue_spec.rb +44 -0
  555. data/spec/opal/stdlib/promise/then_spec.rb +71 -0
  556. data/spec/opal/stdlib/promise/trace_spec.rb +52 -0
  557. data/spec/opal/stdlib/promise/value_spec.rb +15 -0
  558. data/spec/opal/stdlib/promise/when_spec.rb +34 -0
  559. data/spec/opal/stdlib/template/paths_spec.rb +10 -0
  560. data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
  561. data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
  562. data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
  563. data/spec/rubyspecs +144 -0
  564. data/spec/spec_helper.rb +53 -0
  565. data/spec/support/mspec_rspec_adapter.rb +33 -0
  566. data/spec/support/parser_helpers.rb +37 -0
  567. data/stdlib/README.md +3 -0
  568. data/stdlib/base64.rb +152 -0
  569. data/stdlib/benchmark.rb +557 -0
  570. data/stdlib/buffer.rb +41 -0
  571. data/stdlib/buffer/array.rb +66 -0
  572. data/stdlib/buffer/view.rb +70 -0
  573. data/stdlib/date.rb +248 -0
  574. data/stdlib/delegate.rb +29 -0
  575. data/stdlib/dir.rb +1 -0
  576. data/stdlib/encoding.rb +170 -0
  577. data/stdlib/enumerator.rb +1 -0
  578. data/stdlib/erb.rb +16 -0
  579. data/stdlib/file.rb +1 -0
  580. data/stdlib/fileutils.rb +0 -0
  581. data/stdlib/forwardable.rb +71 -0
  582. data/stdlib/iconv.rb +0 -0
  583. data/stdlib/js.rb +56 -0
  584. data/stdlib/json.rb +190 -0
  585. data/stdlib/math.rb +370 -0
  586. data/stdlib/native.rb +530 -0
  587. data/stdlib/nodejs.rb +7 -0
  588. data/stdlib/nodejs/dir.rb +13 -0
  589. data/stdlib/nodejs/file.rb +98 -0
  590. data/stdlib/nodejs/fileutils.rb +26 -0
  591. data/stdlib/nodejs/io.rb +2 -0
  592. data/stdlib/nodejs/irb.rb +45 -0
  593. data/stdlib/nodejs/kernel.rb +33 -0
  594. data/stdlib/nodejs/node_modules/.bin/js-yaml +140 -0
  595. data/stdlib/nodejs/node_modules/glob/LICENSE +15 -0
  596. data/stdlib/nodejs/node_modules/glob/README.md +357 -0
  597. data/stdlib/nodejs/node_modules/glob/common.js +177 -0
  598. data/stdlib/nodejs/node_modules/glob/glob.js +649 -0
  599. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/.eslintrc +17 -0
  600. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/LICENSE +15 -0
  601. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/README.md +37 -0
  602. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/inflight.js +44 -0
  603. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE +15 -0
  604. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md +36 -0
  605. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json +52 -0
  606. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js +51 -0
  607. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js +33 -0
  608. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/package.json +61 -0
  609. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/test.js +97 -0
  610. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/LICENSE +16 -0
  611. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/README.md +42 -0
  612. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits.js +1 -0
  613. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits_browser.js +23 -0
  614. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/package.json +51 -0
  615. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/test.js +25 -0
  616. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.npmignore +1 -0
  617. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.travis.yml +4 -0
  618. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/LICENSE +23 -0
  619. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/README.md +216 -0
  620. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/benchmark.js +15 -0
  621. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/browser.js +1181 -0
  622. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/minimatch.js +845 -0
  623. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore +2 -0
  624. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml +3 -0
  625. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md +121 -0
  626. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js +8 -0
  627. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js +191 -0
  628. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore +2 -0
  629. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml +4 -0
  630. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile +6 -0
  631. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md +80 -0
  632. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js +5 -0
  633. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js +38 -0
  634. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json +73 -0
  635. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js +56 -0
  636. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml +4 -0
  637. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE +18 -0
  638. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown +62 -0
  639. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js +6 -0
  640. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js +13 -0
  641. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json +83 -0
  642. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js +39 -0
  643. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json +75 -0
  644. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js +32 -0
  645. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt +1075 -0
  646. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt +182 -0
  647. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js +9 -0
  648. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js +10 -0
  649. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh +24 -0
  650. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js +15 -0
  651. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js +16 -0
  652. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js +10 -0
  653. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js +13 -0
  654. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js +7 -0
  655. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js +50 -0
  656. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/package.json +60 -0
  657. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/basic.js +399 -0
  658. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/brace-expand.js +45 -0
  659. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/defaults.js +274 -0
  660. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js +8 -0
  661. data/stdlib/nodejs/node_modules/glob/node_modules/once/LICENSE +27 -0
  662. data/stdlib/nodejs/node_modules/glob/node_modules/once/README.md +51 -0
  663. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE +15 -0
  664. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/README.md +36 -0
  665. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/package.json +52 -0
  666. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js +51 -0
  667. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js +33 -0
  668. data/stdlib/nodejs/node_modules/glob/node_modules/once/once.js +21 -0
  669. data/stdlib/nodejs/node_modules/glob/node_modules/once/package.json +60 -0
  670. data/stdlib/nodejs/node_modules/glob/node_modules/once/test/once.js +23 -0
  671. data/stdlib/nodejs/node_modules/glob/package.json +72 -0
  672. data/stdlib/nodejs/node_modules/glob/sync.js +409 -0
  673. data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +277 -0
  674. data/stdlib/nodejs/node_modules/js-yaml/LICENSE +21 -0
  675. data/stdlib/nodejs/node_modules/js-yaml/README.md +288 -0
  676. data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +140 -0
  677. data/stdlib/nodejs/node_modules/js-yaml/bower.json +23 -0
  678. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.js +3666 -0
  679. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +3 -0
  680. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +102 -0
  681. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +18 -0
  682. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +31 -0
  683. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +22 -0
  684. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +18 -0
  685. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +197 -0
  686. data/stdlib/nodejs/node_modules/js-yaml/index.js +7 -0
  687. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +39 -0
  688. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +62 -0
  689. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +554 -0
  690. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +25 -0
  691. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +1581 -0
  692. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +78 -0
  693. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +103 -0
  694. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +18 -0
  695. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +25 -0
  696. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +28 -0
  697. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +17 -0
  698. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +25 -0
  699. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +61 -0
  700. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +133 -0
  701. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +37 -0
  702. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +110 -0
  703. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +183 -0
  704. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +85 -0
  705. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +84 -0
  706. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +27 -0
  707. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +8 -0
  708. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +12 -0
  709. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +36 -0
  710. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +56 -0
  711. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +61 -0
  712. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +8 -0
  713. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +33 -0
  714. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +8 -0
  715. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +98 -0
  716. data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esparse +117 -0
  717. data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esvalidate +177 -0
  718. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +115 -0
  719. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +21 -0
  720. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +239 -0
  721. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +36 -0
  722. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +22 -0
  723. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +59 -0
  724. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +13 -0
  725. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +33 -0
  726. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +28 -0
  727. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +23 -0
  728. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +49 -0
  729. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +35 -0
  730. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +270 -0
  731. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +1 -0
  732. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +146 -0
  733. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +55 -0
  734. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +47 -0
  735. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +40 -0
  736. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +48 -0
  737. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +50 -0
  738. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +43 -0
  739. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +27 -0
  740. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +26 -0
  741. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +148 -0
  742. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +50 -0
  743. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +481 -0
  744. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +14 -0
  745. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +50 -0
  746. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +54 -0
  747. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +75 -0
  748. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +1168 -0
  749. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +18 -0
  750. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +88 -0
  751. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +798 -0
  752. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +77 -0
  753. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +2 -0
  754. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +8 -0
  755. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +825 -0
  756. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +33 -0
  757. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +11 -0
  758. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +10 -0
  759. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +26 -0
  760. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +673 -0
  761. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
  762. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +107 -0
  763. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +23 -0
  764. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +22 -0
  765. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +69 -0
  766. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +6 -0
  767. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +1415 -0
  768. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +62 -0
  769. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +73 -0
  770. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +117 -0
  771. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +177 -0
  772. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +3908 -0
  773. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +69 -0
  774. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +239 -0
  775. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +422 -0
  776. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +66 -0
  777. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +387 -0
  778. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +20238 -0
  779. data/stdlib/nodejs/node_modules/js-yaml/package.json +83 -0
  780. data/stdlib/nodejs/package.json +6 -0
  781. data/stdlib/nodejs/require.rb +30 -0
  782. data/stdlib/nodejs/rubygems.rb +68 -0
  783. data/stdlib/nodejs/yaml.rb +11 -0
  784. data/stdlib/observer.rb +202 -0
  785. data/stdlib/opal-parser.rb +54 -0
  786. data/stdlib/opal-source-maps.rb +2 -0
  787. data/stdlib/ostruct.rb +69 -0
  788. data/stdlib/pathname.rb +55 -0
  789. data/stdlib/phantomjs.rb +3 -0
  790. data/stdlib/pp.rb +35 -0
  791. data/stdlib/promise.rb +427 -0
  792. data/stdlib/racc/parser.rb +215 -0
  793. data/stdlib/rbconfig.rb +18 -0
  794. data/stdlib/securerandom.rb +12 -0
  795. data/stdlib/set.rb +170 -0
  796. data/stdlib/singleton.rb +40 -0
  797. data/stdlib/source_map.rb +5 -0
  798. data/stdlib/source_map/map.rb +220 -0
  799. data/stdlib/source_map/mapping.rb +26 -0
  800. data/stdlib/source_map/offset.rb +88 -0
  801. data/stdlib/source_map/version.rb +3 -0
  802. data/stdlib/source_map/vlq.rb +98 -0
  803. data/stdlib/sourcemap.rb +1 -0
  804. data/stdlib/stringio.rb +181 -0
  805. data/stdlib/strscan.rb +166 -0
  806. data/stdlib/template.rb +46 -0
  807. data/stdlib/thread.rb +164 -0
  808. data/stdlib/time.rb +9 -0
  809. data/stdlib/yaml.rb +1 -0
  810. data/tasks/benchmarking.rake +88 -0
  811. data/tasks/building.rake +58 -0
  812. data/tasks/documenting.rake +37 -0
  813. data/tasks/github.rake +19 -0
  814. data/tasks/linting.rake +18 -0
  815. data/tasks/testing.rake +125 -0
  816. data/vendored-minitest/minitest.rb +780 -0
  817. data/vendored-minitest/minitest/assertions.rb +662 -0
  818. data/vendored-minitest/minitest/autorun.rb +12 -0
  819. data/vendored-minitest/minitest/benchmark.rb +426 -0
  820. data/vendored-minitest/minitest/expectations.rb +281 -0
  821. data/vendored-minitest/minitest/hell.rb +11 -0
  822. data/vendored-minitest/minitest/mock.rb +220 -0
  823. data/vendored-minitest/minitest/parallel.rb +65 -0
  824. data/vendored-minitest/minitest/pride.rb +4 -0
  825. data/vendored-minitest/minitest/pride_plugin.rb +142 -0
  826. data/vendored-minitest/minitest/spec.rb +310 -0
  827. data/vendored-minitest/minitest/test.rb +293 -0
  828. data/vendored-minitest/minitest/unit.rb +45 -0
  829. data/vendored-minitest/test/unit.rb +28 -0
  830. metadata +1058 -0
@@ -0,0 +1,9 @@
1
+ class Time
2
+ def self.parse(str)
3
+ `new Date(Date.parse(str))`
4
+ end
5
+
6
+ def iso8601
7
+ strftime('%FT%T%z')
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ require 'nodejs/yaml' if defined? NodeJS
@@ -0,0 +1,88 @@
1
+ namespace :bench do
2
+ directory "tmp/bench"
3
+
4
+ desc "Benchmark Opal"
5
+ task :opal => "tmp/bench" do |t, args|
6
+ files = Array(args[:files]) + args.extras
7
+ index = 0
8
+ begin
9
+ index += 1
10
+ report = "tmp/bench/Opal#{index}"
11
+ end while File.exist?(report)
12
+ sh "bundle exec opal benchmark/run.rb #{files.join(" ")} | tee #{report}"
13
+ end
14
+
15
+ desc "Benchmark Ruby"
16
+ task :ruby => "tmp/bench" do |t, args|
17
+ files = Array(args[:files]) + args.extras
18
+ index = 0
19
+ begin
20
+ index += 1
21
+ report = "tmp/bench/Ruby#{index}"
22
+ end while File.exist?(report)
23
+ sh "bundle exec ruby benchmark/run.rb #{files.join(" ")} | tee #{report}"
24
+ end
25
+
26
+ desc "Delete all benchmark results"
27
+ task :clear do
28
+ sh "rm tmp/bench/*"
29
+ end
30
+
31
+ desc "Combined report of all benchmark results"
32
+ task :report do |t, args|
33
+ files = Array(args[:files]) + args.extras
34
+ if files.empty?
35
+ files = Dir["tmp/bench/*"]
36
+ else
37
+ files = files.map{|file| "tmp/bench/#{ file }"}
38
+ end
39
+ reports = []
40
+ benchmark_names = []
41
+
42
+ files.each do |file|
43
+ report_name = File.basename(file, File.extname(file))
44
+ report_results = {}
45
+ File.read(file).each_line do |line|
46
+ benchmark_name, benchmark_result = line.split(" ")
47
+ report_results[benchmark_name] = benchmark_result
48
+ benchmark_names << benchmark_name
49
+ end
50
+ reports << [report_name, report_results]
51
+ end
52
+
53
+ benchmark_names.uniq!
54
+
55
+ header = ["Benchmark"]
56
+ reports.each do |report_name, _|
57
+ header << report_name
58
+ end
59
+
60
+ table = [header]
61
+ benchmark_names.each do |benchmark_name|
62
+ row = [benchmark_name]
63
+ reports.each do |_, report_results|
64
+ if report_results[benchmark_name]
65
+ row << format("%0.3f", report_results[benchmark_name])
66
+ else
67
+ row << ""
68
+ end
69
+ end
70
+ table << row
71
+ end
72
+
73
+ fmt = ""
74
+ table.transpose.each_with_index do |column, index|
75
+ column_width = column.max_by{|string| string.length}.length
76
+ if index.zero?
77
+ fmt << "%-#{ column_width }s"
78
+ else
79
+ fmt << " %#{ column_width }s"
80
+ end
81
+ end
82
+ fmt << "\n"
83
+
84
+ table.each do |row|
85
+ printf fmt, *row
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,58 @@
1
+ require 'opal/version'
2
+
3
+ desc <<-DESC
4
+ Build *corelib* and *stdlib* to "build/"
5
+
6
+ You can restrict the file list with the FILES env var (comma separated)
7
+ and the destination dir with the DIR env var.
8
+
9
+ Example: rake dist DIR=/tmp/foo FILES='opal.rb,base64.rb'
10
+ Example: rake dist DIR=cdn/opal/#{Opal::VERSION}
11
+ Example: rake dist DIR=cdn/opal/master
12
+ DESC
13
+ task :dist do
14
+ require 'opal/util'
15
+ require 'opal/sprockets/environment'
16
+
17
+ Opal::Processor.arity_check_enabled = false
18
+ Opal::Processor.const_missing_enabled = false
19
+ Opal::Processor.dynamic_require_severity = :warning
20
+ env = Opal::Environment.new
21
+
22
+ build_dir = ENV['DIR'] || 'build'
23
+ files = ENV['FILES'] ? ENV['FILES'].split(',') :
24
+ Dir['{opal,stdlib}/*.rb'].map { |lib| File.basename(lib, '.rb') }
25
+
26
+ Dir.mkdir build_dir unless File.directory? build_dir
27
+ width = files.map(&:size).max
28
+
29
+ files.each do |lib|
30
+ print "* building #{lib}...".ljust(width+'* building ... '.size)
31
+ $stdout.flush
32
+
33
+ src = env[lib].to_s
34
+ min = Opal::Util.uglify src
35
+ gzp = Opal::Util.gzip min
36
+
37
+ File.open("#{build_dir}/#{lib}.js", 'w+') { |f| f << src }
38
+ File.open("#{build_dir}/#{lib}.min.js", 'w+') { |f| f << min } if min
39
+ File.open("#{build_dir}/#{lib}.min.js.gz", 'w+') { |f| f << gzp } if gzp
40
+
41
+ print "done. ("
42
+ print "development: #{('%.2f' % (src.size/1000.0)).rjust(6)}KB"
43
+ print ", minified: #{('%.2f' % (min.size/1000.0)).rjust(6)}KB" if min
44
+ print ", gzipped: #{('%.2f' % (gzp.size/1000.0)).rjust(6)}KB" if gzp
45
+ puts ")."
46
+ end
47
+ end
48
+
49
+ desc 'Rebuild grammar.rb for opal parser'
50
+ task :racc do
51
+ %x(racc -l lib/opal/parser/grammar.y -o lib/opal/parser/grammar.rb)
52
+ end
53
+
54
+ desc 'Remove any generated file.'
55
+ task :clobber do
56
+ rm_r './build'
57
+ end
58
+
@@ -0,0 +1,37 @@
1
+ namespace :doc do
2
+ doc_repo = Pathname(ENV['DOC_REPO'] || 'gh-pages')
3
+ doc_base = doc_repo.join('doc')
4
+ current_git_release = -> { `git rev-parse --abbrev-ref HEAD`.chomp }
5
+ template_option = "--template opal --template-path #{doc_repo.join('yard-templates')}"
6
+
7
+ directory doc_repo.to_s do
8
+ remote = ENV['DOC_REPO_REMOTE'] || '.'
9
+ sh 'git', 'clone', '-b', 'gh-pages', '--', remote, doc_repo.to_s
10
+ end
11
+
12
+ task :corelib => doc_repo.to_s do
13
+ git = current_git_release.call
14
+ name = 'corelib'
15
+ glob = 'opal/**/*.rb'
16
+
17
+ command = "doxx --template #{doc_repo.join('doxx-templates/opal.jade')} "\
18
+ "--source opal/corelib --target #{doc_base}/#{git}/#{name} "\
19
+ "--title \"Opal runtime.js Documentation\" --readme opal/README.md"
20
+ puts command; system command or $stderr.puts "Please install doxx with: npm install"
21
+
22
+ command = "yard doc #{glob} #{template_option} "\
23
+ "--readme opal/README.md -o #{doc_base}/#{git}/#{name}"
24
+ puts command; system command
25
+ end
26
+
27
+ task :stdlib => doc_repo do
28
+ git = current_git_release.call
29
+ name = 'stdlib'
30
+ glob = '{stdlib/**/*,opal/compiler,opal/erb,opal/version}.rb'
31
+ command = "yard doc #{glob} #{template_option} "\
32
+ "--readme stdlib/README.md -o gh-pages/doc/#{git}/#{name}"
33
+ puts command; system command
34
+ end
35
+ end
36
+
37
+ task :doc => ['doc:corelib', 'doc:stdlib']
@@ -0,0 +1,19 @@
1
+ namespace :github do
2
+ desc "Upload assets to github"
3
+ task :upload_assets do
4
+ require 'octokit'
5
+ # https://github.com/octokit/octokit.rb#oauth-access-tokens
6
+ token_path = '.github_access_token'
7
+ File.exist?(token_path) or raise ArgumentError, "Please create a personal access token (https://github.com/settings/tokens/new) and paste it inside #{token_path.inspect}"
8
+ token = File.read(token_path).strip
9
+ client = Octokit::Client.new :access_token => token
10
+ tag_name = ENV['TAG'] || raise(ArgumentError, 'missing the TAG env variable (e.g. TAG=v0.4.4)')
11
+ release = client.releases('opal/opal').find{|r| p(r.id); p(r).tag_name == tag_name}
12
+ release_url = "https://api.github.com/repos/opal/opal/releases/#{release.id}"
13
+ %w[opal opal-parser].each do |name|
14
+ client.upload_asset release_url, "build/#{name}.js", :content_type => 'application/x-javascript'
15
+ client.upload_asset release_url, "build/#{name}.min.js", :content_type => 'application/x-javascript'
16
+ client.upload_asset release_url, "build/#{name}.min.js.gz", :content_type => 'application/octet-stream'
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ directory 'tmp/lint'
2
+
3
+ desc "Build *corelib* and *stdlib* and lint the result"
4
+ task :lint => 'tmp/lint' do
5
+ require 'opal/sprockets/environment'
6
+
7
+ env = Opal::Environment.new
8
+
9
+ files = Dir['{opal,stdlib}/*.rb'].map { |lib| File.basename(lib, '.rb') }
10
+
11
+ files.each do |lib|
12
+ next if lib == 'minitest'
13
+ File.binwrite("tmp/lint/#{lib}.js", env[lib].to_s)
14
+ end
15
+
16
+ sh "jshint --verbose tmp/lint/*.js"
17
+ end
18
+
@@ -0,0 +1,125 @@
1
+ require 'rspec/core/rake_task'
2
+ RSpec::Core::RakeTask.new(:rspec) do |t|
3
+ t.pattern = 'spec/lib/**/*_spec.rb'
4
+ end
5
+
6
+ require 'mspec/opal/rake_task'
7
+ MSpec::Opal::RakeTask.new(:mspec_phantom) do |config|
8
+ config.pattern = ENV['MSPEC_PATTERN'] if ENV['MSPEC_PATTERN']
9
+ config.basedir = ENV['MSPEC_BASEDIR'] if ENV['MSPEC_BASEDIR']
10
+ end
11
+
12
+ desc <<-DESC
13
+ Run the MSpec test suite on node
14
+
15
+ Use PATTERN and env var to manually set the glob for specs:
16
+
17
+ # Will run all specs matching the specified pattern.
18
+ # (Note: the rubyspecs filters will still apply)
19
+ rake mspec_node PATTERN=spec/rubyspec/core/module/class_variable*
20
+ DESC
21
+ task :mspec_node do
22
+ excepting = []
23
+ rubyspecs = File.read('spec/rubyspecs').lines.reject do |l|
24
+ l.strip!; l.start_with?('#') || l.empty? || (l.start_with?('!') && excepting.push(l.sub('!', 'spec/') + '.rb'))
25
+ end.flat_map do |path|
26
+ path = "spec/#{path}"
27
+ File.directory?(path) ? Dir[path+'/*.rb'] : "#{path}.rb"
28
+ end - excepting
29
+
30
+ filters = Dir['spec/filters/**/*.rb']
31
+ shared = Dir['spec/{opal,lib/parser}/**/*_spec.rb'] + ['spec/lib/lexer_spec.rb']
32
+
33
+ specs = []
34
+ add_specs = ->(name, new_specs) { p [new_specs.size, name]; specs + new_specs}
35
+
36
+ specs = add_specs.(:filters, filters)
37
+ pattern = ENV['PATTERN']
38
+ whitelist_pattern = !!ENV['RUBYSPECS']
39
+
40
+ if pattern
41
+ custom = Dir[pattern]
42
+ custom &= rubyspecs if whitelist_pattern
43
+ specs = add_specs.(:custom, custom)
44
+ else
45
+ specs = add_specs.(:shared, shared)
46
+ specs = add_specs.(:rubyspecs, rubyspecs)
47
+ end
48
+
49
+ requires = specs.map{|s| "require '#{s.sub(/^spec\//,'')}'"}
50
+ include_paths = '-Ispec -Ilib'
51
+
52
+ filename = 'tmp/mspec_node.rb'
53
+ js_filename = 'tmp/mspec_node.js'
54
+ mkdir_p File.dirname(filename)
55
+
56
+ if ENV['BM']
57
+ mkdir_p 'tmp/bench'
58
+ index = 0
59
+ begin
60
+ index += 1
61
+ bm_filepath = "tmp/bench/Spec#{index}"
62
+ end while File.exist?(bm_filepath)
63
+ enter_benchmarking_mode = "OSpecRunner.main.bm!(#{Integer(ENV['BM'])}, '#{bm_filepath}')"
64
+ end
65
+
66
+ File.write filename, <<-RUBY
67
+ require 'spec_helper'
68
+ #{enter_benchmarking_mode}
69
+ #{requires.join("\n ")}
70
+ OSpecRunner.main.did_finish
71
+ RUBY
72
+
73
+ stubs = '-smspec/helpers/tmp -smspec/helpers/environment -smspec/guards/block_device -smspec/guards/endian'
74
+
75
+ sh "ruby -rbundler/setup -rmspec/opal/special_calls "\
76
+ "bin/opal -gmspec #{include_paths} #{stubs} -rnodejs/io -rnodejs/kernel -Dwarning -A #{filename} -c > #{js_filename}"
77
+ sh "jshint --verbose #{js_filename}"
78
+ sh "NODE_PATH=stdlib/nodejs/node_modules node #{js_filename}"
79
+
80
+ if bm_filepath
81
+ puts "Benchmark results have been written to #{bm_filepath}"
82
+ puts "To view the results, run bundle exec rake bench:report"
83
+ end
84
+ end
85
+
86
+ task :cruby_tests do
87
+ if ENV.key? 'FILES'
88
+ files = Dir[ENV['FILES'] || 'test/test_*.rb']
89
+ include_paths = '-Itest -I. -Itmp -Ilib'
90
+ else
91
+ include_paths = '-Itest/cruby/test'
92
+ test_dir = Pathname("#{__dir__}/../test/cruby/test")
93
+ files = %w[
94
+ benchmark/test_benchmark.rb
95
+ ruby/test_call.rb
96
+ ].flat_map do |path|
97
+ if path.end_with?('.rb')
98
+ path
99
+ else
100
+ glob = test_dir.join(path+"/test_*.rb").to_s
101
+ size = test_dir.to_s.size
102
+ Dir[glob].map { |file| file[size+1..-1] }
103
+ end
104
+ end
105
+ end
106
+ include_paths << ' -Ivendored-minitest'
107
+
108
+ requires = files.map{|f| "require '#{f}'"}
109
+ filename = 'tmp/cruby_tests.rb'
110
+ js_filename = 'tmp/cruby_tests.js'
111
+ mkdir_p File.dirname(filename)
112
+ File.write filename, requires.join("\n")
113
+
114
+ stubs = "-soptparse -sio/console -stimeout -smutex_m -srubygems -stempfile -smonitor"
115
+
116
+ puts "== Running: #{files.join ", "}"
117
+
118
+ sh "ruby -rbundler/setup "\
119
+ "bin/opal #{include_paths} #{stubs} -rnodejs -Dwarning -A #{filename} -c > #{js_filename}"
120
+ sh "NODE_PATH=stdlib/nodejs/node_modules node #{js_filename}"
121
+ end
122
+
123
+ task :mspec => [:mspec_node, :mspec_phantom]
124
+ task :minitest => [:cruby_tests]
125
+ task :test_all => [:rspec, :mspec, :minitest]
@@ -0,0 +1,780 @@
1
+ require "optparse"
2
+ require "thread"
3
+ require "mutex_m"
4
+ require "minitest/parallel"
5
+
6
+ ##
7
+ # :include: README.txt
8
+
9
+ module Minitest
10
+ VERSION = "5.5.1" # :nodoc:
11
+ ENCS = "".respond_to? :encoding # :nodoc:
12
+
13
+ @@installed_at_exit ||= false
14
+ @@after_run = []
15
+ @extensions = []
16
+
17
+ mc = (class << self; self; end)
18
+
19
+ ##
20
+ # Parallel test executor
21
+
22
+ mc.send :attr_accessor, :parallel_executor
23
+ self.parallel_executor = Parallel::Executor.new((ENV['N'] || 2).to_i)
24
+
25
+ ##
26
+ # Filter object for backtraces.
27
+
28
+ mc.send :attr_accessor, :backtrace_filter
29
+
30
+ ##
31
+ # Reporter object to be used for all runs.
32
+ #
33
+ # NOTE: This accessor is only available during setup, not during runs.
34
+
35
+ mc.send :attr_accessor, :reporter
36
+
37
+ ##
38
+ # Names of known extension plugins.
39
+
40
+ mc.send :attr_accessor, :extensions
41
+
42
+ ##
43
+ # Registers Minitest to run at process exit
44
+
45
+ def self.autorun
46
+ at_exit {
47
+ next if $! and not ($!.kind_of? SystemExit and $!.success?)
48
+
49
+ exit_code = nil
50
+
51
+ at_exit {
52
+ @@after_run.reverse_each(&:call)
53
+ exit exit_code || false
54
+ }
55
+
56
+ exit_code = Minitest.run ARGV
57
+ } unless @@installed_at_exit
58
+ @@installed_at_exit = true
59
+ end
60
+
61
+ ##
62
+ # A simple hook allowing you to run a block of code after everything
63
+ # is done running. Eg:
64
+ #
65
+ # Minitest.after_run { p $debugging_info }
66
+
67
+ def self.after_run &block
68
+ @@after_run << block
69
+ end
70
+
71
+ def self.init_plugins options # :nodoc:
72
+ self.extensions.each do |name|
73
+ msg = "plugin_#{name}_init"
74
+ send msg, options if self.respond_to? msg
75
+ end
76
+ end
77
+
78
+ def self.load_plugins # :nodoc:
79
+ # return unless self.extensions.empty?
80
+ #
81
+ # seen = {}
82
+ #
83
+ # require "rubygems" unless defined? Gem
84
+ #
85
+ # Gem.find_files("minitest/*_plugin.rb").each do |plugin_path|
86
+ # name = File.basename plugin_path, "_plugin.rb"
87
+ #
88
+ # next if seen[name]
89
+ # seen[name] = true
90
+ #
91
+ # require plugin_path
92
+ # self.extensions << name
93
+ # end
94
+ end
95
+
96
+ ##
97
+ # This is the top-level run method. Everything starts from here. It
98
+ # tells each Runnable sub-class to run, and each of those are
99
+ # responsible for doing whatever they do.
100
+ #
101
+ # The overall structure of a run looks like this:
102
+ #
103
+ # Minitest.autorun
104
+ # Minitest.run(args)
105
+ # Minitest.__run(reporter, options)
106
+ # Runnable.runnables.each
107
+ # runnable.run(reporter, options)
108
+ # self.runnable_methods.each
109
+ # self.run_one_method(self, runnable_method, reporter)
110
+ # Minitest.run_one_method(klass, runnable_method, reporter)
111
+ # klass.new(runnable_method).run
112
+
113
+ def self.run args = []
114
+ self.load_plugins
115
+
116
+ options = process_args args
117
+
118
+ reporter = CompositeReporter.new
119
+ reporter << SummaryReporter.new(options[:io], options)
120
+ reporter << ProgressReporter.new(options[:io], options)
121
+
122
+ self.reporter = reporter # this makes it available to plugins
123
+ self.init_plugins options
124
+ self.reporter = nil # runnables shouldn't depend on the reporter, ever
125
+
126
+ reporter.start
127
+ __run reporter, options
128
+ self.parallel_executor.shutdown
129
+ reporter.report
130
+
131
+ reporter.passed?
132
+ end
133
+
134
+ ##
135
+ # Internal run method. Responsible for telling all Runnable
136
+ # sub-classes to run.
137
+ #
138
+ # NOTE: this method is redefined in parallel_each.rb, which is
139
+ # loaded if a Runnable calls parallelize_me!.
140
+
141
+ def self.__run reporter, options
142
+ suites = Runnable.runnables.shuffle
143
+ parallel, serial = suites.partition { |s| s.test_order == :parallel }
144
+
145
+ # If we run the parallel tests before the serial tests, the parallel tests
146
+ # could run in parallel with the serial tests. This would be bad because
147
+ # the serial tests won't lock around Reporter#record. Run the serial tests
148
+ # first, so that after they complete, the parallel tests will lock when
149
+ # recording results.
150
+ serial.map { |suite| suite.run reporter, options } +
151
+ parallel.map { |suite| suite.run reporter, options }
152
+ end
153
+
154
+ def self.process_args args = [] # :nodoc:
155
+ options = {
156
+ :io => $stdout,
157
+ }
158
+ orig_args = args.dup
159
+
160
+ OptionParser.new do |opts|
161
+ opts.banner = "minitest options:"
162
+ opts.version = Minitest::VERSION
163
+
164
+ opts.on "-h", "--help", "Display this help." do
165
+ puts opts
166
+ exit
167
+ end
168
+
169
+ desc = "Sets random seed. Also via env. Eg: SEED=n rake"
170
+ opts.on "-s", "--seed SEED", Integer, desc do |m|
171
+ options[:seed] = m.to_i
172
+ end
173
+
174
+ opts.on "-v", "--verbose", "Verbose. Show progress processing files." do
175
+ options[:verbose] = true
176
+ end
177
+
178
+ opts.on "-n", "--name PATTERN","Filter run on /pattern/ or string." do |a|
179
+ options[:filter] = a
180
+ end
181
+
182
+ unless extensions.empty?
183
+ opts.separator ""
184
+ opts.separator "Known extensions: #{extensions.join(', ')}"
185
+
186
+ extensions.each do |meth|
187
+ msg = "plugin_#{meth}_options"
188
+ send msg, opts, options if self.respond_to?(msg)
189
+ end
190
+ end
191
+
192
+ begin
193
+ opts.parse! args
194
+ rescue OptionParser::InvalidOption => e
195
+ puts
196
+ puts e
197
+ puts
198
+ puts opts
199
+ exit 1
200
+ end
201
+
202
+ orig_args -= args
203
+ end unless args.empty?
204
+
205
+ unless options[:seed] then
206
+ srand
207
+ options[:seed] = (ENV["SEED"] || srand).to_i % 0xFFFF
208
+ orig_args << "--seed" << options[:seed].to_s
209
+ end
210
+
211
+ srand options[:seed]
212
+
213
+ options[:args] = orig_args.map { |s|
214
+ s =~ /[\s|&<>$()]/ ? s.inspect : s
215
+ }.join " "
216
+
217
+ options
218
+ end
219
+
220
+ def self.filter_backtrace bt # :nodoc:
221
+ backtrace_filter.filter bt
222
+ end
223
+
224
+ ##
225
+ # Represents anything "runnable", like Test, Spec, Benchmark, or
226
+ # whatever you can dream up.
227
+ #
228
+ # Subclasses of this are automatically registered and available in
229
+ # Runnable.runnables.
230
+
231
+ class Runnable
232
+ ##
233
+ # Number of assertions executed in this run.
234
+
235
+ attr_accessor :assertions
236
+
237
+ ##
238
+ # An assertion raised during the run, if any.
239
+
240
+ attr_accessor :failures
241
+
242
+ ##
243
+ # Name of the run.
244
+
245
+ def name
246
+ @NAME
247
+ end
248
+
249
+ ##
250
+ # Set the name of the run.
251
+
252
+ def name= o
253
+ @NAME = o
254
+ end
255
+
256
+ def self.inherited klass # :nodoc:
257
+ self.runnables << klass
258
+ super
259
+ end
260
+
261
+ ##
262
+ # Returns all instance methods matching the pattern +re+.
263
+
264
+ def self.methods_matching re
265
+ public_instance_methods(true).grep(re).map(&:to_s)
266
+ end
267
+
268
+ def self.reset # :nodoc:
269
+ @@runnables = []
270
+ end
271
+
272
+ reset
273
+
274
+ ##
275
+ # Responsible for running all runnable methods in a given class,
276
+ # each in its own instance. Each instance is passed to the
277
+ # reporter to record.
278
+
279
+ def self.run reporter, options = {}
280
+ filter = options[:filter] || '/./'
281
+ filter = Regexp.new $1 if filter =~ /\/(.*)\//
282
+
283
+ filtered_methods = self.runnable_methods.find_all { |m|
284
+ filter === m || filter === "#{self}##{m}"
285
+ }
286
+
287
+ with_info_handler reporter do
288
+ filtered_methods.each do |method_name|
289
+ run_one_method self, method_name, reporter
290
+ end
291
+ end
292
+ end
293
+
294
+ ##
295
+ # Runs a single method and has the reporter record the result.
296
+ # This was considered internal API but is factored out of run so
297
+ # that subclasses can specialize the running of an individual
298
+ # test. See Minitest::ParallelTest::ClassMethods for an example.
299
+
300
+ def self.run_one_method klass, method_name, reporter
301
+ reporter.record Minitest.run_one_method(klass, method_name)
302
+ end
303
+
304
+ def self.with_info_handler reporter, &block # :nodoc:
305
+ handler = lambda do
306
+ unless reporter.passed? then
307
+ warn "Current results:"
308
+ warn ""
309
+ warn reporter.reporters.first
310
+ warn ""
311
+ end
312
+ end
313
+
314
+ on_signal "INFO", handler, &block
315
+ end
316
+
317
+ SIGNALS = {} # Signal.list # :nodoc:
318
+
319
+ def self.on_signal name, action # :nodoc:
320
+ supported = SIGNALS[name]
321
+
322
+ old_trap = trap name do
323
+ old_trap.call if old_trap.respond_to? :call
324
+ action.call
325
+ end if supported
326
+
327
+ yield
328
+ ensure
329
+ trap name, old_trap if supported
330
+ end
331
+
332
+ ##
333
+ # Each subclass of Runnable is responsible for overriding this
334
+ # method to return all runnable methods. See #methods_matching.
335
+
336
+ def self.runnable_methods
337
+ raise NotImplementedError, "subclass responsibility"
338
+ end
339
+
340
+ ##
341
+ # Returns all subclasses of Runnable.
342
+
343
+ def self.runnables
344
+ @@runnables
345
+ end
346
+
347
+ def marshal_dump # :nodoc:
348
+ [self.name, self.failures, self.assertions]
349
+ end
350
+
351
+ def marshal_load ary # :nodoc:
352
+ self.name, self.failures, self.assertions = ary
353
+ end
354
+
355
+ def failure # :nodoc:
356
+ self.failures.first
357
+ end
358
+
359
+ def initialize name # :nodoc:
360
+ self.name = name
361
+ self.failures = []
362
+ self.assertions = 0
363
+ end
364
+
365
+ ##
366
+ # Runs a single method. Needs to return self.
367
+
368
+ def run
369
+ raise NotImplementedError, "subclass responsibility"
370
+ end
371
+
372
+ ##
373
+ # Did this run pass?
374
+ #
375
+ # Note: skipped runs are not considered passing, but they don't
376
+ # cause the process to exit non-zero.
377
+
378
+ def passed?
379
+ raise NotImplementedError, "subclass responsibility"
380
+ end
381
+
382
+ ##
383
+ # Returns a single character string to print based on the result
384
+ # of the run. Eg ".", "F", or "E".
385
+
386
+ def result_code
387
+ raise NotImplementedError, "subclass responsibility"
388
+ end
389
+
390
+ ##
391
+ # Was this run skipped? See #passed? for more information.
392
+
393
+ def skipped?
394
+ raise NotImplementedError, "subclass responsibility"
395
+ end
396
+ end
397
+
398
+ ##
399
+ # Defines the API for Reporters. Subclass this and override whatever
400
+ # you want. Go nuts.
401
+
402
+ class AbstractReporter
403
+ # include Mutex_m
404
+
405
+ ##
406
+ # Starts reporting on the run.
407
+
408
+ def start
409
+ end
410
+
411
+ ##
412
+ # Record a result and output the Runnable#result_code. Stores the
413
+ # result of the run if the run did not pass.
414
+
415
+ def record result
416
+ end
417
+
418
+ ##
419
+ # Outputs the summary of the run.
420
+
421
+ def report
422
+ end
423
+
424
+ ##
425
+ # Did this run pass?
426
+
427
+ def passed?
428
+ true
429
+ end
430
+ end
431
+
432
+ class Reporter < AbstractReporter # :nodoc:
433
+ ##
434
+ # The IO used to report.
435
+
436
+ attr_accessor :io
437
+
438
+ ##
439
+ # Command-line options for this run.
440
+
441
+ attr_accessor :options
442
+
443
+ def initialize io = $stdout, options = {} # :nodoc:
444
+ super()
445
+ self.io = io
446
+ self.options = options
447
+ end
448
+ end
449
+
450
+ ##
451
+ # A very simple reporter that prints the "dots" during the run.
452
+ #
453
+ # This is added to the top-level CompositeReporter at the start of
454
+ # the run. If you want to change the output of minitest via a
455
+ # plugin, pull this out of the composite and replace it with your
456
+ # own.
457
+
458
+ class ProgressReporter < Reporter
459
+ def record result # :nodoc:
460
+ io.print "%s#%s = %.2f s = " % [result.class, result.name, result.time] if
461
+ options[:verbose]
462
+ io.print result.result_code
463
+ io.puts if options[:verbose]
464
+ end
465
+ end
466
+
467
+ ##
468
+ # A reporter that gathers statistics about a test run. Does not do
469
+ # any IO because meant to be used as a parent class for a reporter
470
+ # that does.
471
+ #
472
+ # If you want to create an entirely different type of output (eg,
473
+ # CI, HTML, etc), this is the place to start.
474
+
475
+ class StatisticsReporter < Reporter
476
+ # :stopdoc:
477
+ attr_accessor :assertions
478
+ attr_accessor :count
479
+ attr_accessor :results
480
+ attr_accessor :start_time
481
+ attr_accessor :total_time
482
+ attr_accessor :failures
483
+ attr_accessor :errors
484
+ attr_accessor :skips
485
+ # :startdoc:
486
+
487
+ def initialize io = $stdout, options = {} # :nodoc:
488
+ super
489
+
490
+ self.assertions = 0
491
+ self.count = 0
492
+ self.results = []
493
+ self.start_time = nil
494
+ self.total_time = nil
495
+ self.failures = nil
496
+ self.errors = nil
497
+ self.skips = nil
498
+ end
499
+
500
+ def passed? # :nodoc:
501
+ results.all?(&:skipped?)
502
+ end
503
+
504
+ def start # :nodoc:
505
+ self.start_time = Time.now
506
+ end
507
+
508
+ def record result # :nodoc:
509
+ self.count += 1
510
+ self.assertions += result.assertions
511
+
512
+ results << result if not result.passed? or result.skipped?
513
+ end
514
+
515
+ def report # :nodoc:
516
+ aggregate = results.group_by { |r| r.failure.class }
517
+ aggregate.default = [] # dumb. group_by should provide this
518
+
519
+ self.total_time = Time.now - start_time
520
+ self.failures = aggregate[Assertion].size
521
+ self.errors = aggregate[UnexpectedError].size
522
+ self.skips = aggregate[Skip].size
523
+ end
524
+ end
525
+
526
+ ##
527
+ # A reporter that prints the header, summary, and failure details at
528
+ # the end of the run.
529
+ #
530
+ # This is added to the top-level CompositeReporter at the start of
531
+ # the run. If you want to change the output of minitest via a
532
+ # plugin, pull this out of the composite and replace it with your
533
+ # own.
534
+
535
+ class SummaryReporter < StatisticsReporter
536
+ # :stopdoc:
537
+ attr_accessor :sync
538
+ attr_accessor :old_sync
539
+ # :startdoc:
540
+
541
+ def start # :nodoc:
542
+ super
543
+
544
+ io.puts "Run options: #{options[:args]}"
545
+ io.puts
546
+ io.puts "# Running:"
547
+ io.puts
548
+
549
+ self.sync = io.respond_to? :"sync=" # stupid emacs
550
+ self.old_sync, io.sync = io.sync, true if self.sync
551
+ end
552
+
553
+ def report # :nodoc:
554
+ super
555
+
556
+ io.sync = self.old_sync
557
+
558
+ io.puts unless options[:verbose] # finish the dots
559
+ io.puts
560
+ io.puts statistics
561
+ io.puts aggregated_results
562
+ io.puts summary
563
+ end
564
+
565
+ def statistics # :nodoc:
566
+ "Finished in %.6fs, %.4f runs/s, %.4f assertions/s." %
567
+ [total_time, count / total_time, assertions / total_time]
568
+ end
569
+
570
+ def aggregated_results # :nodoc:
571
+ filtered_results = results.dup
572
+ filtered_results.reject!(&:skipped?) unless options[:verbose]
573
+
574
+ s = filtered_results.each_with_index.map { |result, i|
575
+ "\n%3d) %s" % [i+1, result]
576
+ }.join("\n") + "\n"
577
+
578
+ s.force_encoding(io.external_encoding) if
579
+ ENCS and io.external_encoding and s.encoding != io.external_encoding
580
+
581
+ s
582
+ end
583
+
584
+ alias to_s aggregated_results
585
+
586
+ def summary # :nodoc:
587
+ extra = ""
588
+
589
+ extra = "\n\nYou have skipped tests. Run with --verbose for details." if
590
+ results.any?(&:skipped?) unless options[:verbose] or ENV["MT_NO_SKIP_MSG"]
591
+
592
+ "%d runs, %d assertions, %d failures, %d errors, %d skips%s" %
593
+ [count, assertions, failures, errors, skips, extra]
594
+ end
595
+ end
596
+
597
+ ##
598
+ # Dispatch to multiple reporters as one.
599
+
600
+ class CompositeReporter < AbstractReporter
601
+ ##
602
+ # The list of reporters to dispatch to.
603
+
604
+ attr_accessor :reporters
605
+
606
+ def initialize *reporters # :nodoc:
607
+ super()
608
+ self.reporters = reporters
609
+ end
610
+
611
+ ##
612
+ # Add another reporter to the mix.
613
+
614
+ def << reporter
615
+ self.reporters << reporter
616
+ end
617
+
618
+ def passed? # :nodoc:
619
+ self.reporters.all?(&:passed?)
620
+ end
621
+
622
+ def start # :nodoc:
623
+ self.reporters.each(&:start)
624
+ end
625
+
626
+ def record result # :nodoc:
627
+ self.reporters.each do |reporter|
628
+ reporter.record result
629
+ end
630
+ end
631
+
632
+ def report # :nodoc:
633
+ self.reporters.each(&:report)
634
+ end
635
+ end
636
+
637
+ ##
638
+ # Represents run failures.
639
+
640
+ class Assertion < Exception
641
+ def error # :nodoc:
642
+ self
643
+ end
644
+
645
+ ##
646
+ # Where was this run before an assertion was raised?
647
+
648
+ def location
649
+ last_before_assertion = ""
650
+ self.backtrace.reverse_each do |s|
651
+ break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
652
+ last_before_assertion = s
653
+ end
654
+ last_before_assertion.sub(/:in .*$/, "")
655
+ end
656
+
657
+ def result_code # :nodoc:
658
+ result_label[0, 1]
659
+ end
660
+
661
+ def result_label # :nodoc:
662
+ "Failure"
663
+ end
664
+ end
665
+
666
+ ##
667
+ # Assertion raised when skipping a run.
668
+
669
+ class Skip < Assertion
670
+ def result_label # :nodoc:
671
+ "Skipped"
672
+ end
673
+ end
674
+
675
+ ##
676
+ # Assertion wrapping an unexpected error that was raised during a run.
677
+
678
+ class UnexpectedError < Assertion
679
+ attr_accessor :exception # :nodoc:
680
+
681
+ def initialize exception # :nodoc:
682
+ super
683
+ self.exception = exception
684
+ end
685
+
686
+ def backtrace # :nodoc:
687
+ self.exception.backtrace
688
+ end
689
+
690
+ def error # :nodoc:
691
+ self.exception
692
+ end
693
+
694
+ def message # :nodoc:
695
+ bt = Minitest::filter_backtrace(self.backtrace).join "\n "
696
+ "#{self.exception.class}: #{self.exception.message}\n #{bt}"
697
+ end
698
+
699
+ def result_label # :nodoc:
700
+ "Error"
701
+ end
702
+ end
703
+
704
+ ##
705
+ # Provides a simple set of guards that you can use in your tests
706
+ # to skip execution if it is not applicable. These methods are
707
+ # mixed into Test as both instance and class methods so you
708
+ # can use them inside or outside of the test methods.
709
+ #
710
+ # def test_something_for_mri
711
+ # skip "bug 1234" if jruby?
712
+ # # ...
713
+ # end
714
+ #
715
+ # if windows? then
716
+ # # ... lots of test methods ...
717
+ # end
718
+
719
+ module Guard
720
+
721
+ ##
722
+ # Is this running on jruby?
723
+
724
+ def jruby? platform = RUBY_PLATFORM
725
+ "java" == platform
726
+ end
727
+
728
+ ##
729
+ # Is this running on maglev?
730
+
731
+ def maglev? platform = defined?(RUBY_ENGINE) && RUBY_ENGINE
732
+ "maglev" == platform
733
+ end
734
+
735
+ ##
736
+ # Is this running on mri?
737
+
738
+ def mri? platform = RUBY_DESCRIPTION
739
+ /^ruby/ =~ platform
740
+ end
741
+
742
+ ##
743
+ # Is this running on rubinius?
744
+
745
+ def rubinius? platform = defined?(RUBY_ENGINE) && RUBY_ENGINE
746
+ "rbx" == platform
747
+ end
748
+
749
+ ##
750
+ # Is this running on windows?
751
+
752
+ def windows? platform = RUBY_PLATFORM
753
+ /mswin|mingw/ =~ platform
754
+ end
755
+ end
756
+
757
+ class BacktraceFilter # :nodoc:
758
+ def filter bt
759
+ return ["No backtrace"] unless bt
760
+
761
+ return bt.dup if $DEBUG
762
+
763
+ new_bt = bt.take_while { |line| line !~ /lib\/minitest/ }
764
+ new_bt = bt.select { |line| line !~ /lib\/minitest/ } if new_bt.empty?
765
+ new_bt = bt.dup if new_bt.empty?
766
+
767
+ new_bt
768
+ end
769
+ end
770
+
771
+ self.backtrace_filter = BacktraceFilter.new
772
+
773
+ def self.run_one_method klass, method_name # :nodoc:
774
+ result = klass.new(method_name).run
775
+ raise "#{klass}#run _must_ return self" unless klass === result
776
+ result
777
+ end
778
+ end
779
+
780
+ require "minitest/test"