summaryrefslogtreecommitdiff
path: root/spec/rubyspec/optional/capi/regexp_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/rubyspec/optional/capi/regexp_spec.rb')
-rw-r--r--spec/rubyspec/optional/capi/regexp_spec.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/spec/rubyspec/optional/capi/regexp_spec.rb b/spec/rubyspec/optional/capi/regexp_spec.rb
new file mode 100644
index 0000000000..27b1627c50
--- /dev/null
+++ b/spec/rubyspec/optional/capi/regexp_spec.rb
@@ -0,0 +1,71 @@
+require File.expand_path('../spec_helper', __FILE__)
+
+load_extension("regexp")
+
+describe "C-API Regexp function" do
+ before :each do
+ @p = CApiRegexpSpecs.new
+ end
+
+ describe "rb_reg_new" do
+ it "returns a new valid Regexp" do
+ my_re = @p.a_re
+ my_re.kind_of?(Regexp).should == true
+ ('1a' =~ my_re).should == 1
+ ('1b' =~ my_re).should == nil
+ my_re.source.should == 'a'
+ end
+ end
+
+ describe "rb_reg_nth_match" do
+ it "returns a the appropriate match data entry" do
+ @p.a_re_1st_match(/([ab])/.match("a")).should == 'a'
+ @p.a_re_1st_match(/([ab])/.match("b")).should == 'b'
+ @p.a_re_1st_match(/[ab]/.match("a")).should == nil
+ @p.a_re_1st_match(/[ab]/.match("c")).should == nil
+ end
+ end
+
+ describe "rb_reg_options" do
+ it "returns the options used to create the regexp" do
+ @p.rb_reg_options(/42/im).should == //im.options
+ @p.rb_reg_options(/42/i).should == //i.options
+ @p.rb_reg_options(/42/m).should == //m.options
+ end
+ end
+
+ describe "rb_reg_regcomp" do
+ it "creates a valid regexp from a string" do
+ regexp = /\b([A-Z0-9._%+-]+)\.{2,4}/
+ @p.rb_reg_regcomp(regexp.source).should == regexp
+ end
+ end
+
+ it "allows matching in C, properly setting the back references" do
+ mail_regexp = /\b([A-Z0-9._%+-]+)@([A-Z0-9.-]+\.[A-Z]{2,4})\b/i
+ name = "john.doe"
+ domain = "example.com"
+ @p.match(mail_regexp, "#{name}@#{domain}")
+ $1.should == name
+ $2.should == domain
+ end
+
+ describe "rb_reg_match" do
+ it "returns the matched position or nil" do
+ @p.rb_reg_match(/a/, 'ab').should == 0
+ @p.rb_reg_match(/b/, 'ab').should == 1
+ @p.rb_reg_match(/c/, 'ab').should == nil
+ end
+ end
+
+ describe "rb_backref_get" do
+ it "returns the last MatchData" do
+ md = /a/.match('ab')
+ @p.rb_backref_get.should == md
+ md = /b/.match('ab')
+ @p.rb_backref_get.should == md
+ md = /c/.match('ab')
+ @p.rb_backref_get.should == md
+ end
+ end
+end