diff --git a/src/oca/ruby/OpenNebula/XMLUtils.rb b/src/oca/ruby/OpenNebula/XMLUtils.rb index 44f1553a4b..bfe04fcc2d 100644 --- a/src/oca/ruby/OpenNebula/XMLUtils.rb +++ b/src/oca/ruby/OpenNebula/XMLUtils.rb @@ -101,6 +101,8 @@ module OpenNebula end end + # Delete an element from the xml + # xpath::_String_ xpath expression that selects the elemnts to be deleted def delete_element(xpath) if NOKOGIRI @xml.xpath(xpath.to_s).remove @@ -109,6 +111,15 @@ module OpenNebula end end + # Add a new element to the xml + # xpath::_String_ xpath xpression where the elemente will be added + # elems::_Hash_ Hash containing the pairs key-value to be included + # Examples: + # add_element('VM', 'NEW_ITEM' => 'NEW_VALUE') + # NEW_VALUE... + # + # add_element('VM/TEMPLATE', 'V1' => {'X1' => 'A1', 'Y2' => 'A2'}) + # def add_element(xpath, elems) elems.each { |key, value| if value.instance_of?(Hash) diff --git a/src/oca/ruby/test/XMLUtils_spec.rb b/src/oca/ruby/test/XMLUtils_spec.rb new file mode 100644 index 0000000000..45b9fdacf6 --- /dev/null +++ b/src/oca/ruby/test/XMLUtils_spec.rb @@ -0,0 +1,100 @@ +$: << '..' + + +require 'rexml/document' +require 'OpenNebula/XMLUtils' + + shared_examples "modifying XML" do + it "add a new element '.', 'B2' => 'bdos'" do + @xml_element.add_element('.', 'B2' => 'bdos') + + @xml_element.to_xml(true).should eql " + auno + bdos +" + end + + it "add a new element '.', 'V2' => {'CC3' => 'cctres'}" do + @xml_element.add_element('.', 'V2' => {'CC3' => 'cctres'}) + + @xml_element.to_xml(true).should eql " + auno + bdos + + cctres + +" + end + + it "add a new element 'V2', 'DD4' => 'ddcuatro'" do + @xml_element.add_element('V2', 'DD4' => 'ddcuatro') + + @xml_element.to_xml(true).should eql " + auno + bdos + + cctres + ddcuatro + +" + end + + it "delete an element 'B2'" do + @xml_element.delete_element('B2') + + @xml_element.to_xml(true).should eql " + auno + + cctres + ddcuatro + +" + end + + it "delete an element 'V2/DD4'" do + @xml_element.delete_element('V2/DD4') + + @xml_element.to_xml(true).should eql " + auno + + cctres + +" + end + + it "delete an element 'V2'" do + @xml_element.delete_element('V2') + + @xml_element.to_xml(true).should eql " + auno +" + end + end + + describe 'NOKOGIRI' do + before :all do + xml = "auno" + + bxml = OpenNebula::XMLElement.build_xml(xml, "V1") + bxml.class.to_s.should eql('Nokogiri::XML::NodeSet') + + @xml_element = OpenNebula::XMLElement.new(bxml) + end + + it_behaves_like "modifying XML" + end + + describe 'REXML' do + before :all do + OpenNebula::NOKOGIRI = false + + xml = "auno" + + bxml = OpenNebula::XMLElement.build_xml(xml, "V1") + bxml.class.to_s.should eql('REXML::Element') + + @xml_element = OpenNebula::XMLElement.new(bxml) + end + + it_behaves_like "modifying XML" + end \ No newline at end of file