Merge "Ensure proper ordering of XML arguments"

This commit is contained in:
Jenkins 2014-08-26 20:29:07 +00:00 committed by Gerrit Code Review
commit a5498644ef
2 changed files with 46 additions and 7 deletions

View File

@ -14,6 +14,7 @@
# under the License.
import collections
import copy
XMLNS_11 = "http://docs.openstack.org/compute/api/v1.1"
XMLNS_V3 = "http://docs.openstack.org/compute/api/v1.1"
@ -78,16 +79,19 @@ class Element(object):
class Document(Element):
def __init__(self, *args, **kwargs):
if 'version' not in kwargs:
kwargs['version'] = '1.0'
if 'encoding' not in kwargs:
kwargs['encoding'] = 'UTF-8'
Element.__init__(self, '?xml', *args, **kwargs)
def __str__(self):
args = " ".join(['%s="%s"' %
(k, v if v is not None else "")
for k, v in self._attrs.items()])
attrs = copy.copy(self._attrs)
# pop the required standard attrs out and render in required
# order.
vers = attrs.pop('version', '1.0')
enc = attrs.pop('encoding', 'UTF-8')
args = 'version="%s" encoding="%s"' % (vers, enc)
if attrs:
args = " ".join([args] + ['%s="%s"' %
(k, v if v is not None else "")
for k, v in attrs.items()])
string = '<?xml %s?>\n' % args
for element in self._elements:
string += str(element)

View File

@ -0,0 +1,35 @@
#
# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from tempest.common import xml_utils
from tempest.tests import base
class TestDocumentXML(base.TestCase):
def test_xml_document_ordering_version_encoding(self):
expected = '<?xml version="1.0" encoding="UTF-8"?>'
xml_out = str(xml_utils.Document())
self.assertEqual(expected, xml_out.strip())
xml_out = str(xml_utils.Document(encoding='UTF-8', version='1.0'))
self.assertEqual(expected, xml_out.strip())
xml_out = str(xml_utils.Document(version='1.0', encoding='UTF-8'))
self.assertEqual(expected, xml_out.strip())
def test_xml_document_additonal_attrs(self):
expected = '<?xml version="1.0" encoding="UTF-8" foo="bar"?>'
xml_out = str(xml_utils.Document(foo='bar'))
self.assertEqual(expected, xml_out.strip())