opal 0.0.1 → 0.1.0

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 (306) hide show
  1. data/.gitignore +10 -1
  2. data/.gitmodules +0 -0
  3. data/Opalfile +371 -0
  4. data/README.md +45 -0
  5. data/Rakefile +237 -34
  6. data/VERSION +1 -1
  7. data/bin/opal +13 -0
  8. data/demos/apps/browser_demo/index.html +11 -0
  9. data/demos/apps/browser_demo/lib/browser_demo.rb +31 -0
  10. data/demos/apps/simple_opal/Opalfile +13 -0
  11. data/demos/apps/simple_opal/index.html +11 -0
  12. data/demos/apps/simple_opal/lib/app_controller.rb +62 -0
  13. data/demos/apps/simple_opal/lib/main_window.rb +146 -0
  14. data/demos/browser/request/index.html +52 -0
  15. data/demos/browser/request/request.rb +48 -0
  16. data/gen/browser/__PROJECT_NAME__/index.html +10 -0
  17. data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +1 -0
  18. data/lib/opal.rb +48 -3
  19. data/lib/opal/builders/base.rb +50 -0
  20. data/lib/opal/builders/css.rb +46 -0
  21. data/lib/opal/builders/javascript.rb +44 -0
  22. data/lib/opal/builders/opal.rb +79 -0
  23. data/lib/opal/builders/ruby.rb +50 -0
  24. data/lib/opal/builders/ruby/generate.rb +1851 -0
  25. data/lib/opal/builders/ruby/nodes.rb +210 -0
  26. data/lib/opal/builders/ruby/ruby.rb +916 -0
  27. data/lib/opal/builders/ruby/ruby_parser.rb +6008 -0
  28. data/lib/opal/builders/ruby/ruby_parser.rb.y +1451 -0
  29. data/lib/opal/models/build_item.rb +104 -0
  30. data/lib/opal/models/hash_struct.rb +40 -0
  31. data/lib/opal/models/project.rb +215 -0
  32. data/lib/opal/models/struct_accessors.rb +58 -0
  33. data/lib/opal/models/target.rb +176 -0
  34. data/lib/opal/opal/env/console.rb +66 -0
  35. data/lib/opal/opal/env/fs.rb +98 -0
  36. data/lib/opal/opal/env/object.rb +48 -0
  37. data/lib/opal/opal/environment.rb +139 -0
  38. data/lib/opal/opal/gen.rb +62 -0
  39. data/lib/opal/opal/opal.rb +68 -0
  40. data/lib/opal/opal/repl.rb +38 -0
  41. data/lib/opal/opalfile/dsl.rb +62 -0
  42. data/lib/opal/opalfile/opalfile.rb +133 -0
  43. data/lib/opal/opalfile/task.rb +96 -0
  44. data/lib/opal/opalfile/task_manager.rb +63 -0
  45. data/lib/opal/opalfile/task_scope.rb +52 -0
  46. data/lib/opal/rack/app_server.rb +119 -0
  47. data/opals/aristo/README.md +16 -0
  48. data/opals/browser/Opalfile +11 -0
  49. data/opals/browser/README.md +146 -0
  50. data/opals/browser/SIZZLE_LICESNSE.txt +148 -0
  51. data/opals/browser/lib/browser.rb +118 -0
  52. data/opals/browser/lib/browser/builder.rb +41 -0
  53. data/opals/browser/lib/browser/canvas_context.rb +115 -0
  54. data/opals/browser/lib/browser/dimensions.rb +50 -0
  55. data/opals/browser/lib/browser/document.rb +146 -0
  56. data/opals/browser/lib/browser/element.rb +487 -0
  57. data/opals/browser/lib/browser/element/attributes.rb +88 -0
  58. data/opals/browser/lib/browser/element/css.rb +290 -0
  59. data/opals/browser/lib/browser/element/form.rb +146 -0
  60. data/opals/browser/lib/browser/event/dom_events.rb +81 -0
  61. data/opals/browser/lib/browser/event/event.rb +177 -0
  62. data/opals/browser/lib/browser/event/trigger_events.rb +53 -0
  63. data/opals/browser/lib/browser/geometry.rb +97 -0
  64. data/opals/browser/lib/browser/json.rb +32 -0
  65. data/opals/browser/lib/browser/json_parse.js +321 -0
  66. data/opals/browser/lib/browser/request/request.rb +201 -0
  67. data/opals/browser/lib/browser/sizzle.js +1068 -0
  68. data/opals/browser/lib/browser/string.rb +42 -0
  69. data/opals/browser/lib/browser/touch.rb +37 -0
  70. data/{runtime/yaml.js → opals/browser/lib/browser/vml_context.js} +8 -8
  71. data/opals/browser/lib/browser/window.rb +36 -0
  72. data/opals/browser/spec/browser/browser_detection_spec.rb +7 -0
  73. data/opals/browser/spec/document/aref_spec.rb +110 -0
  74. data/opals/browser/spec/document/ready_spec.rb +16 -0
  75. data/opals/browser/spec/element/body_spec.rb +11 -0
  76. data/opals/browser/spec/element/clear_spec.rb +26 -0
  77. data/opals/browser/spec/element/empty_spec.rb +29 -0
  78. data/opals/browser/spec/element/has_class_spec.rb +40 -0
  79. data/opals/browser/spec/element/hidden_spec.rb +23 -0
  80. data/opals/browser/spec/element/hide_spec.rb +31 -0
  81. data/opals/browser/spec/element/remove_spec.rb +25 -0
  82. data/opals/browser/spec/element/show_spec.rb +31 -0
  83. data/opals/browser/spec/element/style_spec.rb +69 -0
  84. data/opals/browser/spec/element/toggle_spec.rb +31 -0
  85. data/opals/browser/spec/element/visible_spec.rb +23 -0
  86. data/opals/browser/spec/spec_helper.rb +1 -0
  87. data/opals/cherry_kit/Opalfile +6 -0
  88. data/opals/cherry_kit/bin/cherry_kit.rb +11 -0
  89. data/opals/cherry_kit/lib/cherry_kit.rb +29 -0
  90. data/opals/foundation/Opalfile +11 -0
  91. data/opals/foundation/bin/foundation.rb +12 -0
  92. data/opals/foundation/lib/foundation.rb +32 -0
  93. data/opals/foundation/lib/foundation/__table_view_desktop/outline_view.rb +57 -0
  94. data/opals/foundation/lib/foundation/__table_view_desktop/table_column.rb +59 -0
  95. data/opals/foundation/lib/foundation/__table_view_desktop/table_header_view.rb +34 -0
  96. data/opals/foundation/lib/foundation/__table_view_desktop/table_view.rb +304 -0
  97. data/opals/foundation/lib/foundation/controllers/array_controller.rb +54 -0
  98. data/opals/foundation/lib/foundation/controllers/controller.rb +74 -0
  99. data/opals/foundation/lib/foundation/controllers/controller_selection_proxy.rb +67 -0
  100. data/opals/foundation/lib/foundation/controllers/object_controller.rb +145 -0
  101. data/opals/foundation/lib/foundation/controllers/view.rb +40 -0
  102. data/opals/foundation/lib/foundation/core/application.rb +476 -0
  103. data/opals/foundation/lib/foundation/core/attributes.rb +146 -0
  104. data/opals/foundation/lib/foundation/core/bindings.rb +125 -0
  105. data/opals/foundation/lib/foundation/core/builder.rb +101 -0
  106. data/opals/foundation/lib/foundation/core/event.rb +112 -0
  107. data/opals/foundation/lib/foundation/core/index_path.rb +49 -0
  108. data/opals/foundation/lib/foundation/core/index_set.rb +97 -0
  109. data/opals/foundation/lib/foundation/core/notification.rb +113 -0
  110. data/opals/foundation/lib/foundation/core/observable.rb +275 -0
  111. data/opals/foundation/lib/foundation/core/observable_array.rb +30 -0
  112. data/opals/foundation/lib/foundation/core/responder.rb +85 -0
  113. data/opals/foundation/lib/foundation/core/run_loop.rb +89 -0
  114. data/opals/foundation/lib/foundation/core/touch.rb +95 -0
  115. data/opals/foundation/lib/foundation/gestures/gesture_recognizer.rb +35 -0
  116. data/opals/foundation/lib/foundation/rendering/render_context.rb +100 -0
  117. data/opals/foundation/lib/foundation/rendering/renderer.rb +137 -0
  118. data/opals/foundation/lib/foundation/rendering/root_theme.rb +77 -0
  119. data/opals/foundation/lib/foundation/rendering/root_theme/button.rb +62 -0
  120. data/opals/foundation/lib/foundation/rendering/root_theme/control.rb +72 -0
  121. data/opals/foundation/lib/foundation/rendering/root_theme/label.rb +54 -0
  122. data/opals/foundation/lib/foundation/rendering/root_theme/scroller.rb +58 -0
  123. data/opals/foundation/lib/foundation/rendering/root_theme/slider.rb +72 -0
  124. data/opals/foundation/lib/foundation/rendering/root_theme/table_view.rb +97 -0
  125. data/opals/foundation/lib/foundation/rendering/root_theme/text_field.rb +55 -0
  126. data/opals/foundation/lib/foundation/rendering/root_theme/view.rb +81 -0
  127. data/opals/foundation/lib/foundation/rendering/theme.rb +38 -0
  128. data/opals/foundation/lib/foundation/table_view/cell.rb +39 -0
  129. data/opals/foundation/lib/foundation/table_view/table.rb +171 -0
  130. data/opals/foundation/lib/foundation/views/button.rb +63 -0
  131. data/opals/foundation/lib/foundation/views/checkbox.rb +28 -0
  132. data/opals/foundation/lib/foundation/views/clip.rb +47 -0
  133. data/opals/foundation/lib/foundation/views/control.rb +199 -0
  134. data/opals/foundation/lib/foundation/views/label.rb +54 -0
  135. data/opals/foundation/lib/foundation/views/scroll.rb +294 -0
  136. data/opals/foundation/lib/foundation/views/scroll_view_desktop.rb +152 -0
  137. data/opals/foundation/lib/foundation/views/scroller.rb +54 -0
  138. data/opals/foundation/lib/foundation/views/slider.rb +93 -0
  139. data/opals/foundation/lib/foundation/views/text_field.rb +83 -0
  140. data/opals/foundation/lib/foundation/views/view.rb +426 -0
  141. data/opals/foundation/lib/foundation/windows/window.rb +191 -0
  142. data/opals/foundation/resources/button/button.css +23 -0
  143. data/{runtime/init.js → opals/foundation/resources/foundation.css} +27 -33
  144. data/opals/foundation/resources/scroll/scroll.css +22 -0
  145. data/opals/foundation/resources/scroll_view/scroll_view.css +3 -0
  146. data/opals/foundation/resources/scroll_view/scroller.css +3 -0
  147. data/opals/foundation/resources/slider/regular/slider.css +3 -0
  148. data/opals/foundation/resources/slider/slider.css +27 -0
  149. data/opals/foundation/resources/table_view/outline_view.css +3 -0
  150. data/opals/foundation/resources/table_view/table_view.css +15 -0
  151. data/opals/foundation/resources/text_field/text_field.css +71 -0
  152. data/opals/foundation/spec/spec_helper.rb +1 -0
  153. data/opals/foundation/spec/system/attributes/get_attribute_spec.rb +69 -0
  154. data/opals/foundation/spec/system/attributes/get_path_spec.rb +44 -0
  155. data/opals/foundation/spec/system/attributes/set_path_spec.rb +24 -0
  156. data/opals/foundation/spec/system/attributes/set_spec.rb +58 -0
  157. data/opals/foundation/spec/system/bindings/bindings.rb +85 -0
  158. data/opals/foundation/spec/system/key_value_binding/bind_spec.rb +43 -0
  159. data/opals/foundation/spec/system/observable/dependant_keys_spec.rb +74 -0
  160. data/opals/foundation/spec/system/observable/observe_spec.rb +292 -0
  161. data/opals/foundation/spec/system/observable/remove_observer_spec.rb +60 -0
  162. data/opals/opal/Opalfile +14 -0
  163. data/opals/opal/spec/core/array/append_spec.rb +30 -0
  164. data/opals/opal/spec/core/array/assoc_spec.rb +29 -0
  165. data/opals/opal/spec/core/array/at_spec.rb +37 -0
  166. data/opals/opal/spec/core/array/clear_spec.rb +22 -0
  167. data/opals/opal/spec/core/array/collect_bang_spec.rb +27 -0
  168. data/opals/opal/spec/core/array/collect_spec.rb +27 -0
  169. data/opals/opal/spec/core/array/compact_spec.rb +15 -0
  170. data/opals/opal/spec/core/array/concat_spec.rb +15 -0
  171. data/opals/opal/spec/core/array/constructor_spec.rb +14 -0
  172. data/opals/opal/spec/core/array/each_spec.rb +9 -0
  173. data/opals/opal/spec/core/array/element_reference_spec.rb +4 -0
  174. data/opals/opal/spec/core/array/first_spec.rb +35 -0
  175. data/opals/opal/spec/core/array/include_spec.rb +9 -0
  176. data/opals/opal/spec/core/array/map_spec.rb +31 -0
  177. data/opals/opal/spec/core/builtin_constants/builtin_constants_spec.rb +7 -0
  178. data/opals/opal/spec/core/false/and_spec.rb +10 -0
  179. data/opals/opal/spec/core/false/inspect_spec.rb +6 -0
  180. data/opals/opal/spec/core/false/or_spec.rb +10 -0
  181. data/opals/opal/spec/core/false/to_s_spec.rb +6 -0
  182. data/opals/opal/spec/core/false/xor_spec.rb +10 -0
  183. data/opals/opal/spec/core/file/join_spec.rb +19 -0
  184. data/opals/opal/spec/core/kernel/instance_eval_spec.rb +0 -0
  185. data/opals/opal/spec/core/kernel/loop_spec.rb +24 -0
  186. data/opals/opal/spec/core/kernel/raise_spec.rb +0 -0
  187. data/opals/opal/spec/core/module/attr_accessor_spec.rb +28 -0
  188. data/opals/opal/spec/core/number/lt_spec.rb +12 -0
  189. data/opals/opal/spec/core/true/and_spec.rb +10 -0
  190. data/opals/opal/spec/core/true/inspect_spec.rb +6 -0
  191. data/opals/opal/spec/core/true/or_spec.rb +10 -0
  192. data/opals/opal/spec/core/true/to_s_spec.rb +6 -0
  193. data/opals/opal/spec/core/true/xor_spec.rb +10 -0
  194. data/opals/opal/spec/fixtures/super.rb +70 -0
  195. data/opals/opal/spec/language/____temp_remove_this.rb +12 -0
  196. data/opals/opal/spec/language/and_spec.rb +62 -0
  197. data/opals/opal/spec/language/array_spec.rb +52 -0
  198. data/opals/opal/spec/language/block_spec.rb +18 -0
  199. data/opals/opal/spec/language/break_spec.rb +36 -0
  200. data/opals/opal/spec/language/case_spec.rb +103 -0
  201. data/opals/opal/spec/language/def_spec.rb +11 -0
  202. data/opals/opal/spec/language/eigenclass_spec.rb +60 -0
  203. data/opals/opal/spec/language/hash_spec.rb +29 -0
  204. data/opals/opal/spec/language/if_spec.rb +54 -0
  205. data/opals/opal/spec/language/loop_spec.rb +11 -0
  206. data/opals/opal/spec/language/metaclass_spec.rb +21 -0
  207. data/opals/opal/spec/language/method_spec.rb +64 -0
  208. data/opals/opal/spec/language/next_spec.rb +25 -0
  209. data/opals/opal/spec/language/or_spec.rb +34 -0
  210. data/opals/opal/spec/language/redo_spec.rb +24 -0
  211. data/opals/opal/spec/language/rescue_spec.rb +20 -0
  212. data/opals/opal/spec/language/return_spec.rb +47 -0
  213. data/opals/opal/spec/language/string_spec.rb +25 -0
  214. data/opals/opal/spec/language/super_spec.rb +26 -0
  215. data/opals/opal/spec/language/until_spec.rb +157 -0
  216. data/opals/opal/spec/language/while_spec.rb +163 -0
  217. data/opals/opal/spec/spec_helper.rb +5 -0
  218. data/opals/runtime/Opalfile +68 -0
  219. data/opals/runtime/README.md +12 -0
  220. data/opals/runtime/docs/debugging.md +51 -0
  221. data/opals/runtime/lib/array.rb +1516 -0
  222. data/opals/runtime/lib/basic_object.rb +49 -0
  223. data/opals/runtime/lib/class.rb +54 -0
  224. data/opals/runtime/lib/dir.rb +36 -0
  225. data/opals/runtime/lib/error.rb +49 -0
  226. data/opals/runtime/lib/false_class.rb +52 -0
  227. data/opals/runtime/lib/file.rb +79 -0
  228. data/opals/runtime/lib/hash.rb +791 -0
  229. data/opals/runtime/lib/io.rb +39 -0
  230. data/opals/runtime/lib/kernel.rb +288 -0
  231. data/opals/runtime/lib/match_data.rb +36 -0
  232. data/opals/runtime/lib/module.rb +109 -0
  233. data/opals/runtime/lib/nil_class.rb +69 -0
  234. data/opals/runtime/lib/number.rb +398 -0
  235. data/opals/runtime/lib/proc.rb +77 -0
  236. data/opals/runtime/lib/range.rb +63 -0
  237. data/opals/runtime/lib/regexp.rb +111 -0
  238. data/opals/runtime/lib/ruby.rb +30 -0
  239. data/opals/runtime/lib/string.rb +328 -0
  240. data/opals/runtime/lib/symbol.rb +40 -0
  241. data/opals/runtime/lib/top_self.rb +33 -0
  242. data/opals/runtime/lib/true_class.rb +45 -0
  243. data/opals/runtime/runtime/browser.js +287 -0
  244. data/opals/runtime/runtime/debug.js +182 -0
  245. data/opals/runtime/runtime/opal.js +1010 -0
  246. data/opals/runtime/runtime/post_opal.js +1 -0
  247. data/opals/runtime/runtime/pre_opal.js +2 -0
  248. data/opals/runtime/runtime/server_side.js +50 -0
  249. data/opals/spec/LICENSE.txt +26 -0
  250. data/opals/spec/Opalfile +5 -0
  251. data/opals/spec/bin/spec.rb +43 -0
  252. data/opals/spec/lib/spec.rb +33 -0
  253. data/opals/spec/lib/spec/dsl.rb +41 -0
  254. data/opals/spec/lib/spec/example.rb +35 -0
  255. data/opals/spec/lib/spec/example/before_and_after_hooks.rb +81 -0
  256. data/opals/spec/lib/spec/example/errors.rb +42 -0
  257. data/opals/spec/lib/spec/example/example_group.rb +37 -0
  258. data/opals/spec/lib/spec/example/example_group_factory.rb +43 -0
  259. data/opals/spec/lib/spec/example/example_group_hierarchy.rb +45 -0
  260. data/opals/spec/lib/spec/example/example_group_methods.rb +142 -0
  261. data/opals/spec/lib/spec/example/example_group_proxy.rb +41 -0
  262. data/opals/spec/lib/spec/example/example_methods.rb +73 -0
  263. data/opals/spec/lib/spec/example/example_proxy.rb +48 -0
  264. data/opals/spec/lib/spec/expectations.rb +46 -0
  265. data/opals/spec/lib/spec/expectations/errors.rb +35 -0
  266. data/opals/spec/lib/spec/expectations/fail_with.rb +37 -0
  267. data/opals/spec/lib/spec/expectations/handler.rb +48 -0
  268. data/opals/spec/lib/spec/matchers.rb +50 -0
  269. data/opals/spec/lib/spec/matchers/be.rb +26 -0
  270. data/opals/spec/lib/spec/matchers/generated_descriptions.rb +47 -0
  271. data/opals/spec/lib/spec/matchers/operator_matcher.rb +66 -0
  272. data/opals/spec/lib/spec/runner.rb +48 -0
  273. data/opals/spec/lib/spec/runner/example_group_runner.rb +71 -0
  274. data/opals/spec/lib/spec/runner/formatter/html_formatter.rb +100 -0
  275. data/opals/spec/lib/spec/runner/formatter/terminal_formatter.rb +82 -0
  276. data/opals/spec/lib/spec/runner/options.rb +63 -0
  277. data/opals/spec/lib/spec/runner/reporter.rb +123 -0
  278. data/opals/spec/resources/index.html +25 -0
  279. data/opals/spec/resources/spec.css +132 -0
  280. data/spec/cherry_kit/iseq_spec.rb +38 -0
  281. data/spec/spec_helper.rb +16 -0
  282. data/spec/vienna_spec.rb +7 -0
  283. data/yard/index.html +43 -0
  284. data/yard/style.css +765 -0
  285. metadata +312 -49
  286. data/docs/jarv.rdoc +0 -27
  287. data/runtime/array.js +0 -153
  288. data/runtime/class.js +0 -469
  289. data/runtime/compar.js +0 -73
  290. data/runtime/dir.js +0 -115
  291. data/runtime/enum.js +0 -74
  292. data/runtime/file.js +0 -165
  293. data/runtime/gem.js +0 -241
  294. data/runtime/hash.js +0 -181
  295. data/runtime/load.js +0 -251
  296. data/runtime/module.js +0 -98
  297. data/runtime/number.js +0 -148
  298. data/runtime/object.js +0 -522
  299. data/runtime/opal.js +0 -200
  300. data/runtime/parse.js +0 -2218
  301. data/runtime/range.js +0 -56
  302. data/runtime/re.js +0 -91
  303. data/runtime/string.js +0 -199
  304. data/runtime/variable.js +0 -184
  305. data/runtime/vm.js +0 -1150
  306. data/tasks/build.rb +0 -16
@@ -0,0 +1,11 @@
1
+
2
+ describe "Redefining a method" do
3
+
4
+ it "replaces the original method" do
5
+ def barFoo; 100; end
6
+ barFoo.should == 100
7
+
8
+ def barFoo; 200; end
9
+ barFoo.should == 200
10
+ end
11
+ end
@@ -0,0 +1,60 @@
1
+
2
+ # describe "self in an eigenclass body (class << obj)" do
3
+ # it "is TrueClass for true" do
4
+ # class << true; self; end.should == TrueClass
5
+ # end
6
+ #
7
+ # it "is FalseClass for false" do
8
+ # class << false; self; end.should == FalseClass
9
+ # end
10
+ #
11
+ # it "is NilClass for nil" do
12
+ # class << nil; self; end.should == NilClass
13
+ # end
14
+ #
15
+ # it "is a singleton Class instance" do
16
+ # mock = Object.new
17
+ # cls = class << mock; self; end
18
+ # cls.is_a?(Class).should == true
19
+ # # puts cls
20
+ # # `console.log(#{cls});`
21
+ # end
22
+ #
23
+ # it "is a Class for classes"
24
+ #
25
+ # it "inherits from Class for classes" do
26
+ # temp = []
27
+ # cls = class << Object; self; end
28
+ # sc = cls
29
+ # until sc.nil? || sc.superclass == sc
30
+ # temp << sc
31
+ # sc = sc.superclass
32
+ # end
33
+ # temp.should include(Class)
34
+ # end
35
+ # end
36
+
37
+
38
+ # puts "testing eigenclass etc"
39
+ #
40
+ # class EigenclassSpecTest
41
+ #
42
+ # def something=(something)
43
+ # puts "setting something to #{something}"
44
+ # end
45
+ # end
46
+ #
47
+ # a = EigenclassSpecTest.new
48
+ # a.something = 100
49
+ #
50
+ # a_class = class << a; self; end
51
+ #
52
+ # a_class.define_method(:something=) do |value|
53
+ # puts "setting something.."
54
+ # super value
55
+ # puts "did set something"
56
+ # end
57
+ #
58
+ # # `console.log(#{a}['$something=']);`
59
+ #
60
+ # a.something = 200
@@ -0,0 +1,29 @@
1
+
2
+ describe "Hash literal" do
3
+ it "{} should return an empty hash" do
4
+ {}.size.should == 0
5
+ {}.should == {}
6
+ end
7
+
8
+ it "{} should return a new hash populated with the given elements" do
9
+ h = { :a => 'a', 'b' => 3, 44 => 2.3 }
10
+ h.size.should == 3
11
+ h.should == { :a => 'a', 'b' => 3, 44 => 2.3 }
12
+ end
13
+
14
+ it "treats empty expressions as nils" do
15
+ h = {() => ()}
16
+ h.keys.should == [nil]
17
+ h.values.should == [nil]
18
+
19
+ h = {() => :value}
20
+ h.keys.should == [nil]
21
+ h.values.should == [:value]
22
+ h[nil].should == :value
23
+
24
+ h = {:key => ()}
25
+ h.keys.should == [:key]
26
+ h.values.should == [nil]
27
+ h[:key].should == nil
28
+ end
29
+ end
@@ -0,0 +1,54 @@
1
+ #
2
+ # describe "The if expression" do
3
+ # it "evaluates body if expression is true" do
4
+ # a = []
5
+ # if true
6
+ # a << 123
7
+ # end
8
+ # a.should == [123]
9
+ # end
10
+ #
11
+ # it "does not evaluate body if expression is false" do
12
+ # a = []
13
+ # if false
14
+ # a << 123
15
+ # end
16
+ # a.should == []
17
+ # end
18
+ #
19
+ # it "does not evaluate body if expression is empty" do
20
+ # a = []
21
+ # if ()
22
+ # a << 123
23
+ # end
24
+ # a.should == []
25
+ # end
26
+ #
27
+ # it "does not evaluate else body if expression is true" do
28
+ # a = []
29
+ # if true
30
+ # a << 123
31
+ # else
32
+ # a << 456
33
+ # end
34
+ # a.should == [123]
35
+ # end
36
+ #
37
+ # it "evaluates only else-body if expression is false" do
38
+ # a = []
39
+ # if false
40
+ # a << 123
41
+ # else
42
+ # a << 456
43
+ # end
44
+ # a.should == [456]
45
+ # end
46
+ #
47
+ # it "returns result of then-body evaluation if expression is true" do
48
+ # # raise "this causes error: return is injected before if = javascript error"
49
+ # # if true
50
+ # # 123
51
+ # # end.should == 456
52
+ # end
53
+ # end
54
+
@@ -0,0 +1,11 @@
1
+
2
+ describe "The loop expression" do
3
+ it "repeats the given block until a break is called" do
4
+ outer_loop = 0
5
+ loop do
6
+ outer_loop = outer_loop + 1
7
+ break if outer_loop == 10
8
+ end
9
+ outer_loop.should == 10
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+
2
+ describe "self in a metaclass body (class << obj)" do
3
+ it "is TrueClass for true" do
4
+ class << true; self; end.should == TrueClass
5
+ end
6
+
7
+ it "is FalseClass for false" do
8
+ class << false; self; end.should == FalseClass
9
+ end
10
+
11
+ it "is NilClass for nil" do
12
+ class << nil; self; end.should == NilClass
13
+ end
14
+
15
+ it "raises a TypeError for numbers"
16
+
17
+ it "raises a TypeError for symbols"
18
+
19
+ it "is a singleton Class instance"
20
+
21
+ end
@@ -0,0 +1,64 @@
1
+
2
+ describe "Calling a method" do
3
+ it "with no arguments is ok" do
4
+ def fooP0; 100; end
5
+
6
+ fooP0.should == 100
7
+ end
8
+
9
+ it "with simple required arguments works" do
10
+ def fooP1(a); [a]; end
11
+ fooP1(1).should == [1]
12
+
13
+ def fooP2(a, b); [a, b]; end
14
+ fooP2(1, 2).should == [1, 2]
15
+
16
+ def fooP3(a,b,c); [a,b,c]; end
17
+ fooP3(1,2,3).should == [1,2,3]
18
+
19
+ def fooP4(a,b,c,d); [a,b,c,d]; end
20
+ fooP4(1,2,3,4).should == [1,2,3,4]
21
+
22
+ def fooP5(a,b,c,d,e); [a,b,c,d,e]; end
23
+ fooP5(1,2,3,4,5).should == [1,2,3,4,5]
24
+ end
25
+
26
+ it "works with optional arguments" do
27
+ def fooP0O1(a=1); [a]; end
28
+ fooP0O1().should == [1]
29
+
30
+ def fooP1O1(a, b=1); [a, b]; end
31
+ fooP1O1(1).should == [1, 1]
32
+
33
+ def fooP2O1(a, b, c=1); [a, b, c]; end
34
+ fooP2O1(1, 2).should == [1, 2, 1]
35
+
36
+ def fooP3O1(a, b, c, d=1); [a, b, c, d]; end
37
+ fooP3O1(1, 2, 3).should == [1, 2, 3, 1]
38
+
39
+ def fooP4O1(a, b, c, d, e=1); [a, b, c, d, e]; end
40
+ fooP4O1(1, 2, 3, 4).should == [1, 2, 3, 4, 1]
41
+
42
+ def fooP0O2(a=1, b=2); [a, b]; end
43
+ fooP0O2.should == [1, 2]
44
+ end
45
+
46
+ it "works with rest arguments" do
47
+ def fooP0R(*r); r; end
48
+ fooP0R().should == []
49
+ fooP0R(1).should == [1]
50
+ fooP0R(1, 2).should == [1, 2]
51
+
52
+ def fooP1R(a, *r); [a, r]; end
53
+ fooP1R(1).should == [1, []]
54
+ fooP1R(1, 2).should == [1, [2]]
55
+
56
+ # def fooP0O1R(a=1, *r); [a, r]; end
57
+ # fooP0O1R().should == [1, []]
58
+ end
59
+
60
+ it "with an empty expression is like calling with nil argument" do
61
+ def foo(a); a; end
62
+ foo(()).should == nil
63
+ end
64
+ end
@@ -0,0 +1,25 @@
1
+
2
+ describe "The next statement from within the block" do
3
+ it "ends block execution" do
4
+ a = []
5
+ lambda {
6
+ a << 1
7
+ next
8
+ a << 2
9
+ }.call
10
+ a.should == [1]
11
+ end
12
+
13
+ it "causes block to return nil if invoked without arguments" do
14
+ lambda { 123; next; 456 }.call.should == nil
15
+ end
16
+
17
+ it "causes block to return nil if invoked with an empty expression" do
18
+ lambda { next (); 456 }.call.should == nil
19
+ end
20
+
21
+ it "returns the argument passed" do
22
+ lambda { 123; next 234; 345 }.call.should == 234
23
+ end
24
+ end
25
+
@@ -0,0 +1,34 @@
1
+
2
+ describe "The || operator" do
3
+ it "evaluates to true if any of its operands are true" do
4
+ if false || true || nil
5
+ x = true
6
+ end
7
+ x.should == true
8
+ end
9
+
10
+ it "evaluates to false if all of its operands are false" do
11
+ if false || nil
12
+ x = true
13
+ end
14
+ x.should == nil
15
+ end
16
+
17
+ it "is evaluated before assignment operators" do
18
+ x = nil || true
19
+ x.should == true
20
+ end
21
+
22
+ it "has a lower precedence than the && operator" do
23
+ x = 1 || false && x = 2
24
+ x.should == 1
25
+ end
26
+
27
+ it "treats empty expressions as nil" do
28
+ (() || true).should == true
29
+ (() || false).should == false
30
+ (true || ()).should == true
31
+ (false || ()).should == nil
32
+ (() || ()).should == nil
33
+ end
34
+ end
@@ -0,0 +1,24 @@
1
+
2
+ describe "The redo statement" do
3
+ it "restarts block execution if used within block" do
4
+ a = []
5
+ lambda {
6
+ a << 1
7
+ redo if a.size < 2
8
+ a << 2
9
+ }.call
10
+ a.should == [1, 1, 2]
11
+ end
12
+
13
+ it "re-executes the closest loop"
14
+
15
+ it "re-executes the last step in enumeration" do
16
+ list = []
17
+ [1,2,3].each do |x|
18
+ list << x
19
+ break if list.size == 6
20
+ redo if x == 3
21
+ end
22
+ list.should == [1,2,3,3,3,3]
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+
2
+ class SpecificExampleException < StandardError; end
3
+
4
+ class OtherCustomException < StandardError; end
5
+
6
+ def exception_list
7
+ [SpecificExampleException, OtherCustomException]
8
+ end
9
+
10
+ describe "The rescue keyword" do
11
+ it "can be used to handle a specific exception"
12
+
13
+ it "can capture the raised exception in a local variable" do
14
+ begin
15
+ raise SpecificExampleException, "some text"
16
+ rescue SpecificExampleException => e
17
+ e.message.should == "some text"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+
2
+ describe "The return keyword" do
3
+ it "returns any object directly" do
4
+ def r; return 1; end
5
+ r().should == 1
6
+ end
7
+
8
+ it "returns an single element array directly" do
9
+ def r; return[1]; end
10
+ r().should == [1]
11
+ end
12
+
13
+ it "returns an multi element array directly" do
14
+ def r; return [1, 2]; end
15
+ r().should == [1, 2]
16
+ end
17
+
18
+ it "returns nil be default" do
19
+ def r; return; end
20
+ r().should == nil
21
+ end
22
+
23
+ # describe "within a begin" do
24
+ # it "executes ensure before re"
25
+ # end
26
+
27
+ describe "within a block" do
28
+ it "raises a LocalJumpError if there is no lexicaly enclosing method" #do
29
+ # def f; yield; end
30
+ # lambda { f { return 5 } }
31
+ # end
32
+
33
+ it "causes lambda to return nil if invoked without any arguments" do
34
+ lambda { return; 456 }.call.should == nil
35
+ end
36
+
37
+ end
38
+
39
+ describe "within two blocks" do
40
+ it "causes the method that lexically encloses the block to return" do
41
+ def f
42
+ 1.times { 1.times { return true }; false }; false
43
+ end
44
+ f.should == true
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,25 @@
1
+
2
+ describe "Ruby character strings" do
3
+ it "don't get interpolated when put in single quotes" do
4
+ @ip = 'xxx'
5
+ '#{@ip}'.should == '#{@ip}'
6
+ end
7
+
8
+ it 'get interpolated with #{} when put in double quotes' do
9
+ @ip = 'xxx'
10
+ "#{@ip}".should == "xxx"
11
+ end
12
+
13
+ it "interpolate instance variables just with the # character" #do
14
+ # @ip = "xxx"
15
+ # "#@ip".should == "xxx"
16
+ # end
17
+
18
+ it "interpolate global variables just with the # character"
19
+
20
+ it "interpolate class variables with just the # character"
21
+
22
+ it "allow underscore as part of a variable name in a simple interpolation"
23
+
24
+ it "have characters [.(=?!# end simple # interpolation"
25
+ end