spec/re2/match_data_spec.rb in re2-1.5.0 vs spec/re2/match_data_spec.rb in re2-1.6.0
- old
+ new
@@ -239,6 +239,64 @@
it "returns nil for non-existent symbol named matches" do
md = RE2::Regexp.new('(\d)').match('123')
expect(md.end(:foo)).to be_nil
end
end
+
+ describe "#deconstruct" do
+ it "returns all capturing groups" do
+ md = RE2::Regexp.new('w(o)(o)').match('woo')
+
+ expect(md.deconstruct).to eq(['o', 'o'])
+ end
+
+ it "includes optional capturing groups as nil" do
+ md = RE2::Regexp.new('w(.)(.)(.)?').match('woo')
+
+ expect(md.deconstruct).to eq(['o', 'o', nil])
+ end
+ end
+
+ describe "#deconstruct_keys" do
+ it "returns all named captures if given nil" do
+ md = RE2::Regexp.new('(?P<numbers>\d+) (?P<letters>[a-zA-Z]+)').match('123 abc')
+
+ expect(md.deconstruct_keys(nil)).to eq(:numbers => '123', :letters => 'abc')
+ end
+
+ it "returns only named captures if given names" do
+ md = RE2::Regexp.new('(?P<numbers>\d+) (?P<letters>[a-zA-Z]+)').match('123 abc')
+
+ expect(md.deconstruct_keys([:numbers])).to eq(:numbers => '123')
+ end
+
+ it "returns named captures up until an invalid name is given" do
+ md = RE2::Regexp.new('(?P<numbers>\d+) (?P<letters>[a-zA-Z]+)').match('123 abc')
+
+ expect(md.deconstruct_keys([:numbers, :punctuation])).to eq(:numbers => '123')
+ end
+
+ it "returns an empty hash if given more capture names than exist" do
+ md = RE2::Regexp.new('(?P<numbers>\d+) (?P<letters>[a-zA-Z]+)').match('123 abc')
+
+ expect(md.deconstruct_keys([:numbers, :letters, :punctuation])).to eq({})
+ end
+
+ it "returns an empty hash if there are no named capturing groups" do
+ md = RE2::Regexp.new('(\d+) ([a-zA-Z]+)').match('123 abc')
+
+ expect(md.deconstruct_keys(nil)).to eq({})
+ end
+
+ it "raises an error if given a non-array of keys" do
+ md = RE2::Regexp.new('(?P<numbers>\d+) (?P<letters>[a-zA-Z]+)').match('123 abc')
+
+ expect { md.deconstruct_keys(0) }.to raise_error(TypeError)
+ end
+
+ it "raises an error if given keys as non-symbols" do
+ md = RE2::Regexp.new('(?P<numbers>\d+) (?P<letters>[a-zA-Z]+)').match('123 abc')
+
+ expect { md.deconstruct_keys([0]) }.to raise_error(TypeError)
+ end
+ end
end