def test_document_link(self): """Try to export a document that links to other resources. """ with Transaction(): document = self.root.folder.document version = document.get_editable() version.content = ParsedXML( 'document', """<?xml version="1.0" encoding="utf-8"?> <doc> <p> This is a reference to <link target="_blank" reference="infrae-site" title="">Infrae</link> </p> </doc>""") # Create a link that will be the target of our reference in our document factory = self.root.folder.manage_addProduct['Silva'] factory.manage_addLink('link', 'Link to Infrae', relative=False, url='http://infrae.com') service = component.getUtility(IReferenceService) reference = service.new_reference(version, name="document link") reference.set_target(self.root.folder.link) reference.add_tag("infrae-site") exported = self.assertExportEqual(self.root.folder, 'test_export_link.silvaxml') self.assertEqual(exported.getZexpPaths(), []) self.assertEqual(exported.getAssetPaths(), []) self.assertEqual(exported.getProblems(), [])
def test_upgrade_html_with_image_path(self): """Try to upgrade an image with an URL inside an HTML piece. """ document = self.root.document version = document.get_editable() version.content = ParsedXML( 'document', """<?xml version="1.0" encoding="utf-8"?> <doc> <image alignment="float-left" path="http://infrae.com/image.gif" /> </doc> """) # Upgrade the document self.assertEqual(document_upgrader.validate(document), True) self.assertNotEqual(document_upgrader.upgrade(document), document) upgraded = self.root.document self.assertTrue(IDocument.providedBy(upgraded)) self.assertNotEqual(upgraded.get_editable(), None) version = upgraded.get_editable() self.assertEqual(version.get_title(), 'Information') self.assertXMLEqual( str(version.body), """ <div class="image float-left"> <img alt="" src="http://infrae.com/image.gif" /> </div> """)
def test_upgrade_image(self): """Test upgrade of an image, regular without any link """ document = self.root.document editable = document.get_editable() editable.content = ParsedXML( 'content', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <image alignment="image-left" title="" width="600" image_title="Chocobo" rewritten_path="http://localhost/root/chocobo" target="_self" height="177" path="/root/chocobo" link_to_hires="0" link="" /> </p> </doc>""") self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement images = document_dom.getElementsByTagName('image') self.assertEqual(len(images), 1) image = images[0] self.assertTrue(image.hasAttribute('reference')) self.assertFalse(image.hasAttribute('path')) self.assertFalse(image.hasAttribute('rewritten_path')) self.assertFalse(image.hasAttribute('target')) self.assertFalse(image.hasAttribute('link')) self.assertFalse(image.hasAttribute('link_to_hires')) self.assertFalse(image.hasAttribute('silva_title')) self.assertTrue(image.hasAttribute('title')) self.assertEqual(image.getAttribute('title'), 'Chocobo') reference_name = image.getAttribute('reference') reference_service = component.getUtility(IReferenceService) reference = reference_service.get_reference( editable, name=reference_name) self.assertEqual(reference.target, self.root.chocobo)
def test_document_image(self): """Try to export a document that use an image. """ with Transaction(): document = self.root.folder.document version = document.get_editable() version.content = ParsedXML( 'document', """<?xml version="1.0" encoding="utf-8"?> <doc><p>Torvald last picture</p> <image reference="torvald-pic" alignment="" title="Torvald"></image> </doc>""") # Create a image to use in the document factory = self.root.folder.manage_addProduct['Silva'] with self.layer.open_fixture('chocobo.jpg') as image: factory.manage_addImage('torvald', 'Torvald', image) service = component.getUtility(IReferenceService) reference = service.new_reference(version, name="document link") reference.set_target(self.root.folder.torvald) reference.add_tag("torvald-pic") exported = self.assertExportEqual(self.root.folder, 'test_export_image.silvaxml') self.assertEqual(exported.getZexpPaths(), []) self.assertEqual(exported.getAssetPaths(), [(('', 'root', 'folder', 'torvald'), '1')]) self.assertEqual(exported.getProblems(), [])
def test_upgrade_simple_html(self): """Upgrade a document that contains some text. """ document = self.root.document document.get_editable().content = ParsedXML( 'document', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal">This is a simple piece of text with two paragraph.</p> <p type="lead">This is the second paragraph.</p> </doc> """) # Upgrade the document self.assertEqual(document_upgrader.validate(document), True) self.assertNotEqual(document_upgrader.upgrade(document), document) upgraded = self.root.document self.assertTrue(IDocument.providedBy(upgraded)) self.assertNotEqual(upgraded.get_editable(), None) version = upgraded.get_editable() self.assertEqual(version.get_title(), 'Information') self.assertXMLEqual( str(version.body), """ <p>This is a simple piece of text with two paragraph.</p> <p class="lead">This is the second paragraph.</p> """)
def test_upgrade_unicode_html(self): """Upgrade a document that contains some text. """ document = self.root.document document.get_editable().content = ParsedXML( 'document', u"""<?xml version="1.0" encoding="utf-8"?> <doc> <heading type="normal">Histoire d'un élève suisse</heading> <p type="normal">Il était une fois, un élève qui était allé à l'école étudier.</p> <p type="normal">Étant content, il étudiat.</p> </doc> """.encode('utf-8')) # Upgrade the document self.assertEqual(document_upgrader.validate(document), True) self.assertNotEqual(document_upgrader.upgrade(document), document) upgraded = self.root.document self.assertTrue(IDocument.providedBy(upgraded)) self.assertNotEqual(upgraded.get_editable(), None) version = upgraded.get_editable() self.assertEqual(version.get_title(), 'Information') self.assertXMLEqual( str(version.body), """ <h2>Histoire d'un élève suisse</h2> <p>Il était une fois, un élève qui était allé à l'école étudier.</p> <p>Étant content, il étudiat.</p> """)
def test_upgrade_link_spaces(self): """Test upgrade of a simple link with spaces in the path. """ document = self.root.document editable = document.get_editable() editable.content = ParsedXML( 'content', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <link target="_blank" url=" ./publication">Publication link</link> </p> </doc>""") self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement links = document_dom.getElementsByTagName('link') self.assertEqual(len(links), 1) link = links[0] self.assertTrue(link.hasAttribute('reference')) self.assertFalse(link.hasAttribute('url')) self.assertFalse(link.hasAttribute('anchor')) reference_name = link.getAttribute('reference') reference_service = component.getUtility(IReferenceService) reference = reference_service.get_reference( editable, name=reference_name) self.assertEqual(reference.target, self.root.publication)
def test_document_with_source_export(self): with Transaction(): self.layer.login('manager') factory = self.root.folder.manage_addProduct[ 'SilvaExternalSources'] factory.manage_addCodeSource('codesource', 'A Code Source', 'script') # add a script to the code source factory = self.root.folder.codesource.manage_addProduct[ 'PythonScripts'] factory.manage_addPythonScript('script') script = self.root.folder.codesource.script script.write('return "<ul><li>Item 1</li><li>Item 2</li></ul>"') with Transaction(): self.layer.login('author') doc = self.root.folder.document doc_edit = doc.get_editable() doc_edit.content = ParsedXML( 'test_document', """<?xml version="1.0" encoding="utf-8"?><doc> <source id="codesource"></source> <p type="normal">This is some text.</p> </doc>""") exported = self.assertExportEqual(self.root.folder, 'test_export_codesource.silvaxml') # The code-source went into a ZEXP. self.assertEqual(exported.getZexpPaths(), [(('', 'root', 'folder', 'codesource'), '1.zexp')]) self.assertEqual(exported.getAssetPaths(), []) self.assertEqual(exported.getProblems(), [])
def __call__(self, id, file): try: from Products.ParsedXML.ParsedXML import ParsedXML except: return ob = ParsedXML(id=id, XMLstring=file.read(), namespaces=1, contentType='text/xml') return ob
def test_upgrade_image_link_to_hires(self): """Test to upgrade an image that contains a link to a hires version of itself. """ document = self.root.document editable = document.get_editable() editable.content = ParsedXML( 'content', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <image alignment="image-left" title="Big Chocobo" width="600" image_title="Chocobo" rewritten_path="http://localhost/root/chocobo" target="_self" height="177" path="chocobo" link_to_hires="1" link="" /> </p> </doc>""") reference_service = component.getUtility(IReferenceService) self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement # The converter added a link to the hires chocobo links = document_dom.getElementsByTagName('link') self.assertEqual(len(links), 1) link = links[0] self.assertTrue(link.hasAttribute('reference')) self.assertTrue(link.hasAttribute('target')) self.assertEqual(link.getAttribute('target'), '_self') self.assertTrue(link.hasAttribute('title')) self.assertEqual(link.getAttribute('title'), 'Big Chocobo') reference_name = link.getAttribute('reference') reference = reference_service.get_reference( editable, name=reference_name) self.assertEqual(reference.target, self.root.chocobo) # The image points to the chocobo as well images = link.childNodes self.assertEqual(len(images), 1) image = images[0] self.assertEqual(image.nodeName, 'image') self.assertTrue(image.hasAttribute('reference')) self.assertFalse(image.hasAttribute('path')) self.assertFalse(image.hasAttribute('rewritten_path')) self.assertFalse(image.hasAttribute('target')) self.assertFalse(image.hasAttribute('link')) self.assertFalse(image.hasAttribute('link_to_hires')) self.assertFalse(image.hasAttribute('silva_title')) self.assertTrue(image.hasAttribute('title')) self.assertEqual(image.getAttribute('title'), 'Chocobo') reference_name = image.getAttribute('reference') reference = reference_service.get_reference( editable, name=reference_name) self.assertEqual(reference.target, self.root.chocobo) # There is only one image in the document images = document_dom.getElementsByTagName('image') self.assertEqual(len(images), 1) self.assertEqual(image, images[0])
def test_upgrade_image_broken_link(self): """Test to upgrade an missing image that contains a link to a different content in Silva. """ document = self.root.document editable = self.root.document.get_editable() editable.content = ParsedXML( 'content', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <image alignment="image-left" title="Pub" width="600" image_title="Nothing" rewritten_path="http://localhost/root/nothing" target="_blank" height="177" path="nothing" link_to_hires="0" link="../publication" /> </p> </doc>""") reference_service = component.getUtility(IReferenceService) self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement # The converter added a link to the publication links = document_dom.getElementsByTagName('link') self.assertEqual(len(links), 1) link = links[0] self.assertTrue(link.hasAttribute('reference')) self.assertTrue(link.hasAttribute('target')) self.assertEqual(link.getAttribute('target'), '_blank') self.assertTrue(link.hasAttribute('title')) self.assertEqual(link.getAttribute('title'), 'Pub') reference_name = link.getAttribute('reference') reference = reference_service.get_reference( editable, name=reference_name) self.assertEqual(reference.target, self.root.publication) # The image keeps its old path settings images = link.childNodes self.assertEqual(len(images), 1) image = images[0] self.assertEqual(image.nodeName, 'image') self.assertFalse(image.hasAttribute('reference')) self.assertTrue(image.hasAttribute('path')) self.assertEqual(image.getAttribute('path'), 'nothing') self.assertTrue(image.hasAttribute('rewritten_path')) self.assertEqual( image.getAttribute('rewritten_path'), 'http://localhost/root/nothing') self.assertFalse(image.hasAttribute('target')) self.assertFalse(image.hasAttribute('link')) self.assertFalse(image.hasAttribute('link_to_hires')) self.assertFalse(image.hasAttribute('silva_title')) self.assertTrue(image.hasAttribute('title')) self.assertEqual(image.getAttribute('title'), 'Nothing') # There is only one image in the document images = document_dom.getElementsByTagName('image') self.assertEqual(len(images), 1) self.assertEqual(image, images[0])
def test_upgrade_image_link_broken(self): """Test to upgrade an image that contains a link to a different missing content in Silva. This would be the same for link with external URLs. """ document = self.root.document editable = document.get_editable() editable.content = ParsedXML( 'content', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <image alignment="image-left" title="Pub" width="600" image_title="Chocobo" rewritten_path="http://localhost/root/chocobo" target="_blank" height="177" path="chocobo" link_to_hires="0" link="foo_bar" /> </p> </doc>""") reference_service = component.getUtility(IReferenceService) self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement # The converter added a link to the foo_bar URL. links = document_dom.getElementsByTagName('link') self.assertEqual(len(links), 1) link = links[0] self.assertFalse(link.hasAttribute('reference')) self.assertTrue(link.hasAttribute('url')) self.assertEqual(link.getAttribute('url'), 'foo_bar') self.assertTrue(link.hasAttribute('target')) self.assertEqual(link.getAttribute('target'), '_blank') self.assertTrue(link.hasAttribute('title')) self.assertEqual(link.getAttribute('title'), 'Pub') # The image points to the chocobo images = link.childNodes self.assertEqual(len(images), 1) image = images[0] self.assertEqual(image.nodeName, 'image') self.assertTrue(image.hasAttribute('reference')) self.assertFalse(image.hasAttribute('path')) self.assertFalse(image.hasAttribute('rewritten_path')) self.assertFalse(image.hasAttribute('target')) self.assertFalse(image.hasAttribute('link')) self.assertFalse(image.hasAttribute('link_to_hires')) self.assertFalse(image.hasAttribute('silva_title')) self.assertTrue(image.hasAttribute('title')) self.assertEqual(image.getAttribute('title'), 'Chocobo') reference_name = image.getAttribute('reference') reference = reference_service.get_reference( editable, name=reference_name) self.assertEqual(reference.target, self.root.chocobo) # There is only one image in the document images = document_dom.getElementsByTagName('image') self.assertEqual(len(images), 1) self.assertEqual(image, images[0])
def test_document(self): with Transaction(): document = self.root.folder.document version = document.get_editable() version.content = ParsedXML( 'document', """<?xml version="1.0" encoding="utf-8"?> <doc> <node foo="bar">承諾広告*既に、2億、3億、5億9千万円収入者が続出<node2>boo</node2>baz</node> </doc>""") exported = self.assertExportEqual(self.root.folder, 'test_export_document.silvaxml') self.assertEqual(exported.getZexpPaths(), []) self.assertEqual(exported.getAssetPaths(), []) self.assertEqual(exported.getProblems(), [])
def test_upgrade_html_with_link_reference(self): """Try to upgrade a link inside an HTML piece. """ document = self.root.document version = document.get_editable() version.content = ParsedXML( 'document', """<?xml version="1.0" encoding="utf-8"?> <doc> <p> This is a link with a Silva reference to the <link target="_blank" reference="infrae-site" title="">Infrae site</link>. </p> </doc> """) factory = self.root.folder.manage_addProduct['Silva'] factory.manage_addLink('link', 'Link to Infrae', relative=False, url='http://infrae.com') service = getUtility(IReferenceService) reference = service.new_reference(version, name=u"document link") reference.set_target(self.root.folder.link) reference.add_tag(u"infrae-site") # Upgrade the document self.assertEqual(document_upgrader.validate(document), True) self.assertNotEqual(document_upgrader.upgrade(document), document) upgraded = self.root.document self.assertTrue(IDocument.providedBy(upgraded)) self.assertNotEqual(upgraded.get_editable(), None) version = upgraded.get_editable() self.assertEqual(version.get_title(), 'Information') self.assertXMLEqual( str(version.body), """ <p> This is a link with a Silva reference to the <a class="link" title="" target="_blank" reference="infrae-site"> Infrae site </a>. </p> """) reference = service.get_reference(version, 'infrae-site') self.assertIsNot(reference.target, None) self.assertEqual(reference.target, self.root.folder.link) self.assertItemsEqual(list(service.get_references_from(version)), [reference])
def test_upgrade_link_broken(self): """Test upgrade of a link which is an external URL """ document = self.root.document editable = document.get_editable() editable.content = ParsedXML( 'content', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <link target="_blank" url="./../publication/inexisting_document">Document link</link> </p> </doc>""") self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement links = document_dom.getElementsByTagName('link') self.assertEqual(len(links), 1) link = links[0] self.assertFalse(link.hasAttribute('reference')) self.assertTrue(link.hasAttribute('url')) url = link.getAttribute('url') self.assertEqual(url, './../publication/inexisting_document')
def test_upgrade_link_only_anchor_spaces(self): """Test upgrade of a link that is only to an anchor on the same page """ document = self.root.document editable = document.get_editable() editable.content = ParsedXML( 'content', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <link target="_blank" url=" #on_me ">On me link</link> </p> </doc>""") self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement links = document_dom.getElementsByTagName('link') self.assertEqual(len(links), 1) link = links[0] self.assertFalse(link.hasAttribute('reference')) self.assertFalse(link.hasAttribute('url')) self.assertTrue(link.hasAttribute('anchor')) self.assertEqual(link.getAttribute('anchor'), 'on_me')
def test_upgrade_link_invalid(self): """Test upgrade of a simple link with a completely invalid URL as a link. """ document = self.root.document editable = document.get_editable() editable.content = ParsedXML( 'content', u"""<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <link target="_blank" url="Aléatoire">On me link</link> </p> </doc>""".encode('utf-8')) self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement links = document_dom.getElementsByTagName('link') self.assertEqual(len(links), 1) link = links[0] self.assertTrue(link.hasAttribute('url')) self.assertEqual(link.getAttribute('url'), u'Aléatoire') self.assertFalse(link.hasAttribute('anchor')) self.assertFalse(link.hasAttribute('reference'))
def test_upgrade_link_too_high(self): """Test upgrade of a link that have an invalid relative path to something not possible (like too many ..). """ document = self.root.document editable = document.get_editable() editable.content = ParsedXML( 'content', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <link target="_blank" url="./../../../MANAGE">ME HACKER</link> </p> </doc>""") self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement links = document_dom.getElementsByTagName('link') self.assertEqual(len(links), 1) link = links[0] self.assertFalse(link.hasAttribute('reference')) self.assertTrue(link.hasAttribute('url')) self.assertEquals(link.getAttribute('url'), './../../../MANAGE') self.assertFalse(link.hasAttribute('anchor'))
def test_upgrade_link_not_silva_object(self): """Test upgrade of a link that does not point to a Silva object, like for instance to the edit interface. """ document = self.root.document editable = document.get_editable() editable.content = ParsedXML( 'content', """<?xml version="1.0" encoding="utf-8"?> <doc> <p type="normal"> <link target="_blank" url="./edit">SMI</link> </p> </doc>""") self.assertEqual(document_upgrader.upgrade(document), document) document_dom = editable.content.documentElement links = document_dom.getElementsByTagName('link') self.assertEqual(len(links), 1) link = links[0] self.assertFalse(link.hasAttribute('reference')) self.assertTrue(link.hasAttribute('url')) self.assertEquals(link.getAttribute('url'), './edit') self.assertFalse(link.hasAttribute('anchor'))
def test_upgrade_html_with_image_reference(self): """Try to upgrade an image with a reference inside an HTML piece. """ document = self.root.document version = document.get_editable() version.content = ParsedXML( 'document', """<?xml version="1.0" encoding="utf-8"?> <doc> <image alignment="align-center" reference="chocobo-master" /> </doc> """) # Create the refered image factory = self.root.manage_addProduct['Silva'] with self.layer.open_fixture('chocobo.jpg') as image: factory.manage_addImage('chocobo', 'Chocobo', image) service = getUtility(IReferenceService) reference = service.new_reference(version, name="document image") reference.set_target(self.root.chocobo) reference.add_tag("chocobo-master") # Upgrade the document self.assertEqual(document_upgrader.validate(document), True) self.assertNotEqual(document_upgrader.upgrade(document), document) upgraded = self.root.document self.assertTrue(IDocument.providedBy(upgraded)) self.assertNotEqual(upgraded.get_editable(), None) version = upgraded.get_editable() self.assertEqual(version.get_title(), 'Information') self.assertXMLEqual( str(version.body), """ <div class="image align-center"> <img alt="Chocobo" reference="chocobo-master" /> </div> """)
def __init__(self, id): self.id = id self._content = ParsedXML(id, '<doc></doc>')
def __init__(self, id): super(DocumentVersion, self).__init__(id) self.content = ParsedXML('content', '<doc></doc>')