diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-20 20:38:57 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-20 20:38:57 +0000 |
commit | 6204e0804b24f1675b49d5880da014411bcfb831 (patch) | |
tree | ce6c00bf078fc416936ca3cdc972b9b3c1c78dae /spec/ruby/language | |
parent | 58573c33e4720315ed27491e31dcc22892e1ce95 (diff) |
Update to ruby/spec@35a9fba
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/ruby/language')
-rw-r--r-- | spec/ruby/language/constants_spec.rb | 32 | ||||
-rw-r--r-- | spec/ruby/language/if_spec.rb | 12 | ||||
-rw-r--r-- | spec/ruby/language/range_spec.rb | 19 | ||||
-rw-r--r-- | spec/ruby/language/safe_spec.rb | 56 | ||||
-rw-r--r-- | spec/ruby/language/variables_spec.rb | 28 |
5 files changed, 139 insertions, 8 deletions
diff --git a/spec/ruby/language/constants_spec.rb b/spec/ruby/language/constants_spec.rb index 5b111f4e81..354cc4b9a3 100644 --- a/spec/ruby/language/constants_spec.rb +++ b/spec/ruby/language/constants_spec.rb @@ -713,3 +713,35 @@ describe "Module#public_constant marked constants" do end end end + +describe 'Allowed characters' do + it 'allows not ASCII characters in the middle of a name' do + mod = Module.new + mod.const_set("BBἍBB", 1) + + eval("mod::BBἍBB").should == 1 + end + + it 'does not allow not ASCII characters that cannot be upcased or lowercased at the beginning' do + -> do + Module.new.const_set("થBB", 1) + end.should raise_error(NameError, /wrong constant name/) + end + + ruby_version_is ""..."2.6" do + it 'does not allow not ASCII upcased characters at the beginning' do + -> do + Module.new.const_set("ἍBB", 1) + end.should raise_error(NameError, /wrong constant name/) + end + end + + ruby_version_is "2.6" do + it 'allows not ASCII upcased characters at the beginning' do + mod = Module.new + mod.const_set("ἍBB", 1) + + eval("mod::ἍBB").should == 1 + end + end +end diff --git a/spec/ruby/language/if_spec.rb b/spec/ruby/language/if_spec.rb index fe207e77d5..bdb2d1e6ac 100644 --- a/spec/ruby/language/if_spec.rb +++ b/spec/ruby/language/if_spec.rb @@ -310,6 +310,18 @@ describe "The if expression" do 6.times(&b) ScratchPad.recorded.should == [4, 5, 4, 5] end + + ruby_version_is "2.6" do + it 'is deprecated' do + i = 4 + + -> do + eval "ScratchPad << 'it works' if (i == 4)..(i == 7)" + end.should complain(/flip-flop is deprecated/) + + ScratchPad.recorded.should == ['it works'] + end + end end end diff --git a/spec/ruby/language/range_spec.rb b/spec/ruby/language/range_spec.rb new file mode 100644 index 0000000000..c720c5b98e --- /dev/null +++ b/spec/ruby/language/range_spec.rb @@ -0,0 +1,19 @@ +require_relative '../spec_helper' +require_relative 'fixtures/classes' + +describe "Literal Ranges" do + it "creates range object" do + (1..10).should == Range.new(1, 10) + end + + it "creates range with excluded right boundary" do + (1...10).should == Range.new(1, 10, true) + end + + ruby_version_is "2.6" do + it "creates endless ranges" do + eval("(1..)").should == Range.new(1, nil) + eval("(1...)").should == Range.new(1, nil, true) + end + end +end diff --git a/spec/ruby/language/safe_spec.rb b/spec/ruby/language/safe_spec.rb index 305965c1a7..9b8350c892 100644 --- a/spec/ruby/language/safe_spec.rb +++ b/spec/ruby/language/safe_spec.rb @@ -41,20 +41,30 @@ describe "The $SAFE variable" do ruby_version_is ""..."2.6" do it "cannot be set to values below 0" do - lambda { - proc { - $SAFE = -100 - }.call - }.should raise_error(SecurityError, /tried to downgrade safe level from 0 to -100/) + lambda { + proc { + $SAFE = -100 + }.call + }.should raise_error(SecurityError, /tried to downgrade safe level from 0 to -100/) end end - it "cannot be set to values above 4" do + ruby_version_is "2.6" do + it "raises ArgumentError when set to values below 0" do lambda { proc { - $SAFE = 100 + $SAFE = -100 }.call - }.should raise_error(ArgumentError, /\$SAFE=2 to 4 are obsolete/) + }.should raise_error(ArgumentError, "$SAFE should be >= 0") + end + end + + it "cannot be set to values above 4" do + lambda { + proc { + $SAFE = 100 + }.call + }.should raise_error(ArgumentError, /\$SAFE=2 to 4 are obsolete/) end ruby_version_is ""..."2.6" do @@ -84,6 +94,36 @@ describe "The $SAFE variable" do end end + ruby_version_is "2.6" do + it "can be manually lowered" do + $SAFE = 1 + $SAFE = 0 + $SAFE.should == 0 + end + + it "is not Proc local" do + $SAFE.should == 0 + proc { + $SAFE = 1 + }.call + $SAFE.should == 1 + end + + it "is not lambda local" do + $SAFE.should == 0 + lambda { + $SAFE = 1 + }.call + $SAFE.should == 1 + end + + it "is global like regular global variables" do + Thread.new { $SAFE }.value.should == 0 + $SAFE = 1 + Thread.new { $SAFE }.value.should == 1 + end + end + it "can be read when default from Thread#safe_level" do Thread.current.safe_level.should == 0 end diff --git a/spec/ruby/language/variables_spec.rb b/spec/ruby/language/variables_spec.rb index 4c4599bec4..640c9e49ac 100644 --- a/spec/ruby/language/variables_spec.rb +++ b/spec/ruby/language/variables_spec.rb @@ -758,3 +758,31 @@ describe "A local variable assigned only within a conditional block" do end end end + +describe 'Local variable shadowing' do + ruby_version_is ""..."2.6" do + it "leads to warning in verbose mode" do + -> do + eval <<-CODE + a = [1, 2, 3] + a.each { |a| a = 3 } + CODE + end.should complain(/shadowing outer local variable/, verbose: true) + end + end + + ruby_version_is "2.6" do + it "does not warn in verbose mode" do + result = nil + + -> do + eval <<-CODE + a = [1, 2, 3] + result = a.map { |a| a = 3 } + CODE + end.should_not complain(verbose: true) + + result.should == [3, 3, 3] + end + end +end |