Package lxml :: Package tests :: Module common_imports
[hide private]
[frames] | no frames]

Source Code for Module lxml.tests.common_imports

  1  import unittest 
  2  import os.path 
  3  from StringIO import StringIO 
  4  import re 
  5   
  6  from lxml import etree 
  7   
  8  try: 
  9      from elementtree import ElementTree # standard ET 
 10  except ImportError: 
 11      try: 
 12          from xml.etree import ElementTree # Python 2.5+ 
 13      except ImportError: 
 14          ElementTree = None 
 15   
 16  try: 
 17      import cElementTree # standard ET 
 18  except ImportError: 
 19      try: 
 20          from xml.etree import cElementTree # Python 2.5+ 
 21      except ImportError: 
 22          cElementTree = None 
 23   
 24  try: 
 25      import doctest 
 26      # check if the system version has everything we need 
 27      doctest.DocFileSuite 
 28      doctest.NORMALIZE_WHITESPACE 
 29      doctest.ELLIPSIS 
 30  except (ImportError, AttributeError): 
 31      # we need our own version to make it work (Python 2.3?) 
 32      import local_doctest as doctest 
 33   
 34  try: 
 35      sorted 
 36  except NameError: 
37 - def sorted(seq, **kwargs):
38 seq = list(seq) 39 seq.sort(**kwargs) 40 return seq
41
42 -class HelperTestCase(unittest.TestCase):
43 - def parse(self, text):
44 f = StringIO(text) 45 return etree.parse(f)
46
47 - def _rootstring(self, tree):
48 return etree.tostring(tree.getroot()).replace(' ', '').replace('\n', '')
49 50 # assertFalse doesn't exist in Python 2.3 51 try: 52 unittest.TestCase.assertFalse 53 except AttributeError: 54 assertFalse = unittest.TestCase.failIf
55
56 -class SillyFileLike:
57 - def __init__(self, xml_data='<foo><bar/></foo>'):
58 self.xml_data = xml_data
59
60 - def read(self, amount=None):
61 if self.xml_data: 62 if amount: 63 data = self.xml_data[:amount] 64 self.xml_data = self.xml_data[amount:] 65 else: 66 data = self.xml_data 67 self.xml_data = '' 68 return data 69 return ''
70
71 -class LargeFileLike:
72 - def __init__(self, charlen=100, depth=4, children=5):
73 self.data = StringIO() 74 self.chars = 'a' * charlen 75 self.children = range(children) 76 self.more = self.iterelements(depth)
77
78 - def iterelements(self, depth):
79 yield '<root>' 80 depth -= 1 81 if depth > 0: 82 for child in self.children: 83 for element in self.iterelements(depth): 84 yield element 85 yield self.chars 86 else: 87 yield self.chars 88 yield '</root>'
89
90 - def read(self, amount=None):
91 data = self.data 92 append = data.write 93 if amount: 94 for element in self.more: 95 append(element) 96 if data.tell() >= amount: 97 break 98 else: 99 for element in self.more: 100 append(element) 101 result = data.getvalue() 102 data.seek(0) 103 data.truncate() 104 if amount: 105 self.data.write(result[amount:]) 106 result = result[:amount] 107 return result
108
109 -def fileInTestDir(name):
110 _testdir = os.path.split(__file__)[0] 111 return os.path.join(_testdir, name)
112
113 -def canonicalize(xml):
114 f = StringIO(xml) 115 tree = etree.parse(f) 116 f = StringIO() 117 tree.write_c14n(f) 118 return f.getvalue()
119
120 -def unentitify(xml):
121 for entity_name, value in re.findall("(&#([0-9]+);)", xml): 122 xml = xml.replace(entity_name, unichr(int(value))) 123 return xml
124