diff options
Diffstat (limited to 'spec/ruby/core/matchdata/deconstruct_keys_spec.rb')
| -rw-r--r-- | spec/ruby/core/matchdata/deconstruct_keys_spec.rb | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/spec/ruby/core/matchdata/deconstruct_keys_spec.rb b/spec/ruby/core/matchdata/deconstruct_keys_spec.rb index bf22bc33ff..9126d20394 100644 --- a/spec/ruby/core/matchdata/deconstruct_keys_spec.rb +++ b/spec/ruby/core/matchdata/deconstruct_keys_spec.rb @@ -18,16 +18,16 @@ describe "MatchData#deconstruct_keys" do -> { m.deconstruct_keys - }.should raise_error(ArgumentError, "wrong number of arguments (given 0, expected 1)") + }.should.raise(ArgumentError, "wrong number of arguments (given 0, expected 1)") end it "it raises error when argument is neither nil nor array" do m = /(?<f>foo)(?<b>bar)/.match("foobar") - -> { m.deconstruct_keys(1) }.should raise_error(TypeError, "wrong argument type Integer (expected Array)") - -> { m.deconstruct_keys("asd") }.should raise_error(TypeError, "wrong argument type String (expected Array)") - -> { m.deconstruct_keys(:x) }.should raise_error(TypeError, "wrong argument type Symbol (expected Array)") - -> { m.deconstruct_keys({}) }.should raise_error(TypeError, "wrong argument type Hash (expected Array)") + -> { m.deconstruct_keys(1) }.should.raise(TypeError, "wrong argument type Integer (expected Array)") + -> { m.deconstruct_keys("asd") }.should.raise(TypeError, "wrong argument type String (expected Array)") + -> { m.deconstruct_keys(:x) }.should.raise(TypeError, "wrong argument type Symbol (expected Array)") + -> { m.deconstruct_keys({}) }.should.raise(TypeError, "wrong argument type Hash (expected Array)") end it "returns {} when passed []" do @@ -41,7 +41,7 @@ describe "MatchData#deconstruct_keys" do -> { m.deconstruct_keys(['year', :foo]) - }.should raise_error(TypeError, "wrong argument type String (expected Symbol)") + }.should.raise(TypeError, "wrong argument type String (expected Symbol)") end it "process keys till the first non-existing one" do @@ -60,4 +60,19 @@ describe "MatchData#deconstruct_keys" do m = /(?<f>foo)(?<b>bar)/.match("foobar") m.deconstruct_keys([:f, :b, :c]).should == {} end + + it "includes non-participating captures as nil for nil argument" do + m = "hello".match(/(?<a>hello)(?<b>world)?/) + m.deconstruct_keys(nil).should == { a: "hello", b: nil } + end + + it "includes non-participating captures as nil for explicit keys" do + m = "hello".match(/(?<a>hello)(?<b>world)?/) + m.deconstruct_keys([:a, :b]).should == { a: "hello", b: nil } + end + + it "does not stop iterating at a non-participating capture" do + m = "hello!".match(/(?<a>hello)(?<b>world)?(?<c>!)/) + m.deconstruct_keys([:b, :c, :a]).should == { b: nil, c: "!", a: "hello" } + end end |
