def test_xml_resource_from_file(self): with open(self.vh_xsd_file) as schema_file: resource = XMLResource(schema_file) self.assertEqual(resource.source, schema_file) self.assertEqual(resource.root.tag, '{http://www.w3.org/2001/XMLSchema}schema') self.assertIsNone(resource.url) self.assertIsNone(resource.document) self.assertIsNone(resource.text) resource.load() self.assertTrue(resource.text.startswith('<xs:schema')) self.assertFalse(schema_file.closed) for _ in resource.iter(): pass self.assertFalse(schema_file.closed) for _ in resource.iter_subtrees(): pass self.assertFalse(schema_file.closed) with open(self.vh_xsd_file) as schema_file: resource = XMLResource(schema_file, lazy=False) self.assertEqual(resource.source, schema_file) self.assertEqual(resource.root.tag, '{http://www.w3.org/2001/XMLSchema}schema') self.assertIsNone(resource.url) self.assertIsInstance(resource.document, ElementTree.ElementTree) self.assertIsNone(resource.text) resource.load() self.assertTrue(resource.text.startswith('<xs:schema')) self.assertFalse(schema_file.closed) for _ in resource.iter(): pass self.assertFalse(schema_file.closed) for _ in resource.iter_subtrees(): pass self.assertFalse(schema_file.closed)
def test_xml_resource_iter_subtrees(self): namespaces = {'xs': XSD_NAMESPACE} resource = XMLResource(self.schema_class.meta_schema.source.url, lazy=False) self.assertFalse(resource.is_lazy()) lazy_resource = XMLResource(self.schema_class.meta_schema.source.url) self.assertTrue(lazy_resource.is_lazy()) # Note: Element change with lazy resource so compare only tags tags = [x.tag for x in resource.iter_subtrees()] self.assertEqual(len(tags), 1) self.assertEqual(tags[0], '{%s}schema' % XSD_NAMESPACE) lazy_tags = [x.tag for x in lazy_resource.iter_subtrees()] self.assertListEqual(tags, lazy_tags) lazy_tags = [x.tag for x in lazy_resource.iter_subtrees(lazy_mode=2)] self.assertListEqual(tags, lazy_tags) lazy_tags = [x.tag for x in lazy_resource.iter_subtrees(lazy_mode=3)] self.assertEqual(len(lazy_tags), 156) lazy_tags = [x.tag for x in lazy_resource.iter_subtrees(lazy_mode=4)] self.assertEqual(len(lazy_tags), 157) self.assertEqual(tags[0], lazy_tags[-1]) lazy_tags = [x.tag for x in lazy_resource.iter_subtrees(lazy_mode=5)] self.assertEqual(len(lazy_tags), 158) self.assertEqual(tags[0], lazy_tags[0]) self.assertEqual(tags[0], lazy_tags[-1]) tags = [x.tag for x in resource.iter_subtrees(path='.')] self.assertEqual(len(tags), 1) self.assertEqual(tags[0], '{%s}schema' % XSD_NAMESPACE) lazy_tags = [x.tag for x in lazy_resource.iter_subtrees(path='.')] self.assertListEqual(tags, lazy_tags) tags = [x.tag for x in resource.iter_subtrees(path='*')] self.assertEqual(len(tags), 156) self.assertEqual(tags[0], '{%s}annotation' % XSD_NAMESPACE) lazy_tags = [x.tag for x in lazy_resource.iter_subtrees(path='*')] self.assertListEqual(tags, lazy_tags) tags = [ x.tag for x in resource.iter_subtrees('xs:complexType', namespaces) ] self.assertEqual(len(tags), 35) self.assertTrue( all(t == '{%s}complexType' % XSD_NAMESPACE for t in tags)) lazy_tags = [ x.tag for x in lazy_resource.iter_subtrees('xs:complexType', namespaces) ] self.assertListEqual(tags, lazy_tags) tags = [ x.tag for x in resource.iter_subtrees('. /. / xs:complexType', namespaces) ] self.assertEqual(len(tags), 35) self.assertTrue( all(t == '{%s}complexType' % XSD_NAMESPACE for t in tags)) lazy_tags = [ x.tag for x in lazy_resource.iter_subtrees('. /. / xs:complexType', namespaces) ] self.assertListEqual(tags, lazy_tags)