rubysl-rexml 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/LICENSE +25 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/rexml/attlistdecl.rb +62 -0
- data/lib/rexml/attribute.rb +185 -0
- data/lib/rexml/cdata.rb +67 -0
- data/lib/rexml/child.rb +96 -0
- data/lib/rexml/comment.rb +80 -0
- data/lib/rexml/doctype.rb +271 -0
- data/lib/rexml/document.rb +230 -0
- data/lib/rexml/dtd/attlistdecl.rb +10 -0
- data/lib/rexml/dtd/dtd.rb +51 -0
- data/lib/rexml/dtd/elementdecl.rb +17 -0
- data/lib/rexml/dtd/entitydecl.rb +56 -0
- data/lib/rexml/dtd/notationdecl.rb +39 -0
- data/lib/rexml/element.rb +1227 -0
- data/lib/rexml/encoding.rb +71 -0
- data/lib/rexml/encodings/CP-1252.rb +103 -0
- data/lib/rexml/encodings/EUC-JP.rb +35 -0
- data/lib/rexml/encodings/ICONV.rb +22 -0
- data/lib/rexml/encodings/ISO-8859-1.rb +7 -0
- data/lib/rexml/encodings/ISO-8859-15.rb +72 -0
- data/lib/rexml/encodings/SHIFT-JIS.rb +37 -0
- data/lib/rexml/encodings/SHIFT_JIS.rb +1 -0
- data/lib/rexml/encodings/UNILE.rb +34 -0
- data/lib/rexml/encodings/US-ASCII.rb +30 -0
- data/lib/rexml/encodings/UTF-16.rb +35 -0
- data/lib/rexml/encodings/UTF-8.rb +18 -0
- data/lib/rexml/entity.rb +166 -0
- data/lib/rexml/formatters/default.rb +109 -0
- data/lib/rexml/formatters/pretty.rb +138 -0
- data/lib/rexml/formatters/transitive.rb +56 -0
- data/lib/rexml/functions.rb +382 -0
- data/lib/rexml/instruction.rb +70 -0
- data/lib/rexml/light/node.rb +196 -0
- data/lib/rexml/namespace.rb +47 -0
- data/lib/rexml/node.rb +75 -0
- data/lib/rexml/output.rb +24 -0
- data/lib/rexml/parent.rb +166 -0
- data/lib/rexml/parseexception.rb +51 -0
- data/lib/rexml/parsers/baseparser.rb +503 -0
- data/lib/rexml/parsers/lightparser.rb +60 -0
- data/lib/rexml/parsers/pullparser.rb +196 -0
- data/lib/rexml/parsers/sax2parser.rb +238 -0
- data/lib/rexml/parsers/streamparser.rb +46 -0
- data/lib/rexml/parsers/treeparser.rb +97 -0
- data/lib/rexml/parsers/ultralightparser.rb +56 -0
- data/lib/rexml/parsers/xpathparser.rb +698 -0
- data/lib/rexml/quickpath.rb +266 -0
- data/lib/rexml/rexml.rb +32 -0
- data/lib/rexml/sax2listener.rb +97 -0
- data/lib/rexml/source.rb +251 -0
- data/lib/rexml/streamlistener.rb +92 -0
- data/lib/rexml/syncenumerator.rb +33 -0
- data/lib/rexml/text.rb +344 -0
- data/lib/rexml/undefinednamespaceexception.rb +8 -0
- data/lib/rexml/validation/relaxng.rb +559 -0
- data/lib/rexml/validation/validation.rb +155 -0
- data/lib/rexml/validation/validationexception.rb +9 -0
- data/lib/rexml/xmldecl.rb +119 -0
- data/lib/rexml/xmltokens.rb +18 -0
- data/lib/rexml/xpath.rb +66 -0
- data/lib/rexml/xpath_parser.rb +792 -0
- data/lib/rubysl/rexml.rb +1 -0
- data/lib/rubysl/rexml/version.rb +5 -0
- data/rubysl-rexml.gemspec +23 -0
- data/spec/attribute/clone_spec.rb +10 -0
- data/spec/attribute/element_spec.rb +22 -0
- data/spec/attribute/equal_value_spec.rb +17 -0
- data/spec/attribute/hash_spec.rb +12 -0
- data/spec/attribute/initialize_spec.rb +28 -0
- data/spec/attribute/inspect_spec.rb +19 -0
- data/spec/attribute/namespace_spec.rb +23 -0
- data/spec/attribute/node_type_spec.rb +9 -0
- data/spec/attribute/prefix_spec.rb +17 -0
- data/spec/attribute/remove_spec.rb +19 -0
- data/spec/attribute/to_s_spec.rb +13 -0
- data/spec/attribute/to_string_spec.rb +14 -0
- data/spec/attribute/value_spec.rb +14 -0
- data/spec/attribute/write_spec.rb +22 -0
- data/spec/attribute/xpath_spec.rb +19 -0
- data/spec/attributes/add_spec.rb +6 -0
- data/spec/attributes/append_spec.rb +6 -0
- data/spec/attributes/delete_all_spec.rb +30 -0
- data/spec/attributes/delete_spec.rb +26 -0
- data/spec/attributes/each_attribute_spec.rb +24 -0
- data/spec/attributes/each_spec.rb +24 -0
- data/spec/attributes/element_reference_spec.rb +18 -0
- data/spec/attributes/element_set_spec.rb +25 -0
- data/spec/attributes/get_attribute_ns_spec.rb +13 -0
- data/spec/attributes/get_attribute_spec.rb +28 -0
- data/spec/attributes/initialize_spec.rb +18 -0
- data/spec/attributes/length_spec.rb +6 -0
- data/spec/attributes/namespaces_spec.rb +5 -0
- data/spec/attributes/prefixes_spec.rb +23 -0
- data/spec/attributes/shared/add.rb +17 -0
- data/spec/attributes/shared/length.rb +12 -0
- data/spec/attributes/size_spec.rb +6 -0
- data/spec/attributes/to_a_spec.rb +20 -0
- data/spec/cdata/clone_spec.rb +9 -0
- data/spec/cdata/initialize_spec.rb +24 -0
- data/spec/cdata/shared/to_s.rb +11 -0
- data/spec/cdata/to_s_spec.rb +6 -0
- data/spec/cdata/value_spec.rb +6 -0
- data/spec/document/add_element_spec.rb +30 -0
- data/spec/document/add_spec.rb +60 -0
- data/spec/document/clone_spec.rb +19 -0
- data/spec/document/doctype_spec.rb +14 -0
- data/spec/document/encoding_spec.rb +21 -0
- data/spec/document/expanded_name_spec.rb +15 -0
- data/spec/document/new_spec.rb +37 -0
- data/spec/document/node_type_spec.rb +7 -0
- data/spec/document/root_spec.rb +11 -0
- data/spec/document/stand_alone_spec.rb +18 -0
- data/spec/document/version_spec.rb +13 -0
- data/spec/document/write_spec.rb +38 -0
- data/spec/document/xml_decl_spec.rb +14 -0
- data/spec/element/add_attribute_spec.rb +40 -0
- data/spec/element/add_attributes_spec.rb +21 -0
- data/spec/element/add_element_spec.rb +38 -0
- data/spec/element/add_namespace_spec.rb +23 -0
- data/spec/element/add_text_spec.rb +23 -0
- data/spec/element/attribute_spec.rb +16 -0
- data/spec/element/attributes_spec.rb +18 -0
- data/spec/element/cdatas_spec.rb +23 -0
- data/spec/element/clone_spec.rb +28 -0
- data/spec/element/comments_spec.rb +20 -0
- data/spec/element/delete_attribute_spec.rb +38 -0
- data/spec/element/delete_element_spec.rb +50 -0
- data/spec/element/delete_namespace_spec.rb +24 -0
- data/spec/element/document_spec.rb +17 -0
- data/spec/element/each_element_with_attribute_spec.rb +34 -0
- data/spec/element/each_element_with_text_spec.rb +30 -0
- data/spec/element/get_text_spec.rb +17 -0
- data/spec/element/has_attributes_spec.rb +16 -0
- data/spec/element/has_elements_spec.rb +17 -0
- data/spec/element/has_text_spec.rb +15 -0
- data/spec/element/inspect_spec.rb +26 -0
- data/spec/element/instructions_spec.rb +20 -0
- data/spec/element/namespace_spec.rb +26 -0
- data/spec/element/namespaces_spec.rb +31 -0
- data/spec/element/new_spec.rb +34 -0
- data/spec/element/next_element_spec.rb +18 -0
- data/spec/element/node_type_spec.rb +7 -0
- data/spec/element/prefixes_spec.rb +22 -0
- data/spec/element/previous_element_spec.rb +19 -0
- data/spec/element/raw_spec.rb +23 -0
- data/spec/element/root_spec.rb +27 -0
- data/spec/element/text_spec.rb +45 -0
- data/spec/element/texts_spec.rb +15 -0
- data/spec/element/whitespace_spec.rb +22 -0
- data/spec/node/each_recursive_spec.rb +20 -0
- data/spec/node/find_first_recursive_spec.rb +24 -0
- data/spec/node/index_in_parent_spec.rb +14 -0
- data/spec/node/next_sibling_node_spec.rb +20 -0
- data/spec/node/parent_spec.rb +20 -0
- data/spec/node/previous_sibling_node_spec.rb +20 -0
- data/spec/shared/each_element.rb +35 -0
- data/spec/shared/elements_to_a.rb +35 -0
- data/spec/text/append_spec.rb +9 -0
- data/spec/text/clone_spec.rb +9 -0
- data/spec/text/comparison_spec.rb +24 -0
- data/spec/text/empty_spec.rb +11 -0
- data/spec/text/indent_text_spec.rb +23 -0
- data/spec/text/inspect_spec.rb +7 -0
- data/spec/text/new_spec.rb +48 -0
- data/spec/text/node_type_spec.rb +7 -0
- data/spec/text/normalize_spec.rb +7 -0
- data/spec/text/read_with_substitution_spec.rb +12 -0
- data/spec/text/to_s_spec.rb +17 -0
- data/spec/text/unnormalize_spec.rb +7 -0
- data/spec/text/value_spec.rb +36 -0
- data/spec/text/wrap_spec.rb +20 -0
- data/spec/text/write_with_substitution_spec.rb +32 -0
- metadata +385 -0
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Document#root" do
|
4
|
+
it "returns document root tag name" do
|
5
|
+
REXML::Document.new("<foo/>").root.name.should == "foo"
|
6
|
+
end
|
7
|
+
|
8
|
+
it "returns nil if there is not root" do
|
9
|
+
REXML::Document.new.root.should == nil
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Document#stand_alone?" do
|
4
|
+
it "returns the XMLDecl standalone value" do
|
5
|
+
d = REXML::Document.new
|
6
|
+
decl = REXML::XMLDecl.new("1.0", "UTF-8", "yes")
|
7
|
+
d.add decl
|
8
|
+
d.stand_alone?.should == "yes"
|
9
|
+
end
|
10
|
+
|
11
|
+
# According to the docs this should return the default XMLDecl but that
|
12
|
+
# will carry some more problems when printing the document. Currently, it
|
13
|
+
# returns nil. See http://www.ruby-forum.com/topic/146812#650061
|
14
|
+
it "returns the default value when no XML declaration present" do
|
15
|
+
REXML::Document.new.stand_alone?.should == nil
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Document#version" do
|
4
|
+
it "returns XML version from declaration" do
|
5
|
+
d = REXML::Document.new
|
6
|
+
d.add REXML::XMLDecl.new("1.1")
|
7
|
+
d.version.should == "1.1"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "returns the default version when declaration is not present" do
|
11
|
+
REXML::Document.new.version.should == REXML::XMLDecl::DEFAULT_VERSION
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
require 'rexml/formatters/transitive'
|
3
|
+
|
4
|
+
# Maybe this can be cleaned
|
5
|
+
describe "REXML::Document#write" do
|
6
|
+
before :each do
|
7
|
+
@d = REXML::Document.new
|
8
|
+
city = REXML::Element.new "Springfield"
|
9
|
+
street = REXML::Element.new "EvergreenTerrace"
|
10
|
+
address = REXML::Element.new "House742"
|
11
|
+
@d << city << street << address
|
12
|
+
@str = ""
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns document source as string" do
|
16
|
+
@d.write(@str)
|
17
|
+
@str.should == "<Springfield><EvergreenTerrace><House742/></EvergreenTerrace></Springfield>"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns document indented" do
|
21
|
+
@d.write(@str, 2)
|
22
|
+
@str.should =~ /\s*<Springfield>\s*<EvergreenTerrace>\s*<House742\/>\s*<\/EvergreenTerrace>\s*<\/Springfield>/
|
23
|
+
end
|
24
|
+
|
25
|
+
# REXML in 1.8 is screwed up:
|
26
|
+
# Document#write uses wrong arity for Formatters::Transitive#initialize
|
27
|
+
ruby_bug "REXMLTracker#162", "1.8" do
|
28
|
+
it "returns document with transitive support" do
|
29
|
+
@d.write(@str, 2, true)
|
30
|
+
@str.should =~ /\s*<Springfield\s*><EvergreenTerrace\s*><House742\s*\/><\/EvergreenTerrace\s*><\/Springfield\s*>/
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns document with support for IE" do
|
35
|
+
@d.write(@str, -1, false, true)
|
36
|
+
@str.should == "<Springfield><EvergreenTerrace><House742 /></EvergreenTerrace></Springfield>"
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Document#xml_decl" do
|
4
|
+
it "returns XML declaration of the document" do
|
5
|
+
d = REXML::Document.new
|
6
|
+
decl = REXML::XMLDecl.new("1.0", "UTF-16", "yes")
|
7
|
+
d.add decl
|
8
|
+
d.xml_decl.should == decl
|
9
|
+
end
|
10
|
+
|
11
|
+
it "returns default XML declaration unless present" do
|
12
|
+
REXML::Document.new.xml_decl.should == REXML::XMLDecl.new
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#add_attribute" do
|
4
|
+
before :each do
|
5
|
+
@person = REXML::Element.new "person"
|
6
|
+
@person.attributes["name"] = "Bill"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "adds a new attribute" do
|
10
|
+
@person.add_attribute("age", "17")
|
11
|
+
@person.attributes["age"].should == "17"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "overwrites an existing attribute" do
|
15
|
+
@person.add_attribute("name", "Bill")
|
16
|
+
@person.attributes["name"].should == "Bill"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "accepts a pair of strings" do
|
20
|
+
@person.add_attribute("male", "true")
|
21
|
+
@person.attributes["male"].should == "true"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "accepts an Attribute for key" do
|
25
|
+
attr = REXML::Attribute.new("male", "true")
|
26
|
+
@person.add_attribute attr
|
27
|
+
@person.attributes["male"].should == "true"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "ignores value if key is an Attribute" do
|
31
|
+
attr = REXML::Attribute.new("male", "true")
|
32
|
+
@person.add_attribute(attr, "false")
|
33
|
+
@person.attributes["male"].should == "true"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns the attribute added" do
|
37
|
+
attr = REXML::Attribute.new("name", "Tony")
|
38
|
+
@person.add_attribute(attr).should == attr
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#add_attribute" do
|
4
|
+
before :each do
|
5
|
+
@person = REXML::Element.new "person"
|
6
|
+
@person.attributes["name"] = "Bill"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "adds multiple attributes from a hash" do
|
10
|
+
@person.add_attributes({"name" => "Joe", "age" => "27"})
|
11
|
+
@person.attributes["name"].should == "Joe"
|
12
|
+
@person.attributes["age"].should == "27"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "adds multiple attributes from an array" do
|
16
|
+
attrs = { "name" => "Joe", "age" => "27"}
|
17
|
+
@person.add_attributes attrs.to_a
|
18
|
+
@person.attributes["name"].should == "Joe"
|
19
|
+
@person.attributes["age"].should == "27"
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
|
4
|
+
describe "REXML::Element#add_element" do
|
5
|
+
before :each do
|
6
|
+
@root = REXML::Element.new("root")
|
7
|
+
end
|
8
|
+
|
9
|
+
it "adds a child without attributes" do
|
10
|
+
name = REXML::Element.new("name")
|
11
|
+
@root.add_element name
|
12
|
+
@root.elements["name"].name.should == name.name
|
13
|
+
@root.elements["name"].attributes.should == name.attributes
|
14
|
+
@root.elements["name"].context.should == name.context
|
15
|
+
end
|
16
|
+
|
17
|
+
it "adds a child with attributes" do
|
18
|
+
person = REXML::Element.new("person")
|
19
|
+
@root.add_element(person, {"name" => "Madonna"})
|
20
|
+
@root.elements["person"].name.should == person.name
|
21
|
+
@root.elements["person"].attributes.should == person.attributes
|
22
|
+
@root.elements["person"].context.should == person.context
|
23
|
+
end
|
24
|
+
|
25
|
+
it "adds a child with name" do
|
26
|
+
@root.add_element "name"
|
27
|
+
@root.elements["name"].name.should == "name"
|
28
|
+
@root.elements["name"].attributes.should == {}
|
29
|
+
@root.elements["name"].context.should == nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns the added child" do
|
33
|
+
name = @root.add_element "name"
|
34
|
+
@root.elements["name"].name.should == name.name
|
35
|
+
@root.elements["name"].attributes.should == name.attributes
|
36
|
+
@root.elements["name"].context.should == name.context
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#add_namespace" do
|
4
|
+
before :each do
|
5
|
+
@elem = REXML::Element.new("person")
|
6
|
+
end
|
7
|
+
|
8
|
+
it "adds a namespace to element" do
|
9
|
+
@elem.add_namespace("foo", "bar")
|
10
|
+
@elem.namespace("foo").should == "bar"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "accepts a prefix string as prefix" do
|
14
|
+
@elem.add_namespace("xmlns:foo", "bar")
|
15
|
+
@elem.namespace("foo").should == "bar"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "uses prefix as URI if uri is nil" do
|
19
|
+
@elem.add_namespace("some_uri", nil)
|
20
|
+
@elem.namespace.should == "some_uri"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#add_namespace" do
|
4
|
+
before :each do
|
5
|
+
@name = REXML::Element.new "Name"
|
6
|
+
end
|
7
|
+
|
8
|
+
it "adds text to an element" do
|
9
|
+
@name.add_text "Ringo"
|
10
|
+
@name.to_s.should == "<Name>Ringo</Name>"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "accepts a Text" do
|
14
|
+
@name.add_text(REXML::Text.new("Ringo"))
|
15
|
+
@name.to_s.should == "<Name>Ringo</Name>"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "joins the new text with the old one" do
|
19
|
+
@name.add_text "Ringo"
|
20
|
+
@name.add_text " Starr"
|
21
|
+
@name.to_s.should == "<Name>Ringo Starr</Name>"
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#attribute" do
|
4
|
+
it "returns an attribute by name" do
|
5
|
+
person = REXML::Element.new "Person"
|
6
|
+
attribute = REXML::Attribute.new("drink", "coffee")
|
7
|
+
person.add_attribute(attribute)
|
8
|
+
person.attribute("drink").should == attribute
|
9
|
+
end
|
10
|
+
|
11
|
+
it "supports attributes inside namespaces" do
|
12
|
+
e = REXML::Element.new("element")
|
13
|
+
e.add_attributes({"xmlns:ns" => "http://some_uri"})
|
14
|
+
e.attribute("ns", "ns").to_s.should == "http://some_uri"
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#attributes" do
|
4
|
+
it "returns element's Attributes" do
|
5
|
+
p = REXML::Element.new "Person"
|
6
|
+
|
7
|
+
name = REXML::Attribute.new("name", "John")
|
8
|
+
attrs = REXML::Attributes.new(p)
|
9
|
+
attrs.add name
|
10
|
+
|
11
|
+
p.add_attribute name
|
12
|
+
p.attributes.should == attrs
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns an empty hash if element has no attributes" do
|
16
|
+
REXML::Element.new("Person").attributes.should == {}
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#cdatas" do
|
4
|
+
before :each do
|
5
|
+
@e = REXML::Element.new("Root")
|
6
|
+
end
|
7
|
+
|
8
|
+
it "returns the array of children cdatas" do
|
9
|
+
c = REXML::CData.new("Primary")
|
10
|
+
d = REXML::CData.new("Secondary")
|
11
|
+
@e << c
|
12
|
+
@e << d
|
13
|
+
@e.cdatas.should == [c, d]
|
14
|
+
end
|
15
|
+
|
16
|
+
it "freezes the returned array" do
|
17
|
+
@e.cdatas.frozen?.should == true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns an empty array if element has no cdata" do
|
21
|
+
@e.cdatas.should == []
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#clone" do
|
4
|
+
before :each do
|
5
|
+
@e = REXML::Element.new "a"
|
6
|
+
end
|
7
|
+
it "creates a copy of element" do
|
8
|
+
@e.clone.to_s.should == @e.to_s
|
9
|
+
end
|
10
|
+
|
11
|
+
it "copies the attributes" do
|
12
|
+
@e.add_attribute("foo", "bar")
|
13
|
+
@e.clone.to_s.should == @e.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
it "does not copy the text" do
|
17
|
+
@e.add_text "some text..."
|
18
|
+
@e.clone.to_s.should_not == @e
|
19
|
+
@e.clone.to_s.should == "<a/>"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "does not copy the child elements" do
|
23
|
+
b = REXML::Element.new "b"
|
24
|
+
@e << b
|
25
|
+
@e.clone.should_not == @e
|
26
|
+
@e.clone.to_s.should == "<a/>"
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#comments" do
|
4
|
+
before :each do
|
5
|
+
@e = REXML::Element.new "root"
|
6
|
+
@c1 = REXML::Comment.new "this is a comment"
|
7
|
+
@c2 = REXML::Comment.new "this is another comment"
|
8
|
+
@e << @c1
|
9
|
+
@e << @c2
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns the array of comments" do
|
13
|
+
@e.comments.should == [@c1, @c2]
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns a frozen object" do
|
17
|
+
comment = REXML::Comment.new "The insertion should fail"
|
18
|
+
@e.comments.frozen?.should == true
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#delete_attribute" do
|
4
|
+
before :each do
|
5
|
+
@e = REXML::Element.new("Person")
|
6
|
+
@attr = REXML::Attribute.new("name", "Sean")
|
7
|
+
@e.add_attribute(@attr)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "deletes an attribute from the element" do
|
11
|
+
@e.delete_attribute("name")
|
12
|
+
@e.attributes["name"].should be_nil
|
13
|
+
end
|
14
|
+
|
15
|
+
# Bug was filled with a patch in Ruby's tracker #20298
|
16
|
+
quarantine! do
|
17
|
+
it "receives an Attribute" do
|
18
|
+
@e.add_attribute(@attr)
|
19
|
+
@e.delete_attribute(@attr)
|
20
|
+
@e.attributes["name"].should be_nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Docs say that it returns the removed attribute but then examples
|
25
|
+
# show it returns the element with the attribute removed.
|
26
|
+
# Also fixed in #20298
|
27
|
+
it "returns the element with the attribute removed" do
|
28
|
+
elem = @e.delete_attribute("name")
|
29
|
+
elem.attributes.should be_empty
|
30
|
+
elem.to_s.should eql("<Person/>")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "returns nil if the attribute does not exist" do
|
34
|
+
@e.delete_attribute("name")
|
35
|
+
at = @e.delete_attribute("name")
|
36
|
+
at.should be_nil
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
|
3
|
+
describe "REXML::Element#delete_element" do
|
4
|
+
before :each do
|
5
|
+
@root = REXML::Element.new("root")
|
6
|
+
end
|
7
|
+
|
8
|
+
it "deletes the child element" do
|
9
|
+
node = REXML::Element.new("some_node")
|
10
|
+
@root.add_element node
|
11
|
+
@root.delete_element node
|
12
|
+
@root.elements.size.should == 0
|
13
|
+
end
|
14
|
+
|
15
|
+
it "deletes a child via XPath" do
|
16
|
+
@root.add_element "some_node"
|
17
|
+
@root.delete_element "some_node"
|
18
|
+
@root.elements.size.should == 0
|
19
|
+
end
|
20
|
+
|
21
|
+
it "deletes the child at index" do
|
22
|
+
@root.add_element "some_node"
|
23
|
+
@root.delete_element 1
|
24
|
+
@root.elements.size.should == 0
|
25
|
+
end
|
26
|
+
|
27
|
+
# According to the docs this should return the deleted element
|
28
|
+
# but it won't if it's an Element.
|
29
|
+
ruby_bug "REXMLTracker#161", "1.8" do
|
30
|
+
it "deletes Element and returns it" do
|
31
|
+
node = REXML::Element.new("some_node")
|
32
|
+
@root.add_element node
|
33
|
+
del_node = @root.delete_element node
|
34
|
+
del_node.should == node
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Note how passing the string will return the removed element
|
39
|
+
# but passing the Element as above won't.
|
40
|
+
it "deletes an element and returns it" do
|
41
|
+
node = REXML::Element.new("some_node")
|
42
|
+
@root.add_element node
|
43
|
+
del_node = @root.delete_element "some_node"
|
44
|
+
del_node.should == node
|
45
|
+
end
|
46
|
+
|
47
|
+
it "returns nil unless element exists" do
|
48
|
+
@root.delete_element("something").should == nil
|
49
|
+
end
|
50
|
+
end
|