opal-cj 0.7.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.gitmodules +27 -0
  4. data/.rspec +3 -0
  5. data/.spectator +2 -0
  6. data/.spectator-mspec +3 -0
  7. data/.travis.yml +45 -0
  8. data/CHANGELOG.md +406 -0
  9. data/CONTRIBUTING.md +41 -0
  10. data/Gemfile +27 -0
  11. data/Guardfile +77 -0
  12. data/LICENSE +19 -0
  13. data/README.md +178 -0
  14. data/Rakefile +116 -0
  15. data/benchmarks/operators.rb +11 -0
  16. data/bin/opal +22 -0
  17. data/bin/opal-build +77 -0
  18. data/bin/opal-mspec +10 -0
  19. data/bin/opal-repl +72 -0
  20. data/config.ru +14 -0
  21. data/examples/rack/Gemfile +3 -0
  22. data/examples/rack/app/application.rb +13 -0
  23. data/examples/rack/app/user.rb +21 -0
  24. data/examples/rack/config.ru +7 -0
  25. data/examples/rack/index.html.erb +10 -0
  26. data/examples/sinatra/Gemfile +4 -0
  27. data/examples/sinatra/app/application.rb +7 -0
  28. data/examples/sinatra/config.ru +28 -0
  29. data/lib/mspec/opal/main.rb.erb +9 -0
  30. data/lib/mspec/opal/rake_task.rb +278 -0
  31. data/lib/mspec/opal/runner.rb +206 -0
  32. data/lib/mspec/opal/sprockets.js +57 -0
  33. data/lib/opal.rb +11 -0
  34. data/lib/opal/builder.rb +135 -0
  35. data/lib/opal/builder_processors.rb +165 -0
  36. data/lib/opal/cli.rb +145 -0
  37. data/lib/opal/cli_options.rb +149 -0
  38. data/lib/opal/cli_runners.rb +10 -0
  39. data/lib/opal/cli_runners/nodejs.rb +56 -0
  40. data/lib/opal/cli_runners/phantom.js +35 -0
  41. data/lib/opal/cli_runners/phantomjs.rb +28 -0
  42. data/lib/opal/cli_runners/server.rb +54 -0
  43. data/lib/opal/compiler.rb +307 -0
  44. data/lib/opal/erb.rb +64 -0
  45. data/lib/opal/fragment.rb +41 -0
  46. data/lib/opal/hike_path_finder.rb +18 -0
  47. data/lib/opal/nodes.rb +26 -0
  48. data/lib/opal/nodes/arglist.rb +56 -0
  49. data/lib/opal/nodes/array.rb +54 -0
  50. data/lib/opal/nodes/base.rb +151 -0
  51. data/lib/opal/nodes/call.rb +283 -0
  52. data/lib/opal/nodes/call_special.rb +178 -0
  53. data/lib/opal/nodes/case.rb +96 -0
  54. data/lib/opal/nodes/class.rb +42 -0
  55. data/lib/opal/nodes/constants.rb +78 -0
  56. data/lib/opal/nodes/def.rb +157 -0
  57. data/lib/opal/nodes/defined.rb +113 -0
  58. data/lib/opal/nodes/definitions.rb +168 -0
  59. data/lib/opal/nodes/for.rb +35 -0
  60. data/lib/opal/nodes/hash.rb +67 -0
  61. data/lib/opal/nodes/helpers.rb +114 -0
  62. data/lib/opal/nodes/if.rb +67 -0
  63. data/lib/opal/nodes/iter.rb +131 -0
  64. data/lib/opal/nodes/literal.rb +230 -0
  65. data/lib/opal/nodes/logic.rb +217 -0
  66. data/lib/opal/nodes/masgn.rb +62 -0
  67. data/lib/opal/nodes/module.rb +46 -0
  68. data/lib/opal/nodes/rescue.rb +135 -0
  69. data/lib/opal/nodes/runtime_helpers.rb +45 -0
  70. data/lib/opal/nodes/scope.rb +293 -0
  71. data/lib/opal/nodes/singleton_class.rb +25 -0
  72. data/lib/opal/nodes/super.rb +97 -0
  73. data/lib/opal/nodes/top.rb +101 -0
  74. data/lib/opal/nodes/variables.rb +158 -0
  75. data/lib/opal/nodes/while.rb +65 -0
  76. data/lib/opal/nodes/yield.rb +95 -0
  77. data/lib/opal/parser.rb +658 -0
  78. data/lib/opal/parser/grammar.rb +5452 -0
  79. data/lib/opal/parser/grammar.y +1684 -0
  80. data/lib/opal/parser/keywords.rb +66 -0
  81. data/lib/opal/parser/lexer.rb +1208 -0
  82. data/lib/opal/parser/parser_scope.rb +25 -0
  83. data/lib/opal/parser/sexp.rb +75 -0
  84. data/lib/opal/path_reader.rb +28 -0
  85. data/lib/opal/paths.rb +38 -0
  86. data/lib/opal/source_map.rb +70 -0
  87. data/lib/opal/sprockets.rb +4 -0
  88. data/lib/opal/sprockets/cache_key_fix.rb +17 -0
  89. data/lib/opal/sprockets/environment.rb +37 -0
  90. data/lib/opal/sprockets/erb.rb +37 -0
  91. data/lib/opal/sprockets/path_reader.rb +34 -0
  92. data/lib/opal/sprockets/processor.rb +124 -0
  93. data/lib/opal/sprockets/server.rb +180 -0
  94. data/lib/opal/util.rb +64 -0
  95. data/lib/opal/version.rb +3 -0
  96. data/opal.gemspec +36 -0
  97. data/opal/README.md +6 -0
  98. data/opal/corelib/array.rb +1556 -0
  99. data/opal/corelib/array/inheritance.rb +113 -0
  100. data/opal/corelib/basic_object.rb +73 -0
  101. data/opal/corelib/boolean.rb +41 -0
  102. data/opal/corelib/class.rb +55 -0
  103. data/opal/corelib/comparable.rb +56 -0
  104. data/opal/corelib/complex.rb +3 -0
  105. data/opal/corelib/dir.rb +20 -0
  106. data/opal/corelib/enumerable.rb +1132 -0
  107. data/opal/corelib/enumerator.rb +422 -0
  108. data/opal/corelib/error.rb +63 -0
  109. data/opal/corelib/file.rb +56 -0
  110. data/opal/corelib/hash.rb +728 -0
  111. data/opal/corelib/helpers.rb +102 -0
  112. data/opal/corelib/io.rb +59 -0
  113. data/opal/corelib/kernel.rb +569 -0
  114. data/opal/corelib/main.rb +7 -0
  115. data/opal/corelib/match_data.rb +114 -0
  116. data/opal/corelib/method.rb +58 -0
  117. data/opal/corelib/module.rb +462 -0
  118. data/opal/corelib/nil_class.rb +62 -0
  119. data/opal/corelib/numeric.rb +532 -0
  120. data/opal/corelib/proc.rb +52 -0
  121. data/opal/corelib/range.rb +116 -0
  122. data/opal/corelib/rational.rb +3 -0
  123. data/opal/corelib/regexp.rb +133 -0
  124. data/opal/corelib/runtime.js +1240 -0
  125. data/opal/corelib/string.rb +1212 -0
  126. data/opal/corelib/string/inheritance.rb +78 -0
  127. data/opal/corelib/struct.rb +141 -0
  128. data/opal/corelib/time.rb +584 -0
  129. data/opal/corelib/variables.rb +24 -0
  130. data/opal/opal.rb +32 -0
  131. data/package.json +9 -0
  132. data/spec/filters/bugs/array.rb +232 -0
  133. data/spec/filters/bugs/basic_object.rb +14 -0
  134. data/spec/filters/bugs/class.rb +21 -0
  135. data/spec/filters/bugs/enumerable.rb +69 -0
  136. data/spec/filters/bugs/enumerator.rb +3 -0
  137. data/spec/filters/bugs/hash.rb +128 -0
  138. data/spec/filters/bugs/kernel.rb +10 -0
  139. data/spec/filters/bugs/language.rb +415 -0
  140. data/spec/filters/bugs/math.rb +95 -0
  141. data/spec/filters/bugs/module.rb +14 -0
  142. data/spec/filters/bugs/nil.rb +7 -0
  143. data/spec/filters/bugs/numeric.rb +20 -0
  144. data/spec/filters/bugs/opal.rb +14 -0
  145. data/spec/filters/bugs/regexp.rb +11 -0
  146. data/spec/filters/bugs/set.rb +7 -0
  147. data/spec/filters/bugs/singleton.rb +6 -0
  148. data/spec/filters/bugs/string.rb +360 -0
  149. data/spec/filters/bugs/stringscanner.rb +22 -0
  150. data/spec/filters/bugs/struct.rb +45 -0
  151. data/spec/filters/bugs/time.rb +177 -0
  152. data/spec/filters/bugs/unknown.rb +11 -0
  153. data/spec/filters/unsupported/encoding.rb +95 -0
  154. data/spec/filters/unsupported/enumerator.rb +14 -0
  155. data/spec/filters/unsupported/float.rb +5 -0
  156. data/spec/filters/unsupported/frozen.rb +90 -0
  157. data/spec/filters/unsupported/hash_compare_by_identity.rb +16 -0
  158. data/spec/filters/unsupported/integer_size.rb +7 -0
  159. data/spec/filters/unsupported/method_added.rb +10 -0
  160. data/spec/filters/unsupported/mutable_strings.rb +361 -0
  161. data/spec/filters/unsupported/private_constants.rb +30 -0
  162. data/spec/filters/unsupported/private_methods.rb +44 -0
  163. data/spec/filters/unsupported/random.rb +4 -0
  164. data/spec/filters/unsupported/ruby_exe.rb +5 -0
  165. data/spec/filters/unsupported/tainted.rb +155 -0
  166. data/spec/filters/unsupported/time.rb +21 -0
  167. data/spec/filters/unsupported/trusted.rb +80 -0
  168. data/spec/lib/builder_processors_spec.rb +27 -0
  169. data/spec/lib/builder_spec.rb +66 -0
  170. data/spec/lib/cli_spec.rb +134 -0
  171. data/spec/lib/compiler_spec.rb +197 -0
  172. data/spec/lib/dependency_resolver_spec.rb +40 -0
  173. data/spec/lib/fixtures/no_requires.rb +1 -0
  174. data/spec/lib/fixtures/opal_file.rb +2 -0
  175. data/spec/lib/fixtures/require_tree_test.rb +3 -0
  176. data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
  177. data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
  178. data/spec/lib/fixtures/requires.rb +7 -0
  179. data/spec/lib/fixtures/sprockets_file.js.rb +3 -0
  180. data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
  181. data/spec/lib/hike_path_finder_spec.rb +23 -0
  182. data/spec/lib/lexer_spec.rb +110 -0
  183. data/spec/lib/parser/alias_spec.rb +26 -0
  184. data/spec/lib/parser/and_spec.rb +13 -0
  185. data/spec/lib/parser/attrasgn_spec.rb +28 -0
  186. data/spec/lib/parser/begin_spec.rb +42 -0
  187. data/spec/lib/parser/block_spec.rb +12 -0
  188. data/spec/lib/parser/break_spec.rb +17 -0
  189. data/spec/lib/parser/call_spec.rb +139 -0
  190. data/spec/lib/parser/class_spec.rb +35 -0
  191. data/spec/lib/parser/comments_spec.rb +11 -0
  192. data/spec/lib/parser/def_spec.rb +61 -0
  193. data/spec/lib/parser/if_spec.rb +26 -0
  194. data/spec/lib/parser/iter_spec.rb +59 -0
  195. data/spec/lib/parser/lambda_spec.rb +64 -0
  196. data/spec/lib/parser/literal_spec.rb +118 -0
  197. data/spec/lib/parser/masgn_spec.rb +37 -0
  198. data/spec/lib/parser/module_spec.rb +27 -0
  199. data/spec/lib/parser/not_spec.rb +27 -0
  200. data/spec/lib/parser/op_asgn1_spec.rb +23 -0
  201. data/spec/lib/parser/op_asgn2_spec.rb +23 -0
  202. data/spec/lib/parser/or_spec.rb +13 -0
  203. data/spec/lib/parser/return_spec.rb +17 -0
  204. data/spec/lib/parser/sclass_spec.rb +21 -0
  205. data/spec/lib/parser/string_spec.rb +276 -0
  206. data/spec/lib/parser/super_spec.rb +20 -0
  207. data/spec/lib/parser/unary_spec.rb +48 -0
  208. data/spec/lib/parser/undef_spec.rb +15 -0
  209. data/spec/lib/parser/unless_spec.rb +13 -0
  210. data/spec/lib/parser/variables_spec.rb +92 -0
  211. data/spec/lib/parser/while_spec.rb +15 -0
  212. data/spec/lib/parser/yield_spec.rb +20 -0
  213. data/spec/lib/path_reader_spec.rb +24 -0
  214. data/spec/lib/shared/path_finder_shared.rb +19 -0
  215. data/spec/lib/shared/path_reader_shared.rb +31 -0
  216. data/spec/lib/spec_helper.rb +9 -0
  217. data/spec/lib/sprockets/environment_spec.rb +30 -0
  218. data/spec/lib/sprockets/erb_spec.rb +25 -0
  219. data/spec/lib/sprockets/path_reader_spec.rb +25 -0
  220. data/spec/lib/sprockets/processor_spec.rb +35 -0
  221. data/spec/lib/sprockets/server_spec.rb +20 -0
  222. data/spec/opal/compiler/irb_spec.rb +44 -0
  223. data/spec/opal/core/array/select_spec.rb +14 -0
  224. data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
  225. data/spec/opal/core/date_spec.rb +122 -0
  226. data/spec/opal/core/enumerable/all_break_spec.rb +5 -0
  227. data/spec/opal/core/enumerable/any_break_spec.rb +5 -0
  228. data/spec/opal/core/enumerable/collect_break_spec.rb +13 -0
  229. data/spec/opal/core/enumerable/count_break_spec.rb +5 -0
  230. data/spec/opal/core/enumerable/detect_break_spec.rb +5 -0
  231. data/spec/opal/core/enumerable/drop_while_break_spec.rb +5 -0
  232. data/spec/opal/core/enumerable/each_slice_break.rb +6 -0
  233. data/spec/opal/core/enumerable/each_with_index_break_spec.rb +5 -0
  234. data/spec/opal/core/enumerable/each_with_object_break_spec.rb +5 -0
  235. data/spec/opal/core/enumerable/find_all_break_spec.rb +5 -0
  236. data/spec/opal/core/enumerable/find_index_break_spec.rb +5 -0
  237. data/spec/opal/core/enumerable/grep_break_spec.rb +5 -0
  238. data/spec/opal/core/enumerable/max_break_spec.rb +5 -0
  239. data/spec/opal/core/enumerable/max_by_break_spec.rb +5 -0
  240. data/spec/opal/core/enumerable/min_break_spec.rb +5 -0
  241. data/spec/opal/core/enumerable/min_by_break_spec.rb +5 -0
  242. data/spec/opal/core/enumerable/none_break_spec.rb +5 -0
  243. data/spec/opal/core/enumerable/one_break_spec.rb +5 -0
  244. data/spec/opal/core/enumerable/reduce_break_spec.rb +5 -0
  245. data/spec/opal/core/enumerable/take_while_break_spec.rb +5 -0
  246. data/spec/opal/core/fixtures/class.rb +124 -0
  247. data/spec/opal/core/fixtures/class_variables.rb +0 -0
  248. data/spec/opal/core/fixtures/constants.rb +33 -0
  249. data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
  250. data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
  251. data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
  252. data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
  253. data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
  254. data/spec/opal/core/kernel/Array_spec.rb +10 -0
  255. data/spec/opal/core/kernel/block_given_spec.rb +30 -0
  256. data/spec/opal/core/kernel/class_spec.rb +6 -0
  257. data/spec/opal/core/kernel/define_singleton_method_spec.rb +21 -0
  258. data/spec/opal/core/kernel/equal_value_spec.rb +12 -0
  259. data/spec/opal/core/kernel/extend_spec.rb +21 -0
  260. data/spec/opal/core/kernel/format_spec.rb +122 -0
  261. data/spec/opal/core/kernel/freeze_spec.rb +15 -0
  262. data/spec/opal/core/kernel/instance_eval_spec.rb +28 -0
  263. data/spec/opal/core/kernel/instance_variable_defined_spec.rb +15 -0
  264. data/spec/opal/core/kernel/instance_variable_get_spec.rb +14 -0
  265. data/spec/opal/core/kernel/instance_variable_set_spec.rb +10 -0
  266. data/spec/opal/core/kernel/loop_spec.rb +23 -0
  267. data/spec/opal/core/kernel/match_spec.rb +5 -0
  268. data/spec/opal/core/kernel/method_spec.rb +31 -0
  269. data/spec/opal/core/kernel/methods_spec.rb +25 -0
  270. data/spec/opal/core/kernel/nil_spec.rb +7 -0
  271. data/spec/opal/core/kernel/p_spec.rb +15 -0
  272. data/spec/opal/core/kernel/printf_spec.rb +11 -0
  273. data/spec/opal/core/kernel/proc_spec.rb +13 -0
  274. data/spec/opal/core/kernel/rand_spec.rb +23 -0
  275. data/spec/opal/core/kernel/require_tree_spec.rb +7 -0
  276. data/spec/opal/core/kernel/respond_to_spec.rb +41 -0
  277. data/spec/opal/core/kernel/send_spec.rb +56 -0
  278. data/spec/opal/core/kernel/sprintf_spec.rb +5 -0
  279. data/spec/opal/core/language/block_spec.rb +538 -0
  280. data/spec/opal/core/language/fixtures/array.rb +11 -0
  281. data/spec/opal/core/language/fixtures/block.rb +57 -0
  282. data/spec/opal/core/language/fixtures/break.rb +240 -0
  283. data/spec/opal/core/language/fixtures/ensure.rb +72 -0
  284. data/spec/opal/core/language/fixtures/literal_lambda.rb +7 -0
  285. data/spec/opal/core/language/fixtures/metaclass.rb +33 -0
  286. data/spec/opal/core/language/fixtures/module.rb +24 -0
  287. data/spec/opal/core/language/fixtures/next.rb +128 -0
  288. data/spec/opal/core/language/fixtures/return.rb +118 -0
  289. data/spec/opal/core/language/fixtures/send.rb +110 -0
  290. data/spec/opal/core/language/fixtures/send_1.9.rb +22 -0
  291. data/spec/opal/core/language/fixtures/super.rb +308 -0
  292. data/spec/opal/core/language/fixtures/variables.rb +58 -0
  293. data/spec/opal/core/language/fixtures/yield.rb +28 -0
  294. data/spec/opal/core/language/predefined_spec.rb +85 -0
  295. data/spec/opal/core/language/proc_spec.rb +263 -0
  296. data/spec/opal/core/language/regexp_spec.rb +20 -0
  297. data/spec/opal/core/language/send_spec.rb +225 -0
  298. data/spec/opal/core/language/string_spec.rb +44 -0
  299. data/spec/opal/core/language/symbol_spec.rb +40 -0
  300. data/spec/opal/core/language/variables_spec.rb +1366 -0
  301. data/spec/opal/core/language/versions/array_1.9.rb +39 -0
  302. data/spec/opal/core/language/versions/block_1.9.rb +0 -0
  303. data/spec/opal/core/language/versions/break_1.9.rb +0 -0
  304. data/spec/opal/core/language/versions/case_1.9.rb +20 -0
  305. data/spec/opal/core/language/versions/hash_1.9.rb +18 -0
  306. data/spec/opal/core/language/versions/literal_lambda_1.9.rb +143 -0
  307. data/spec/opal/core/language/versions/not_1.9.rb +22 -0
  308. data/spec/opal/core/language/versions/send_1.9.rb +241 -0
  309. data/spec/opal/core/language/versions/symbol_1.9.rb +15 -0
  310. data/spec/opal/core/language/versions/variables_1.9.rb +8 -0
  311. data/spec/opal/core/module/alias_method_spec.rb +28 -0
  312. data/spec/opal/core/module/ancestors_spec.rb +11 -0
  313. data/spec/opal/core/module/append_features_spec.rb +14 -0
  314. data/spec/opal/core/module/attr_accessor_spec.rb +26 -0
  315. data/spec/opal/core/module/const_defined_spec.rb +85 -0
  316. data/spec/opal/core/module/const_get_spec.rb +85 -0
  317. data/spec/opal/core/module/const_missing_spec.rb +17 -0
  318. data/spec/opal/core/module/const_set_spec.rb +64 -0
  319. data/spec/opal/core/module/constants_spec.rb +49 -0
  320. data/spec/opal/core/module/fixtures/classes.rb +434 -0
  321. data/spec/opal/core/module/method_defined_spec.rb +48 -0
  322. data/spec/opal/core/module/module_function_spec.rb +25 -0
  323. data/spec/opal/core/module/name_spec.rb +52 -0
  324. data/spec/opal/core/module/public_method_defined_spec.rb +18 -0
  325. data/spec/opal/core/module/remove_const_spec.rb +22 -0
  326. data/spec/opal/core/module/undef_method_spec.rb +66 -0
  327. data/spec/opal/core/numeric/bit_and_spec.rb +7 -0
  328. data/spec/opal/core/numeric/bit_or_spec.rb +8 -0
  329. data/spec/opal/core/numeric/bit_xor_spec.rb +6 -0
  330. data/spec/opal/core/numeric/ceil_spec.rb +8 -0
  331. data/spec/opal/core/numeric/chr_spec.rb +8 -0
  332. data/spec/opal/core/numeric/comparison_spec.rb +24 -0
  333. data/spec/opal/core/numeric/complement_spec.rb +8 -0
  334. data/spec/opal/core/numeric/divide_spec.rb +10 -0
  335. data/spec/opal/core/numeric/eql_spec.rb +9 -0
  336. data/spec/opal/core/numeric/exponent_spec.rb +33 -0
  337. data/spec/opal/core/numeric/floor_spec.rb +8 -0
  338. data/spec/opal/core/numeric/gt_spec.rb +11 -0
  339. data/spec/opal/core/numeric/gte_spec.rb +12 -0
  340. data/spec/opal/core/numeric/integer_spec.rb +9 -0
  341. data/spec/opal/core/numeric/left_shift_spec.rb +21 -0
  342. data/spec/opal/core/numeric/lt_spec.rb +11 -0
  343. data/spec/opal/core/numeric/lte_spec.rb +12 -0
  344. data/spec/opal/core/numeric/minus_spec.rb +8 -0
  345. data/spec/opal/core/numeric/modulo_spec.rb +19 -0
  346. data/spec/opal/core/numeric/multiply_spec.rb +9 -0
  347. data/spec/opal/core/numeric/next_spec.rb +9 -0
  348. data/spec/opal/core/numeric/ord_spec.rb +9 -0
  349. data/spec/opal/core/numeric/plus_spec.rb +8 -0
  350. data/spec/opal/core/numeric/pred_spec.rb +7 -0
  351. data/spec/opal/core/numeric/right_shift_spec.rb +25 -0
  352. data/spec/opal/core/numeric/step_spec.rb +11 -0
  353. data/spec/opal/core/numeric/succ_spec.rb +9 -0
  354. data/spec/opal/core/numeric/times_spec.rb +36 -0
  355. data/spec/opal/core/numeric/to_f_spec.rb +7 -0
  356. data/spec/opal/core/numeric/to_i_spec.rb +7 -0
  357. data/spec/opal/core/numeric/to_json_spec.rb +8 -0
  358. data/spec/opal/core/numeric/to_s_spec.rb +26 -0
  359. data/spec/opal/core/numeric/uminus_spec.rb +9 -0
  360. data/spec/opal/core/numeric/upto_spec.rb +19 -0
  361. data/spec/opal/core/numeric/zero_spec.rb +7 -0
  362. data/spec/opal/core/proc/call_spec.rb +21 -0
  363. data/spec/opal/core/proc/element_reference_spec.rb +21 -0
  364. data/spec/opal/core/proc/proc_tricks_spec.rb +7 -0
  365. data/spec/opal/core/runtime/begin_spec.rb +39 -0
  366. data/spec/opal/core/runtime/block_send_spec.rb +28 -0
  367. data/spec/opal/core/runtime/block_spec.rb +23 -0
  368. data/spec/opal/core/runtime/bridged_classes_spec.rb +64 -0
  369. data/spec/opal/core/runtime/constants_spec.rb +13 -0
  370. data/spec/opal/core/runtime/eval_spec.rb +5 -0
  371. data/spec/opal/core/runtime/main_methods_spec.rb +27 -0
  372. data/spec/opal/core/runtime/method_missing_spec.rb +62 -0
  373. data/spec/opal/core/runtime/method_spec.rb +31 -0
  374. data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
  375. data/spec/opal/core/runtime/paren_spec.rb +14 -0
  376. data/spec/opal/core/runtime/rescue_spec.rb +38 -0
  377. data/spec/opal/core/runtime/return_spec.rb +38 -0
  378. data/spec/opal/core/runtime/send_spec.rb +34 -0
  379. data/spec/opal/core/runtime/singleton_class_spec.rb +13 -0
  380. data/spec/opal/core/runtime/super_spec.rb +212 -0
  381. data/spec/opal/core/runtime/truthy_spec.rb +23 -0
  382. data/spec/opal/core/runtime/variables_spec.rb +20 -0
  383. data/spec/opal/core/source_map_spec.rb +15 -0
  384. data/spec/opal/core/string_spec.rb +11 -0
  385. data/spec/opal/stdlib/erb/erb_spec.rb +30 -0
  386. data/spec/opal/stdlib/erb/inline_block.opalerb +3 -0
  387. data/spec/opal/stdlib/erb/quoted.opalerb +1 -0
  388. data/spec/opal/stdlib/erb/simple.opalerb +1 -0
  389. data/spec/opal/stdlib/json/ext_spec.rb +48 -0
  390. data/spec/opal/stdlib/json/parse_spec.rb +33 -0
  391. data/spec/opal/stdlib/native/alias_native_spec.rb +27 -0
  392. data/spec/opal/stdlib/native/each_spec.rb +13 -0
  393. data/spec/opal/stdlib/native/element_reference_spec.rb +16 -0
  394. data/spec/opal/stdlib/native/exposure_spec.rb +33 -0
  395. data/spec/opal/stdlib/native/ext_spec.rb +19 -0
  396. data/spec/opal/stdlib/native/initialize_spec.rb +17 -0
  397. data/spec/opal/stdlib/native/method_missing_spec.rb +51 -0
  398. data/spec/opal/stdlib/native/native_reader_spec.rb +22 -0
  399. data/spec/opal/stdlib/native/native_writer_spec.rb +30 -0
  400. data/spec/opal/stdlib/native/new_spec.rb +8 -0
  401. data/spec/opal/stdlib/promise/error_spec.rb +15 -0
  402. data/spec/opal/stdlib/promise/rescue_spec.rb +35 -0
  403. data/spec/opal/stdlib/promise/then_spec.rb +54 -0
  404. data/spec/opal/stdlib/promise/trace_spec.rb +35 -0
  405. data/spec/opal/stdlib/promise/value_spec.rb +15 -0
  406. data/spec/opal/stdlib/promise/when_spec.rb +34 -0
  407. data/spec/opal/stdlib/template/paths_spec.rb +10 -0
  408. data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
  409. data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
  410. data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
  411. data/spec/rubyspecs +329 -0
  412. data/spec/spec_helper.rb +42 -0
  413. data/spec/support/mspec_rspec_adapter.rb +33 -0
  414. data/spec/support/parser_helpers.rb +37 -0
  415. data/stdlib/README.md +3 -0
  416. data/stdlib/base64.rb +152 -0
  417. data/stdlib/benchmark.rb +10 -0
  418. data/stdlib/buffer.rb +40 -0
  419. data/stdlib/buffer/array.rb +66 -0
  420. data/stdlib/buffer/view.rb +70 -0
  421. data/stdlib/date.rb +170 -0
  422. data/stdlib/delegate.rb +29 -0
  423. data/stdlib/dir.rb +1 -0
  424. data/stdlib/encoding.rb +166 -0
  425. data/stdlib/enumerator.rb +1 -0
  426. data/stdlib/erb.rb +16 -0
  427. data/stdlib/file.rb +1 -0
  428. data/stdlib/forwardable.rb +71 -0
  429. data/stdlib/json.rb +182 -0
  430. data/stdlib/math.rb +370 -0
  431. data/stdlib/native.rb +530 -0
  432. data/stdlib/nodejs.rb +5 -0
  433. data/stdlib/nodejs/dir.rb +13 -0
  434. data/stdlib/nodejs/file.rb +98 -0
  435. data/stdlib/nodejs/fileutils.rb +26 -0
  436. data/stdlib/nodejs/io.rb +2 -0
  437. data/stdlib/nodejs/irb.rb +45 -0
  438. data/stdlib/nodejs/process.rb +16 -0
  439. data/stdlib/nodejs/require.rb +32 -0
  440. data/stdlib/nodejs/rubygems.rb +68 -0
  441. data/stdlib/nodejs/runtime.rb +25 -0
  442. data/stdlib/nodejs/yaml.rb +11 -0
  443. data/stdlib/observer.rb +202 -0
  444. data/stdlib/opal-parser.rb +53 -0
  445. data/stdlib/opal-source-maps.rb +2 -0
  446. data/stdlib/ostruct.rb +69 -0
  447. data/stdlib/pathname.rb +31 -0
  448. data/stdlib/phantomjs.rb +8 -0
  449. data/stdlib/pp.rb +12 -0
  450. data/stdlib/process.rb +10 -0
  451. data/stdlib/promise.rb +300 -0
  452. data/stdlib/racc/parser.rb +215 -0
  453. data/stdlib/rbconfig.rb +20 -0
  454. data/stdlib/securerandom.rb +12 -0
  455. data/stdlib/set.rb +116 -0
  456. data/stdlib/singleton.rb +40 -0
  457. data/stdlib/source_map.rb +5 -0
  458. data/stdlib/source_map/map.rb +220 -0
  459. data/stdlib/source_map/mapping.rb +26 -0
  460. data/stdlib/source_map/offset.rb +88 -0
  461. data/stdlib/source_map/version.rb +3 -0
  462. data/stdlib/source_map/vlq.rb +98 -0
  463. data/stdlib/sourcemap.rb +1 -0
  464. data/stdlib/stringio.rb +181 -0
  465. data/stdlib/strscan.rb +155 -0
  466. data/stdlib/template.rb +46 -0
  467. data/stdlib/thread.rb +160 -0
  468. data/stdlib/time.rb +9 -0
  469. data/tasks/github.rake +19 -0
  470. metadata +690 -0
@@ -0,0 +1,15 @@
1
+ describe "A Symbol literal" do
2
+ it "can be an empty string" do
3
+ c = :''
4
+ c.should be_kind_of(Symbol)
5
+ c.inspect.should == ':""'
6
+ end
7
+
8
+ # These weren't allowed on 1.8
9
+ it "can be :!, :!=, or :!~" do
10
+ %w{'!', '!=', '!~'}.each do |sym|
11
+ lambda { sym.to_sym }.should_not raise_error(SyntaxError)
12
+ sym.to_sym.to_s.should == sym
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ describe "Multiple assignments with splats" do
2
+ it "* on the LHS has to be applied to any parameter" do
3
+ a, *b, c = 1, 2, 3
4
+ a.should == 1
5
+ b.should == [2]
6
+ c.should == 3
7
+ end
8
+ end
@@ -0,0 +1,28 @@
1
+ class AliasMethodSpec
2
+ module M
3
+ def something
4
+ 3.142
5
+ end
6
+
7
+ alias_method :something_else, :something
8
+ end
9
+
10
+ include M
11
+
12
+ def foo; 'foo'; end
13
+ alias_method :bar, :foo
14
+ end
15
+
16
+ describe "Module#alias_method" do
17
+ it "makes a copy of the method" do
18
+ AliasMethodSpec.new.bar.should == 'foo'
19
+ end
20
+
21
+ describe "inside a module" do
22
+ it "defined methods that get donated to a class when included" do
23
+ obj = AliasMethodSpec.new
24
+ obj.something.should == 3.142
25
+ obj.something_else.should == 3.142
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ module ModuleAncestorsSpec
2
+ class A; end
3
+ class B < A; end
4
+ end
5
+
6
+ describe "Module#ancestors" do
7
+ it "returns a list of modules in self (including self)" do
8
+ ModuleAncestorsSpec::B.ancestors.include?(ModuleAncestorsSpec::B).should == true
9
+ ModuleAncestorsSpec::B.ancestors.include?(ModuleAncestorsSpec::A).should == true
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module AppendFeaturesSpec
2
+ class Klass; end
3
+
4
+ def self.append_features(mod)
5
+ ScratchPad.record mod
6
+ end
7
+ end
8
+
9
+ describe "Module#append_features" do
10
+ it "gets called when self is included in another module/class" do
11
+ AppendFeaturesSpec::Klass.include AppendFeaturesSpec
12
+ ScratchPad.recorded.should == AppendFeaturesSpec::Klass
13
+ end
14
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ module AttrAccessorSpec
4
+ module M
5
+ attr_accessor :foo
6
+ end
7
+
8
+ class C
9
+ include M
10
+ end
11
+ end
12
+
13
+ describe "Module#attr_accessor" do
14
+ it "can be passed a splat of arguments" do
15
+ eval "class OpalAttrAccessorSpec; attr_accessor *%w{foo bar baz}; end"
16
+ OpalAttrAccessorSpec.new.foo.should be_nil
17
+ end
18
+
19
+ describe "inside a module" do
20
+ it "defines methods that get donated to a class when included" do
21
+ obj = AttrAccessorSpec::C.new
22
+ obj.foo = 100
23
+ obj.foo.should == 100
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,85 @@
1
+ require File.expand_path('../../fixtures/constants', __FILE__)
2
+
3
+ CD_CONST1 = :const1
4
+
5
+ module ConstDefinedSpecs
6
+ FOO = 100
7
+
8
+ module Bar
9
+ BAR = 200
10
+
11
+ module Baz
12
+ BAZ = 300
13
+ end
14
+ end
15
+
16
+ class Dog
17
+ LEGS = 4
18
+ end
19
+
20
+ class Bloudhound < Dog
21
+ end
22
+ end
23
+
24
+ describe "Module#const_defined?" do
25
+ it "should consider constants with values that evaluate to false in a JavaScript conditional as defined" do
26
+ Object.const_defined?("CS_NIL").should be_true
27
+ Object.const_defined?("CS_ZERO").should be_true
28
+ Object.const_defined?("CS_BLANK").should be_true
29
+ Object.const_defined?("CS_FALSE").should be_true
30
+ end
31
+
32
+ it "accepts a String or Symbol name" do
33
+ Object.const_defined?(:CD_CONST1).should be_true
34
+ Object.const_defined?("CD_CONST1").should be_true
35
+ end
36
+
37
+ it "should return false if no constant is defined in the search path" do
38
+ Object.const_defined?(:CS_CONSTX_BAD).should be_false
39
+ end
40
+
41
+ it "raises a NameError if the name does not start with a capital letter" do
42
+ lambda { ConstantSpecs.const_defined? "name" }.should raise_error(NameError)
43
+ end
44
+
45
+ it "raises a NameError if the name starts with a non-alphabetic character" do
46
+ lambda { ConstantSpecs.const_defined? "__CONSTX__" }.should raise_error(NameError)
47
+ lambda { ConstantSpecs.const_defined? "@Name" }.should raise_error(NameError)
48
+ lambda { ConstantSpecs.const_defined? "!Name" }.should raise_error(NameError)
49
+ lambda { ConstantSpecs.const_defined? "::Name" }.should raise_error(NameError)
50
+ end
51
+
52
+ it "raises a NameError if the name contains non-word characters" do
53
+ # underscore (i.e., _) is a valid word character
54
+ ConstantSpecs.const_defined?("CD_CONST1").should be_true
55
+ lambda { ConstantSpecs.const_defined? "Name=" }.should raise_error(NameError)
56
+ lambda { ConstantSpecs.const_defined? "Name?" }.should raise_error(NameError)
57
+ end
58
+
59
+ it "searches parent scopes of classes and modules" do
60
+ Module.const_defined?(:ConstDefinedSpecs).should be_true
61
+ ConstDefinedSpecs.const_defined?(:ConstDefinedSpecs).should be_true
62
+ ConstDefinedSpecs::Bar::Baz.const_defined?(:BAZ).should be_true
63
+ ConstDefinedSpecs::Bar::Baz.const_defined?(:CD_CONST1).should be_true
64
+ ConstDefinedSpecs::Bar::Baz.const_defined?(:BAR).should be_false
65
+ ConstDefinedSpecs::Bar::Baz.const_defined?(:FOO).should be_false
66
+ ConstDefinedSpecs::Bar::Baz.const_defined?(:Bar).should be_false
67
+ ConstDefinedSpecs::Bar::Baz.const_defined?(:ConstDefinedSpecs).should be_true
68
+ ConstDefinedSpecs::Dog.const_defined?(:LEGS).should be_true
69
+ ConstDefinedSpecs::Dog.const_defined?(:Dog).should be_false
70
+ ConstDefinedSpecs::Bloudhound.const_defined?(:LEGS).should be_true
71
+ end
72
+
73
+ it "should not search parent scopes of classes and modules if inherit is false" do
74
+ Module.const_defined?(:ConstDefinedSpecs, false).should be_false
75
+ ConstDefinedSpecs.const_defined?(:ConstDefinedSpecs, false).should be_false
76
+ ConstDefinedSpecs::Dog.const_defined?(:LEGS, false).should be_true
77
+ ConstDefinedSpecs::Dog.const_defined?(:Dog, false).should be_false
78
+ ConstDefinedSpecs::Bloudhound.const_defined?(:LEGS, false).should be_false
79
+ end
80
+
81
+ it "should search parent scopes of classes and modules for Object regardless of inherit value" do
82
+ Object.const_defined?(:ConstDefinedSpecs).should be_true
83
+ Object.const_defined?(:ConstDefinedSpecs, false).should be_true
84
+ end
85
+ end
@@ -0,0 +1,85 @@
1
+ require File.expand_path('../../fixtures/constants', __FILE__)
2
+
3
+ CS_CONST1 = :const1
4
+
5
+ module ConstGetSpecs
6
+ FOO = 100
7
+
8
+ module Bar
9
+ BAR = 200
10
+
11
+ module Baz
12
+ BAZ = 300
13
+ end
14
+ end
15
+
16
+ class Dog
17
+ LEGS = 4
18
+ end
19
+
20
+ class Bloudhound < Dog
21
+ end
22
+ end
23
+
24
+ describe "Module#const_get" do
25
+ it "should get constants with values that evaluate to false in a JavaScript conditional" do
26
+ Object.const_get("CS_NIL").should be_nil
27
+ Object.const_get("CS_ZERO").should == 0
28
+ Object.const_get("CS_BLANK").should == ""
29
+ Object.const_get("CS_FALSE").should == false
30
+ end
31
+
32
+ it "accepts a String or Symbol name" do
33
+ Object.const_get(:CS_CONST1).should == :const1
34
+ Object.const_get("CS_CONST1").should == :const1
35
+ end
36
+
37
+ it "raises a NameError if no constant is defined in the search path" do
38
+ lambda { Object.const_get :CS_CONSTX_BAD }.should raise_error(NameError)
39
+ end
40
+
41
+ it "raises a NameError if the name does not start with a capital letter" do
42
+ lambda { ConstantSpecs.const_get "name" }.should raise_error(NameError)
43
+ end
44
+
45
+ it "raises a NameError if the name starts with a non-alphabetic character" do
46
+ lambda { ConstantSpecs.const_get "__CONSTX__" }.should raise_error(NameError)
47
+ lambda { ConstantSpecs.const_get "@Name" }.should raise_error(NameError)
48
+ lambda { ConstantSpecs.const_get "!Name" }.should raise_error(NameError)
49
+ lambda { ConstantSpecs.const_get "::Name" }.should raise_error(NameError)
50
+ end
51
+
52
+ it "raises a NameError if the name contains non-word characters" do
53
+ # underscore (i.e., _) is a valid word character
54
+ ConstantSpecs.const_get("CS_CONST1").should == :const1
55
+ lambda { ConstantSpecs.const_get "Name=" }.should raise_error(NameError)
56
+ lambda { ConstantSpecs.const_get "Name?" }.should raise_error(NameError)
57
+ end
58
+
59
+ it "searches parent scopes of classes and modules" do
60
+ Module.const_get(:ConstGetSpecs).should == ConstGetSpecs
61
+ ConstGetSpecs.const_get(:ConstGetSpecs).should == ConstGetSpecs
62
+ ConstGetSpecs::Bar::Baz.const_get(:BAZ).should == 300
63
+ ConstGetSpecs::Bar::Baz.const_get(:CS_CONST1).should == :const1
64
+ lambda { ConstGetSpecs::Bar::Baz.const_get(:BAR) }.should raise_error(NameError)
65
+ lambda { ConstGetSpecs::Bar::Baz.const_get(:FOO) }.should raise_error(NameError)
66
+ lambda { ConstGetSpecs::Bar::Baz.const_get(:Bar) }.should raise_error(NameError)
67
+ ConstGetSpecs::Bar::Baz.const_get(:ConstGetSpecs).should == ConstGetSpecs
68
+ ConstGetSpecs::Dog.const_get(:LEGS).should == 4
69
+ lambda { ConstGetSpecs::Dog.const_get(:Dog) }.should raise_error(NameError)
70
+ ConstGetSpecs::Bloudhound.const_get(:LEGS).should == 4
71
+ end
72
+
73
+ it "should not search parent scopes of classes and modules if inherit is false" do
74
+ lambda { Module.const_get(:ConstGetSpecs, false) }.should raise_error(NameError)
75
+ lambda { ConstGetSpecs.const_get(:ConstGetSpecs, false) }.should raise_error(NameError)
76
+ ConstGetSpecs::Dog.const_get(:LEGS, false).should == 4
77
+ lambda { ConstGetSpecs::Dog.const_get(:Dog, false) }.should raise_error(NameError)
78
+ lambda { ConstGetSpecs::Bloudhound.const_get(:LEGS, false) }.should raise_error(NameError)
79
+ end
80
+
81
+ it "should search parent scopes of classes and modules for Object regardless of inherit value" do
82
+ Object.const_get(:ConstGetSpecs).should == ConstGetSpecs
83
+ Object.const_get(:ConstGetSpecs, false).should == ConstGetSpecs
84
+ end
85
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../../fixtures/constants', __FILE__)
2
+
3
+ describe "Module#const_missing" do
4
+ it "is called when an undefined constant is referenced via literal form" do
5
+ ConstantSpecs::ClassA::CS_CONSTX.should == :CS_CONSTX
6
+ end
7
+
8
+ it "is called when an undefined constant is referenced via #const_get" do
9
+ ConstantSpecs::ClassA.const_get(:CS_CONSTX).should == :CS_CONSTX
10
+ end
11
+
12
+ it "raises NameError and includes the name of the value that wasn't found" do
13
+ lambda {
14
+ ConstantSpecs.const_missing("HelloMissing")
15
+ }.should raise_error(NameError, /ConstantSpecs::HelloMissing/)
16
+ end
17
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path('../../fixtures/constants', __FILE__)
2
+
3
+ module ConstantSpecs
4
+ end
5
+
6
+ describe "Module#const_set" do
7
+ it "sets the constant specified by a String or Symbol to the given value" do
8
+ ConstantSpecs.const_set :CS_CONST401, :const401
9
+ ConstantSpecs::CS_CONST401.should == :const401
10
+
11
+ ConstantSpecs.const_set "CS_CONST402", :const402
12
+ ConstantSpecs.const_get(:CS_CONST402).should == :const402
13
+ end
14
+
15
+ it "returns the value set" do
16
+ ConstantSpecs.const_set(:CS_CONST403, :const403).should == :const403
17
+ end
18
+
19
+ # PENDING: needs proper parser implementation
20
+ #
21
+ # it "sets the name of an anonymous module" do
22
+ # m = Module.new
23
+ # ConstantSpecs.const_set(:CS_CONST1000, m)
24
+ # m.name.should == "ConstantSpecs::CS_CONST1000"
25
+ # end
26
+
27
+ it "raises a NameError if the name does not start with a capital letter" do
28
+ lambda { ConstantSpecs.const_set "name", 1 }.should raise_error(NameError)
29
+ end
30
+
31
+ it "raises a NameError if the name starts with a non-alphabetic character" do
32
+ lambda { ConstantSpecs.const_set "__CONSTX__", 1 }.should raise_error(NameError)
33
+ lambda { ConstantSpecs.const_set "@Name", 1 }.should raise_error(NameError)
34
+ lambda { ConstantSpecs.const_set "!Name", 1 }.should raise_error(NameError)
35
+ lambda { ConstantSpecs.const_set "::Name", 1 }.should raise_error(NameError)
36
+ end
37
+
38
+ it "raises a NameError if the name contains non-word characters" do
39
+ # underscore (i.e., _) is a valid word character
40
+ ConstantSpecs.const_set("CS_CONST404", :const404).should == :const404
41
+ lambda { ConstantSpecs.const_set "Name=", 1 }.should raise_error(NameError)
42
+ lambda { ConstantSpecs.const_set "Name?", 1 }.should raise_error(NameError)
43
+ end
44
+
45
+ # PENDING: should_receive isn't available on opal-spec
46
+ #
47
+ # it "calls #to_str to convert the given name to a String" do
48
+ #
49
+ # name = mock("CS_CONST405")
50
+ # name.should_receive(:to_str).and_return("CS_CONST405")
51
+ # ConstantSpecs.const_set(name, :const405).should == :const405
52
+ # ConstantSpecs::CS_CONST405.should == :const405
53
+ # end
54
+
55
+ # PENDING: should_receive isn't available on opal-spec
56
+ #
57
+ # it "raises a TypeError if conversion to a String by calling #to_str fails" do
58
+ # name = mock('123')
59
+ # lambda { ConstantSpecs.const_set name, 1 }.should raise_error(TypeError)
60
+ #
61
+ # name.should_receive(:to_str).and_return(123)
62
+ # lambda { ConstantSpecs.const_set name, 1 }.should raise_error(TypeError)
63
+ # end
64
+ end
@@ -0,0 +1,49 @@
1
+ module ConstantsSpecsModule
2
+ MOD_CONST1 = "1"
3
+ MOD_CONST2 = "2"
4
+ MOD_CONST3 = "3"
5
+
6
+ module Foo
7
+ FOO = "foo"
8
+ end
9
+ end
10
+
11
+ class ConstantsSpecsClass
12
+ CLASS_CONST1 = "1"
13
+ CLASS_CONST2 = "2"
14
+ CLASS_CONST3 = "3"
15
+ end
16
+
17
+ class SubConstantsSpecsClass < ConstantsSpecsClass
18
+ CLASS_CONST4 = "4"
19
+ end
20
+
21
+ describe "Module#constants" do
22
+ it "should return constants in global scope when called from Module or Class" do
23
+ result = Module.constants
24
+ result.should include("Module", "Object", "TrueClass", "FalseClass", "RUBY_ENGINE")
25
+ result2 = Class.constants
26
+ result.should == result2
27
+ end
28
+
29
+ it "should only return constants and child modules defined directly on module" do
30
+ result = ConstantsSpecsModule.constants
31
+ result.size.should == 4
32
+ result.should include("MOD_CONST1", "MOD_CONST2", "MOD_CONST3", "Foo")
33
+ result = ConstantsSpecsModule::Foo.constants
34
+ result.size.should == 1
35
+ result.should include("FOO")
36
+ end
37
+
38
+ it "should only return constants defined directly on class" do
39
+ result = ConstantsSpecsClass.constants
40
+ result.size.should == 3
41
+ result.should include("CLASS_CONST1", "CLASS_CONST2", "CLASS_CONST3")
42
+ end
43
+
44
+ it "should include constants inherited from superclass" do
45
+ result = SubConstantsSpecsClass.constants
46
+ result.size.should == 4
47
+ result.should include("CLASS_CONST4", "CLASS_CONST1", "CLASS_CONST2", "CLASS_CONST3")
48
+ end
49
+ end
@@ -0,0 +1,434 @@
1
+ module ModuleSpecs
2
+ CONST = :plain_constant
3
+
4
+ class Subclass < Module
5
+ end
6
+
7
+ class SubclassSpec
8
+ end
9
+
10
+ class RemoveClassVariable
11
+ end
12
+
13
+ module LookupModInMod
14
+ INCS = :ethereal
15
+ end
16
+
17
+ module LookupMod
18
+ include LookupModInMod
19
+
20
+ MODS = :rockers
21
+ end
22
+
23
+ class Lookup
24
+ include LookupMod
25
+ LOOKIE = :lookie
26
+ end
27
+
28
+ class LookupChild < Lookup
29
+ end
30
+
31
+ class Parent
32
+ # For private_class_method spec
33
+ #def self.private_method; end
34
+ #private_class_method :private_method
35
+
36
+ def undefed_method() end
37
+ undef_method :undefed_method
38
+
39
+ def parent_method; end
40
+ def another_parent_method; end
41
+
42
+ # For public_class_method spec
43
+ private
44
+ def self.public_method; end
45
+ # public_class_method :public_method
46
+
47
+ public
48
+ def public_parent() end
49
+
50
+ protected
51
+ def protected_parent() end
52
+
53
+ private
54
+ def private_parent() end
55
+ end
56
+
57
+ module Basic
58
+ def public_module() end
59
+
60
+ protected
61
+ def protected_module() end
62
+
63
+ private
64
+ def private_module() end
65
+ end
66
+
67
+ module Super
68
+ include Basic
69
+
70
+ def public_super_module() end
71
+
72
+ protected
73
+ def protected_super_module() end
74
+
75
+ private
76
+ def private_super_module() end
77
+
78
+ def super_included_method; end
79
+
80
+ class SuperChild
81
+ end
82
+ end
83
+
84
+ module Internal
85
+ end
86
+
87
+ class Child < Parent
88
+ include Super
89
+
90
+ class << self
91
+ # include Internal
92
+ end
93
+ attr_accessor :accessor_method
94
+
95
+ def undefed_child() end
96
+
97
+ def public_child() end
98
+
99
+ undef_method :parent_method
100
+ undef_method :another_parent_method
101
+
102
+ protected
103
+ def protected_child() end
104
+
105
+ private
106
+ def private_child() end
107
+ end
108
+
109
+ class Grandchild < Child
110
+ undef_method :super_included_method
111
+ end
112
+
113
+ class Child2 < Parent
114
+ attr_reader :foo
115
+ end
116
+
117
+ # Be careful touching the Counts* classes as there used for testing
118
+ # private_instance_methods, public_instance_methods, etc. So adding, removing
119
+ # a method will break those tests.
120
+ module CountsMixin
121
+ def public_3; end
122
+ public :public_3
123
+
124
+ def private_3; end
125
+ private :private_3
126
+
127
+ def protected_3; end
128
+ protected :protected_3
129
+ end
130
+
131
+ class CountsParent
132
+ include CountsMixin
133
+
134
+ def public_2; end
135
+
136
+ private
137
+ def private_2; end
138
+
139
+ protected
140
+ def protected_2; end
141
+ end
142
+
143
+ class CountsChild < CountsParent
144
+ def public_1; end
145
+
146
+ private
147
+ def private_1; end
148
+
149
+ protected
150
+ def protected_1; end
151
+ end
152
+
153
+ module AddConstant
154
+ end
155
+
156
+ module A
157
+ CONSTANT_A = :a
158
+ OVERRIDE = :a
159
+ def ma(); :a; end
160
+ def self.cma(); :a; end
161
+ end
162
+
163
+ module B
164
+ CONSTANT_B = :b
165
+ OVERRIDE = :b
166
+ include A
167
+ def mb(); :b; end
168
+ def self.cmb(); :b; end
169
+ end
170
+
171
+ class C
172
+ OVERRIDE = :c
173
+ include B
174
+ end
175
+
176
+ module Z
177
+ MODULE_SPEC_TOPLEVEL_CONSTANT = 1
178
+ end
179
+
180
+ module Alias
181
+ def report() :report end
182
+ alias publish report
183
+ end
184
+
185
+ class Allonym
186
+ include ModuleSpecs::Alias
187
+ end
188
+
189
+ class Aliasing
190
+ def self.make_alias(*a)
191
+ alias_method(*a)
192
+ end
193
+
194
+ def public_one; 1; end
195
+
196
+ def public_two(n); n * 2; end
197
+
198
+ private
199
+ def private_one; 1; end
200
+
201
+ protected
202
+ def protected_one; 1; end
203
+ end
204
+
205
+ module AliasingSuper
206
+
207
+ module Parent
208
+ def super_call(arg)
209
+ arg
210
+ end
211
+ end
212
+
213
+ module Child
214
+ include Parent
215
+ def super_call(arg)
216
+ super(arg)
217
+ end
218
+ end
219
+
220
+ class Target
221
+ include Child
222
+ alias_method :alias_super_call, :super_call
223
+ alias_method :super_call, :alias_super_call
224
+ end
225
+ end
226
+
227
+
228
+ module ReopeningModule
229
+ def foo; true; end
230
+ # module_function :foo
231
+ private :foo
232
+ end
233
+
234
+ # Yes, we want to re-open the module
235
+ module ReopeningModule
236
+ alias :foo2 :foo
237
+ # module_function :foo2
238
+ end
239
+
240
+ module Nesting
241
+ @tests = {}
242
+ def self.[](name); @tests[name]; end
243
+ def self.[]=(name, val); @tests[name] = val; end
244
+ def self.meta; class << self; self; end; end
245
+
246
+ # Nesting[:basic] = Module.nesting
247
+
248
+ module ::ModuleSpecs
249
+ # Nesting[:open_first_level] = Module.nesting
250
+ end
251
+
252
+ class << self
253
+ # Nesting[:open_meta] = Module.nesting
254
+ end
255
+
256
+ def self.called_from_module_method
257
+ # Module.nesting
258
+ end
259
+
260
+ class NestedClass
261
+ # Nesting[:nest_class] = Module.nesting
262
+
263
+ def self.called_from_class_method
264
+ # Module.nesting
265
+ end
266
+
267
+ def called_from_inst_method
268
+ # Module.nesting
269
+ end
270
+ end
271
+
272
+ end
273
+
274
+ # Nesting[:first_level] = Module.nesting
275
+
276
+ module InstanceMethMod
277
+ def bar(); :bar; end
278
+ end
279
+
280
+ class InstanceMeth
281
+ include InstanceMethMod
282
+ def foo(); :foo; end
283
+ end
284
+
285
+ class InstanceMethChild < InstanceMeth
286
+ end
287
+
288
+ module ClassVars
289
+ class A
290
+ @@a_cvar = :a_cvar
291
+ end
292
+
293
+ module M
294
+ @@m_cvar = :m_cvar
295
+ end
296
+
297
+ class B < A
298
+ include M
299
+
300
+ @@b_cvar = :b_cvar
301
+ end
302
+ end
303
+
304
+ class CVars
305
+ @@cls = :class
306
+
307
+ class << self
308
+ def cls
309
+ @@cls
310
+ end
311
+ @@meta = :meta
312
+ end
313
+
314
+ def self.meta
315
+ @@meta
316
+ end
317
+
318
+ def meta
319
+ @@meta
320
+ end
321
+ end
322
+
323
+ module MVars
324
+ @@mvar = :mvar
325
+ end
326
+
327
+ class SubModule < Module
328
+ attr_reader :special
329
+ def initialize
330
+ @special = 10
331
+ end
332
+ end
333
+
334
+ module MA; end
335
+ module MB
336
+ include MA
337
+ end
338
+ module MC; end
339
+
340
+ class MultipleIncludes
341
+ include MB
342
+ end
343
+
344
+ # empty modules
345
+ module M1; end
346
+ module M2; end
347
+
348
+ module Autoload
349
+ def self.use_ex1
350
+ begin
351
+ begin
352
+ raise "test exception"
353
+ rescue ModuleSpecs::Autoload::EX1
354
+ end
355
+ rescue RuntimeError
356
+ return :good
357
+ end
358
+ end
359
+ end
360
+
361
+ # This class isn't inherited from or included in anywhere. It exists to test
362
+ # 1.9's constant scoping rules
363
+ class Detached
364
+ DETATCHED_CONSTANT = :d
365
+ end
366
+
367
+ class ParentPrivateMethodRedef
368
+ private
369
+ def private_method_redefined
370
+ :before_redefinition
371
+ end
372
+ end
373
+
374
+ class ChildPrivateMethodMadePublic < ParentPrivateMethodRedef
375
+ public :private_method_redefined
376
+ end
377
+
378
+ class ParentPrivateMethodRedef
379
+ def private_method_redefined
380
+ :after_redefinition
381
+ end
382
+ end
383
+
384
+ module CyclicAppendA
385
+ end
386
+
387
+ module CyclicAppendB
388
+ include CyclicAppendA
389
+ end
390
+
391
+ module ExtendObject
392
+ C = :test
393
+ def test_method
394
+ "hello test"
395
+ end
396
+ end
397
+
398
+ module ExtendObjectPrivate
399
+ class << self
400
+ def extend_object(obj)
401
+ ScratchPad.record :extended
402
+ end
403
+ private :extend_object
404
+ end
405
+ end
406
+ end
407
+
408
+ class Object
409
+ def module_specs_public_method_on_object; end
410
+
411
+ def module_specs_private_method_on_object; end
412
+ private :module_specs_private_method_on_object
413
+
414
+ def module_specs_protected_method_on_object; end
415
+ protected :module_specs_private_method_on_object
416
+
417
+ def module_specs_private_method_on_object_for_kernel_public; end
418
+ private :module_specs_private_method_on_object_for_kernel_public
419
+
420
+ def module_specs_public_method_on_object_for_kernel_protected; end
421
+ def module_specs_public_method_on_object_for_kernel_private; end
422
+ end
423
+
424
+ module Kernel
425
+ def module_specs_public_method_on_kernel; end
426
+
427
+ alias_method :module_specs_alias_on_kernel, :module_specs_public_method_on_object
428
+
429
+ public :module_specs_private_method_on_object_for_kernel_public
430
+ protected :module_specs_public_method_on_object_for_kernel_protected
431
+ private :module_specs_public_method_on_object_for_kernel_private
432
+ end
433
+
434
+ # ModuleSpecs::Nesting[:root_level] = Module.nesting