1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Drop support for ruby 2.4 from ruby/spec

This commit is contained in:
Nobuyoshi Nakada 2020-02-08 19:43:27 +09:00
parent 3a2073e61b
commit 826f44834f
Notes: git 2020-04-01 15:36:48 +09:00
145 changed files with 2343 additions and 3347 deletions

View file

@ -360,17 +360,17 @@ env:
-Wunused-variable'
- LDFLAGS=-Wno-unused-command-line-argument
- &rubyspec24
name: Check ruby/spec version guards on Ruby 2.4
- &rubyspec25
name: Check ruby/spec version guards on Ruby 2.5
language: ruby
rvm: 2.4.9
rvm: 2.5.7
before_install:
install:
before_script: chmod -R u+w spec/ruby
# -j randomly hangs.
script: ruby -C spec/ruby ../mspec/bin/mspec .
after_failure:
- echo "ruby/spec failed on Ruby 2.4. This is likely because of a missing ruby_version_is guard, please add it. See spec/README.md."
- echo "ruby/spec failed on Ruby 2.5. This is likely because of a missing ruby_version_is guard, please add it. See spec/README.md."
- &rubyspec27
name: Check ruby/spec version guards on Ruby 2.7
@ -435,7 +435,7 @@ matrix:
- <<: *pedanticism
- <<: *assertions
- <<: *baseruby
- <<: *rubyspec24
- <<: *rubyspec25
- <<: *rubyspec27
- <<: *dependency
# Build every commit (Allowed Failures):

View file

@ -38,7 +38,7 @@ specs in a manner compatible with multiple Ruby implementations.
## Requirements
MSpec requires Ruby 2.4 or more recent.
MSpec requires Ruby 2.5 or more recent.
## Bundler

View file

@ -39,8 +39,8 @@ class MSpecScript
end
def initialize
ruby_version_is ""..."2.4" do
abort "MSpec needs Ruby 2.4 or more recent"
ruby_version_is ""..."2.5" do
abort "MSpec needs Ruby 2.5 or more recent"
end
config[:formatter] = nil

View file

@ -1,20 +1,6 @@
require 'mspec/guards/version'
if RUBY_ENGINE == "ruby"
ruby_version_is "2.4"..."2.5" do
# Kernel#warn does not delegate to Warning.warn in 2.4
module Kernel
remove_method :warn
def warn(*messages)
return if $VERBOSE == nil or messages.empty?
msg = messages.join("\n")
msg += "\n" unless msg.end_with?("\n")
Warning.warn(msg)
end
private :warn
end
end
def Warning.warn(message)
# Suppress any warning inside the method to prevent recursion
verbose = $VERBOSE

View file

@ -1,7 +1,7 @@
inherit_from: .rubocop_todo.yml
AllCops:
TargetRubyVersion: 2.4
TargetRubyVersion: 2.5
DisplayCopNames: true
Exclude:
- command_line/fixtures/bad_syntax.rb

View file

@ -133,12 +133,12 @@ Here is a list of the most commonly-used guards:
#### Version guards
```ruby
ruby_version_is ""..."2.4" do
# Specs for RUBY_VERSION < 2.4
ruby_version_is ""..."2.6 do
# Specs for RUBY_VERSION < 2.6
end
ruby_version_is "2.4" do
# Specs for RUBY_VERSION >= 2.4
ruby_version_is "2.6 do
# Specs for RUBY_VERSION >= 2.6
end
```
@ -185,11 +185,11 @@ end
#### Combining guards
```ruby
guard -> { platform_is :windows and ruby_version_is ""..."2.5" } do
# Windows and RUBY_VERSION < 2.5
guard -> { platform_is :windows and ruby_version_is ""..."2.6" } do
# Windows and RUBY_VERSION < 2.6
end
guard_not -> { platform_is :windows and ruby_version_is ""..."2.5" } do
guard_not -> { platform_is :windows and ruby_version_is ""..."2.6" } do
# The opposite
end
```

View file

@ -27,8 +27,8 @@ ruby/spec is known to be tested in these implementations for every commit:
* [TruffleRuby](https://github.com/oracle/truffleruby/tree/master/spec/ruby)
* [Opal](https://github.com/opal/opal/tree/master/spec)
ruby/spec describes the behavior of Ruby 2.4 and more recent Ruby versions.
More precisely, every latest stable MRI release should [pass](https://travis-ci.org/ruby/spec) all specs of ruby/spec (2.4.x, 2.5.x, 2.6.x, 2.7.x, etc), and those are tested in TravisCI.
ruby/spec describes the behavior of Ruby 2.5 and more recent Ruby versions.
More precisely, every latest stable MRI release should [pass](https://travis-ci.org/ruby/spec) all specs of ruby/spec (2.5.x, 2.6.x, 2.7.x, etc), and those are tested in TravisCI.
The specs are synchronized both ways around once a month by @eregon between ruby/spec, MRI, JRuby and TruffleRuby.
Each of these repositories has a full copy of the specs under `spec/ruby` to ease editing specs.
@ -49,6 +49,8 @@ For older specs try these commits:
* Ruby 2.1.9 - [Suite](https://github.com/ruby/spec/commit/f029e65241374386077ac500add557ae65069b55) using [MSpec](https://github.com/ruby/mspec/commit/55568ea3918c6380e64db8c567d732fa5781efed)
* Ruby 2.2.10 - [Suite](https://github.com/ruby/spec/commit/cbaa0e412270c944df0c2532fc500c920dba0e92) using [MSpec](https://github.com/ruby/mspec/commit/d84d7668449e96856c5f6bac8cb1526b6d357ce3)
* Ruby 2.3.8 - [Suite](https://github.com/ruby/spec/commit/dc733114d8ae66a3368ba3a98422c50147a76ba5) using [MSpec](https://github.com/ruby/mspec/commit/4599bc195fb109f2a482a01c32a7d659518369ea)
* Ruby 2.4.10 - [Suite](https://github.com/ruby/spec/commit/f03892a0a9cac6972e0aa6f83cb08bb8e9b5739c) using [MSpec](https://github.com/ruby/mspec/commit/18fd75a7b4853d79d8148f6a503f99733be91712)
* Ruby 2.5.8 - [Suite](https://github.com/ruby/spec/commit/f03892a0a9cac6972e0aa6f83cb08bb8e9b5739c) using [MSpec](https://github.com/ruby/mspec/commit/18fd75a7b4853d79d8148f6a503f99733be91712)
### Running the specs

View file

@ -11,13 +11,11 @@ describe "The -l command line option" do
"false\nfalse\nfalse\n"
end
ruby_version_is "2.5" do
it "chomps last line based on $/" do
ruby_exe('BEGIN { $/ = "ones\n" }; puts $_', options: "-W0 -n -l", escape: true,
args: " < #{@names}").should ==
"alice j\nbob field\njames grey\n"
end
end
it "sets $\\ to the value of $/" do
ruby_exe("puts $\\ == $/", options: "-W0 -n -l", escape: true,

View file

@ -35,8 +35,6 @@ describe "Array#<<" do
end
end
ruby_version_is "2.5" do
describe "Array#append" do
describe "Array#append" do
it_behaves_like :array_push, :append
end
end

View file

@ -109,21 +109,11 @@ describe "Array#flatten" do
-> { [@obj].flatten }.should raise_error(TypeError)
end
ruby_version_is ""..."2.5" do
it "calls respond_to_missing?(:to_ary, false) to try coercing" do
def @obj.respond_to_missing?(*args) ScratchPad << args; false end
[@obj].flatten.should == [@obj]
ScratchPad.recorded.should == [[:to_ary, false]]
end
end
ruby_version_is "2.5" do
it "calls respond_to_missing?(:to_ary, true) to try coercing" do
def @obj.respond_to_missing?(*args) ScratchPad << args; false end
[@obj].flatten.should == [@obj]
ScratchPad.recorded.should == [[:to_ary, true]]
end
end
it "does not call #to_ary if not defined when #respond_to_missing? returns false" do
def @obj.respond_to_missing?(name, priv) ScratchPad << name; false end

View file

@ -2,8 +2,6 @@ require_relative '../../spec_helper'
require_relative 'fixtures/classes'
require_relative 'shared/unshift'
ruby_version_is "2.5" do
describe "Array#prepend" do
describe "Array#prepend" do
it_behaves_like :array_unshift, :prepend
end
end

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is "2.5" do
describe "Binding#irb" do
describe "Binding#irb" do
it "creates an IRB session with the binding in scope" do
irb_fixture = fixture __FILE__, "irb.rb"
irbrc_fixture = fixture __FILE__, "irbrc"
@ -14,5 +13,4 @@ ruby_version_is "2.5" do
out[-3..-1].should == ["a ** 2", "100", "exit"]
end
end
end

View file

@ -7,9 +7,7 @@ describe "Data" do
end
end
ruby_version_is "2.5" do
it "is deprecated" do
-> { Data }.should complain(/constant ::Data is deprecated/)
end
end
end

View file

@ -3,8 +3,7 @@
require_relative '../../spec_helper'
require_relative 'fixtures/common'
ruby_version_is "2.5" do
describe "Dir.children" do
describe "Dir.children" do
before :all do
DirSpecs.create_mock_dirs
end
@ -68,7 +67,6 @@ ruby_version_is "2.5" do
it "raises a SystemCallError if called with a nonexistent directory" do
-> { Dir.children DirSpecs.nonexistent }.should raise_error(SystemCallError)
end
end
end
ruby_version_is "2.6" do

View file

@ -1,8 +1,7 @@
require_relative '../../spec_helper'
require_relative 'fixtures/common'
ruby_version_is "2.5" do
describe "Dir.each_child" do
describe "Dir.each_child" do
before :all do
DirSpecs.create_mock_dirs
end
@ -49,7 +48,6 @@ ruby_version_is "2.5" do
end
end
end
end
end
ruby_version_is "2.6" do

View file

@ -291,7 +291,6 @@ describe :dir_glob, shared: true do
end
end
ruby_version_is "2.5" do
context ":base option passed" do
before :each do
@mock_dir = File.expand_path tmp('dir_glob_mock')
@ -361,7 +360,6 @@ describe :dir_glob, shared: true do
end
end
end
end
end
describe :dir_glob_recursive, shared: true do

View file

@ -26,15 +26,6 @@ describe "Enumerable#all?" do
-> { {}.all?(1, 2, 3) }.should raise_error(ArgumentError)
end
ruby_version_is ""..."2.5" do
it "raises an ArgumentError when any arguments provided" do
-> { @enum.all?(Proc.new {}) }.should raise_error(ArgumentError)
-> { @enum.all?(nil) }.should raise_error(ArgumentError)
-> { @empty.all?(1) }.should raise_error(ArgumentError)
-> { @enum1.all?(1) {} }.should raise_error(ArgumentError)
end
end
it "does not hide exceptions out of #each" do
-> {
EnumerableSpecs::ThrowingEach.new.all?
@ -133,7 +124,6 @@ describe "Enumerable#all?" do
end
end
ruby_version_is "2.5" do
describe 'when given a pattern argument' do
it "calls `===` on the pattern the return value " do
pattern = EnumerableSpecs::Pattern.new { |x| x >= 0 }
@ -197,5 +187,4 @@ describe "Enumerable#all?" do
pattern.yielded.should == [[[1, 2]], [[3, 4, 5]], [[6, 7, 8, 9]]]
end
end
end
end

View file

@ -26,15 +26,6 @@ describe "Enumerable#any?" do
-> { {}.any?(1, 2, 3) }.should raise_error(ArgumentError)
end
ruby_version_is ""..."2.5" do
it "raises an ArgumentError when any arguments provided" do
-> { @enum.any?(Proc.new {}) }.should raise_error(ArgumentError)
-> { @enum.any?(nil) }.should raise_error(ArgumentError)
-> { @empty.any?(1) }.should raise_error(ArgumentError)
-> { @enum1.any?(1) {} }.should raise_error(ArgumentError)
end
end
it "does not hide exceptions out of #each" do
-> {
EnumerableSpecs::ThrowingEach.new.any?
@ -147,7 +138,6 @@ describe "Enumerable#any?" do
end
end
ruby_version_is "2.5" do
describe 'when given a pattern argument' do
it "calls `===` on the pattern the return value " do
pattern = EnumerableSpecs::Pattern.new { |x| x == 2 }
@ -210,5 +200,4 @@ describe "Enumerable#any?" do
pattern.yielded.should == [[[1, 2]], [[3, 4, 5]], [[6, 7, 8, 9]]]
end
end
end
end

View file

@ -20,15 +20,6 @@ describe "Enumerable#none?" do
-> { {}.none?(1, 2, 3) }.should raise_error(ArgumentError)
end
ruby_version_is ""..."2.5" do
it "raises an ArgumentError when any arguments provided" do
-> { @enum.none?(Proc.new {}) }.should raise_error(ArgumentError)
-> { @enum.none?(nil) }.should raise_error(ArgumentError)
-> { @empty.none?(1) }.should raise_error(ArgumentError)
-> { @enum.none?(1) {} }.should raise_error(ArgumentError)
end
end
it "does not hide exceptions out of #each" do
-> {
EnumerableSpecs::ThrowingEach.new.none?
@ -102,7 +93,6 @@ describe "Enumerable#none?" do
end
end
ruby_version_is "2.5" do
describe 'when given a pattern argument' do
it "calls `===` on the pattern the return value " do
pattern = EnumerableSpecs::Pattern.new { |x| x == 3 }
@ -163,5 +153,4 @@ describe "Enumerable#none?" do
pattern.yielded.should == [[[1, 2]], [[3, 4, 5]], [[6, 7, 8, 9]]]
end
end
end
end

View file

@ -20,15 +20,6 @@ describe "Enumerable#one?" do
-> { {}.one?(1, 2, 3) }.should raise_error(ArgumentError)
end
ruby_version_is ""..."2.5" do
it "raises an ArgumentError when any arguments provided" do
-> { @enum.one?(Proc.new {}) }.should raise_error(ArgumentError)
-> { @enum.one?(nil) }.should raise_error(ArgumentError)
-> { @empty.one?(1) }.should raise_error(ArgumentError)
-> { @enum.one?(1) {} }.should raise_error(ArgumentError)
end
end
it "does not hide exceptions out of #each" do
-> {
EnumerableSpecs::ThrowingEach.new.one?
@ -93,7 +84,6 @@ describe "Enumerable#one?" do
end
ruby_version_is "2.5" do
describe 'when given a pattern argument' do
it "calls `===` on the pattern the return value " do
pattern = EnumerableSpecs::Pattern.new { |x| x == 1 }
@ -165,5 +155,4 @@ describe "Enumerable#one?" do
pattern.yielded.should == [[[1, 2]], [[3, 4, 5]], [[6, 7, 8, 9]]]
end
end
end
end

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is "2.5" do
describe "Exception#full_message" do
describe "Exception#full_message" do
it "returns formatted string of exception using the same format that is used to print an uncaught exceptions to stderr" do
e = RuntimeError.new("Some runtime error")
e.set_backtrace(["a.rb:1", "b.rb:2"])
@ -90,5 +89,4 @@ ruby_version_is "2.5" do
exception.full_message.should include "origin exception"
end
end
end
end

View file

@ -37,7 +37,9 @@ describe "Exception" do
FloatDomainError => nil,
},
RegexpError => nil,
RuntimeError => nil,
RuntimeError => {
FrozenError => nil,
},
SystemCallError => nil,
ThreadError => nil,
TypeError => nil,
@ -47,9 +49,7 @@ describe "Exception" do
SystemStackError => nil,
},
}
ruby_version_is "2.5" do
hierarchy[Exception][StandardError][RuntimeError] = {FrozenError => nil}
end
traverse = -> parent_class, parent_subclass_hash {
parent_subclass_hash.each do |child_class, child_subclass_hash|
child_class.class.should == Class

View file

@ -15,7 +15,7 @@ describe "File.atime" do
File.atime(@file).should be_kind_of(Time)
end
guard -> { platform_is :linux or (platform_is :windows and ruby_version_is '2.5') } do
guard -> { platform_is :linux or platform_is :windows } do
## NOTE also that some Linux systems disable atime (e.g. via mount params) for better filesystem speed.
it "returns the last access time for the named file with microseconds" do
supports_subseconds = Integer(`stat -c%x '#{__FILE__}'`[/\.(\d+)/, 1], 10)

View file

@ -14,7 +14,7 @@ describe "File.ctime" do
File.ctime(@file).should be_kind_of(Time)
end
guard -> { platform_is :linux or (platform_is :windows and ruby_version_is '2.5') } do
guard -> { platform_is :linux or platform_is :windows } do
it "returns the change time for the named file (the time at which directory information about the file was changed, not the file itself) with microseconds." do
supports_subseconds = Integer(`stat -c%z '#{__FILE__}'`[/\.(\d+)/, 1], 10)
if supports_subseconds != 0

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is "2.5" do
describe "File.lutime" do
describe "File.lutime" do
platform_is_not :windows do
before :each do
@atime = Time.utc(2000)
@ -36,5 +35,4 @@ ruby_version_is "2.5" do
file.mtime.should == original.mtime
end
end
end
end

View file

@ -15,7 +15,7 @@ describe "File.mtime" do
File.mtime(@filename).should be_close(@mtime, TIME_TOLERANCE)
end
guard -> { platform_is :linux or (platform_is :windows and ruby_version_is '2.5') } do
guard -> { platform_is :linux or platform_is :windows } do
it "returns the modification Time of the file with microseconds" do
supports_subseconds = Integer(`stat -c%y '#{__FILE__}'`[/\.(\d+)/, 1], 10)
if supports_subseconds != 0

View file

@ -623,13 +623,11 @@ describe "File.open" do
end
end
ruby_version_is "2.5" do
it "raises ArgumentError if mixing :newline and binary mode" do
-> {
File.open(@file, "rb", newline: :universal) {}
}.should raise_error(ArgumentError, "newline decorator with binary mode")
end
end
ruby_version_is "2.6" do
context "'x' flag" do

View file

@ -50,7 +50,6 @@ describe :file_path, shared: true do
@file.send(@method).encoding.should == Encoding.find("euc-jp")
end
ruby_version_is "2.5" do
platform_is :linux do
guard -> { defined?(File::TMPFILE) } do
before :each do
@ -73,5 +72,4 @@ describe :file_path, shared: true do
end
end
end
end
end

View file

@ -33,7 +33,6 @@ describe "Float#<=>" do
coercible.call_count.should == 3
end
ruby_version_is "2.5" do
it "raises TypeError when #coerce misbehaves" do
klass = Class.new do
def coerce(other)
@ -46,7 +45,6 @@ describe "Float#<=>" do
4.2 <=> bad_coercible
}.should raise_error(TypeError, "coerce must return [x, y]")
end
end
# The 4 tests below are taken from matz's revision 23730 for Ruby trunk
#

View file

@ -1,27 +1,6 @@
require_relative '../fixtures/classes'
describe :float_arithmetic_exception_in_coerce, shared: true do
ruby_version_is ""..."2.5" do
it "rescues exception (StandardError and subclasses) raised in other#coerce and raises TypeError" do
b = mock("numeric with failed #coerce")
b.should_receive(:coerce).and_raise(FloatSpecs::CoerceError)
# e.g. 1.0 > b
-> { 1.0.send(@method, b) }.should raise_error(TypeError, /MockObject can't be coerced into Float/)
end
it "does not rescue Exception and StandardError siblings raised in other#coerce" do
[Exception, NoMemoryError].each do |exception|
b = mock("numeric with failed #coerce")
b.should_receive(:coerce).and_raise(exception)
# e.g. 1.0 > b
-> { 1.0.send(@method, b) }.should raise_error(exception)
end
end
end
ruby_version_is "2.5" do
it "does not rescue exception raised in other#coerce" do
b = mock("numeric with failed #coerce")
b.should_receive(:coerce).and_raise(FloatSpecs::CoerceError)
@ -29,5 +8,4 @@ describe :float_arithmetic_exception_in_coerce, shared: true do
# e.g. 1.0 > b
-> { 1.0.send(@method, b) }.should raise_error(FloatSpecs::CoerceError)
end
end
end

View file

@ -1,29 +1,6 @@
require_relative '../fixtures/classes'
describe :float_comparison_exception_in_coerce, shared: true do
ruby_version_is ""..."2.5" do
it "rescues exception (StandardError and subclasses) raised in other#coerce and raises ArgumentError" do
b = mock("numeric with failed #coerce")
b.should_receive(:coerce).and_raise(FloatSpecs::CoerceError)
# e.g. 1.0 > b
-> {
-> { 1.0.send(@method, b) }.should raise_error(ArgumentError, /comparison of Float with MockObject failed/)
}.should complain(/Numerical comparison operators will no more rescue exceptions of #coerce/)
end
it "does not rescue Exception and StandardError siblings raised in other#coerce" do
[Exception, NoMemoryError].each do |exception|
b = mock("numeric with failed #coerce")
b.should_receive(:coerce).and_raise(exception)
# e.g. 1.0 > b
-> { 1.0.send(@method, b) }.should raise_error(exception)
end
end
end
ruby_version_is "2.5" do
it "does not rescue exception raised in other#coerce" do
b = mock("numeric with failed #coerce")
b.should_receive(:coerce).and_raise(FloatSpecs::CoerceError)
@ -31,5 +8,4 @@ describe :float_comparison_exception_in_coerce, shared: true do
# e.g. 1.0 > b
-> { 1.0.send(@method, b) }.should raise_error(FloatSpecs::CoerceError)
end
end
end

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is "2.5" do
describe "Hash#slice" do
describe "Hash#slice" do
before :each do
@hash = { a: 1, b: 2, c: 3 }
end
@ -51,5 +50,4 @@ ruby_version_is "2.5" do
ScratchPad.recorded.should == []
end
end
end

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is "2.5" do
describe "Hash#transform_keys" do
describe "Hash#transform_keys" do
before :each do
@hash = { a: 1, b: 2, c: 3 }
end
@ -43,9 +42,9 @@ ruby_version_is "2.5" do
r.keys.should == [:xfoo]
r.class.should == Hash
end
end
end
describe "Hash#transform_keys!" do
describe "Hash#transform_keys!" do
before :each do
@hash = { a: 1, b: 2, c: 3, d: 4 }
@initial_pairs = @hash.dup
@ -128,5 +127,4 @@ ruby_version_is "2.5" do
end
end
end
end
end

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is '2.5' do
describe "Integer#allbits?" do
describe "Integer#allbits?" do
it "returns true iff all the bits of the argument are set in the receiver" do
42.allbits?(42).should == true
0b1010_1010.allbits?(0b1000_0010).should == true
@ -35,5 +34,4 @@ ruby_version_is '2.5' do
-> { 13.allbits?("10") }.should raise_error(TypeError)
-> { 13.allbits?(:symbol) }.should raise_error(TypeError)
end
end
end

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is '2.5' do
describe "Integer#anybits?" do
describe "Integer#anybits?" do
it "returns true iff all the bits of the argument are set in the receiver" do
42.anybits?(42).should == true
0b1010_1010.anybits?(0b1000_0010).should == true
@ -34,5 +33,4 @@ ruby_version_is '2.5' do
-> { 13.anybits?("10") }.should raise_error(TypeError)
-> { 13.anybits?(:symbol) }.should raise_error(TypeError)
end
end
end

View file

@ -124,24 +124,12 @@ describe "Integer#<=>" do
@big <=> @num
end
ruby_version_is ""..."2.5" do
it "returns nil if #coerce raises an exception" do
@num.should_receive(:coerce).with(@big).and_raise(RuntimeError)
-> {
@result = (@big <=> @num)
}.should complain(/Numerical comparison operators will no more rescue exceptions/)
@result.should be_nil
end
end
ruby_version_is "2.5" do
it "lets the exception go through if #coerce raises an exception" do
@num.should_receive(:coerce).with(@big).and_raise(RuntimeError.new("my error"))
-> {
@big <=> @num
}.should raise_error(RuntimeError, "my error")
end
end
it "raises an exception if #coerce raises a non-StandardError exception" do
@num.should_receive(:coerce).with(@big).and_raise(Exception)

View file

@ -2,13 +2,7 @@ require_relative '../../spec_helper'
require_relative 'shared/arithmetic_coerce'
describe "Integer#/" do
ruby_version_is "2.4"..."2.5" do
it_behaves_like :integer_arithmetic_coerce_rescue, :/
end
ruby_version_is "2.5" do
it_behaves_like :integer_arithmetic_coerce_not_rescue, :/
end
context "fixnum" do
it "returns self divided by the given argument" do

View file

@ -2,13 +2,7 @@ require_relative '../../spec_helper'
require_relative 'shared/comparison_coerce'
describe "Integer#>" do
ruby_version_is "2.4"..."2.5" do
it_behaves_like :integer_comparison_coerce_rescue, :>
end
ruby_version_is "2.5" do
it_behaves_like :integer_comparison_coerce_not_rescue, :>
end
context "fixnum" do
it "returns true if self is greater than the given argument" do

View file

@ -2,13 +2,7 @@ require_relative '../../spec_helper'
require_relative 'shared/comparison_coerce'
describe "Integer#>=" do
ruby_version_is "2.4"..."2.5" do
it_behaves_like :integer_comparison_coerce_rescue, :>=
end
ruby_version_is "2.5" do
it_behaves_like :integer_comparison_coerce_not_rescue, :>=
end
context "fixnum" do
it "returns true if self is greater than or equal to the given argument" do

View file

@ -2,13 +2,7 @@ require_relative '../../spec_helper'
require_relative 'shared/comparison_coerce'
describe "Integer#<" do
ruby_version_is "2.4"..."2.5" do
it_behaves_like :integer_comparison_coerce_rescue, :<
end
ruby_version_is "2.5" do
it_behaves_like :integer_comparison_coerce_not_rescue, :<
end
context "fixnum" do
it "returns true if self is less than the given argument" do

View file

@ -2,13 +2,7 @@ require_relative '../../spec_helper'
require_relative 'shared/comparison_coerce'
describe "Integer#<=" do
ruby_version_is "2.4"..."2.5" do
it_behaves_like :integer_comparison_coerce_rescue, :<=
end
ruby_version_is "2.5" do
it_behaves_like :integer_comparison_coerce_not_rescue, :<=
end
context "fixnum" do
it "returns true if self is less than or equal to other" do

View file

@ -2,13 +2,7 @@ require_relative '../../spec_helper'
require_relative 'shared/arithmetic_coerce'
describe "Integer#-" do
ruby_version_is "2.4"..."2.5" do
it_behaves_like :integer_arithmetic_coerce_rescue, :-
end
ruby_version_is "2.5" do
it_behaves_like :integer_arithmetic_coerce_not_rescue, :-
end
context "fixnum" do
it "returns self minus the given Integer" do

View file

@ -2,13 +2,7 @@ require_relative '../../spec_helper'
require_relative 'shared/arithmetic_coerce'
describe "Integer#*" do
ruby_version_is "2.4"..."2.5" do
it_behaves_like :integer_arithmetic_coerce_rescue, :*
end
ruby_version_is "2.5" do
it_behaves_like :integer_arithmetic_coerce_not_rescue, :*
end
context "fixnum" do
it "returns self multiplied by the given Integer" do

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is '2.5' do
describe "Integer#nobits?" do
describe "Integer#nobits?" do
it "returns true iff all no bits of the argument are set in the receiver" do
42.nobits?(42).should == false
0b1010_1010.nobits?(0b1000_0010).should == false
@ -34,5 +33,4 @@ ruby_version_is '2.5' do
-> { 13.nobits?("10") }.should raise_error(TypeError)
-> { 13.nobits?(:symbol) }.should raise_error(TypeError)
end
end
end

View file

@ -2,13 +2,7 @@ require_relative '../../spec_helper'
require_relative 'shared/arithmetic_coerce'
describe "Integer#+" do
ruby_version_is "2.4"..."2.5" do
it_behaves_like :integer_arithmetic_coerce_rescue, :+
end
ruby_version_is "2.5" do
it_behaves_like :integer_arithmetic_coerce_not_rescue, :+
end
context "fixnum" do
it "returns self plus the given Integer" do

View file

@ -2,8 +2,7 @@ require_relative '../../spec_helper'
require_relative 'fixtures/classes'
require_relative 'shared/exponent'
ruby_version_is "2.5" do
describe "Integer#pow" do
describe "Integer#pow" do
context "one argument is passed" do
it_behaves_like :integer_exponent, :pow
end
@ -45,5 +44,4 @@ ruby_version_is "2.5" do
-> { 2.pow(5, 0) }.should raise_error(ZeroDivisionError)
end
end
end
end

View file

@ -6,14 +6,6 @@ describe "Integer#round" do
it_behaves_like :integer_to_i, :round
it_behaves_like :integer_rounding_positive_precision, :round
ruby_version_is ""..."2.5" do # Not just since 2.4
it "rounds itself as a float if passed a positive precision" do
[2, -4, 10**70, -10**100].each do |v|
v.round(42).should eql(v.to_f)
end
end
end
# redmine:5228
it "returns itself rounded if passed a negative value" do
+249.round(-2).should eql(+200)
@ -78,21 +70,11 @@ describe "Integer#round" do
(-25).round(-1, half: nil).should eql(-30)
end
ruby_version_is "2.4"..."2.5" do
it "returns itself as a float if passed a positive precision and the half option" do
35.round(1, half: :up).should eql(35.0)
35.round(1, half: :down).should eql(35.0)
35.round(1, half: :even).should eql(35.0)
end
end
ruby_version_is "2.5" do
it "returns itself if passed a positive precision and the half option" do
35.round(1, half: :up).should eql(35)
35.round(1, half: :down).should eql(35)
35.round(1, half: :even).should eql(35)
end
end
it "raises ArgumentError for an unknown rounding mode" do
-> { 42.round(-1, half: :foo) }.should raise_error(ArgumentError, /invalid rounding mode: foo/)

View file

@ -1,25 +1,5 @@
require_relative '../fixtures/classes'
describe :integer_arithmetic_coerce_rescue, shared: true do
it "rescues exception (StandardError and subclasses) raised in other#coerce and raises TypeError" do
b = mock("numeric with failed #coerce")
b.should_receive(:coerce).and_raise(IntegerSpecs::CoerceError)
# e.g. 1 + b
-> { 1.send(@method, b) }.should raise_error(TypeError, /MockObject can't be coerced into Integer/)
end
it "does not rescue Exception and StandardError siblings raised in other#coerce" do
[Exception, NoMemoryError].each do |exception|
b = mock("numeric with failed #coerce")
b.should_receive(:coerce).and_raise(exception)
# e.g. 1 + b
-> { 1.send(@method, b) }.should raise_error(exception)
end
end
end
describe :integer_arithmetic_coerce_not_rescue, shared: true do
it "does not rescue exception raised in other#coerce" do
b = mock("numeric with failed #coerce")

View file

@ -11,19 +11,9 @@ describe :integer_rounding_positive_precision, shared: true do
end
end
ruby_version_is "2.4"..."2.5" do
it "returns itself as a float if passed a positive precision" do
[2, -4, 10**70, -10**100].each do |v|
v.send(@method, 42).should eql(v.to_f)
end
end
end
ruby_version_is "2.5" do
it "returns itself if passed a positive precision" do
[2, -4, 10**70, -10**100].each do |v|
v.send(@method, 42).should eql(v)
end
end
end
end

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is "2.5" do
describe "Integer.sqrt" do
describe "Integer.sqrt" do
it "returns an integer" do
Integer.sqrt(10).should be_kind_of(Integer)
end
@ -29,5 +28,4 @@ ruby_version_is "2.5" do
it "raises a TypeError if the argument cannot be coerced to Integer" do
-> { Integer.sqrt("test") }.should raise_error(TypeError)
end
end
end

View file

@ -44,7 +44,6 @@ describe "IO#close" do
@io.close.should be_nil
end
ruby_version_is '2.5' do
it 'raises an IOError with a clear message' do
read_io, write_io = IO.pipe
going_to_read = false
@ -60,7 +59,6 @@ describe "IO#close" do
thread.join
write_io.close
end
end
end
describe "IO#close on an IO.popen stream" do

View file

@ -1,8 +1,7 @@
# -*- encoding: utf-8 -*-
require_relative '../../spec_helper'
ruby_version_is "2.5" do
platform_is_not :windows do
platform_is_not :windows do
describe "IO#pread" do
before :each do
@fname = tmp("io_pread.txt")
@ -48,5 +47,4 @@ ruby_version_is "2.5" do
-> { file.pread(1, 1) }.should raise_error(IOError)
end
end
end
end

View file

@ -1,8 +1,7 @@
# -*- encoding: utf-8 -*-
require_relative '../../spec_helper'
ruby_version_is "2.5" do
platform_is_not :windows do
platform_is_not :windows do
describe "IO#pwrite" do
before :each do
@fname = tmp("io_pwrite.txt")
@ -41,5 +40,4 @@ ruby_version_is "2.5" do
-> { file.pwrite("foo", 1) }.should raise_error(IOError)
end
end
end
end

View file

@ -126,7 +126,6 @@ end
describe "IO#write" do
it_behaves_like :io_write, :write
ruby_version_is "2.5" do
it "accepts multiple arguments" do
IO.pipe do |r, w|
w.write("foo", "bar")
@ -135,7 +134,6 @@ describe "IO#write" do
r.read.should == "foobar"
end
end
end
end
platform_is :windows do

View file

@ -51,7 +51,6 @@ describe "Kernel#freeze" do
end
end
ruby_version_is "2.5" do
describe "on a Complex" do
it "has no effect since it is already frozen" do
c = Complex(1.3, 3.1)
@ -67,7 +66,6 @@ describe "Kernel#freeze" do
r.freeze
end
end
end
it "causes mutative calls to raise RuntimeError" do
o = Class.new do

View file

@ -50,7 +50,6 @@ describe "Kernel#frozen?" do
end
end
ruby_version_is "2.5" do
describe "on a Complex" do
it "returns true" do
c = Complex(1.3, 3.1)
@ -74,5 +73,4 @@ describe "Kernel#frozen?" do
r.frozen?.should be_true
end
end
end
end

View file

@ -1,11 +1,9 @@
require_relative '../../spec_helper'
ruby_version_is "2.5" do
describe "Kernel#pp" do
describe "Kernel#pp" do
it "lazily loads the 'pp' library and delegates the call to that library" do
# Run in child process to ensure 'pp' hasn't been loaded yet.
output = ruby_exe("pp [1, 2, 3]")
output.should == "[1, 2, 3]\n"
end
end
end

View file

@ -103,19 +103,6 @@ describe :kernel_dup_clone, shared: true do
:my_symbol.send(@method).should == :my_symbol
end
ruby_version_is ''...'2.5' do
it "raises a TypeError for Complex" do
c = Complex(1.3, 3.1)
-> { c.send(@method) }.should raise_error(TypeError)
end
it "raises a TypeError for Rational" do
r = Rational(1, 3)
-> { r.send(@method) }.should raise_error(TypeError)
end
end
ruby_version_is '2.5' do
it "returns self for Complex" do
c = Complex(1.3, 3.1)
c.send(@method).should equal c
@ -125,5 +112,4 @@ describe :kernel_dup_clone, shared: true do
r = Rational(1, 3)
r.send(@method).should equal r
end
end
end

View file

@ -354,18 +354,6 @@ describe :kernel_require, shared: true do
rm_r @dir, @symlink_to_dir
end
ruby_version_is ""..."2.4.4" do
it "canonicalizes neither the entry in $LOAD_PATH nor the filename passed to #require" do
$LOAD_PATH.unshift(@symlink_to_dir)
@object.require("symfile").should be_true
loaded_feature = "#{@symlink_to_dir}/symfile.rb"
ScratchPad.recorded.should == [loaded_feature]
$".last.should == loaded_feature
$LOAD_PATH[0].should == @symlink_to_dir
end
end
ruby_version_is "2.4.4" do
it "canonicalizes the entry in $LOAD_PATH but not the filename passed to #require" do
$LOAD_PATH.unshift(@symlink_to_dir)
@object.require("symfile").should be_true
@ -376,7 +364,6 @@ describe :kernel_require, shared: true do
end
end
end
end
it "does not store the path if the load fails" do
$LOAD_PATH << CODE_LOADING_DIR
@ -527,21 +514,6 @@ describe :kernel_require, shared: true do
ScratchPad.recorded.should == []
end
ruby_version_is ""..."2.5" do
it "complex, enumerator, rational, thread and unicode_normalize are already required" do
provided = %w[complex enumerator rational thread unicode_normalize]
features = ruby_exe("puts $LOADED_FEATURES", options: '--disable-gems')
provided.each { |feature|
features.should =~ /\b#{feature}\.(rb|so|jar)$/
}
code = provided.map { |f| "puts require #{f.inspect}\n" }.join
required = ruby_exe(code, options: '--disable-gems')
required.should == "false\n" * provided.size
end
end
ruby_version_is "2.5" do
it "complex, enumerator, rational and thread are already required" do
provided = %w[complex enumerator rational thread]
features = ruby_exe("puts $LOADED_FEATURES", options: '--disable-gems')
@ -563,7 +535,6 @@ describe :kernel_require, shared: true do
-> { @object.require("unicode_normalize") }.should raise_error(LoadError)
end
end
end
describe "(shell expansion)" do
before :each do

View file

@ -345,19 +345,11 @@ describe :kernel_sprintf, shared: true do
end
describe "%" do
ruby_version_is ""..."2.5" do
it "alone displays the percent sign" do
@method.call("%").should == "%"
end
end
ruby_version_is "2.5" do
it "alone raises an ArgumentError" do
-> {
@method.call("%")
}.should raise_error(ArgumentError)
end
end
it "is escaped by %" do
@method.call("%%").should == "%"
@ -876,7 +868,6 @@ describe :kernel_sprintf, shared: true do
}.should raise_error(KeyError)
end
ruby_version_is "2.5" do
it "sets the Hash as the receiver of KeyError" do
-> {
@method.call("%<foo>s", @object)
@ -893,5 +884,4 @@ describe :kernel_sprintf, shared: true do
}
end
end
end
end

View file

@ -87,7 +87,6 @@ describe "Kernel#warn" do
}.should output(nil, "to_s called\n")
end
ruby_version_is "2.5" do
describe ":uplevel keyword argument" do
before :each do
$VERBOSE = true
@ -153,5 +152,4 @@ describe "Kernel#warn" do
-> { warn(**h) }.should_not complain(verbose: true)
-> { warn('foo', **h) }.should complain("foo\n")
end
end
end

View file

@ -1,8 +1,6 @@
require_relative '../../spec_helper'
require_relative 'shared/then'
ruby_version_is "2.5" do
describe "Kernel#yield_self" do
describe "Kernel#yield_self" do
it_behaves_like :kernel_then, :yield_self
end
end

View file

@ -2,8 +2,6 @@ require_relative '../../spec_helper'
require_relative 'fixtures/classes'
require_relative 'shared/call'
ruby_version_is "2.5" do
describe "Method#===" do
describe "Method#===" do
it_behaves_like :method_call, :===
end
end

View file

@ -81,16 +81,9 @@ describe "Module#alias_method" do
-> { @class.make_alias mock('x'), :public_one }.should raise_error(TypeError)
end
ruby_version_is ''...'2.5' do
it "is a private method" do
-> { @class.alias_method :ichi, :public_one }.should raise_error(NoMethodError)
end
end
ruby_version_is '2.5' do
it "is a public method" do
Module.should have_public_instance_method(:alias_method, false)
end
end
it "returns self" do
@class.send(:alias_method, :checking_return_value, :public_one).should equal(@class)

View file

@ -63,16 +63,9 @@ describe "Module#attr_accessor" do
-> { c.new.foo=1 }.should raise_error(NoMethodError)
end
ruby_version_is ''...'2.5' do
it "is a private method" do
Module.should have_private_instance_method(:attr_accessor, false)
end
end
ruby_version_is '2.5' do
it "is a public method" do
Module.should have_public_instance_method(:attr_accessor, false)
end
end
describe "on immediates" do
before :each do

View file

@ -58,14 +58,7 @@ describe "Module#attr_reader" do
-> { c.new.foo }.should raise_error(NoMethodError)
end
ruby_version_is ''...'2.5' do
it "is a private method" do
Module.should have_private_instance_method(:attr_reader, false)
end
end
ruby_version_is '2.5' do
it "is a public method" do
Module.should have_public_instance_method(:attr_reader, false)
end
end
end

View file

@ -142,14 +142,7 @@ describe "Module#attr" do
}.should complain(/boolean argument is obsoleted/, verbose: true)
end
ruby_version_is ''...'2.5' do
it "is a private method" do
Module.should have_private_instance_method(:attr, false)
end
end
ruby_version_is '2.5' do
it "is a public method" do
Module.should have_public_instance_method(:attr, false)
end
end
end

View file

@ -58,14 +58,7 @@ describe "Module#attr_writer" do
-> { c.new.foo=1 }.should raise_error(NoMethodError)
end
ruby_version_is ''...'2.5' do
it "is a private method" do
Module.should have_private_instance_method(:attr_writer, false)
end
end
ruby_version_is '2.5' do
it "is a public method" do
Module.should have_public_instance_method(:attr_writer, false)
end
end
end

View file

@ -355,16 +355,9 @@ describe "Module#define_method" do
klass.new.string_test.should == "string_test result"
end
ruby_version_is ''...'2.5' do
it "is a private method" do
Module.should have_private_instance_method(:define_method)
end
end
ruby_version_is '2.5' do
it "is a public method" do
Module.should have_public_instance_method(:define_method)
end
end
it "returns its symbol" do
class DefineMethodSpecClass

View file

@ -393,27 +393,6 @@ describe "Module#refine" do
end
end
ruby_version_is "" ... "2.5" do
it "is not honored by string interpolation" do
refinement = Module.new do
refine Integer do
def to_s
"foo"
end
end
end
result = nil
Module.new do
using refinement
result = "#{1}"
end
result.should == "1"
end
end
ruby_version_is "2.5" do
it "is honored by string interpolation" do
refinement = Module.new do
refine Integer do
@ -431,7 +410,6 @@ describe "Module#refine" do
result.should == "foo"
end
end
it "is honored by Kernel#binding" do
refinement = Module.new do

View file

@ -20,16 +20,9 @@ describe "Module#remove_method" do
@module = Module.new { def method_to_remove; end }
end
ruby_version_is ''...'2.5' do
it "is a private method" do
Module.should have_private_instance_method(:remove_method, false)
end
end
ruby_version_is '2.5' do
it "is a public method" do
Module.should have_public_instance_method(:remove_method, false)
end
end
it "removes the method from a class" do
klass = Class.new do

View file

@ -18,16 +18,9 @@ describe "Module#undef_method" do
@module = Module.new { def method_to_undef; end }
end
ruby_version_is ''...'2.5' do
it "is a private method" do
Module.should have_private_instance_method(:undef_method, false)
end
end
ruby_version_is '2.5' do
it "is a public method" do
Module.should have_public_instance_method(:undef_method, false)
end
end
it "requires multiple arguments" do
Module.instance_method(:undef_method).arity.should < 0

View file

@ -224,33 +224,25 @@ describe :numeric_step, :shared => true do
end
describe "when step is a String" do
error = nil
ruby_version_is "2.4"..."2.5" do
error = TypeError
end
ruby_version_is "2.5" do
error = ArgumentError
end
describe "with self and stop as Fixnums" do
it "raises an #{error} when step is a numeric representation" do
-> { @step.call(1, 5, "1") {} }.should raise_error(error)
-> { @step.call(1, 5, "0.1") {} }.should raise_error(error)
-> { @step.call(1, 5, "1/3") {} }.should raise_error(error)
it "raises an ArgumentError when step is a numeric representation" do
-> { @step.call(1, 5, "1") {} }.should raise_error(ArgumentError)
-> { @step.call(1, 5, "0.1") {} }.should raise_error(ArgumentError)
-> { @step.call(1, 5, "1/3") {} }.should raise_error(ArgumentError)
end
it "raises an #{error} with step as an alphanumeric string" do
-> { @step.call(1, 5, "foo") {} }.should raise_error(error)
it "raises an ArgumentError with step as an alphanumeric string" do
-> { @step.call(1, 5, "foo") {} }.should raise_error(ArgumentError)
end
end
describe "with self and stop as Floats" do
it "raises an #{error} when step is a numeric representation" do
-> { @step.call(1.1, 5.1, "1") {} }.should raise_error(error)
-> { @step.call(1.1, 5.1, "0.1") {} }.should raise_error(error)
-> { @step.call(1.1, 5.1, "1/3") {} }.should raise_error(error)
it "raises an ArgumentError when step is a numeric representation" do
-> { @step.call(1.1, 5.1, "1") {} }.should raise_error(ArgumentError)
-> { @step.call(1.1, 5.1, "0.1") {} }.should raise_error(ArgumentError)
-> { @step.call(1.1, 5.1, "1/3") {} }.should raise_error(ArgumentError)
end
it "raises an #{error} with step as an alphanumeric string" do
-> { @step.call(1.1, 5.1, "foo") {} }.should raise_error(error)
it "raises an ArgumentError with step as an alphanumeric string" do
-> { @step.call(1.1, 5.1, "foo") {} }.should raise_error(ArgumentError)
end
end
end
@ -302,33 +294,25 @@ describe :numeric_step, :shared => true do
describe "returned Enumerator" do
describe "size" do
describe "when step is a String" do
error = nil
ruby_version_is "2.4"..."2.5" do
error = TypeError
end
ruby_version_is "2.5" do
error = ArgumentError
end
describe "with self and stop as Fixnums" do
it "raises an #{error} when step is a numeric representation" do
-> { @step.call(1, 5, "1").size }.should raise_error(error)
-> { @step.call(1, 5, "0.1").size }.should raise_error(error)
-> { @step.call(1, 5, "1/3").size }.should raise_error(error)
it "raises an ArgumentError when step is a numeric representation" do
-> { @step.call(1, 5, "1").size }.should raise_error(ArgumentError)
-> { @step.call(1, 5, "0.1").size }.should raise_error(ArgumentError)
-> { @step.call(1, 5, "1/3").size }.should raise_error(ArgumentError)
end
it "raises an #{error} with step as an alphanumeric string" do
-> { @step.call(1, 5, "foo").size }.should raise_error(error)
it "raises an ArgumentError with step as an alphanumeric string" do
-> { @step.call(1, 5, "foo").size }.should raise_error(ArgumentError)
end
end
describe "with self and stop as Floats" do
it "raises an #{error} when step is a numeric representation" do
-> { @step.call(1.1, 5.1, "1").size }.should raise_error(error)
-> { @step.call(1.1, 5.1, "0.1").size }.should raise_error(error)
-> { @step.call(1.1, 5.1, "1/3").size }.should raise_error(error)
it "raises an ArgumentError when step is a numeric representation" do
-> { @step.call(1.1, 5.1, "1").size }.should raise_error(ArgumentError)
-> { @step.call(1.1, 5.1, "0.1").size }.should raise_error(ArgumentError)
-> { @step.call(1.1, 5.1, "1/3").size }.should raise_error(ArgumentError)
end
it "raises an #{error} with step as an alphanumeric string" do
-> { @step.call(1.1, 5.1, "foo").size }.should raise_error(error)
it "raises an ArgumentError with step as an alphanumeric string" do
-> { @step.call(1.1, 5.1, "foo").size }.should raise_error(ArgumentError)
end
end
end

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is '2.5' do
describe 'Process#last_status' do
describe 'Process#last_status' do
it 'returns the status of the last executed child process in the current thread' do
pid = Process.wait Process.spawn("exit 0")
Process.last_status.pid.should == pid
@ -16,5 +15,4 @@ ruby_version_is '2.5' do
it 'raises an ArgumentError if any arguments are provided' do
-> { Process.last_status(1) }.should raise_error(ArgumentError)
end
end
end

View file

@ -13,7 +13,6 @@ describe "Process.times" do
Process.times.utime.should > user
end
ruby_version_is "2.5" do
platform_is_not :windows do
it "uses getrusage when available to improve precision beyond milliseconds" do
max = 10_000
@ -33,5 +32,4 @@ describe "Process.times" do
found.should_not == nil
end
end
end
end

View file

@ -1,9 +1,6 @@
# -*- encoding: binary -*-
require_relative '../../spec_helper'
require_relative 'shared/urandom'
ruby_version_is "2.5" do
describe "Random.urandom" do
describe "Random.urandom" do
it_behaves_like :random_urandom, :urandom
end
end

View file

@ -1,9 +0,0 @@
# -*- encoding: binary -*-
require_relative '../../spec_helper'
require_relative 'shared/urandom'
ruby_version_is ""..."2.5" do
describe "Random.raw_seed" do
it_behaves_like :random_urandom, :raw_seed
end
end

View file

@ -33,7 +33,6 @@ describe "Range.new" do
-> { Range.new(a, b) }.should raise_error(ArgumentError)
end
ruby_version_is "2.5" do
it "does not rescue exception raised in #<=> when compares the given start and end" do
b = mock('a')
a = mock('b')
@ -41,7 +40,6 @@ describe "Range.new" do
-> { Range.new(a, b) }.should raise_error(RangeSpecs::ComparisonError)
end
end
describe "beginless/endless range" do
ruby_version_is ""..."2.7" do

View file

@ -25,17 +25,9 @@ describe "String#casecmp independent of case" do
"abc".casecmp(other).should == 0
end
ruby_version_is ""..."2.5" do
it "raises a TypeError if other can't be converted to a string" do
-> { "abc".casecmp(mock('abc')) }.should raise_error(TypeError)
end
end
ruby_version_is "2.5" do
it "returns nil if other can't be converted to a string" do
"abc".casecmp(mock('abc')).should be_nil
end
end
it "returns nil if incompatible encodings" do
"あれ".casecmp("".encode(Encoding::EUC_JP)).should be_nil
@ -196,15 +188,7 @@ describe 'String#casecmp? independent of case' do
"ß".casecmp?("ss").should be_true
end
ruby_version_is "2.4"..."2.5" do
it "raises a TypeError if other can't be converted to a string" do
-> { "abc".casecmp?(mock('abc')) }.should raise_error(TypeError)
end
end
ruby_version_is "2.5" do
it "returns nil if other can't be converted to a string" do
"abc".casecmp?(mock('abc')).should be_nil
end
end
end

View file

@ -2,8 +2,7 @@
require_relative '../../spec_helper'
require_relative 'fixtures/classes'
ruby_version_is '2.5' do
describe "String#delete_prefix" do
describe "String#delete_prefix" do
it "returns a copy of the string, with the given prefix removed" do
'hello'.delete_prefix('hell').should == 'o'
'hello'.delete_prefix('hello').should == ''
@ -46,9 +45,9 @@ ruby_version_is '2.5' do
s = StringSpecs::MyString.new('hello')
s.delete_prefix('hell').should be_an_instance_of(StringSpecs::MyString)
end
end
end
describe "String#delete_prefix!" do
describe "String#delete_prefix!" do
it "removes the found prefix" do
s = 'hello'
s.delete_prefix!('hell').should equal(s)
@ -79,5 +78,4 @@ ruby_version_is '2.5' do
-> { 'hello'.freeze.delete_prefix!('') }.should raise_error(FrozenError)
-> { ''.freeze.delete_prefix!('') }.should raise_error(FrozenError)
end
end
end

View file

@ -2,8 +2,7 @@
require_relative '../../spec_helper'
require_relative 'fixtures/classes'
ruby_version_is '2.5' do
describe "String#delete_suffix" do
describe "String#delete_suffix" do
it "returns a copy of the string, with the given suffix removed" do
'hello'.delete_suffix('ello').should == 'h'
'hello'.delete_suffix('hello').should == ''
@ -46,9 +45,9 @@ ruby_version_is '2.5' do
s = StringSpecs::MyString.new('hello')
s.delete_suffix('ello').should be_an_instance_of(StringSpecs::MyString)
end
end
end
describe "String#delete_suffix!" do
describe "String#delete_suffix!" do
it "removes the found prefix" do
s = 'hello'
s.delete_suffix!('ello').should equal(s)
@ -79,5 +78,4 @@ ruby_version_is '2.5' do
-> { 'hello'.freeze.delete_suffix!('') }.should raise_error(FrozenError)
-> { ''.freeze.delete_suffix!('') }.should raise_error(FrozenError)
end
end
end

View file

@ -2,10 +2,8 @@ require_relative 'shared/chars'
require_relative 'shared/grapheme_clusters'
require_relative 'shared/each_char_without_block'
ruby_version_is "2.5" do
describe "String#each_grapheme_cluster" do
describe "String#each_grapheme_cluster" do
it_behaves_like :string_chars, :each_grapheme_cluster
it_behaves_like :string_grapheme_clusters, :each_grapheme_cluster
it_behaves_like :string_each_char_without_block, :each_grapheme_cluster
end
end

View file

@ -1,8 +1,7 @@
require_relative 'shared/chars'
require_relative 'shared/grapheme_clusters'
ruby_version_is "2.5" do
describe "String#grapheme_clusters" do
describe "String#grapheme_clusters" do
it_behaves_like :string_chars, :grapheme_clusters
it_behaves_like :string_grapheme_clusters, :grapheme_clusters
@ -11,5 +10,4 @@ ruby_version_is "2.5" do
string.grapheme_clusters.should == ['a', 'b', "\u{1f3f3}\u{fe0f}\u{200d}\u{1f308}", "\u{1F43E}"]
end
end
end

View file

@ -50,19 +50,10 @@ describe "String#%" do
end
end
ruby_version_is ""..."2.5" do
it "formats single % character at the end as literal %" do
("%" % []).should == "%"
("foo%" % []).should == "foo%"
end
end
ruby_version_is "2.5" do
it "raises an error if single % appears at the end" do
-> { ("%" % []) }.should raise_error(ArgumentError)
-> { ("foo%" % [])}.should raise_error(ArgumentError)
end
end
it "formats single % character before a newline as literal %" do
("%\n" % []).should == "%\n"

View file

@ -54,19 +54,6 @@ describe :string_each_line, shared: true do
a.should == ["one\ntwo\r\nthree"]
end
ruby_version_is ''...'2.5' do
it "yields paragraphs (broken by 2 or more successive newlines) when passed ''" do
a = []
"hello\nworld\n\n\nand\nuniverse\n\n\n\n\n".send(@method, '') { |s| a << s }
a.should == ["hello\nworld\n\n\n", "and\nuniverse\n\n\n\n\n"]
a = []
"hello\nworld\n\n\nand\nuniverse\n\n\n\n\ndog".send(@method, '') { |s| a << s }
a.should == ["hello\nworld\n\n\n", "and\nuniverse\n\n\n\n\n", "dog"]
end
end
ruby_version_is '2.5' do
it "yields paragraphs (broken by 2 or more successive newlines) when passed '' and replaces multiple newlines with only two ones" do
a = []
"hello\nworld\n\n\nand\nuniverse\n\n\n\n\n".send(@method, '') { |s| a << s }
@ -76,7 +63,6 @@ describe :string_each_line, shared: true do
"hello\nworld\n\n\nand\nuniverse\n\n\n\n\ndog".send(@method, '') { |s| a << s }
a.should == ["hello\nworld\n\n", "and\nuniverse\n\n", "dog"]
end
end
describe "uses $/" do
before :each do

View file

@ -43,7 +43,6 @@ describe "String#start_with?" do
"céréale".should.start_with?("cér")
end
ruby_version_is "2.5" do
it "supports regexps" do
regexp = /[h1]/
"hello".should.start_with?(regexp)
@ -72,5 +71,4 @@ describe "String#start_with?" do
Regexp.last_match.should be_nil
$1.should be_nil
end
end
end

View file

@ -18,7 +18,6 @@ describe 'String#-@' do
output.should == 'foo'
end
ruby_version_is "2.5" do
it "returns the same object for equal unfrozen strings" do
origin = "this is a string"
dynamic = %w(this is a string).join(' ')
@ -31,9 +30,8 @@ describe 'String#-@' do
(-"unfrozen string").should equal(-"unfrozen string")
(-"unfrozen string").should_not equal(-"another unfrozen string")
end
end
ruby_version_is "2.5"..."2.6" do
ruby_version_is ""..."2.6" do
it "does not deduplicate already frozen strings" do
dynamic = %w(this string is frozen).join(' ').freeze

View file

@ -2,8 +2,7 @@
require_relative '../../spec_helper'
require_relative 'fixtures/classes'
ruby_version_is '2.5' do
describe "String#undump" do
describe "String#undump" do
ruby_version_is ''...'2.7' do
it "taints the result if self is tainted" do
'"foo"'.taint.undump.tainted?.should == true
@ -449,5 +448,4 @@ ruby_version_is '2.5' do
-> { '" "" "'.undump }.should raise_error(RuntimeError, /invalid dumped string/)
end
end
end
end

View file

@ -25,7 +25,6 @@ describe "Struct#hash" do
s1.hash.should_not == s2.hash
end
ruby_version_is "2.5" do
it "returns different hashes for structs with different values when using keyword_init: true" do
key = :"1 non symbol member"
struct_class = Struct.new(key, keyword_init: true)
@ -33,7 +32,6 @@ describe "Struct#hash" do
t2 = struct_class.new(key => 2)
t1.hash.should_not == t2.hash
end
end
it "allows for overriding methods in an included module" do
mod = Module.new do

View file

@ -62,17 +62,9 @@ describe "Struct.new" do
-> { Struct.new(:animal, ['chris', 'evan']) }.should raise_error(TypeError)
end
ruby_version_is ""..."2.5" do
it "raises a TypeError if an argument is a Hash" do
-> { Struct.new(:animal, { name: 'chris' }) }.should raise_error(TypeError)
end
end
ruby_version_is "2.5" do
it "raises a ArgumentError if passed a Hash with an unknown key" do
-> { Struct.new(:animal, { name: 'chris' }) }.should raise_error(ArgumentError)
end
end
it "raises ArgumentError when there is a duplicate member" do
-> { Struct.new(:foo, :foo) }.should raise_error(ArgumentError, "duplicate member: foo")
@ -147,7 +139,6 @@ describe "Struct.new" do
end
end
ruby_version_is "2.5" do
context "keyword_init: true option" do
before :all do
@struct_with_kwa = Struct.new(:name, :legs, keyword_init: true)
@ -213,5 +204,4 @@ describe "Struct.new" do
obj.legs.should == 4
end
end
end
end

View file

@ -1,7 +1,6 @@
require_relative '../../spec_helper'
ruby_version_is '2.5' do
describe 'Thread#fetch' do
describe 'Thread#fetch' do
describe 'with 2 arguments' do
it 'returns the value of the fiber-local variable if value has been assigned' do
th = Thread.new { Thread.current[:cat] = 'meow' }
@ -34,5 +33,4 @@ ruby_version_is '2.5' do
-> { Thread.current.fetch() }.should raise_error(ArgumentError)
-> { Thread.current.fetch(1, 2, 3) }.should raise_error(ArgumentError)
end
end
end

View file

@ -1,17 +1,9 @@
require_relative '../../spec_helper'
describe "Thread.report_on_exception" do
ruby_version_is "2.4"..."2.5" do
it "defaults to false" do
ruby_exe("p Thread.report_on_exception").should == "false\n"
end
end
ruby_version_is "2.5" do
it "defaults to true" do
ruby_exe("p Thread.report_on_exception").should == "true\n"
end
end
end
describe "Thread.report_on_exception=" do
@ -33,7 +25,6 @@ describe "Thread.report_on_exception=" do
end
describe "Thread#report_on_exception" do
ruby_version_is "2.5" do
it "returns true for the main Thread" do
Thread.current.report_on_exception.should == true
end
@ -41,7 +32,6 @@ describe "Thread#report_on_exception" do
it "returns true for new Threads" do
Thread.new { Thread.current.report_on_exception }.value.should == true
end
end
it "returns whether the Thread will print a backtrace if it exits with an exception" do
t = Thread.new { Thread.current.report_on_exception = true }

View file

@ -1,8 +1,6 @@
require_relative '../../spec_helper'
require_relative 'shared/to_s'
ruby_version_is "2.5" do
describe "Thread#to_s" do
describe "Thread#to_s" do
it_behaves_like :thread_to_s, :to_s
end
end

View file

@ -144,7 +144,6 @@ describe "Time.at" do
end
end
ruby_version_is "2.5" do
describe "passed [Time, Numeric, format]" do
context ":nanosecond format" do
it "treats second argument as nanoseconds" do
@ -198,7 +197,6 @@ describe "Time.at" do
Time.at(0, 123.500, :millisecond).nsec.should == 123500000
end
end
end
ruby_version_is "2.6" do
describe ":in keyword argument" do

View file

@ -18,7 +18,6 @@ describe :time_now, shared: true do
end
end
guard_not -> { platform_is :windows and ruby_version_is ""..."2.5" } do
it "has at least microsecond precision" do
times = []
10_000.times do
@ -31,5 +30,4 @@ describe :time_now, shared: true do
expected = 1_000
times.select { |t| t % (expected * 10) == 0 }.size.should_not == times.size
end
end
end

View file

@ -55,11 +55,9 @@ describe 'TracePoint.new' do
-> { TracePoint.new(o) {}}.should raise_error(TypeError)
end
ruby_version_is "2.5" do
it 'expects to be called with a block' do
-> { TracePoint.new(:line) }.should raise_error(ArgumentError, "must be called with a block")
end
end
it "raises a Argument error when the given argument doesn't match an event name" do
-> { TracePoint.new(:test) }.should raise_error(ArgumentError, "unknown event: test")

View file

@ -51,7 +51,6 @@ describe "Warning.warn" do
end
end
ruby_version_is "2.5" do
it "is called by Kernel.warn" do
Warning.should_receive(:warn).with("Chunky bacon!\n")
verbose = $VERBOSE
@ -62,5 +61,4 @@ describe "Warning.warn" do
$VERBOSE = verbose
end
end
end
end

View file

@ -317,12 +317,10 @@ describe "A block" do
@y.s(0) { 1 }.should == 1
end
ruby_version_is "2.5" do
it "may include a rescue clause" do
eval("@y.z do raise ArgumentError; rescue ArgumentError; 7; end").should == 7
end
end
end
describe "taking || arguments" do
it "does not raise an exception when no values are yielded" do
@ -333,12 +331,10 @@ describe "A block" do
@y.s(0) { || 1 }.should == 1
end
ruby_version_is "2.5" do
it "may include a rescue clause" do
eval('@y.z do || raise ArgumentError; rescue ArgumentError; 7; end').should == 7
end
end
end
describe "taking |a| arguments" do
it "assigns nil to the argument when no values are yielded" do
@ -364,12 +360,10 @@ describe "A block" do
@y.s([1, 2]) { |a| a }.should == [1, 2]
end
ruby_version_is "2.5" do
it "may include a rescue clause" do
eval('@y.s(1) do |x| raise ArgumentError; rescue ArgumentError; 7; end').should == 7
end
end
end
describe "taking |a, b| arguments" do
it "assigns nil to the arguments when no values are yielded" do

View file

@ -425,20 +425,10 @@ end
describe "top-level constant lookup" do
context "on a class" do
ruby_version_is "" ... "2.5" do
it "searches Object successfully after searching other scopes" do
-> {
String::Hash.should == Hash
}.should complain(/toplevel constant Hash referenced by/)
end
end
ruby_version_is "2.5" do
it "does not search Object after searching other scopes" do
-> { String::Hash }.should raise_error(NameError)
end
end
end
it "searches Object unsuccessfully when searches on a module" do
-> { Enumerable::Hash }.should raise_error(NameError)

View file

@ -756,17 +756,9 @@ describe "The defined? keyword for a scoped constant" do
defined?(DefinedSpecs::String).should be_nil
end
ruby_version_is ""..."2.5" do
it "returns 'constant' when a constant is defined on top-level but not on the class" do
defined?(DefinedSpecs::Basic::String).should == 'constant'
end
end
ruby_version_is "2.5" do
it "returns nil when a constant is defined on top-level but not on the class" do
defined?(DefinedSpecs::Basic::String).should be_nil
end
end
it "returns 'constant' if the scoped-scoped constant is defined" do
defined?(DefinedSpecs::Child::A).should == "constant"

Some files were not shown because too many files have changed in this diff Show more