summaryrefslogtreecommitdiff
path: root/spec/ruby/optional/capi/regexp_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/optional/capi/regexp_spec.rb')
-rw-r--r--spec/ruby/optional/capi/regexp_spec.rb59
1 files changed, 58 insertions, 1 deletions
diff --git a/spec/ruby/optional/capi/regexp_spec.rb b/spec/ruby/optional/capi/regexp_spec.rb
index 52aae6bb01..f233b5e3b3 100644
--- a/spec/ruby/optional/capi/regexp_spec.rb
+++ b/spec/ruby/optional/capi/regexp_spec.rb
@@ -9,12 +9,20 @@ describe "C-API Regexp function" do
describe "rb_reg_new" do
it "returns a new valid Regexp" do
- my_re = @p.a_re
+ my_re = @p.a_re("a", 0)
my_re.kind_of?(Regexp).should == true
('1a' =~ my_re).should == 1
('1b' =~ my_re).should == nil
my_re.source.should == 'a'
end
+
+ it "returns a Regexp with the given options" do
+ @p.a_re("a", 0).options == 0
+ @p.a_re("a", Regexp::IGNORECASE).options.should == Regexp::IGNORECASE
+ @p.a_re("a", Regexp::EXTENDED).options.should == Regexp::EXTENDED
+ @p.a_re("a", Regexp::EXTENDED | Regexp::IGNORECASE).options.should == Regexp::EXTENDED | Regexp::IGNORECASE
+ @p.a_re("a", Regexp::MULTILINE).options.should == Regexp::MULTILINE
+ end
end
describe "rb_reg_nth_match" do
@@ -67,5 +75,54 @@ describe "C-API Regexp function" do
md = /c/.match('ab')
@p.rb_backref_get.should == md
end
+
+ it "returns MatchData when used with rb_reg_match" do
+ @p.rb_reg_match_backref_get(/a/, 'ab')[0].should == 'a'
+ end
+ end
+
+ describe "rb_backref_set" do
+ before :each do
+ @md = "foo".match(/foo/)
+ $~ = nil
+ end
+
+ it "sets the value of $~" do
+ @p.rb_backref_set(@md)
+ @p.rb_backref_get.should == @md
+ $~.should == @md
+ end
+
+ it "sets a Thread-local value" do
+ running = false
+
+ thr = Thread.new do
+ @p.rb_backref_set(@md)
+ @p.rb_backref_get.should == @md
+ $~.should == @md
+ running = true
+ end
+
+ Thread.pass while thr.status and !running
+ $~.should == nil
+
+ thr.join
+ end
+ end
+
+ describe "rb_memcicmp" do
+ it "returns 0 for identical strings" do
+ @p.rb_memcicmp('Hello', 'Hello').should == 0
+ end
+
+ it "returns 0 for strings which only differ in case" do
+ @p.rb_memcicmp('Hello', 'HELLO').should == 0
+ @p.rb_memcicmp('HELLO', 'Hello').should == 0
+ end
+
+ it "returns the difference between the first non matching characters" do
+ @p.rb_memcicmp('Hello', 'HELLP').should == -1
+ @p.rb_memcicmp('HELLp', 'Hello').should == 1
+ end
end
end