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.
- data/.gitignore +10 -1
- data/.gitmodules +0 -0
- data/Opalfile +371 -0
- data/README.md +45 -0
- data/Rakefile +237 -34
- data/VERSION +1 -1
- data/bin/opal +13 -0
- data/demos/apps/browser_demo/index.html +11 -0
- data/demos/apps/browser_demo/lib/browser_demo.rb +31 -0
- data/demos/apps/simple_opal/Opalfile +13 -0
- data/demos/apps/simple_opal/index.html +11 -0
- data/demos/apps/simple_opal/lib/app_controller.rb +62 -0
- data/demos/apps/simple_opal/lib/main_window.rb +146 -0
- data/demos/browser/request/index.html +52 -0
- data/demos/browser/request/request.rb +48 -0
- data/gen/browser/__PROJECT_NAME__/index.html +10 -0
- data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +1 -0
- data/lib/opal.rb +48 -3
- data/lib/opal/builders/base.rb +50 -0
- data/lib/opal/builders/css.rb +46 -0
- data/lib/opal/builders/javascript.rb +44 -0
- data/lib/opal/builders/opal.rb +79 -0
- data/lib/opal/builders/ruby.rb +50 -0
- data/lib/opal/builders/ruby/generate.rb +1851 -0
- data/lib/opal/builders/ruby/nodes.rb +210 -0
- data/lib/opal/builders/ruby/ruby.rb +916 -0
- data/lib/opal/builders/ruby/ruby_parser.rb +6008 -0
- data/lib/opal/builders/ruby/ruby_parser.rb.y +1451 -0
- data/lib/opal/models/build_item.rb +104 -0
- data/lib/opal/models/hash_struct.rb +40 -0
- data/lib/opal/models/project.rb +215 -0
- data/lib/opal/models/struct_accessors.rb +58 -0
- data/lib/opal/models/target.rb +176 -0
- data/lib/opal/opal/env/console.rb +66 -0
- data/lib/opal/opal/env/fs.rb +98 -0
- data/lib/opal/opal/env/object.rb +48 -0
- data/lib/opal/opal/environment.rb +139 -0
- data/lib/opal/opal/gen.rb +62 -0
- data/lib/opal/opal/opal.rb +68 -0
- data/lib/opal/opal/repl.rb +38 -0
- data/lib/opal/opalfile/dsl.rb +62 -0
- data/lib/opal/opalfile/opalfile.rb +133 -0
- data/lib/opal/opalfile/task.rb +96 -0
- data/lib/opal/opalfile/task_manager.rb +63 -0
- data/lib/opal/opalfile/task_scope.rb +52 -0
- data/lib/opal/rack/app_server.rb +119 -0
- data/opals/aristo/README.md +16 -0
- data/opals/browser/Opalfile +11 -0
- data/opals/browser/README.md +146 -0
- data/opals/browser/SIZZLE_LICESNSE.txt +148 -0
- data/opals/browser/lib/browser.rb +118 -0
- data/opals/browser/lib/browser/builder.rb +41 -0
- data/opals/browser/lib/browser/canvas_context.rb +115 -0
- data/opals/browser/lib/browser/dimensions.rb +50 -0
- data/opals/browser/lib/browser/document.rb +146 -0
- data/opals/browser/lib/browser/element.rb +487 -0
- data/opals/browser/lib/browser/element/attributes.rb +88 -0
- data/opals/browser/lib/browser/element/css.rb +290 -0
- data/opals/browser/lib/browser/element/form.rb +146 -0
- data/opals/browser/lib/browser/event/dom_events.rb +81 -0
- data/opals/browser/lib/browser/event/event.rb +177 -0
- data/opals/browser/lib/browser/event/trigger_events.rb +53 -0
- data/opals/browser/lib/browser/geometry.rb +97 -0
- data/opals/browser/lib/browser/json.rb +32 -0
- data/opals/browser/lib/browser/json_parse.js +321 -0
- data/opals/browser/lib/browser/request/request.rb +201 -0
- data/opals/browser/lib/browser/sizzle.js +1068 -0
- data/opals/browser/lib/browser/string.rb +42 -0
- data/opals/browser/lib/browser/touch.rb +37 -0
- data/{runtime/yaml.js → opals/browser/lib/browser/vml_context.js} +8 -8
- data/opals/browser/lib/browser/window.rb +36 -0
- data/opals/browser/spec/browser/browser_detection_spec.rb +7 -0
- data/opals/browser/spec/document/aref_spec.rb +110 -0
- data/opals/browser/spec/document/ready_spec.rb +16 -0
- data/opals/browser/spec/element/body_spec.rb +11 -0
- data/opals/browser/spec/element/clear_spec.rb +26 -0
- data/opals/browser/spec/element/empty_spec.rb +29 -0
- data/opals/browser/spec/element/has_class_spec.rb +40 -0
- data/opals/browser/spec/element/hidden_spec.rb +23 -0
- data/opals/browser/spec/element/hide_spec.rb +31 -0
- data/opals/browser/spec/element/remove_spec.rb +25 -0
- data/opals/browser/spec/element/show_spec.rb +31 -0
- data/opals/browser/spec/element/style_spec.rb +69 -0
- data/opals/browser/spec/element/toggle_spec.rb +31 -0
- data/opals/browser/spec/element/visible_spec.rb +23 -0
- data/opals/browser/spec/spec_helper.rb +1 -0
- data/opals/cherry_kit/Opalfile +6 -0
- data/opals/cherry_kit/bin/cherry_kit.rb +11 -0
- data/opals/cherry_kit/lib/cherry_kit.rb +29 -0
- data/opals/foundation/Opalfile +11 -0
- data/opals/foundation/bin/foundation.rb +12 -0
- data/opals/foundation/lib/foundation.rb +32 -0
- data/opals/foundation/lib/foundation/__table_view_desktop/outline_view.rb +57 -0
- data/opals/foundation/lib/foundation/__table_view_desktop/table_column.rb +59 -0
- data/opals/foundation/lib/foundation/__table_view_desktop/table_header_view.rb +34 -0
- data/opals/foundation/lib/foundation/__table_view_desktop/table_view.rb +304 -0
- data/opals/foundation/lib/foundation/controllers/array_controller.rb +54 -0
- data/opals/foundation/lib/foundation/controllers/controller.rb +74 -0
- data/opals/foundation/lib/foundation/controllers/controller_selection_proxy.rb +67 -0
- data/opals/foundation/lib/foundation/controllers/object_controller.rb +145 -0
- data/opals/foundation/lib/foundation/controllers/view.rb +40 -0
- data/opals/foundation/lib/foundation/core/application.rb +476 -0
- data/opals/foundation/lib/foundation/core/attributes.rb +146 -0
- data/opals/foundation/lib/foundation/core/bindings.rb +125 -0
- data/opals/foundation/lib/foundation/core/builder.rb +101 -0
- data/opals/foundation/lib/foundation/core/event.rb +112 -0
- data/opals/foundation/lib/foundation/core/index_path.rb +49 -0
- data/opals/foundation/lib/foundation/core/index_set.rb +97 -0
- data/opals/foundation/lib/foundation/core/notification.rb +113 -0
- data/opals/foundation/lib/foundation/core/observable.rb +275 -0
- data/opals/foundation/lib/foundation/core/observable_array.rb +30 -0
- data/opals/foundation/lib/foundation/core/responder.rb +85 -0
- data/opals/foundation/lib/foundation/core/run_loop.rb +89 -0
- data/opals/foundation/lib/foundation/core/touch.rb +95 -0
- data/opals/foundation/lib/foundation/gestures/gesture_recognizer.rb +35 -0
- data/opals/foundation/lib/foundation/rendering/render_context.rb +100 -0
- data/opals/foundation/lib/foundation/rendering/renderer.rb +137 -0
- data/opals/foundation/lib/foundation/rendering/root_theme.rb +77 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/button.rb +62 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/control.rb +72 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/label.rb +54 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/scroller.rb +58 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/slider.rb +72 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/table_view.rb +97 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/text_field.rb +55 -0
- data/opals/foundation/lib/foundation/rendering/root_theme/view.rb +81 -0
- data/opals/foundation/lib/foundation/rendering/theme.rb +38 -0
- data/opals/foundation/lib/foundation/table_view/cell.rb +39 -0
- data/opals/foundation/lib/foundation/table_view/table.rb +171 -0
- data/opals/foundation/lib/foundation/views/button.rb +63 -0
- data/opals/foundation/lib/foundation/views/checkbox.rb +28 -0
- data/opals/foundation/lib/foundation/views/clip.rb +47 -0
- data/opals/foundation/lib/foundation/views/control.rb +199 -0
- data/opals/foundation/lib/foundation/views/label.rb +54 -0
- data/opals/foundation/lib/foundation/views/scroll.rb +294 -0
- data/opals/foundation/lib/foundation/views/scroll_view_desktop.rb +152 -0
- data/opals/foundation/lib/foundation/views/scroller.rb +54 -0
- data/opals/foundation/lib/foundation/views/slider.rb +93 -0
- data/opals/foundation/lib/foundation/views/text_field.rb +83 -0
- data/opals/foundation/lib/foundation/views/view.rb +426 -0
- data/opals/foundation/lib/foundation/windows/window.rb +191 -0
- data/opals/foundation/resources/button/button.css +23 -0
- data/{runtime/init.js → opals/foundation/resources/foundation.css} +27 -33
- data/opals/foundation/resources/scroll/scroll.css +22 -0
- data/opals/foundation/resources/scroll_view/scroll_view.css +3 -0
- data/opals/foundation/resources/scroll_view/scroller.css +3 -0
- data/opals/foundation/resources/slider/regular/slider.css +3 -0
- data/opals/foundation/resources/slider/slider.css +27 -0
- data/opals/foundation/resources/table_view/outline_view.css +3 -0
- data/opals/foundation/resources/table_view/table_view.css +15 -0
- data/opals/foundation/resources/text_field/text_field.css +71 -0
- data/opals/foundation/spec/spec_helper.rb +1 -0
- data/opals/foundation/spec/system/attributes/get_attribute_spec.rb +69 -0
- data/opals/foundation/spec/system/attributes/get_path_spec.rb +44 -0
- data/opals/foundation/spec/system/attributes/set_path_spec.rb +24 -0
- data/opals/foundation/spec/system/attributes/set_spec.rb +58 -0
- data/opals/foundation/spec/system/bindings/bindings.rb +85 -0
- data/opals/foundation/spec/system/key_value_binding/bind_spec.rb +43 -0
- data/opals/foundation/spec/system/observable/dependant_keys_spec.rb +74 -0
- data/opals/foundation/spec/system/observable/observe_spec.rb +292 -0
- data/opals/foundation/spec/system/observable/remove_observer_spec.rb +60 -0
- data/opals/opal/Opalfile +14 -0
- data/opals/opal/spec/core/array/append_spec.rb +30 -0
- data/opals/opal/spec/core/array/assoc_spec.rb +29 -0
- data/opals/opal/spec/core/array/at_spec.rb +37 -0
- data/opals/opal/spec/core/array/clear_spec.rb +22 -0
- data/opals/opal/spec/core/array/collect_bang_spec.rb +27 -0
- data/opals/opal/spec/core/array/collect_spec.rb +27 -0
- data/opals/opal/spec/core/array/compact_spec.rb +15 -0
- data/opals/opal/spec/core/array/concat_spec.rb +15 -0
- data/opals/opal/spec/core/array/constructor_spec.rb +14 -0
- data/opals/opal/spec/core/array/each_spec.rb +9 -0
- data/opals/opal/spec/core/array/element_reference_spec.rb +4 -0
- data/opals/opal/spec/core/array/first_spec.rb +35 -0
- data/opals/opal/spec/core/array/include_spec.rb +9 -0
- data/opals/opal/spec/core/array/map_spec.rb +31 -0
- data/opals/opal/spec/core/builtin_constants/builtin_constants_spec.rb +7 -0
- data/opals/opal/spec/core/false/and_spec.rb +10 -0
- data/opals/opal/spec/core/false/inspect_spec.rb +6 -0
- data/opals/opal/spec/core/false/or_spec.rb +10 -0
- data/opals/opal/spec/core/false/to_s_spec.rb +6 -0
- data/opals/opal/spec/core/false/xor_spec.rb +10 -0
- data/opals/opal/spec/core/file/join_spec.rb +19 -0
- data/opals/opal/spec/core/kernel/instance_eval_spec.rb +0 -0
- data/opals/opal/spec/core/kernel/loop_spec.rb +24 -0
- data/opals/opal/spec/core/kernel/raise_spec.rb +0 -0
- data/opals/opal/spec/core/module/attr_accessor_spec.rb +28 -0
- data/opals/opal/spec/core/number/lt_spec.rb +12 -0
- data/opals/opal/spec/core/true/and_spec.rb +10 -0
- data/opals/opal/spec/core/true/inspect_spec.rb +6 -0
- data/opals/opal/spec/core/true/or_spec.rb +10 -0
- data/opals/opal/spec/core/true/to_s_spec.rb +6 -0
- data/opals/opal/spec/core/true/xor_spec.rb +10 -0
- data/opals/opal/spec/fixtures/super.rb +70 -0
- data/opals/opal/spec/language/____temp_remove_this.rb +12 -0
- data/opals/opal/spec/language/and_spec.rb +62 -0
- data/opals/opal/spec/language/array_spec.rb +52 -0
- data/opals/opal/spec/language/block_spec.rb +18 -0
- data/opals/opal/spec/language/break_spec.rb +36 -0
- data/opals/opal/spec/language/case_spec.rb +103 -0
- data/opals/opal/spec/language/def_spec.rb +11 -0
- data/opals/opal/spec/language/eigenclass_spec.rb +60 -0
- data/opals/opal/spec/language/hash_spec.rb +29 -0
- data/opals/opal/spec/language/if_spec.rb +54 -0
- data/opals/opal/spec/language/loop_spec.rb +11 -0
- data/opals/opal/spec/language/metaclass_spec.rb +21 -0
- data/opals/opal/spec/language/method_spec.rb +64 -0
- data/opals/opal/spec/language/next_spec.rb +25 -0
- data/opals/opal/spec/language/or_spec.rb +34 -0
- data/opals/opal/spec/language/redo_spec.rb +24 -0
- data/opals/opal/spec/language/rescue_spec.rb +20 -0
- data/opals/opal/spec/language/return_spec.rb +47 -0
- data/opals/opal/spec/language/string_spec.rb +25 -0
- data/opals/opal/spec/language/super_spec.rb +26 -0
- data/opals/opal/spec/language/until_spec.rb +157 -0
- data/opals/opal/spec/language/while_spec.rb +163 -0
- data/opals/opal/spec/spec_helper.rb +5 -0
- data/opals/runtime/Opalfile +68 -0
- data/opals/runtime/README.md +12 -0
- data/opals/runtime/docs/debugging.md +51 -0
- data/opals/runtime/lib/array.rb +1516 -0
- data/opals/runtime/lib/basic_object.rb +49 -0
- data/opals/runtime/lib/class.rb +54 -0
- data/opals/runtime/lib/dir.rb +36 -0
- data/opals/runtime/lib/error.rb +49 -0
- data/opals/runtime/lib/false_class.rb +52 -0
- data/opals/runtime/lib/file.rb +79 -0
- data/opals/runtime/lib/hash.rb +791 -0
- data/opals/runtime/lib/io.rb +39 -0
- data/opals/runtime/lib/kernel.rb +288 -0
- data/opals/runtime/lib/match_data.rb +36 -0
- data/opals/runtime/lib/module.rb +109 -0
- data/opals/runtime/lib/nil_class.rb +69 -0
- data/opals/runtime/lib/number.rb +398 -0
- data/opals/runtime/lib/proc.rb +77 -0
- data/opals/runtime/lib/range.rb +63 -0
- data/opals/runtime/lib/regexp.rb +111 -0
- data/opals/runtime/lib/ruby.rb +30 -0
- data/opals/runtime/lib/string.rb +328 -0
- data/opals/runtime/lib/symbol.rb +40 -0
- data/opals/runtime/lib/top_self.rb +33 -0
- data/opals/runtime/lib/true_class.rb +45 -0
- data/opals/runtime/runtime/browser.js +287 -0
- data/opals/runtime/runtime/debug.js +182 -0
- data/opals/runtime/runtime/opal.js +1010 -0
- data/opals/runtime/runtime/post_opal.js +1 -0
- data/opals/runtime/runtime/pre_opal.js +2 -0
- data/opals/runtime/runtime/server_side.js +50 -0
- data/opals/spec/LICENSE.txt +26 -0
- data/opals/spec/Opalfile +5 -0
- data/opals/spec/bin/spec.rb +43 -0
- data/opals/spec/lib/spec.rb +33 -0
- data/opals/spec/lib/spec/dsl.rb +41 -0
- data/opals/spec/lib/spec/example.rb +35 -0
- data/opals/spec/lib/spec/example/before_and_after_hooks.rb +81 -0
- data/opals/spec/lib/spec/example/errors.rb +42 -0
- data/opals/spec/lib/spec/example/example_group.rb +37 -0
- data/opals/spec/lib/spec/example/example_group_factory.rb +43 -0
- data/opals/spec/lib/spec/example/example_group_hierarchy.rb +45 -0
- data/opals/spec/lib/spec/example/example_group_methods.rb +142 -0
- data/opals/spec/lib/spec/example/example_group_proxy.rb +41 -0
- data/opals/spec/lib/spec/example/example_methods.rb +73 -0
- data/opals/spec/lib/spec/example/example_proxy.rb +48 -0
- data/opals/spec/lib/spec/expectations.rb +46 -0
- data/opals/spec/lib/spec/expectations/errors.rb +35 -0
- data/opals/spec/lib/spec/expectations/fail_with.rb +37 -0
- data/opals/spec/lib/spec/expectations/handler.rb +48 -0
- data/opals/spec/lib/spec/matchers.rb +50 -0
- data/opals/spec/lib/spec/matchers/be.rb +26 -0
- data/opals/spec/lib/spec/matchers/generated_descriptions.rb +47 -0
- data/opals/spec/lib/spec/matchers/operator_matcher.rb +66 -0
- data/opals/spec/lib/spec/runner.rb +48 -0
- data/opals/spec/lib/spec/runner/example_group_runner.rb +71 -0
- data/opals/spec/lib/spec/runner/formatter/html_formatter.rb +100 -0
- data/opals/spec/lib/spec/runner/formatter/terminal_formatter.rb +82 -0
- data/opals/spec/lib/spec/runner/options.rb +63 -0
- data/opals/spec/lib/spec/runner/reporter.rb +123 -0
- data/opals/spec/resources/index.html +25 -0
- data/opals/spec/resources/spec.css +132 -0
- data/spec/cherry_kit/iseq_spec.rb +38 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/vienna_spec.rb +7 -0
- data/yard/index.html +43 -0
- data/yard/style.css +765 -0
- metadata +312 -49
- data/docs/jarv.rdoc +0 -27
- data/runtime/array.js +0 -153
- data/runtime/class.js +0 -469
- data/runtime/compar.js +0 -73
- data/runtime/dir.js +0 -115
- data/runtime/enum.js +0 -74
- data/runtime/file.js +0 -165
- data/runtime/gem.js +0 -241
- data/runtime/hash.js +0 -181
- data/runtime/load.js +0 -251
- data/runtime/module.js +0 -98
- data/runtime/number.js +0 -148
- data/runtime/object.js +0 -522
- data/runtime/opal.js +0 -200
- data/runtime/parse.js +0 -2218
- data/runtime/range.js +0 -56
- data/runtime/re.js +0 -91
- data/runtime/string.js +0 -199
- data/runtime/variable.js +0 -184
- data/runtime/vm.js +0 -1150
- data/tasks/build.rb +0 -16
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
describe "FalseClass#^" do
|
|
3
|
+
it "returns false if other is nil or false, otherwise true" do
|
|
4
|
+
(false ^ false).should == false
|
|
5
|
+
(false ^ true).should == true
|
|
6
|
+
(false ^ nil).should == false
|
|
7
|
+
(false ^ "").should == true
|
|
8
|
+
(false ^ 'x').should == true
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
describe "File.join" do
|
|
3
|
+
it "returns an empty string when given no arguments" do
|
|
4
|
+
File.join.should == ""
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "when given a single argument returns an equal string" do
|
|
8
|
+
File.join("").should == ""
|
|
9
|
+
File.join("usr").should == "usr"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "joins parts using File::SEPARATOR" do
|
|
13
|
+
File.join('usr', 'bin').should == 'usr/bin'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "supports any number of arguments" do
|
|
17
|
+
File.join("a", "b", "c", "d").should == "a/b/c/d"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
describe "Kernel.loop" do
|
|
3
|
+
it "calls block until it is terminated by a break" do
|
|
4
|
+
i = 0
|
|
5
|
+
loop do
|
|
6
|
+
i = i + 1
|
|
7
|
+
break if i == 10
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
i.should == 10
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "returns value passed to break" do
|
|
14
|
+
loop do
|
|
15
|
+
break 123
|
|
16
|
+
end.should == 123
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "returns nil if no value passed to break" do
|
|
20
|
+
loop do
|
|
21
|
+
break
|
|
22
|
+
end.should == nil
|
|
23
|
+
end
|
|
24
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
# describe "Module#attr_accessor" do
|
|
3
|
+
# it "creates a getter and setter for each given attribute name" do
|
|
4
|
+
# class AttrAccessorSpec
|
|
5
|
+
# attr_accessor :a, 'b'
|
|
6
|
+
# end
|
|
7
|
+
#
|
|
8
|
+
# o = AttrAccessorSpec.new
|
|
9
|
+
#
|
|
10
|
+
# ['a', 'b'].each do |x|
|
|
11
|
+
# o.respond_to?(x).should == true
|
|
12
|
+
# o.respond_to?("#{x}=").should == true
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# o.a = "a"
|
|
16
|
+
# o.a.should == "a"
|
|
17
|
+
#
|
|
18
|
+
# o.b = "b"
|
|
19
|
+
# o.b.should == "b"
|
|
20
|
+
# o.a = o.b = nil
|
|
21
|
+
#
|
|
22
|
+
# o.__send__(:a=, "a")
|
|
23
|
+
# o.__send__(:a).should == "a"
|
|
24
|
+
#
|
|
25
|
+
# o.__send__(:b=, "b")
|
|
26
|
+
# o.__send__(:b).should == "b"
|
|
27
|
+
# end
|
|
28
|
+
# end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module Super
|
|
2
|
+
module S1
|
|
3
|
+
class A
|
|
4
|
+
def foo(a)
|
|
5
|
+
a << "A#foo"
|
|
6
|
+
bar(a)
|
|
7
|
+
end
|
|
8
|
+
def bar(a)
|
|
9
|
+
a << "A#bar"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
class B < A
|
|
13
|
+
def foo(a)
|
|
14
|
+
a << "B#foo"
|
|
15
|
+
super(a)
|
|
16
|
+
end
|
|
17
|
+
def bar(a)
|
|
18
|
+
a << "B#bar"
|
|
19
|
+
super(a)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
module S2
|
|
25
|
+
class A
|
|
26
|
+
def baz(a)
|
|
27
|
+
a << "A#baz"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
class B < A
|
|
31
|
+
def foo(a)
|
|
32
|
+
a << "B#foo"
|
|
33
|
+
baz(a)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
class C < B
|
|
37
|
+
def baz(a)
|
|
38
|
+
a << "C#baz"
|
|
39
|
+
super(a)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
module S3
|
|
45
|
+
class A
|
|
46
|
+
def foo(a)
|
|
47
|
+
a << "A#foo"
|
|
48
|
+
end
|
|
49
|
+
def self.foo(a)
|
|
50
|
+
a << "A::foo"
|
|
51
|
+
end
|
|
52
|
+
def self.bar(a)
|
|
53
|
+
a << "A::bar"
|
|
54
|
+
foo(a)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
class B < A
|
|
58
|
+
def self.foo(a)
|
|
59
|
+
a << "B::foo"
|
|
60
|
+
super(a)
|
|
61
|
+
end
|
|
62
|
+
def self.bar(a)
|
|
63
|
+
a << "B::bar"
|
|
64
|
+
super(a)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
|
|
2
|
+
describe "The '&&' statement" do
|
|
3
|
+
it "short circuits evaluation at the first condition to be false" do
|
|
4
|
+
x = nil
|
|
5
|
+
true && false && x = 1
|
|
6
|
+
x.should == nil
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "evaluates to the first condition not to be true" do
|
|
10
|
+
("yes" && 1 && nil && true).should == nil
|
|
11
|
+
("yes" && 1 && false && true).should == false
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "evaluates to the last condition if all are true" do
|
|
15
|
+
("yes" && 1).should == 1
|
|
16
|
+
(1 && "yes").should == "yes"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "evaluates the full set of chained conditions during assignment" do
|
|
20
|
+
x = nil
|
|
21
|
+
y = nil
|
|
22
|
+
x = 1 && y = 2
|
|
23
|
+
x.should == 2
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "treats empty expressions as nil" do
|
|
27
|
+
(() && true).should == nil
|
|
28
|
+
(true && ()).should == nil
|
|
29
|
+
(() && ()).should == nil
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "The 'and' statement" do
|
|
34
|
+
it "short-circuits evaluation at the first condition to be false" do
|
|
35
|
+
x = nil
|
|
36
|
+
true and false and x = 1
|
|
37
|
+
x.should == nil
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "evaluates to the first condition not to be true" do
|
|
41
|
+
("yes" and 1 and nil and true).should == nil
|
|
42
|
+
("yes" and 1 and false and true).should == false
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "evaluates to the last condition if all are true" do
|
|
46
|
+
("yes" and 1).should == 1
|
|
47
|
+
(1 and "yes").should == "yes"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "when used in assignment, evaluates and assigns the expressions individually" do
|
|
51
|
+
x = nil
|
|
52
|
+
y = nil
|
|
53
|
+
x = 1 and y = 2
|
|
54
|
+
x.should == 1
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "treats empty expressions as nil" do
|
|
58
|
+
(() and true).should == nil
|
|
59
|
+
(true and ()).should == nil
|
|
60
|
+
(() and ()).should == nil
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
|
|
2
|
+
describe "Array literals" do
|
|
3
|
+
it "[] should return a new array populated with the given elements" do
|
|
4
|
+
array = [1, 'a', nil]
|
|
5
|
+
array.class.should == Array
|
|
6
|
+
array[0].should == 1
|
|
7
|
+
array[1].should == "a"
|
|
8
|
+
array[2].should == nil
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "[] treats empty expressions as nil elements" do
|
|
12
|
+
array = [0, (), 2, (), 4]
|
|
13
|
+
array.class.should == Array
|
|
14
|
+
array[0].should == 0
|
|
15
|
+
array[1].should == nil
|
|
16
|
+
array[2].should == 2
|
|
17
|
+
array[3].should == nil
|
|
18
|
+
array[4].should == 4
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "[] accepts a literal hash without curly braces as its only parameter" #do
|
|
22
|
+
# ["foo" => :bar, :baz => 42].should == nil
|
|
23
|
+
# end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "Bareword array literal" do
|
|
27
|
+
it "%w() transforms unquoted barewords into an array" #do
|
|
28
|
+
# a = 3
|
|
29
|
+
# %w(a #{3+a} 3).should
|
|
30
|
+
# end
|
|
31
|
+
|
|
32
|
+
it "%W() transforms unquoted barewords into an array, supporing interpolation" do
|
|
33
|
+
a = 3
|
|
34
|
+
%W(a #{3+a} 3).should == ["a", "6", "3"]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "%W() always treats interpolated expressions as a single word" do
|
|
38
|
+
a = "hello world"
|
|
39
|
+
%W(a b c #{a} d e).should == ["a", "b", "c", "hello world", "d", "e"]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "treats consecutive whitespace characters the same as one" do
|
|
43
|
+
%W(a b c d).should == ["a", "b", "c", "d"]
|
|
44
|
+
%W(hello
|
|
45
|
+
world).should == ["hello", "world"]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "treats whitespace as literals characters when escaped by a backslash" #do
|
|
49
|
+
# %W(a b\ c d e).should == ["a", "b c", "d", "e"]
|
|
50
|
+
# end
|
|
51
|
+
|
|
52
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
describe "Block parameters" do
|
|
3
|
+
it "does not override a shodowed variable from the outer scope" do
|
|
4
|
+
i = 0
|
|
5
|
+
a = [1, 2, 3]
|
|
6
|
+
a.each { |i| ;}
|
|
7
|
+
i.should == 0
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "captures variables from the outer scope" do
|
|
11
|
+
a = [1, 2, 3]
|
|
12
|
+
sum = 0
|
|
13
|
+
vari = nil
|
|
14
|
+
a.each { |vari| sum = sum + vari }
|
|
15
|
+
sum.should == 6
|
|
16
|
+
vari.should == nil
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
describe "The break statement" do
|
|
3
|
+
it "ends block execution if used within block" do
|
|
4
|
+
a = []
|
|
5
|
+
lambda {
|
|
6
|
+
a << 1
|
|
7
|
+
break
|
|
8
|
+
a << 2
|
|
9
|
+
}.call
|
|
10
|
+
a.should == [1]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "causes block to return value passed to break" do
|
|
14
|
+
lambda { break 123; 456 }.call.should == 123
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "causes block to return nil if an empty expression passed to break" do
|
|
18
|
+
lambda { break (); 456 }.call.should == nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "causes block to return nil if no value passed to break" do
|
|
22
|
+
lambda { break; 456 }.call.should == nil
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# describe "Executing break from within a block" do
|
|
27
|
+
#
|
|
28
|
+
# it "returns from the invoking singleton method" do
|
|
29
|
+
# obj = Object.new
|
|
30
|
+
# def obj.meth_with_block
|
|
31
|
+
# yield
|
|
32
|
+
# raise "break didn't break from the singleton method"
|
|
33
|
+
# end
|
|
34
|
+
# obj.meth_with_block { break :value }.should == :value
|
|
35
|
+
# end
|
|
36
|
+
# end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
|
|
2
|
+
describe "The 'case'-construct" do
|
|
3
|
+
it "evaluates the body of the when clause matching the case target expression" do
|
|
4
|
+
case 1
|
|
5
|
+
when 2; false
|
|
6
|
+
when 1; true
|
|
7
|
+
end.should == true
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "evaluates the body of the when clause whose array expression includes the case target expression" do
|
|
11
|
+
case 2
|
|
12
|
+
when 3, 4; false
|
|
13
|
+
when 1, 2; true
|
|
14
|
+
end.should == true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "evaluates the body of the when clause in left-to-right order if it's an array expression" do
|
|
18
|
+
@calls = []
|
|
19
|
+
def foo; @calls << :foo; end
|
|
20
|
+
def bar; @calls << :bar; end
|
|
21
|
+
|
|
22
|
+
case true
|
|
23
|
+
when foo, bar;
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
@calls.should == [:foo, :bar]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "evaluates the body of the when clause whose range expression includes the case target expression" do
|
|
30
|
+
case 5
|
|
31
|
+
when 21..30; false
|
|
32
|
+
when 1..20; true
|
|
33
|
+
end.should == true
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "returns nil when no 'then'-bodies are given" do
|
|
37
|
+
case "a"
|
|
38
|
+
when "a"
|
|
39
|
+
when "b"
|
|
40
|
+
end.should == nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "evaluates the 'else'-body when no other expression matches" do
|
|
44
|
+
case "c"
|
|
45
|
+
when "a"; 'foo'
|
|
46
|
+
when "b"; 'bar'
|
|
47
|
+
else 'zzz'
|
|
48
|
+
end.should == 'zzz'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "returns nil when no expression matches and 'else'-body is empty" do
|
|
52
|
+
case "c"
|
|
53
|
+
when "a"; "a"
|
|
54
|
+
when "b"; "b"
|
|
55
|
+
else
|
|
56
|
+
end.should == nil
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "returns 2 when a then body is empty" do
|
|
60
|
+
case Object.new
|
|
61
|
+
when Number then
|
|
62
|
+
1
|
|
63
|
+
when String then
|
|
64
|
+
# ok
|
|
65
|
+
else
|
|
66
|
+
2
|
|
67
|
+
end.should == 2
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "returns that statement following 'then'" do
|
|
71
|
+
case "a"
|
|
72
|
+
when "a" then 'foo'
|
|
73
|
+
when "b" then 'bar'
|
|
74
|
+
end.should == 'foo'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "tests classes with case equality" do
|
|
78
|
+
case "a"
|
|
79
|
+
when String
|
|
80
|
+
'foo'
|
|
81
|
+
when Symbol
|
|
82
|
+
'bar'
|
|
83
|
+
end.should == 'foo'
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "tests with matching regexps" do
|
|
87
|
+
case "hello"
|
|
88
|
+
when /abc/; false
|
|
89
|
+
when /^hell/; true
|
|
90
|
+
end.should == true
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "takes a list of values" do
|
|
94
|
+
case 'z'
|
|
95
|
+
when 'a', 'b', 'c', 'd'
|
|
96
|
+
"foo"
|
|
97
|
+
when 'x', 'y', 'z'
|
|
98
|
+
"bar"
|
|
99
|
+
end.should == "bar"
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "takes an expanded array in addition to a list of values"
|
|
103
|
+
end
|