Beispiel #1
0
    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(), [])
Beispiel #2
0
    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)
Beispiel #4
0
    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(), [])
Beispiel #5
0
    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>
""")
Beispiel #6
0
    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 &#233;l&#232;ve suisse</h2>
   <p>Il &#233;tait une fois, un &#233;l&#232;ve qui &#233;tait all&#233; &#224; l'&#233;cole &#233;tudier.</p>
   <p>&#201;tant content, il &#233;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)
Beispiel #8
0
    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(), [])
Beispiel #9
0
 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])
Beispiel #13
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(), [])
Beispiel #14
0
    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>')