예제 #1
0
 def setUp(self):
     self.svgObject = GranulateSVG(svgStringIO, max = MAX)
     self.svgList = self.svgObject.granulate()['file_list']
     self.xml = minidom.parseString(svgStringIO.getvalue())
예제 #2
0
class TestGranulateSVG(unittest.TestCase):
    def setUp(self):
        self.svgObject = GranulateSVG(svgStringIO, max = MAX)
        self.svgList = self.svgObject.granulate()['file_list']
        self.xml = minidom.parseString(svgStringIO.getvalue())

    def testCountTags(self):
        """ test the number of tags """
        string = svgStringIO.getvalue()
        xmlobj = PrepareSVG()
        self.xml = xmlobj.removeUse( string )
        self.assertEquals(self.svgObject._GranulateSVG__countTags(self.xml), 2)

    def testImgsPerFileAndRemainder(self):
        """ test the number of images per file and the remainder """
        self.assertEquals(self.svgObject._GranulateSVG__imgs_per_file, 1)
        self.assertEquals(self.svgObject._GranulateSVG__remainder, 0)

    def testGetAllDefinitions(self):
        """ test if all definitions are defined in all the files """
        for svgElement in self.svgList:
            definitions = ''
            element = minidom.parseString(svgElement.content.getvalue())
            for tag in ['style', 'defs', 'metadata']:
                for elem in element.getElementsByTagName(tag):
                    definitions += elem.toxml()
            element.unlink()
            defs = re.findall('(<defs>[ \n\t]*<path id="test"/>[ \n\t]*</defs>)', definitions)
            self.assertTrue(defs)
            metadata = re.findall('(<metadata id="metadataTest"/>)', definitions)
            self.assertTrue(metadata)

    def testGranulate(self):
        """ test the list generated by ``granulate`` """
        rectTree = minidom.parseString( self.svgList[0].content.getvalue() )
        rectTEST = rectTree.getElementsByTagName('rect')[0]
        textTree = minidom.parseString( self.svgList[1].content.getvalue() )
        textTEST = textTree.getElementsByTagName('text')[0]
        self.assertEqual(len(self.svgList), 2)
        self.assertEqual(rectTEST.tagName, 'rect')
        self.assertEqual(rectTEST.attributes.get("x").value, "0")
        self.assertEqual(rectTEST.attributes.get("y").value, "0")
        self.assertEqual(rectTEST.attributes.get("width").value, "100")
        self.assertEqual(rectTEST.attributes.get("height").value, "100")
        self.assertEqual(rectTEST.attributes.get("fill").value, "blue")
        self.assertEqual(textTEST.tagName, 'text')
        self.assertEqual(textTEST.attributes.get('id').value, 'text')
        self.assertEqual(textTEST.attributes.get('x').value, '25')
        self.assertEqual(textTEST.attributes.get('y').value, '50')
        self.assertEqual(textTEST.attributes.get('font-size').value, '25')
        self.assertEqual(textTEST.attributes.get('font-family').value, 'Arial')
        self.assertEqual(textTEST.attributes.get('fill').value, 'white')
        # <rect x="0" y="0" width="100" height="100" fill="blue"/>
        # <text id="text" x="25" y="50" font-size="25" font-family="Arial" fill="white">Test</text>
        rectTree.unlink()
        textTree.unlink()

    def testNewElement(self):
        """ test the creation of a new element """
        new = self.svgObject._GranulateSVG__newElement('myelem')
        self.assertEqual(new.tagName, "myelem")

    def testCreateElementBased(self):
        """ test the creation of a new element based on someone """
        element = minidom.parseString('<myelem id="myElement" attr1="attribute 1" attr2="attr 2" />')
        newelement = self.svgObject._GranulateSVG__createElementBased(element.documentElement)
        self.assertEqual(newelement.tagName, "myelem")
        self.assertEqual(newelement.attributes.get("id").value, "myElement")
        self.assertEqual(newelement.attributes.get("attr1").value, "attribute 1")
        self.assertEqual(newelement.attributes.get("attr2").value, "attr 2")
        element.unlink()

    def testCreateTreeBased(self):
        """ test the creation of a new tree based on someone """
        tree = minidom.parseString(svg0) # svg0 is my tree
        newTree = self.svgObject._GranulateSVG__createTreeBased(tree)
        self.assertTrue(tree.version, newTree.version)
        self.assertTrue(tree.encoding, newTree.encoding)
        self.assertTrue(tree.doctype, newTree.doctype)
        self.assertTrue(tree.documentElement, newTree.documentElement)
        tree.unlink()
        newTree.unlink()

    def testRemoveEmptyBlocks(self):
        """ test the removing all empty blocks """
        newtree = copy.copy(minidom.parseString(svg0))
        self.svgObject._GranulateSVG__removeEmptyBlocks(newtree)
        allG = newtree.getElementsByTagName('g')
        allSVG = newtree.getElementsByTagName('svg')
        for elem in allG + allSVG:
            self.assertTrue(elem.hasChildNodes())
        newtree.unlink()

    def testRemoveLastNodes(self):
        """ test the removing the last nodes """
        copyObject = copy.copy(self.svgObject)
        doc = minidom.Document()
        newParent = doc.createElement('pai')
        newChild = doc.createElement('filho')
        tupleList = []
        for count in xrange(1,10):
            parent = copy.copy(newParent)
            child = copy.copy(newChild)
            parent.appendChild(child)
            tupleList.append( (parent, child) )
        copyObject._GranulateSVG__lastAdded = tupleList
        copyObject._GranulateSVG__removeLastNodes()
        self.assertFalse( copyObject._GranulateSVG__lastAdded )

    def testInsideDefs(self):
        """ test nodes inside any defs """
        paths = self.xml.getElementsByTagName('path')
        texts = self.xml.getElementsByTagName('text')
        self.assertTrue(self.svgObject._GranulateSVG__insideDefs(paths[0], self.xml))
        self.assertFalse(self.svgObject._GranulateSVG__insideDefs(texts[0], self.xml))

    def testSetID(self):
        """ test setting ids """
        parsed = minidom.parseString('<svg xmlns:granulate="http://www.cefetcampos.br/nsi/granulate"\
                                      granulate:id="id0"><a/></svg>')
        doc = parsed.documentElement
        tagA = doc.getElementsByTagName('a')[0]
        self.svgObject._GranulateSVG__nextID = 1
        self.svgObject._GranulateSVG__setID(tagA, tagA.parentNode)
        self.assertEqual(tagA.attributes['granulate:id'].value, 'id1')
        self.assertEqual(tagA.attributes['granulate:parentid'].value, 'id0')
        parsed.unlink()

    def testNewAttribute(self):
        """ test creating a new attribute """
        pass

    def testCopyAttrs(self):
        """ test copying attributes from a node to another one """
        parsed = minidom.parseString('<x xmlns:abc="abcNS" attr1="attr1" attr2="attr2"\
                      abc:xyz="letters" not="nothing"><first not="non_modified"/></x>')
        doc = parsed.documentElement
        first = parsed.getElementsByTagName('first')[0]
        self.svgObject._GranulateSVG__copyAttrs(first, doc)
        docAttrs = doc.attributes
        firstAttrs=first.attributes
        self.assertEqual(docAttrs['attr1'].value, firstAttrs['attr1'].value)
        self.assertEqual(docAttrs['attr2'].value, firstAttrs['attr2'].value)
        self.assertEqual(docAttrs['abc:xyz'].value, firstAttrs['abc:xyz'].value)
        self.assertEqual(docAttrs['not'].value, 'nothing')
        self.assertEqual(firstAttrs['not'].value, 'non_modified')
        parsed.unlink()

    def tearDown(self):
        self.xml.unlink()