summaryrefslogtreecommitdiff
path: root/spec/ruby/library/rexml/element/delete_attribute_spec.rb
blob: e2ba81eb0d22f52a1fef362e28b24b67a0a4efcd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
require_relative '../../../spec_helper'

ruby_version_is ''...'3.0' do
  require 'rexml/document'

  describe "REXML::Element#delete_attribute" do
    before :each do
      @e = REXML::Element.new("Person")
      @attr = REXML::Attribute.new("name", "Sean")
      @e.add_attribute(@attr)
    end

    it "deletes an attribute from the element" do
      @e.delete_attribute("name")
      @e.attributes["name"].should be_nil
    end

    # Bug was filled with a patch in Ruby's tracker #20298
    quarantine! do
      it "receives an Attribute" do
        @e.add_attribute(@attr)
        @e.delete_attribute(@attr)
        @e.attributes["name"].should be_nil
      end
    end

    # Docs say that it returns the removed attribute but then examples
    # show it returns the element with the attribute removed.
    # Also fixed in #20298
    it "returns the element with the attribute removed" do
      elem = @e.delete_attribute("name")
      elem.attributes.should be_empty
      elem.to_s.should eql("<Person/>")
    end

    it "returns nil if the attribute does not exist" do
      @e.delete_attribute("name")
      at = @e.delete_attribute("name")
      at.should be_nil
    end
  end
end