opal 0.10.0 → 0.11.0.rc1

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 (460) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +19 -0
  3. data/.gitmodules +1 -1
  4. data/.jshintrc +1 -2
  5. data/.rspec +1 -2
  6. data/.travis.yml +28 -18
  7. data/.yardopts +3 -1
  8. data/CHANGELOG.md +139 -1
  9. data/Gemfile +16 -9
  10. data/HACKING.md +2 -0
  11. data/README.md +7 -6
  12. data/Rakefile +1 -1
  13. data/appveyor.yml +30 -0
  14. data/benchmark/bm_constant_lookup_big.rb +799 -0
  15. data/benchmark/bm_constant_lookup_small.rb +59 -0
  16. data/benchmark/bm_module_definition_big.rb +400 -0
  17. data/benchmark/bm_module_definition_small.rb +30 -0
  18. data/benchmark-ips/bm_case.rb +33 -0
  19. data/benchmark-ips/bm_constants_lookup.rb +13 -0
  20. data/benchmark-ips/bm_is_number.rb +29 -0
  21. data/benchmark-ips/bm_symbol_to_proc.rb +19 -0
  22. data/bin/opal +4 -2
  23. data/bin/opal-repl +23 -1
  24. data/docs/compiled_ruby.md +16 -14
  25. data/docs/faq.md +3 -3
  26. data/docs/rspec.md +2 -1
  27. data/docs/unsupported_features.md +6 -4
  28. data/examples/rack/Gemfile +1 -0
  29. data/examples/rack/Gemfile.lock +11 -7
  30. data/examples/rack/app/application.rb +14 -3
  31. data/examples/rack/app/user.rb +2 -0
  32. data/examples/rack/config.ru +1 -1
  33. data/examples/rack/index.html.erb +1 -0
  34. data/examples/sinatra/Gemfile +1 -1
  35. data/examples/sinatra/Gemfile.lock +8 -11
  36. data/examples/sinatra/app/application.rb +2 -0
  37. data/lib/opal/ast/builder.rb +17 -0
  38. data/lib/opal/ast/node.rb +30 -0
  39. data/lib/opal/builder.rb +14 -3
  40. data/lib/opal/builder_processors.rb +1 -0
  41. data/lib/opal/cli.rb +45 -59
  42. data/lib/opal/cli_options.rb +18 -11
  43. data/lib/opal/cli_runners/applescript.rb +3 -3
  44. data/lib/opal/cli_runners/nashorn.rb +1 -0
  45. data/lib/opal/cli_runners/nodejs.rb +4 -1
  46. data/lib/opal/cli_runners/phantom.js +1 -2
  47. data/lib/opal/cli_runners/phantomjs.rb +3 -2
  48. data/lib/opal/cli_runners/server.rb +1 -0
  49. data/lib/opal/cli_runners.rb +1 -0
  50. data/lib/opal/compiler.rb +145 -94
  51. data/lib/opal/config.rb +114 -36
  52. data/lib/opal/deprecations.rb +18 -0
  53. data/lib/opal/erb.rb +1 -0
  54. data/lib/opal/errors.rb +1 -0
  55. data/lib/opal/fragment.rb +1 -0
  56. data/lib/opal/hike_path_finder.rb +1 -0
  57. data/lib/opal/nodes/arglist.rb +2 -1
  58. data/lib/opal/nodes/args/initialize_kwargs.rb +1 -0
  59. data/lib/opal/nodes/args/kwarg.rb +7 -7
  60. data/lib/opal/nodes/args/kwoptarg.rb +6 -7
  61. data/lib/opal/nodes/args/kwrestarg.rb +5 -5
  62. data/lib/opal/nodes/args/mlhsarg.rb +3 -2
  63. data/lib/opal/nodes/args/normarg.rb +6 -7
  64. data/lib/opal/nodes/args/optarg.rb +5 -7
  65. data/lib/opal/nodes/args/post_args.rb +6 -5
  66. data/lib/opal/nodes/args/post_kwargs.rb +1 -0
  67. data/lib/opal/nodes/args/restarg.rb +7 -7
  68. data/lib/opal/nodes/array.rb +1 -0
  69. data/lib/opal/nodes/base.rb +24 -3
  70. data/lib/opal/nodes/call.rb +167 -155
  71. data/lib/opal/nodes/call_special.rb +31 -217
  72. data/lib/opal/nodes/case.rb +36 -22
  73. data/lib/opal/nodes/class.rb +4 -3
  74. data/lib/opal/nodes/constants.rb +28 -48
  75. data/lib/opal/nodes/csend.rb +25 -0
  76. data/lib/opal/nodes/def.rb +57 -17
  77. data/lib/opal/nodes/defined.rb +170 -60
  78. data/lib/opal/nodes/definitions.rb +40 -133
  79. data/lib/opal/nodes/defs.rb +29 -0
  80. data/lib/opal/nodes/for.rb +52 -25
  81. data/lib/opal/nodes/hash.rb +12 -35
  82. data/lib/opal/nodes/helpers.rb +27 -54
  83. data/lib/opal/nodes/if.rb +21 -32
  84. data/lib/opal/nodes/inline_args.rb +12 -13
  85. data/lib/opal/nodes/iter.rb +61 -36
  86. data/lib/opal/nodes/literal.rb +194 -114
  87. data/lib/opal/nodes/logic.rb +20 -25
  88. data/lib/opal/nodes/masgn.rb +20 -18
  89. data/lib/opal/nodes/module.rb +10 -11
  90. data/lib/opal/nodes/node_with_args.rb +14 -17
  91. data/lib/opal/nodes/rescue.rb +37 -70
  92. data/lib/opal/nodes/runtime_helpers.rb +8 -3
  93. data/lib/opal/nodes/scope.rb +9 -5
  94. data/lib/opal/nodes/singleton_class.rb +4 -3
  95. data/lib/opal/nodes/super.rb +115 -87
  96. data/lib/opal/nodes/top.rb +7 -2
  97. data/lib/opal/nodes/variables.rb +46 -35
  98. data/lib/opal/nodes/while.rb +11 -1
  99. data/lib/opal/nodes/yield.rb +1 -17
  100. data/lib/opal/nodes.rb +3 -0
  101. data/lib/opal/parser.rb +28 -770
  102. data/lib/opal/path_reader.rb +5 -1
  103. data/lib/opal/paths.rb +10 -4
  104. data/lib/opal/regexp_anchors.rb +1 -0
  105. data/lib/opal/rewriter.rb +60 -0
  106. data/lib/opal/rewriters/base.rb +60 -0
  107. data/lib/opal/rewriters/binary_operator_assignment.rb +144 -0
  108. data/lib/opal/rewriters/block_to_iter.rb +17 -0
  109. data/lib/opal/rewriters/break_finder.rb +34 -0
  110. data/lib/opal/rewriters/dot_js_syntax.rb +60 -0
  111. data/lib/opal/rewriters/explicit_writer_return.rb +58 -0
  112. data/lib/opal/rewriters/js_reserved_words.rb +111 -0
  113. data/lib/opal/rewriters/logical_operator_assignment.rb +155 -0
  114. data/lib/opal/rewriters/opal_engine_check.rb +42 -0
  115. data/lib/opal/rewriters/rubyspec/filters_rewriter.rb +67 -0
  116. data/lib/opal/server.rb +4 -0
  117. data/lib/opal/simple_server.rb +100 -0
  118. data/lib/opal/source_map.rb +1 -1
  119. data/lib/opal/util.rb +5 -5
  120. data/lib/opal/version.rb +2 -1
  121. data/lib/opal.rb +6 -1
  122. data/lib/tilt/opal.rb +1 -0
  123. data/opal/README.md +1 -1
  124. data/opal/corelib/array.rb +137 -83
  125. data/opal/corelib/basic_object.rb +6 -6
  126. data/opal/corelib/class.rb +14 -11
  127. data/opal/corelib/complex.rb +5 -1
  128. data/opal/corelib/constants.rb +3 -3
  129. data/opal/corelib/enumerable.rb +129 -11
  130. data/opal/corelib/error.rb +35 -17
  131. data/opal/corelib/file.rb +65 -170
  132. data/opal/corelib/hash.rb +128 -13
  133. data/opal/corelib/helpers.rb +12 -15
  134. data/opal/corelib/io.rb +1 -0
  135. data/opal/corelib/kernel.rb +40 -21
  136. data/opal/corelib/marshal/read_buffer.rb +1 -1
  137. data/opal/corelib/method.rb +33 -13
  138. data/opal/corelib/module.rb +134 -82
  139. data/opal/corelib/number.rb +141 -25
  140. data/opal/corelib/numeric.rb +0 -8
  141. data/opal/corelib/process.rb +44 -4
  142. data/opal/corelib/random/seedrandom.js.rb +15 -0
  143. data/opal/corelib/random.rb +117 -0
  144. data/opal/corelib/range.rb +133 -10
  145. data/opal/corelib/regexp.rb +37 -9
  146. data/opal/corelib/runtime.js +604 -394
  147. data/opal/corelib/string/encoding.rb +51 -7
  148. data/opal/corelib/string.rb +39 -8
  149. data/opal/corelib/struct.rb +20 -0
  150. data/opal/corelib/time.rb +2 -2
  151. data/opal/corelib/variables.rb +1 -1
  152. data/opal/opal.rb +1 -0
  153. data/opal.gemspec +9 -8
  154. data/spec/filters/bugs/array.rb +5 -1
  155. data/spec/filters/bugs/basicobject.rb +2 -5
  156. data/spec/filters/bugs/bigdecimal.rb +8 -22
  157. data/spec/filters/bugs/class.rb +2 -1
  158. data/spec/filters/bugs/comparable.rb +5 -0
  159. data/spec/filters/bugs/date.rb +3 -3
  160. data/spec/filters/bugs/enumerable.rb +4 -11
  161. data/spec/filters/bugs/enumerator.rb +2 -4
  162. data/spec/filters/bugs/exception.rb +16 -2
  163. data/spec/filters/bugs/file.rb +8 -0
  164. data/spec/filters/bugs/float.rb +7 -1
  165. data/spec/filters/bugs/hash.rb +6 -2
  166. data/spec/filters/bugs/integer.rb +2 -0
  167. data/spec/filters/bugs/io.rb +8 -0
  168. data/spec/filters/bugs/kernel.rb +9 -138
  169. data/spec/filters/bugs/language.rb +89 -174
  170. data/spec/filters/bugs/marshal.rb +33 -35
  171. data/spec/filters/bugs/method.rb +0 -24
  172. data/spec/filters/bugs/module.rb +19 -57
  173. data/spec/filters/bugs/numeric.rb +0 -119
  174. data/spec/filters/bugs/pathname.rb +2 -0
  175. data/spec/filters/bugs/proc.rb +5 -4
  176. data/spec/filters/bugs/random.rb +7 -0
  177. data/spec/filters/bugs/range.rb +12 -120
  178. data/spec/filters/bugs/rational.rb +1 -1
  179. data/spec/filters/bugs/regexp.rb +2 -40
  180. data/spec/filters/bugs/set.rb +0 -1
  181. data/spec/filters/bugs/string.rb +5 -8
  182. data/spec/filters/bugs/stringscanner.rb +11 -19
  183. data/spec/filters/bugs/time.rb +7 -1
  184. data/spec/filters/bugs/unboundmethod.rb +1 -11
  185. data/spec/filters/unsupported/array.rb +5 -1
  186. data/spec/filters/unsupported/basicobject.rb +1 -1
  187. data/spec/filters/unsupported/bignum.rb +4 -1
  188. data/spec/filters/unsupported/class.rb +1 -1
  189. data/spec/filters/unsupported/delegator.rb +1 -1
  190. data/spec/filters/unsupported/enumerable.rb +1 -1
  191. data/spec/filters/unsupported/enumerator.rb +1 -1
  192. data/spec/filters/unsupported/file.rb +4 -0
  193. data/spec/filters/unsupported/fixnum.rb +1 -1
  194. data/spec/filters/unsupported/float.rb +4 -1
  195. data/spec/filters/unsupported/freeze.rb +27 -5
  196. data/spec/filters/unsupported/hash.rb +7 -15
  197. data/spec/filters/unsupported/integer.rb +1 -1
  198. data/spec/filters/unsupported/kernel.rb +2 -1
  199. data/spec/filters/unsupported/language.rb +6 -1
  200. data/spec/filters/unsupported/marshal.rb +1 -1
  201. data/spec/filters/unsupported/matchdata.rb +4 -1
  202. data/spec/filters/unsupported/math.rb +1 -1
  203. data/spec/filters/unsupported/pathname.rb +1 -1
  204. data/spec/filters/unsupported/privacy.rb +141 -9
  205. data/spec/filters/unsupported/proc.rb +1 -1
  206. data/spec/filters/unsupported/random.rb +4 -0
  207. data/spec/filters/unsupported/range.rb +7 -0
  208. data/spec/filters/unsupported/regexp.rb +25 -15
  209. data/spec/filters/unsupported/set.rb +1 -1
  210. data/spec/filters/unsupported/singleton.rb +1 -1
  211. data/spec/filters/unsupported/string.rb +110 -101
  212. data/spec/filters/unsupported/struct.rb +1 -1
  213. data/spec/filters/unsupported/symbol.rb +2 -1
  214. data/spec/filters/unsupported/taint.rb +22 -7
  215. data/spec/filters/unsupported/thread.rb +1 -1
  216. data/spec/filters/unsupported/time.rb +1 -1
  217. data/spec/lib/builder_spec.rb +17 -0
  218. data/spec/lib/cli_runners/phantomjs_spec.rb +2 -2
  219. data/spec/lib/cli_spec.rb +37 -8
  220. data/spec/lib/compiler/call_spec.rb +98 -66
  221. data/spec/lib/compiler_spec.rb +41 -32
  222. data/spec/lib/config_spec.rb +97 -0
  223. data/spec/lib/dependency_resolver_spec.rb +2 -2
  224. data/spec/lib/deprecations_spec.rb +16 -0
  225. data/spec/lib/fixtures/source_location_test.rb +7 -0
  226. data/spec/lib/path_reader_spec.rb +3 -3
  227. data/spec/lib/rewriters/binary_operator_assignment_spec.rb +151 -0
  228. data/spec/lib/rewriters/block_to_iter_spec.rb +28 -0
  229. data/spec/lib/rewriters/dot_js_syntax_spec.rb +108 -0
  230. data/spec/lib/rewriters/explicit_writer_return_spec.rb +186 -0
  231. data/spec/lib/rewriters/js_reserved_words_spec.rb +116 -0
  232. data/spec/lib/rewriters/logical_operator_assignment_spec.rb +202 -0
  233. data/spec/lib/rewriters/opal_engine_check_spec.rb +82 -0
  234. data/spec/lib/rewriters/rubyspec/filters_rewriter_spec.rb +53 -0
  235. data/spec/lib/simple_server_spec.rb +54 -0
  236. data/spec/lib/spec_helper.rb +88 -4
  237. data/spec/mspec-opal/formatters.rb +65 -17
  238. data/spec/mspec-opal/runner.rb +47 -67
  239. data/spec/opal/core/date_spec.rb +14 -0
  240. data/spec/opal/core/exception_spec.rb +10 -0
  241. data/spec/opal/core/hash/internals_spec.rb +10 -10
  242. data/spec/opal/core/kernel/rand_spec.rb +0 -4
  243. data/spec/opal/core/kernel/respond_to_spec.rb +5 -2
  244. data/spec/opal/core/language/constant_lookup_spec.rb +38 -0
  245. data/spec/opal/core/language/safe_navigator_spec.rb +7 -0
  246. data/spec/opal/core/language/send_spec.rb +1 -9
  247. data/spec/opal/core/language/string_spec.rb +8 -8
  248. data/spec/opal/core/language/versions/def_2_0_spec.rb +0 -4
  249. data/spec/opal/core/language_spec.rb +32 -0
  250. data/spec/opal/core/module/const_get_spec.rb +1 -1
  251. data/spec/opal/core/runtime/is_a_spec.rb +36 -0
  252. data/spec/opal/core/runtime/rescue_spec.rb +35 -0
  253. data/spec/opal/core/runtime_spec.rb +4 -4
  254. data/spec/opal/core/string_spec.rb +8 -8
  255. data/spec/opal/core/time_spec.rb +38 -0
  256. data/spec/opal/stdlib/erb/quoted.opalerb +1 -1
  257. data/spec/opal/stdlib/json/parse_spec.rb +4 -0
  258. data/spec/opal/stdlib/native/hash_spec.rb +16 -0
  259. data/spec/ruby_specs +2 -1
  260. data/spec/spec_helper.rb +1 -0
  261. data/spec/support/rewriters_helper.rb +24 -0
  262. data/stdlib/base64.rb +4 -2
  263. data/stdlib/bigdecimal/bignumber.js.rb +1 -1
  264. data/stdlib/date.rb +18 -19
  265. data/stdlib/json.rb +16 -4
  266. data/stdlib/nashorn/file.rb +15 -0
  267. data/stdlib/native.rb +21 -12
  268. data/stdlib/nodejs/dir.rb +1 -1
  269. data/stdlib/nodejs/file.rb +49 -20
  270. data/stdlib/nodejs/io.rb +22 -1
  271. data/stdlib/nodejs/{node_modules/js-yaml/dist/js-yaml.js → js-yaml-3-6-1.js} +815 -626
  272. data/stdlib/nodejs/kernel.rb +3 -1
  273. data/stdlib/nodejs/package.json +0 -1
  274. data/stdlib/nodejs/stacktrace.rb +163 -0
  275. data/stdlib/nodejs/yaml.rb +2 -1
  276. data/stdlib/opal/platform.rb +5 -13
  277. data/stdlib/opal-platform.rb +15 -0
  278. data/stdlib/pathname.rb +1 -1
  279. data/stdlib/strscan.rb +15 -1
  280. data/stdlib/yaml.rb +1 -1
  281. data/tasks/benchmarking.rake +9 -0
  282. data/tasks/building.rake +24 -20
  283. data/tasks/linting.rake +24 -13
  284. data/tasks/testing/mspec_special_calls.rb +44 -15
  285. data/tasks/testing/opal_rspec_smoketest.Gemfile +13 -0
  286. data/tasks/testing.rake +322 -205
  287. data/test/nodejs/fixtures/hello.rb +1 -0
  288. data/test/nodejs/test_file.rb +57 -0
  289. data/test/nodejs/test_io.rb +18 -0
  290. data/test/nodejs/test_opal_builder.rb +12 -0
  291. data/test/opal/unsupported_and_bugs.rb +9 -0
  292. metadata +131 -242
  293. data/lib/opal/parser/grammar.rb +0 -6157
  294. data/lib/opal/parser/grammar.y +0 -2011
  295. data/lib/opal/parser/keywords.rb +0 -66
  296. data/lib/opal/parser/lexer.rb +0 -1352
  297. data/lib/opal/parser/parser_scope.rb +0 -28
  298. data/lib/opal/parser/sexp.rb +0 -90
  299. data/lib/opal/sprockets/environment.rb +0 -23
  300. data/lib/opal/sprockets/erb.rb +0 -23
  301. data/lib/opal/sprockets/path_reader.rb +0 -36
  302. data/lib/opal/sprockets/processor.rb +0 -145
  303. data/lib/opal/sprockets/server.rb +0 -133
  304. data/lib/opal/sprockets/source_map_header_patch.rb +0 -41
  305. data/lib/opal/sprockets/source_map_server.rb +0 -115
  306. data/lib/opal/sprockets.rb +0 -91
  307. data/spec/filters/bugs/compiler_opal.rb +0 -5
  308. data/spec/filters/bugs/language_opal.rb +0 -88
  309. data/spec/filters/unsupported/module.rb +0 -8
  310. data/spec/lib/compiler/pre_processed_conditionals_spec.rb +0 -87
  311. data/spec/lib/lexer_spec.rb +0 -110
  312. data/spec/lib/parser/alias_spec.rb +0 -26
  313. data/spec/lib/parser/and_spec.rb +0 -13
  314. data/spec/lib/parser/aref_spec.rb +0 -10
  315. data/spec/lib/parser/attrasgn_spec.rb +0 -28
  316. data/spec/lib/parser/begin_spec.rb +0 -42
  317. data/spec/lib/parser/block_spec.rb +0 -12
  318. data/spec/lib/parser/break_spec.rb +0 -17
  319. data/spec/lib/parser/call_spec.rb +0 -201
  320. data/spec/lib/parser/class_spec.rb +0 -35
  321. data/spec/lib/parser/comments_spec.rb +0 -11
  322. data/spec/lib/parser/def_spec.rb +0 -109
  323. data/spec/lib/parser/if_spec.rb +0 -26
  324. data/spec/lib/parser/iter_spec.rb +0 -59
  325. data/spec/lib/parser/lambda_spec.rb +0 -219
  326. data/spec/lib/parser/literal_spec.rb +0 -118
  327. data/spec/lib/parser/masgn_spec.rb +0 -37
  328. data/spec/lib/parser/module_spec.rb +0 -27
  329. data/spec/lib/parser/not_spec.rb +0 -21
  330. data/spec/lib/parser/op_asgn1_spec.rb +0 -23
  331. data/spec/lib/parser/op_asgn2_spec.rb +0 -23
  332. data/spec/lib/parser/op_asgn_spec.rb +0 -17
  333. data/spec/lib/parser/or_spec.rb +0 -13
  334. data/spec/lib/parser/return_spec.rb +0 -22
  335. data/spec/lib/parser/sclass_spec.rb +0 -21
  336. data/spec/lib/parser/string_spec.rb +0 -286
  337. data/spec/lib/parser/super_spec.rb +0 -20
  338. data/spec/lib/parser/unary_spec.rb +0 -52
  339. data/spec/lib/parser/undef_spec.rb +0 -19
  340. data/spec/lib/parser/unless_spec.rb +0 -13
  341. data/spec/lib/parser/variables_spec.rb +0 -116
  342. data/spec/lib/parser/while_spec.rb +0 -15
  343. data/spec/lib/parser/yield_spec.rb +0 -20
  344. data/spec/lib/sprockets/erb_spec.rb +0 -38
  345. data/spec/lib/sprockets/path_reader_spec.rb +0 -41
  346. data/spec/lib/sprockets/processor_spec.rb +0 -79
  347. data/spec/lib/sprockets/server_spec.rb +0 -102
  348. data/spec/lib/sprockets_spec.rb +0 -32
  349. data/spec/lib/tilt/opal_spec.rb +0 -37
  350. data/spec/opal/core/language/block_spec.rb +0 -538
  351. data/spec/opal/core/language/proc_spec.rb +0 -263
  352. data/spec/opal/core/language/variables_spec.rb +0 -1366
  353. data/spec/opal/core/runtime/block_send_spec.rb +0 -28
  354. data/spec/opal/core/runtime/send_spec.rb +0 -34
  355. data/spec/support/parser_helpers.rb +0 -37
  356. data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +0 -277
  357. data/stdlib/nodejs/node_modules/js-yaml/LICENSE +0 -21
  358. data/stdlib/nodejs/node_modules/js-yaml/README.md +0 -288
  359. data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +0 -140
  360. data/stdlib/nodejs/node_modules/js-yaml/bower.json +0 -23
  361. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +0 -3
  362. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +0 -102
  363. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +0 -18
  364. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +0 -31
  365. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +0 -22
  366. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +0 -18
  367. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +0 -197
  368. data/stdlib/nodejs/node_modules/js-yaml/index.js +0 -7
  369. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +0 -62
  370. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +0 -554
  371. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +0 -25
  372. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +0 -1581
  373. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +0 -78
  374. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +0 -18
  375. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +0 -25
  376. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +0 -28
  377. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +0 -17
  378. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +0 -25
  379. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +0 -103
  380. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +0 -133
  381. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +0 -37
  382. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +0 -110
  383. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +0 -183
  384. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +0 -85
  385. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +0 -84
  386. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +0 -27
  387. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +0 -8
  388. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +0 -12
  389. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +0 -36
  390. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +0 -56
  391. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +0 -61
  392. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +0 -8
  393. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +0 -33
  394. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +0 -8
  395. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +0 -98
  396. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +0 -61
  397. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +0 -39
  398. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +0 -115
  399. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +0 -21
  400. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +0 -239
  401. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +0 -36
  402. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +0 -22
  403. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +0 -59
  404. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +0 -13
  405. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +0 -33
  406. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +0 -28
  407. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +0 -23
  408. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +0 -49
  409. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +0 -35
  410. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +0 -270
  411. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +0 -1
  412. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +0 -47
  413. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +0 -55
  414. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +0 -40
  415. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +0 -48
  416. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +0 -43
  417. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +0 -27
  418. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +0 -26
  419. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +0 -50
  420. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +0 -148
  421. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +0 -50
  422. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +0 -146
  423. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +0 -481
  424. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +0 -14
  425. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +0 -50
  426. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +0 -54
  427. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +0 -75
  428. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +0 -1168
  429. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +0 -18
  430. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +0 -88
  431. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +0 -798
  432. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +0 -77
  433. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +0 -23
  434. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +0 -22
  435. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +0 -69
  436. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +0 -6
  437. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +0 -1415
  438. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +0 -2
  439. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +0 -8
  440. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +0 -825
  441. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +0 -33
  442. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +0 -11
  443. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +0 -10
  444. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +0 -26
  445. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +0 -673
  446. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
  447. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +0 -107
  448. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +0 -62
  449. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +0 -73
  450. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +0 -117
  451. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +0 -177
  452. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +0 -3908
  453. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +0 -69
  454. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +0 -239
  455. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +0 -422
  456. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +0 -66
  457. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +0 -387
  458. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +0 -20238
  459. data/stdlib/nodejs/node_modules/js-yaml/package.json +0 -83
  460. /data/{CODE_OF_CONDUCT.md → CONDUCT.md} +0 -0
@@ -5,12 +5,96 @@ end
5
5
 
6
6
  require 'opal'
7
7
 
8
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
8
9
  RSpec.configure do |config|
9
- config.treat_symbols_as_metadata_keys_with_true_values = true
10
- config.run_all_when_everything_filtered = true
11
- config.filter_run :focus
12
- config.order = 'random'
13
10
  config.before { Opal.reset_paths! }
14
11
  config.before { Opal::Config.reset! if defined? Opal::Config }
15
12
  config.before { Opal::Processor.reset_cache_key! if defined? Opal::Processor }
13
+
14
+ # rspec-expectations config goes here. You can use an alternate
15
+ # assertion/expectation library such as wrong or the stdlib/minitest
16
+ # assertions if you prefer.
17
+ config.expect_with :rspec do |expectations|
18
+ # This option will default to `true` in RSpec 4. It makes the `description`
19
+ # and `failure_message` of custom matchers include text for helper methods
20
+ # defined using `chain`, e.g.:
21
+ # be_bigger_than(2).and_smaller_than(4).description
22
+ # # => "be bigger than 2 and smaller than 4"
23
+ # ...rather than:
24
+ # # => "be bigger than 2"
25
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
26
+
27
+ expectations.syntax = [:expect, :should]
28
+ end
29
+
30
+ # rspec-mocks config goes here. You can use an alternate test double
31
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
32
+ config.mock_with :rspec do |mocks|
33
+ # Prevents you from mocking or stubbing a method that does not exist on
34
+ # a real object. This is generally recommended, and will default to
35
+ # `true` in RSpec 4.
36
+ mocks.verify_partial_doubles = true
37
+
38
+ mocks.syntax = [:expect, :should]
39
+ end
40
+
41
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
42
+ # have no way to turn it off -- the option exists only for backwards
43
+ # compatibility in RSpec 3). It causes shared context metadata to be
44
+ # inherited by the metadata hash of host groups and examples, rather than
45
+ # triggering implicit auto-inclusion in groups with matching metadata.
46
+ config.shared_context_metadata_behavior = :apply_to_host_groups
47
+
48
+ # This allows you to limit a spec run to individual examples or groups
49
+ # you care about by tagging them with `:focus` metadata. When nothing
50
+ # is tagged with `:focus`, all examples get run. RSpec also provides
51
+ # aliases for `it`, `||\describe`, and `context` that include `:focus`
52
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
53
+ config.filter_run_when_matching :focus
54
+
55
+ # Allows RSpec to persist some state between runs in order to support
56
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
57
+ # you configure your source control system to ignore this file.
58
+ config.example_status_persistence_file_path = "tmp/examples.txt"
59
+
60
+ # Limits the available syntax to the non-monkey patched syntax that is
61
+ # recommended. For more details, see:
62
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
63
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
64
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
65
+ # config.disable_monkey_patching!
66
+
67
+ # This setting enables warnings. It's recommended, but in some cases may
68
+ # be too noisy due to issues in dependencies.
69
+ # config.warnings = true
70
+
71
+ # Many RSpec users commonly either run the entire suite or an individual
72
+ # file, and it's useful to allow more verbose output when running an
73
+ # individual spec file.
74
+ if config.files_to_run.one?
75
+ # Use the documentation formatter for detailed output,
76
+ # unless a formatter has already been configured
77
+ # (e.g. via a command-line flag).
78
+ config.default_formatter = 'doc'
79
+ else
80
+ # The RSpec specs are stored in spec/lib.
81
+ config.pattern = 'spec/lib/**/*_spec.rb'
82
+ end
83
+
84
+ # Print the 10 slowest examples and example groups at the
85
+ # end of the spec run, to help surface which specs are running
86
+ # particularly slow.
87
+ config.profile_examples = 10
88
+
89
+ # Run specs in random order to surface order dependencies. If you find an
90
+ # order dependency and want to debug it, you can fix the order by providing
91
+ # the seed, which is printed after each run.
92
+ # --seed 1234
93
+ config.order = :random
94
+
95
+ # Seed global randomization in this process using the `--seed` CLI option.
96
+ # Setting this allows you to use `--seed` to deterministically reproduce
97
+ # test failures related to randomization by passing the same `--seed` value
98
+ # as the one that triggered the failure.
99
+ Kernel.srand config.seed
16
100
  end
@@ -1,4 +1,4 @@
1
- class BrowserFormatter
1
+ class BaseOpalFormatter
2
2
  def initialize(out=nil)
3
3
  @exception = @failure = false
4
4
  @exceptions = []
@@ -18,12 +18,16 @@ class BrowserFormatter
18
18
  MSpec.register :enter, self
19
19
  end
20
20
 
21
+ def red(str)
22
+ `console.error(str)`
23
+ end
24
+
21
25
  def green(str)
22
26
  `console.info(str)`
23
27
  end
24
28
 
25
- def red(str)
26
- `console.error(str)`
29
+ def cyan(str)
30
+ `console.info(str)`
27
31
  end
28
32
 
29
33
  def log(str)
@@ -66,7 +70,7 @@ class BrowserFormatter
66
70
 
67
71
  if @exceptions.empty?
68
72
  log "\nFinished"
69
- green "#{@examples} examples, #{@count} failures (time taken: #{time})"
73
+ green "#{@examples} examples, #{@count} failures (time taken: #{time})\n"
70
74
 
71
75
  finish_with_code 0
72
76
  else
@@ -81,6 +85,15 @@ class BrowserFormatter
81
85
  log "\nFinished"
82
86
  red "#{@examples} examples, #{@count} failures (time taken: #{time})"
83
87
 
88
+ log "\n\nFilters for failed examples:\n\n"
89
+ @exceptions.map do |exception|
90
+ ["#{exception.describe} #{exception.it}", exception.message.tr("\n", " ")]
91
+ end.sort.each do |(description, message)|
92
+ red "fails #{description.inspect}"
93
+ cyan " # #{message}\n"
94
+ end
95
+ log "\n"
96
+
84
97
  finish_with_code(1)
85
98
  end
86
99
  end
@@ -90,15 +103,40 @@ class BrowserFormatter
90
103
  end
91
104
  end
92
105
 
93
- class PhantomFormatter < BrowserFormatter
94
- def green(str)
95
- `console.log('\u001b[32m' + str + '\u001b[0m')`
106
+ class BrowserFormatter < BaseOpalFormatter
107
+ def initialize(*args, &block)
108
+ $passed = 0
109
+ $failed = 0
110
+ $errored = 0
111
+ super
112
+ end
113
+
114
+ def print_example(state)
115
+ unless exception?
116
+ $passed += 1
117
+ else
118
+ if failure?
119
+ $failed += 1
120
+ else
121
+ $errored += 1
122
+ end
123
+ end
96
124
  end
125
+ end
97
126
 
127
+ class PhantomFormatter < BaseOpalFormatter
98
128
  def red(str)
99
129
  `console.log('\u001b[31m' + str + '\u001b[0m')`
100
130
  end
101
131
 
132
+ def green(str)
133
+ `console.log('\u001b[32m' + str + '\u001b[0m')`
134
+ end
135
+
136
+ def cyan(str)
137
+ `console.log('\u001b[36m' + str + '\u001b[0m')`
138
+ end
139
+
102
140
  def log(str)
103
141
  `console.log(str)`
104
142
  end
@@ -113,15 +151,24 @@ class PhantomFormatter < BrowserFormatter
113
151
  end
114
152
  end
115
153
 
116
- class NodeJSFormatter < BrowserFormatter
117
- def green(str)
118
- `process.stdout.write("\u001b[32m"+#{str}+"\u001b[0m")`
154
+ class NodeJSFormatter < BaseOpalFormatter
155
+ def initialize(*args, &block)
156
+ require 'nodejs/stacktrace'
157
+ super
119
158
  end
120
159
 
121
160
  def red(str)
122
161
  `process.stdout.write("\u001b[31m"+#{str}+"\u001b[0m")`
123
162
  end
124
163
 
164
+ def green(str)
165
+ `process.stdout.write("\u001b[32m"+#{str}+"\u001b[0m")`
166
+ end
167
+
168
+ def cyan(str)
169
+ `process.stdout.write("\u001b[36m"+#{str}+"\u001b[0m")`
170
+ end
171
+
125
172
  def log(str)
126
173
  puts str
127
174
  end
@@ -152,12 +199,16 @@ class PhantomDocFormatter < PhantomFormatter
152
199
  end
153
200
 
154
201
  class NodeJSDocFormatter < NodeJSFormatter
202
+ def before(example)
203
+ print example.description
204
+ end
205
+
155
206
  def print_example(state)
156
- (@exception && state) ? red(state.description+"\n") : green(state.description+"\n")
207
+ (@exception && state) ? red(" ✗\n") : green(" ✓\n")
157
208
  end
158
209
  end
159
210
 
160
- class InvertedFormatter < DottedFormatter
211
+ module InvertedFormatter
161
212
  def initialize(out=nil)
162
213
  super
163
214
  @actually_passing = []
@@ -171,15 +222,12 @@ class InvertedFormatter < DottedFormatter
171
222
  end
172
223
 
173
224
  def after(state=nil)
174
- unless exception?
175
- @actually_passing << @current_state
176
- end
177
-
225
+ @actually_passing << @current_state unless exception?
178
226
  super
179
227
  end
180
228
 
181
229
  def finish
182
- puts "\n\nExpected to fail:\n"
230
+ puts "\n\nExpected #{@actually_passing.size} examples to fail:\n"
183
231
  @actually_passing.each_with_index do |example, idx|
184
232
  puts " #{idx + 1}) #{example.description.inspect}"
185
233
  end
@@ -1,3 +1,5 @@
1
+ require 'mspec-opal/formatters'
2
+
1
3
  class OSpecFilter
2
4
  def self.main
3
5
  @main ||= self.new
@@ -29,6 +31,14 @@ class OSpecFilter
29
31
  @filters << description
30
32
  end
31
33
 
34
+ def fails_badly(description)
35
+ if ENV['INVERT_RUNNING_MODE']
36
+ warn "WARNING: FAILS BADLY: Ignoring filter to avoid blocking the suite: #{description.inspect}"
37
+ else
38
+ @filters << description
39
+ end
40
+ end
41
+
32
42
  def unused_filters_message(list: false)
33
43
  unused = @filters - @seen
34
44
  return if unused.size == 0
@@ -36,7 +46,7 @@ class OSpecFilter
36
46
  if list
37
47
  puts
38
48
  puts "Unused filters:"
39
- unused.each {|u| puts "- #{u}".gsub("\n", "\\n")}
49
+ unused.each {|u| puts " fails #{u.inspect}"}
40
50
  puts
41
51
  else
42
52
  warn "\nThere are #{unused.size} unused filters, re-run with ENV['LIST_UNUSED_FILTERS'] = true to list them\n\n"
@@ -49,43 +59,13 @@ class Object
49
59
  OSpecFilter.main.register_filters(description, block)
50
60
  end
51
61
 
52
- # Copyed from MSpec, with changes.
53
- def with_timezone(name, offset = nil, daylight_saving_zone = "")
54
- zone = name.dup
55
-
56
- if offset
57
- # TZ convention is backwards
58
- offset = -offset
59
-
60
- zone += offset.to_s
61
- zone += ":00:00"
62
- end
63
- zone += daylight_saving_zone
64
-
65
- # WAS:
66
- #
67
- # old = ENV["TZ"]
68
- # ENV["TZ"] = zone
69
- #
70
- # begin
71
- # yield
72
- # ensure
73
- # ENV["TZ"] = old
74
- # end
75
- #
76
- if ENV["TZ"] == zone
77
- yield
78
- else
79
- 1.should == 1 # MSpec will get mad if the example has no expectations.
80
- warn "Skipped spec for TZ=#{zone} as it's not supported"
81
- end
82
- end
62
+ alias opal_unsupported_filter opal_filter
83
63
  end
84
64
 
85
- module MSpec
86
- def self.opal_runner
87
- @env = Object.new
88
- @env.extend MSpec
65
+ # MSpec relies on File.readable? to do method detection on backtraces
66
+ class File
67
+ def self.readable?(path)
68
+ false
89
69
  end
90
70
  end
91
71
 
@@ -95,16 +75,31 @@ class OSpecFormatter
95
75
  end
96
76
 
97
77
  def default_formatter
98
- return InvertedFormatter if ENV['INVERT_RUNNING_MODE']
78
+ formatters = {
79
+ 'browser' => BrowserFormatter,
80
+ 'server' => BrowserFormatter,
81
+ 'node' => NodeJSFormatter,
82
+ 'nodejs' => NodeJSFormatter,
83
+ 'nodedoc' => NodeJSDocFormatter,
84
+ 'nodejsdoc' => NodeJSDocFormatter,
85
+ 'phantom' => PhantomFormatter,
86
+ 'phantomjs' => PhantomFormatter,
87
+ 'phantomdoc' => PhantomDocFormatter,
88
+ 'phantomjsdoc' => PhantomDocFormatter,
89
+ 'dotted' => DottedFormatter,
90
+ }
91
+
92
+ formatter = formatters.fetch(ENV['FORMATTER']) do
93
+ warn "Using the default 'dotted' formatter, set the FORMATTER env var to select a different formatter (was: #{ENV['FORMATTER'].inspect}, options: #{formatters.keys.join(", ")})"
94
+ DottedFormatter
95
+ end
96
+
97
+ if ENV['INVERT_RUNNING_MODE']
98
+ formatter = Class.new(formatter)
99
+ formatter.include InvertedFormatter
100
+ end
99
101
 
100
- # Uncomment one of the following to use a different formatter:
101
- #
102
- # BrowserFormatter
103
- # NodeJSFormatter
104
- # NodeJSDocFormatter
105
- # PhantomFormatter
106
- # PhantomDocFormatter
107
- DottedFormatter
102
+ formatter
108
103
  end
109
104
 
110
105
  def register(formatter_class = default_formatter)
@@ -112,35 +107,18 @@ class OSpecFormatter
112
107
  end
113
108
  end
114
109
 
115
- class OSpecRunner
110
+ class OpalBM
116
111
  def self.main
117
112
  @main ||= self.new
118
113
  end
119
114
 
120
- def initialize
121
- register
122
- run
123
- end
124
-
125
- def register
126
- OSpecFormatter.main.register
127
- OSpecFilter.main.register
128
- end
129
-
130
- def run
131
- MSpec.opal_runner
132
- end
133
-
134
- def will_start
135
- MSpec.actions :start
136
- end
137
-
138
- def bm!(repeat, bm_filepath)
115
+ def register(repeat, bm_filepath)
139
116
  `self.bm = {}`
140
117
  `self.bm_filepath = bm_filepath`
141
118
  MSpec.repeat = repeat
142
119
  MSpec.register :before, self
143
120
  MSpec.register :after, self
121
+ MSpec.register :finish, self
144
122
  end
145
123
 
146
124
  def before(state = nil)
@@ -159,7 +137,7 @@ class OSpecRunner
159
137
  }
160
138
  end
161
139
 
162
- def did_finish
140
+ def finish
163
141
  %x{
164
142
  var obj = self.bm, key, val, report = '';
165
143
  if (obj) {
@@ -172,7 +150,6 @@ class OSpecRunner
172
150
  require('fs').writeFileSync(self.bm_filepath, report);
173
151
  }
174
152
  }
175
- MSpec.actions :finish
176
153
  end
177
154
  end
178
155
 
@@ -191,3 +168,6 @@ module OutputSilencer
191
168
  end
192
169
  end
193
170
  end
171
+
172
+ OSpecFormatter.main.register
173
+ OSpecFilter.main.register
@@ -8,6 +8,11 @@ describe Date do
8
8
  Date.parse('2013-10-4').should == Date.new(2013, 10, 4)
9
9
  Date.parse('2013-06-02').should == Date.new(2013, 6, 2)
10
10
  end
11
+
12
+ it "parses date string with month name into a Date instance" do
13
+ Date.parse("2013 Jun 02").should == Date.new(2013, 6, 2)
14
+ Date.parse("2013 jun 02").should == Date.new(2013, 6, 2)
15
+ end
11
16
  end
12
17
 
13
18
  describe "#<" do
@@ -46,6 +51,10 @@ describe Date do
46
51
  it 'returns 1 when self is greater than other' do
47
52
  (Date.new(2015, 1, 2) <=> Date.new(2015, 1, 1)).should == 1
48
53
  end
54
+
55
+ it 'returns nil when compared to non-Date objects' do
56
+ (Date.new <=> nil).should == nil
57
+ end
49
58
  end
50
59
 
51
60
  describe "#==" do
@@ -56,6 +65,11 @@ describe Date do
56
65
  it "returns false if self is not equal to other date" do
57
66
  (Date.new(2013, 10, 2) == Date.new(2013, 10, 11)).should == false
58
67
  end
68
+
69
+ it 'returns false when compared to non-Date objects' do
70
+ (Date.new == nil).should == false
71
+ (Date.new == Object.new).should == false
72
+ end
59
73
  end
60
74
 
61
75
  describe "#clone" do
@@ -18,3 +18,13 @@ describe "Native exception" do
18
18
  exception.message.should == "native message"
19
19
  end
20
20
  end
21
+
22
+ # TODO: Delete when this code is added to the ruby spec
23
+ describe "Exception#to_s" do
24
+ it "calls #to_s on the message" do
25
+ message = mock("message")
26
+ message.should_receive(:to_s).and_return("message").any_number_of_times
27
+ ExceptionSpecs::Exceptional.new(message).to_s.should == "message"
28
+ end
29
+ end
30
+
@@ -188,11 +188,11 @@ describe 'Hash' do
188
188
  @obj1 => 'xyz'
189
189
  }
190
190
 
191
- `#@hash.$$map.hasOwnProperty('hhh')`.should == true
192
- `#@hash.$$map.hasOwnProperty(#{@obj1.hash})`.should == true
193
- `#@hash.$$smap.hasOwnProperty('a')`.should == true
194
- `#@hash.$$smap.hasOwnProperty('b')`.should == true
195
- `#@hash.$$smap.hasOwnProperty('c')`.should == true
191
+ `Opal.hasOwnProperty.call(#@hash.$$map, 'hhh')`.should == true
192
+ `Opal.hasOwnProperty.call(#@hash.$$map, #{@obj1.hash})`.should == true
193
+ `Opal.hasOwnProperty.call(#@hash.$$smap, 'a')`.should == true
194
+ `Opal.hasOwnProperty.call(#@hash.$$smap, 'b')`.should == true
195
+ `Opal.hasOwnProperty.call(#@hash.$$smap, 'c')`.should == true
196
196
 
197
197
  `#@hash.$$keys.length`.should == 8
198
198
  `Object.keys(#@hash.$$map).length`.should == 2
@@ -322,11 +322,11 @@ describe 'Hash' do
322
322
  `#@hash.$$smap['b'] === undefined`.should == true
323
323
  `#@hash.$$smap['c'] === undefined`.should == true
324
324
 
325
- `#@hash.$$map.hasOwnProperty('hhh')`.should == false
326
- `#@hash.$$map.hasOwnProperty(#{@obj1.hash})`.should == false
327
- `#@hash.$$smap.hasOwnProperty('a')`.should == false
328
- `#@hash.$$smap.hasOwnProperty('b')`.should == false
329
- `#@hash.$$smap.hasOwnProperty('c')`.should == false
325
+ `Opal.hasOwnProperty.call(#@hash.$$map, 'hhh')`.should == false
326
+ `Opal.hasOwnProperty.call(#@hash.$$map, #{@obj1.hash})`.should == false
327
+ `Opal.hasOwnProperty.call(#@hash.$$smap, 'a')`.should == false
328
+ `Opal.hasOwnProperty.call(#@hash.$$smap, 'b')`.should == false
329
+ `Opal.hasOwnProperty.call(#@hash.$$smap, 'c')`.should == false
330
330
  end
331
331
  end
332
332
  end
@@ -12,10 +12,6 @@ describe "Kernel.rand" do
12
12
  r.to_a.include?(rand(r)).should == true
13
13
  end
14
14
 
15
- it "should convert negative number and convert to integer" do
16
- rand(-0.1).should == 0
17
- end
18
-
19
15
  it "returns a numeric in opal" do
20
16
  rand.should be_kind_of(Numeric)
21
17
  rand(77).should be_kind_of(Numeric)
@@ -12,6 +12,9 @@ class RespondToSpecs
12
12
  def some_method
13
13
  :foo
14
14
  end
15
+
16
+ def foo
17
+ end
15
18
  end
16
19
 
17
20
  describe "Kernel.respond_to?" do
@@ -35,7 +38,7 @@ describe "Kernel#respond_to?" do
35
38
  end
36
39
 
37
40
  it "returns false if a method exists, but is marked with a '$$stub' property" do
38
- `#{@a}.$some_method.$$stub = true`
39
- @a.respond_to?(:some_method).should be_false
41
+ `#{@a}.$foo.$$stub = true`
42
+ @a.respond_to?(:foo).should be_false
40
43
  end
41
44
  end
@@ -0,0 +1,38 @@
1
+ ConstantLookupSpec_TopDef = 123
2
+ def self._ConstantLookupSpec_TopDef
3
+ ConstantLookupSpec_TopDef
4
+ end
5
+ ConstantLookupSpec_TopDefValue = _ConstantLookupSpec_TopDef
6
+
7
+ module ConstantLookupSpec_Module
8
+ end
9
+ class ConstantLookupSpec_Class
10
+ end
11
+
12
+ module ConstantLookupSpec_Namespace
13
+ class NamespacedClass
14
+ def self.foo
15
+ ConstantLookupSpec_TopDef
16
+ end
17
+ end
18
+ end
19
+
20
+
21
+ describe 'constant lookup' do
22
+ it 'can reach constants from methods defined at top level' do
23
+ ::ConstantLookupSpec_TopDefValue.should == 123
24
+ ::ConstantLookupSpec_TopDefValue.should == ::ConstantLookupSpec_TopDef
25
+ ::ConstantLookupSpec_TopDefValue.should == ConstantLookupSpec_TopDef
26
+ end
27
+
28
+ it 'cannot reach a toplevel constant from a qualified lookup on another toplevel constant' do
29
+ ->{ConstantLookupSpec_Module::ConstantLookupSpec_Class}.should raise_error(NameError)
30
+
31
+ # When the cref is a module then ::Object is added to the search
32
+ ->{ConstantLookupSpec_Class::ConstantLookupSpec_Module}.should_not raise_error
33
+ end
34
+
35
+ it 'can reach a constant from inside a namespaced class' do
36
+ ConstantLookupSpec_Namespace::NamespacedClass.foo.should == 123
37
+ end
38
+ end
@@ -0,0 +1,7 @@
1
+ describe 'Safe navigator' do
2
+ it "handles also null and undefined" do
3
+ [`null`, `undefined`].each do |value|
4
+ value&.unknown.should == nil
5
+ end
6
+ end
7
+ end
@@ -73,7 +73,7 @@ describe "Invoking a method" do
73
73
  specs.fooM1O1(1,2,3)
74
74
  }.should raise_error(ArgumentError)
75
75
  end
76
-
76
+
77
77
  it "keeps the block if supplied" do
78
78
  block = lambda {}
79
79
  specs.fooM1O2(1, foo: :bar, &block).should == [1, {foo: :bar}, block]
@@ -102,14 +102,6 @@ describe "Invoking a method" do
102
102
  prc.call.should == "hello"
103
103
  end
104
104
 
105
- it "with an object as a block uses 'to_proc' for coercion" do
106
- o = LangSendSpecs::ToProc.new(:from_to_proc)
107
-
108
- specs.makeproc(&o).call.should == :from_to_proc
109
-
110
- specs.yield_now(&o).should == :from_to_proc
111
- end
112
-
113
105
  it "raises a SyntaxError with both a literal block and an object as block" do
114
106
  lambda {
115
107
  eval "specs.oneb(10, &l){ 42 }"
@@ -16,29 +16,29 @@ describe "Ruby character strings" do
16
16
 
17
17
  it "should not process escape characters in single-quoted heredocs" do
18
18
  s = <<'EOD'
19
- hey\now\brown\cow
20
- EOD
19
+ hey\now\brown\cow
20
+ EOD
21
21
  s.strip.should == 'hey\now\brown\cow'
22
22
  end
23
23
 
24
24
  it "should ignore single-quote escapes in single-quoted heredocs" do
25
25
  s = <<'EOD'
26
- they\'re greeeeaaat!
27
- EOD
26
+ they\'re greeeeaaat!
27
+ EOD
28
28
  s.strip.should == 'they\\\'re greeeeaaat!'
29
29
  end
30
30
 
31
31
  it "should process escape characters in double quoted heredocs" do
32
32
  s = <<"EOD"
33
- hey\now\brown\cow
34
- EOD
33
+ hey\now\brown\cow
34
+ EOD
35
35
  s.strip.should == "hey\now\brown\cow"
36
36
  end
37
37
 
38
38
  it "should treat bare-word heredoc identifiers as double-quoted" do
39
39
  s = <<EOD
40
- hey\now\brown\cow
41
- EOD
40
+ hey\now\brown\cow
41
+ EOD
42
42
  s.strip.should == "hey\now\brown\cow"
43
43
  end
44
44
  end
@@ -17,10 +17,6 @@ describe "An instance method with keyword arguments" do
17
17
  foo(a: nil).should be_nil
18
18
  end
19
19
 
20
- it "raises an argument error when an unknown keyword argument is provided" do
21
- lambda { foo(b: 20) }.should raise_error(ArgumentError)
22
- end
23
-
24
20
  it "raises an argument error when a non-keyword argument is provided" do
25
21
  lambda { foo(1) }.should raise_error(ArgumentError)
26
22
  end