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