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

Move spec/rubyspec to spec/ruby for consistency

* Other ruby implementations use the spec/ruby directory.
  [Misc #13792] [ruby-core:82287]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
eregon 2017-09-20 20:18:52 +00:00
parent 75bfc6440d
commit 1d15d5f080
4370 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,30 @@
# -*- encoding: utf-8 -*-
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#begin" do
it "returns the offset of the start of the nth element" do
match_data = /(.)(.)(\d+)(\d)/.match("THX1138.")
match_data.begin(0).should == 1
match_data.begin(2).should == 2
end
it "returns nil when the nth match isn't found" do
match_data = /something is( not)? (right)/.match("something is right")
match_data.begin(1).should be_nil
end
it "returns the offset for multi byte strings" do
match_data = /(.)(.)(\d+)(\d)/.match("TñX1138.")
match_data.begin(0).should == 1
match_data.begin(2).should == 2
end
not_supported_on :opal do
it "returns the offset for multi byte strings with unicode regexp" do
match_data = /(.)(.)(\d+)(\d)/u.match("TñX1138.")
match_data.begin(0).should == 1
match_data.begin(2).should == 2
end
end
end

View file

@ -0,0 +1,7 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#captures" do
it "returns an array of the match captures" do
/(.)(.)(\d+)(\d)/.match("THX1138.").captures.should == ["H","X","113","8"]
end
end

View file

@ -0,0 +1,87 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#[]" do
it "acts as normal array indexing [index]" do
md = /(.)(.)(\d+)(\d)/.match("THX1138.")
md[0].should == 'HX1138'
md[1].should == 'H'
md[2].should == 'X'
md[-3].should == 'X'
md[10000].should == nil
md[-10000].should == nil
end
it "supports accessors [start, length]" do
/(.)(.)(\d+)(\d)/.match("THX1138.")[1, 2].should == %w|H X|
/(.)(.)(\d+)(\d)/.match("THX1138.")[-3, 2].should == %w|X 113|
end
it "supports ranges [start..end]" do
/(.)(.)(\d+)(\d)/.match("THX1138.")[1..3].should == %w|H X 113|
end
end
describe "MatchData#[Symbol]" do
it "returns the corresponding named match when given a Symbol" do
md = 'haystack'.match(/(?<t>t(?<a>ack))/)
md[:a].should == 'ack'
md[:t].should == 'tack'
end
it "returns the corresponding named match when given a String" do
md = 'haystack'.match(/(?<t>t(?<a>ack))/)
md['a'].should == 'ack'
md['t'].should == 'tack'
end
it "returns the matching version of multiple corresponding named match" do
regexp = /(?:
A(?<word>\w+)
|
B(?<word>\w+)
)/x
md_a = regexp.match("Afoo")
md_b = regexp.match("Bfoo")
md_a[:word].should == "foo"
md_b[:word].should == "foo"
md_a['word'].should == "foo"
md_b['word'].should == "foo"
end
it "returns the last match when multiple named matches exist with the same name" do
md = /(?<word>hay)(?<word>stack)/.match('haystack')
md[:word].should == "stack"
md['word'].should == "stack"
end
it "returns nil on non-matching named matches" do
regexp = /(?<foo>foo )?(?<bar>bar)/
full_match = regexp.match("foo bar")
partial_match = regexp.match("bar")
full_match[:foo].should == "foo "
partial_match[:foo].should == nil
full_match['foo'].should == "foo "
partial_match['foo'].should == nil
end
it "raises an IndexError if there is no named match corresponding to the Symbol" do
md = 'haystack'.match(/(?<t>t(?<a>ack))/)
lambda { md[:baz] }.should raise_error(IndexError, /baz/)
end
it "raises an IndexError if there is no named match corresponding to the String" do
md = 'haystack'.match(/(?<t>t(?<a>ack))/)
lambda { md['baz'] }.should raise_error(IndexError, /baz/)
end
it "returns matches in the String's encoding" do
rex = /(?<t>t(?<a>ack))/u
md = 'haystack'.force_encoding('euc-jp').match(rex)
md[:t].encoding.should == Encoding::EUC_JP
end
end

View file

@ -0,0 +1,30 @@
# -*- encoding: utf-8 -*-
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#end" do
it "returns the offset of the end of the nth element" do
match_data = /(.)(.)(\d+)(\d)/.match("THX1138.")
match_data.end(0).should == 7
match_data.end(2).should == 3
end
it "returns nil when the nth match isn't found" do
match_data = /something is( not)? (right)/.match("something is right")
match_data.end(1).should be_nil
end
it "returns the offset for multi byte strings" do
match_data = /(.)(.)(\d+)(\d)/.match("TñX1138.")
match_data.end(0).should == 7
match_data.end(2).should == 3
end
not_supported_on :opal do
it "returns the offset for multi byte strings with unicode regexp" do
match_data = /(.)(.)(\d+)(\d)/u.match("TñX1138.")
match_data.end(0).should == 7
match_data.end(2).should == 3
end
end
end

View file

@ -0,0 +1,6 @@
require File.expand_path('../../../spec_helper', __FILE__)
require File.expand_path('../shared/eql', __FILE__)
describe "MatchData#eql?" do
it_behaves_like(:matchdata_eql, :eql?)
end

View file

@ -0,0 +1,6 @@
require File.expand_path('../../../spec_helper', __FILE__)
require File.expand_path('../shared/eql', __FILE__)
describe "MatchData#==" do
it_behaves_like(:matchdata_eql, :==)
end

View file

@ -0,0 +1,5 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#hash" do
it "needs to be reviewed for spec completeness"
end

View file

@ -0,0 +1,17 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#inspect" do
before :each do
@match_data = /(.)(.)(\d+)(\d)/.match("THX1138.")
end
it "returns a String" do
@match_data.inspect.should be_kind_of(String)
end
it "returns a human readable representation that contains entire matched string and the captures" do
# yeah, hardcoding the inspect output is not ideal, but in this case
# it makes perfect sense. See JRUBY-4558 for example.
@match_data.inspect.should == '#<MatchData "HX1138" 1:"H" 2:"X" 3:"113" 4:"8">'
end
end

View file

@ -0,0 +1,6 @@
require File.expand_path('../../../spec_helper', __FILE__)
require File.expand_path('../shared/length', __FILE__)
describe "MatchData#length" do
it_behaves_like(:matchdata_length, :length)
end

View file

@ -0,0 +1,13 @@
require File.expand_path('../../../spec_helper', __FILE__)
ruby_version_is '2.4' do
describe 'MatchData#named_captures' do
it 'returns a Hash that has captured name and the matched string pairs' do
/(?<a>.)(?<b>.)?/.match('0').named_captures.should == { 'a' => '0', 'b' => nil }
end
it 'prefers later captures' do
/\A(?<a>.)(?<b>.)(?<b>.)(?<a>.)\z/.match('0123').named_captures.should == { 'a' => '3', 'b' => '2' }
end
end
end

View file

@ -0,0 +1,33 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#names" do
it "returns an Array" do
md = 'haystack'.match(/(?<yellow>hay)/)
md.names.should be_an_instance_of(Array)
end
it "sets each element to a String" do
'haystack'.match(/(?<yellow>hay)/).names.all? do |e|
e.should be_an_instance_of(String)
end
end
it "returns the names of the named capture groups" do
md = 'haystack'.match(/(?<yellow>hay).(?<pin>tack)/)
md.names.should == ['yellow', 'pin']
end
it "returns [] if there were no named captures" do
'haystack'.match(/(hay).(tack)/).names.should == []
end
it "returns each name only once" do
md = 'haystack'.match(/(?<hay>hay)(?<dot>.)(?<hay>tack)/)
md.names.should == ['hay', 'dot']
end
it "equals Regexp#names" do
r = /(?<hay>hay)(?<dot>.)(?<hay>tack)/
'haystack'.match(r).names.should == r.names
end
end

View file

@ -0,0 +1,30 @@
# -*- encoding: utf-8 -*-
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#offset" do
it "returns a two element array with the begin and end of the nth match" do
match_data = /(.)(.)(\d+)(\d)/.match("THX1138.")
match_data.offset(0).should == [1, 7]
match_data.offset(4).should == [6, 7]
end
it "returns [nil, nil] when the nth match isn't found" do
match_data = /something is( not)? (right)/.match("something is right")
match_data.offset(1).should == [nil, nil]
end
it "returns the offset for multi byte strings" do
match_data = /(.)(.)(\d+)(\d)/.match("TñX1138.")
match_data.offset(0).should == [1, 7]
match_data.offset(4).should == [6, 7]
end
not_supported_on :opal do
it "returns the offset for multi byte strings with unicode regexp" do
match_data = /(.)(.)(\d+)(\d)/u.match("TñX1138.")
match_data.offset(0).should == [1, 7]
match_data.offset(4).should == [6, 7]
end
end
end

View file

@ -0,0 +1,36 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#post_match" do
it "returns the string after the match equiv. special var $'" do
/(.)(.)(\d+)(\d)/.match("THX1138: The Movie").post_match.should == ': The Movie'
$'.should == ': The Movie'
end
it "keeps taint status from the source string" do
str = "THX1138: The Movie"
str.taint
res = /(.)(.)(\d+)(\d)/.match(str).post_match
res.tainted?.should be_true
$'.tainted?.should be_true
end
it "keeps untrusted status from the source string" do
str = "THX1138: The Movie"
str.untrust
res = /(.)(.)(\d+)(\d)/.match(str).post_match
res.untrusted?.should be_true
$'.untrusted?.should be_true
end
with_feature :encoding do
it "sets the encoding to the encoding of the source String" do
str = "abc".force_encoding Encoding::EUC_JP
str.match(/b/).post_match.encoding.should equal(Encoding::EUC_JP)
end
it "sets an empty result to the encoding of the source String" do
str = "abc".force_encoding Encoding::ISO_8859_1
str.match(/c/).post_match.encoding.should equal(Encoding::ISO_8859_1)
end
end
end

View file

@ -0,0 +1,36 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#pre_match" do
it "returns the string before the match, equiv. special var $`" do
/(.)(.)(\d+)(\d)/.match("THX1138: The Movie").pre_match.should == 'T'
$`.should == 'T'
end
it "keeps taint status from the source string" do
str = "THX1138: The Movie"
str.taint
res = /(.)(.)(\d+)(\d)/.match(str).pre_match
res.tainted?.should be_true
$`.tainted?.should be_true
end
it "keeps untrusted status from the source string" do
str = "THX1138: The Movie"
str.untrust
res = /(.)(.)(\d+)(\d)/.match(str).pre_match
res.untrusted?.should be_true
$`.untrusted?.should be_true
end
with_feature :encoding do
it "sets the encoding to the encoding of the source String" do
str = "abc".force_encoding Encoding::EUC_JP
str.match(/b/).pre_match.encoding.should equal(Encoding::EUC_JP)
end
it "sets an empty result to the encoding of the source String" do
str = "abc".force_encoding Encoding::ISO_8859_1
str.match(/a/).pre_match.encoding.should equal(Encoding::ISO_8859_1)
end
end
end

View file

@ -0,0 +1,13 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#regexp" do
it "returns a Regexp object" do
m = 'haystack'.match(/hay/)
m.regexp.should be_an_instance_of(Regexp)
end
it "returns the pattern used in the match" do
m = 'haystack'.match(/hay/)
m.regexp.should == /hay/
end
end

View file

@ -0,0 +1,26 @@
require File.expand_path('../../../../spec_helper', __FILE__)
describe :matchdata_eql, shared: true do
it "returns true if both operands have equal target strings, patterns, and match positions" do
a = 'haystack'.match(/hay/)
b = 'haystack'.match(/hay/)
a.send(@method, b).should be_true
end
it "returns false if the operands have different target strings" do
a = 'hay'.match(/hay/)
b = 'haystack'.match(/hay/)
a.send(@method, b).should be_false
end
it "returns false if the operands have different patterns" do
a = 'haystack'.match(/h.y/)
b = 'haystack'.match(/hay/)
a.send(@method, b).should be_false
end
it "returns false if the argument is not a MatchData object" do
a = 'haystack'.match(/hay/)
a.send(@method, Object.new).should be_false
end
end

View file

@ -0,0 +1,5 @@
describe :matchdata_length, shared: true do
it "length should return the number of elements in the match array" do
/(.)(.)(\d+)(\d)/.match("THX1138.").send(@method).should == 5
end
end

View file

@ -0,0 +1,6 @@
require File.expand_path('../../../spec_helper', __FILE__)
require File.expand_path('../shared/length', __FILE__)
describe "MatchData#size" do
it_behaves_like(:matchdata_length, :size)
end

View file

@ -0,0 +1,14 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#string" do
it "returns a copy of the match string" do
str = /(.)(.)(\d+)(\d)/.match("THX1138.").string
str.should == "THX1138."
end
it "returns a frozen copy of the match string" do
str = /(.)(.)(\d+)(\d)/.match("THX1138.").string
str.should == "THX1138."
str.frozen?.should == true
end
end

View file

@ -0,0 +1,7 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#to_a" do
it "returns an array of matches" do
/(.)(.)(\d+)(\d)/.match("THX1138.").to_a.should == ["HX1138", "H", "X", "113", "8"]
end
end

View file

@ -0,0 +1,7 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#to_s" do
it "returns the entire matched string" do
/(.)(.)(\d+)(\d)/.match("THX1138.").to_s.should == "HX1138"
end
end

View file

@ -0,0 +1,23 @@
require File.expand_path('../../../spec_helper', __FILE__)
describe "MatchData#values_at" do
it "returns an array of the matching value" do
/(.)(.)(\d+)(\d)/.match("THX1138: The Movie").values_at(0, 2, -2).should == ["HX1138", "X", "113"]
end
describe "when passed a Range" do
it "returns an array of the matching value" do
/(.)(.)(\d+)(\d)/.match("THX1138: The Movie").values_at(2..4, 0..1).should == ["X", "113", "8", "HX1138", "H"]
end
end
ruby_version_is '2.4' do
it 'slices captures with the given names' do
/(?<a>.)(?<b>.)(?<c>.)/.match('012').values_at(:c, :a).should == ['2', '0']
end
it 'takes names and indices' do
/\A(?<a>.)(?<b>.)\z/.match('01').values_at(0, 1, 2, :a, :b).should == ['01', '0', '1', '0', '1']
end
end
end