summaryrefslogtreecommitdiff
path: root/spec/ruby/language
diff options
authoreregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-01-20 20:38:57 +0000
committereregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-01-20 20:38:57 +0000
commit6204e0804b24f1675b49d5880da014411bcfb831 (patch)
treece6c00bf078fc416936ca3cdc972b9b3c1c78dae /spec/ruby/language
parent58573c33e4720315ed27491e31dcc22892e1ce95 (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.rb32
-rw-r--r--spec/ruby/language/if_spec.rb12
-rw-r--r--spec/ruby/language/range_spec.rb19
-rw-r--r--spec/ruby/language/safe_spec.rb56
-rw-r--r--spec/ruby/language/variables_spec.rb28
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