#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.


"""Unittests for grit.format.policy_templates.writers.admx_writer."""


import re
import unittest


class XmlWriterBaseTest(unittest.TestCase):
  '''Base class for XML writer unit-tests.
  '''

  def GetXMLOfChildren(self, parent):
    '''Returns the XML of all child nodes of the given parent node.
    Args:
      parent: The XML of the children of this node will  be returned.

    Return: XML of the chrildren of the parent node.
    '''
    raw_pretty_xml = ''.join(
        child.toprettyxml(indent='  ') for child in parent.childNodes)
    # Python 2.6.5 which is present in Lucid has bug in its pretty print
    # function which produces new lines around string literals. This has been
    # fixed in Precise which has Python 2.7.3 but we have to keep compatibility
    # with both for now.
    text_re = re.compile('>\n\s+([^<>\s].*?)\n\s*</', re.DOTALL)    
    return text_re.sub('>\g<1></', raw_pretty_xml)

  def AssertXMLEquals(self, output, expected_output):
    '''Asserts if the passed XML arguements are equal.
    Args:
      output: Actual XML text.
      expected_output: Expected XML text.
    '''
    self.assertEquals(output.strip(), expected_output.strip())
