diff options
Diffstat (limited to 'spec/ruby/core/main')
| -rw-r--r-- | spec/ruby/core/main/fixtures/classes.rb | 8 | ||||
| -rw-r--r-- | spec/ruby/core/main/fixtures/using.rb | 1 | ||||
| -rw-r--r-- | spec/ruby/core/main/fixtures/using_in_main.rb | 5 | ||||
| -rw-r--r-- | spec/ruby/core/main/fixtures/using_in_method.rb | 5 | ||||
| -rw-r--r-- | spec/ruby/core/main/private_spec.rb | 35 | ||||
| -rw-r--r-- | spec/ruby/core/main/public_spec.rb | 32 | ||||
| -rw-r--r-- | spec/ruby/core/main/ruby2_keywords_spec.rb | 9 | ||||
| -rw-r--r-- | spec/ruby/core/main/using_spec.rb | 26 |
8 files changed, 103 insertions, 18 deletions
diff --git a/spec/ruby/core/main/fixtures/classes.rb b/spec/ruby/core/main/fixtures/classes.rb index 6aba948ce0..757cee4e4a 100644 --- a/spec/ruby/core/main/fixtures/classes.rb +++ b/spec/ruby/core/main/fixtures/classes.rb @@ -13,6 +13,14 @@ def main_public_method end public :main_public_method +def main_public_method2 +end +public :main_public_method2 + def main_private_method end private :main_private_method + +def main_private_method2 +end +private :main_private_method2 diff --git a/spec/ruby/core/main/fixtures/using.rb b/spec/ruby/core/main/fixtures/using.rb new file mode 100644 index 0000000000..30713ef309 --- /dev/null +++ b/spec/ruby/core/main/fixtures/using.rb @@ -0,0 +1 @@ +using Module.new diff --git a/spec/ruby/core/main/fixtures/using_in_main.rb b/spec/ruby/core/main/fixtures/using_in_main.rb new file mode 100644 index 0000000000..a4a71c89cc --- /dev/null +++ b/spec/ruby/core/main/fixtures/using_in_main.rb @@ -0,0 +1,5 @@ +MAIN = self + +module X + MAIN.send(:using, Module.new) +end diff --git a/spec/ruby/core/main/fixtures/using_in_method.rb b/spec/ruby/core/main/fixtures/using_in_method.rb new file mode 100644 index 0000000000..d9ea2e9ef0 --- /dev/null +++ b/spec/ruby/core/main/fixtures/using_in_method.rb @@ -0,0 +1,5 @@ +def foo + using Module.new +end + +foo diff --git a/spec/ruby/core/main/private_spec.rb b/spec/ruby/core/main/private_spec.rb index eef826ad81..76895fd649 100644 --- a/spec/ruby/core/main/private_spec.rb +++ b/spec/ruby/core/main/private_spec.rb @@ -4,20 +4,39 @@ require_relative 'fixtures/classes' describe "main#private" do after :each do Object.send(:public, :main_public_method) + Object.send(:public, :main_public_method2) end - it "sets the visibility of the given method to private" do - eval "private :main_public_method", TOPLEVEL_BINDING - Object.should have_private_method(:main_public_method) + context "when single argument is passed and it is not an array" do + it "sets the visibility of the given methods to private" do + eval "private :main_public_method", TOPLEVEL_BINDING + Object.should have_private_method(:main_public_method) + end end - it "returns Object" do - eval("private :main_public_method", TOPLEVEL_BINDING).should equal(Object) + context "when multiple arguments are passed" do + it "sets the visibility of the given methods to private" do + eval "private :main_public_method, :main_public_method2", TOPLEVEL_BINDING + Object.should have_private_method(:main_public_method) + Object.should have_private_method(:main_public_method2) + end end - it "raises a NameError when given an undefined name" do - lambda do - eval "private :main_undefined_method", TOPLEVEL_BINDING + context "when single argument is passed and is an array" do + it "sets the visibility of the given methods to private" do + eval "private [:main_public_method, :main_public_method2]", TOPLEVEL_BINDING + Object.should have_private_method(:main_public_method) + Object.should have_private_method(:main_public_method2) + end + end + + it "returns argument" do + eval("private :main_public_method", TOPLEVEL_BINDING).should equal(:main_public_method) + end + + it "raises a NameError when at least one of given method names is undefined" do + -> do + eval "private :main_public_method, :main_undefined_method", TOPLEVEL_BINDING end.should raise_error(NameError) end end diff --git a/spec/ruby/core/main/public_spec.rb b/spec/ruby/core/main/public_spec.rb index 259a8f9418..3c77798fbc 100644 --- a/spec/ruby/core/main/public_spec.rb +++ b/spec/ruby/core/main/public_spec.rb @@ -4,19 +4,39 @@ require_relative 'fixtures/classes' describe "main#public" do after :each do Object.send(:private, :main_private_method) + Object.send(:private, :main_private_method2) end - it "sets the visibility of the given method to public" do - eval "public :main_private_method", TOPLEVEL_BINDING - Object.should_not have_private_method(:main_private_method) + context "when single argument is passed and it is not an array" do + it "sets the visibility of the given methods to public" do + eval "public :main_private_method", TOPLEVEL_BINDING + Object.should_not have_private_method(:main_private_method) + end end - it "returns Object" do - eval("public :main_private_method", TOPLEVEL_BINDING).should equal(Object) + context "when multiple arguments are passed" do + it "sets the visibility of the given methods to public" do + eval "public :main_private_method, :main_private_method2", TOPLEVEL_BINDING + Object.should_not have_private_method(:main_private_method) + Object.should_not have_private_method(:main_private_method2) + end end + context "when single argument is passed and is an array" do + it "sets the visibility of the given methods to public" do + eval "public [:main_private_method, :main_private_method2]", TOPLEVEL_BINDING + Object.should_not have_private_method(:main_private_method) + Object.should_not have_private_method(:main_private_method2) + end + end + + it "returns argument" do + eval("public :main_private_method", TOPLEVEL_BINDING).should equal(:main_private_method) + end + + it "raises a NameError when given an undefined name" do - lambda do + -> do eval "public :main_undefined_method", TOPLEVEL_BINDING end.should raise_error(NameError) end diff --git a/spec/ruby/core/main/ruby2_keywords_spec.rb b/spec/ruby/core/main/ruby2_keywords_spec.rb new file mode 100644 index 0000000000..27ceae3253 --- /dev/null +++ b/spec/ruby/core/main/ruby2_keywords_spec.rb @@ -0,0 +1,9 @@ +require_relative '../../spec_helper' +require_relative 'fixtures/classes' + +describe "main.ruby2_keywords" do + it "is the same as Object.ruby2_keywords" do + main = TOPLEVEL_BINDING.receiver + main.should have_private_method(:ruby2_keywords) + end +end diff --git a/spec/ruby/core/main/using_spec.rb b/spec/ruby/core/main/using_spec.rb index 1fb812f5cc..5b9a751595 100644 --- a/spec/ruby/core/main/using_spec.rb +++ b/spec/ruby/core/main/using_spec.rb @@ -3,11 +3,11 @@ require_relative 'fixtures/classes' describe "main.using" do it "requires one Module argument" do - lambda do + -> do eval('using', TOPLEVEL_BINDING) end.should raise_error(ArgumentError) - lambda do + -> do eval('using "foo"', TOPLEVEL_BINDING) end.should raise_error(TypeError) end @@ -17,7 +17,7 @@ describe "main.using" do load File.expand_path('../fixtures/string_refinement_user.rb', __FILE__) MainSpecs::DATA[:in_module].should == 'foo' MainSpecs::DATA[:toplevel].should == 'foo' - lambda do + -> do 'hello'.foo end.should raise_error(NoMethodError) end @@ -25,7 +25,7 @@ describe "main.using" do it "uses refinements from the given module for method calls in the target file" do require_relative 'fixtures/string_refinement' load File.expand_path('../fixtures/string_refinement_user.rb', __FILE__) - lambda do + -> do 'hello'.foo end.should raise_error(NoMethodError) MainSpecs.call_foo('hello').should == 'foo' @@ -129,4 +129,22 @@ describe "main.using" do x.call_bar(cls2.new).should == 'bar' end + + it "raises error when called from method in wrapped script" do + -> do + load File.expand_path('../fixtures/using_in_method.rb', __FILE__), true + end.should raise_error(RuntimeError) + end + + it "raises error when called on toplevel from module" do + -> do + load File.expand_path('../fixtures/using_in_main.rb', __FILE__), true + end.should raise_error(RuntimeError) + end + + it "does not raise error when wrapped with module" do + -> do + load File.expand_path('../fixtures/using.rb', __FILE__), true + end.should_not raise_error + end end |
