diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-01 15:41:50 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-01 15:41:50 +0000 |
commit | 4d7b0b9112f2adf9e87ef75056f930bf7c1f3dc4 (patch) | |
tree | 8d712e18a619a9720d181d0d44e8cc2474ff31ee /spec/ruby/language | |
parent | 821d9a2d30f2e0d3f9009dc001b4b49aaa63c66e (diff) | |
download | ruby-4d7b0b9112f2adf9e87ef75056f930bf7c1f3dc4.tar.gz |
Update to ruby/spec@bacedc5
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/ruby/language')
-rw-r--r-- | spec/ruby/language/BEGIN_spec.rb | 4 | ||||
-rw-r--r-- | spec/ruby/language/break_spec.rb | 18 | ||||
-rw-r--r-- | spec/ruby/language/constants_spec.rb | 22 | ||||
-rw-r--r-- | spec/ruby/language/defined_spec.rb | 4 | ||||
-rw-r--r-- | spec/ruby/language/fixtures/begin_file.rb | 3 | ||||
-rw-r--r-- | spec/ruby/language/fixtures/break.rb | 28 | ||||
-rw-r--r-- | spec/ruby/language/rescue_spec.rb | 10 | ||||
-rw-r--r-- | spec/ruby/language/return_spec.rb | 33 |
8 files changed, 120 insertions, 2 deletions
diff --git a/spec/ruby/language/BEGIN_spec.rb b/spec/ruby/language/BEGIN_spec.rb index 826d5f0c89..c0784971b0 100644 --- a/spec/ruby/language/BEGIN_spec.rb +++ b/spec/ruby/language/BEGIN_spec.rb @@ -29,4 +29,8 @@ describe "The BEGIN keyword" do ScratchPad.recorded.should == ['foo', 'bar'] end + + it "returns the top-level script's filename for __FILE__" do + ruby_exe(fixture(__FILE__, "begin_file.rb")).chomp.should =~ /begin_file\.rb$/ + end end diff --git a/spec/ruby/language/break_spec.rb b/spec/ruby/language/break_spec.rb index da3c3bd272..09e8ff3d93 100644 --- a/spec/ruby/language/break_spec.rb +++ b/spec/ruby/language/break_spec.rb @@ -24,6 +24,24 @@ describe "The break statement in a block" do value.should == :value end end + + describe "captured and delegated to another method repeatedly" do + it "breaks out of the block" do + @program.looped_break_in_captured_block + ScratchPad.recorded.should == [:begin, + :preloop, + :predele, + :preyield, + :prebreak, + :postbreak, + :postyield, + :postdele, + :predele, + :preyield, + :prebreak, + :end] + end + end end describe "The break statement in a captured block" do diff --git a/spec/ruby/language/constants_spec.rb b/spec/ruby/language/constants_spec.rb index 1d3cecd9c6..45d87ce52f 100644 --- a/spec/ruby/language/constants_spec.rb +++ b/spec/ruby/language/constants_spec.rb @@ -375,6 +375,28 @@ describe "Constant resolution within methods" do end end + + describe "with &&=" do + it "re-assigns a scoped constant if already true" do + module ConstantSpecs + OpAssignTrue = true + end + suppress_warning do + ConstantSpecs::OpAssignTrue &&= 1 + end + ConstantSpecs::OpAssignTrue.should == 1 + ConstantSpecs.send :remove_const, :OpAssignTrue + end + + it "leaves scoped constant if not true" do + module ConstantSpecs + OpAssignFalse = false + end + ConstantSpecs::OpAssignFalse &&= 1 + ConstantSpecs::OpAssignFalse.should == false + ConstantSpecs.send :remove_const, :OpAssignFalse + end + end end describe "Constant resolution within a singleton class (class << obj)" do diff --git a/spec/ruby/language/defined_spec.rb b/spec/ruby/language/defined_spec.rb index 1247658381..0c8e657786 100644 --- a/spec/ruby/language/defined_spec.rb +++ b/spec/ruby/language/defined_spec.rb @@ -750,7 +750,7 @@ describe "The defined? keyword for a scoped constant" do end it "returns nil when an undefined constant is scoped to a defined constant" do - defined?(DefinedSpecs::Child::B).should be_nil + defined?(DefinedSpecs::Child::Undefined).should be_nil end it "returns nil when a constant is scoped to an undefined constant" do @@ -785,7 +785,7 @@ describe "The defined? keyword for a top-level scoped constant" do end it "returns nil when an undefined constant is scoped to a defined constant" do - defined?(::DefinedSpecs::Child::B).should be_nil + defined?(::DefinedSpecs::Child::Undefined).should be_nil end it "returns nil when the undefined constant is scoped to an undefined constant" do diff --git a/spec/ruby/language/fixtures/begin_file.rb b/spec/ruby/language/fixtures/begin_file.rb new file mode 100644 index 0000000000..cd3930b681 --- /dev/null +++ b/spec/ruby/language/fixtures/begin_file.rb @@ -0,0 +1,3 @@ +BEGIN { + puts __FILE__ +}
\ No newline at end of file diff --git a/spec/ruby/language/fixtures/break.rb b/spec/ruby/language/fixtures/break.rb index 50e7fcf5d9..2d07cc3d48 100644 --- a/spec/ruby/language/fixtures/break.rb +++ b/spec/ruby/language/fixtures/break.rb @@ -106,6 +106,34 @@ module BreakSpecs note :d end + def looped_break_in_captured_block + note :begin + looped_delegate_block do |i| + note :prebreak + break if i == 1 + note :postbreak + end + note :end + end + + def looped_delegate_block(&block) + note :preloop + 2.times do |i| + note :predele + yield_value(i, &block) + note :postdele + end + note :postloop + end + private :looped_delegate_block + + def yield_value(value) + note :preyield + yield value + note :postyield + end + private :yield_value + def method(v) yield v end diff --git a/spec/ruby/language/rescue_spec.rb b/spec/ruby/language/rescue_spec.rb index 281bb8fde8..d7042b7973 100644 --- a/spec/ruby/language/rescue_spec.rb +++ b/spec/ruby/language/rescue_spec.rb @@ -291,10 +291,20 @@ describe "The rescue keyword" do end.should == :expected end + ruby_version_is ""..."2.4" do + it "fails when using 'rescue' in method arguments" do + lambda { eval '1.+ (1 rescue 1)' }.should raise_error(SyntaxError) + end + end + ruby_version_is "2.4" do it "allows 'rescue' in method arguments" do two = eval '1.+ (raise("Error") rescue 1)' two.should == 2 end + + it "requires the 'rescue' in method arguments to be wrapped in parens" do + lambda { eval '1.+(1 rescue 1)' }.should raise_error(SyntaxError) + end end end diff --git a/spec/ruby/language/return_spec.rb b/spec/ruby/language/return_spec.rb index a203b79078..ba4bbfb5f3 100644 --- a/spec/ruby/language/return_spec.rb +++ b/spec/ruby/language/return_spec.rb @@ -409,6 +409,39 @@ describe "The return keyword" do end end + describe "within a class" do + ruby_version_is ""..."2.5" do + it "is allowed" do + File.write(@filename, <<-END_OF_CODE) + class A + ScratchPad << "before return" + return + + ScratchPad << "after return" + end + END_OF_CODE + + load @filename + ScratchPad.recorded.should == ["before return"] + end + end + + ruby_version_is "2.5" do + it "raises a SyntaxError" do + File.write(@filename, <<-END_OF_CODE) + class A + ScratchPad << "before return" + return + + ScratchPad << "after return" + end + END_OF_CODE + + -> { load @filename }.should raise_error(SyntaxError) + end + end + end + describe "file loading" do it "stops file loading and execution" do File.write(@filename, <<-END_OF_CODE) |