def setUp(self):
     self.effect = Effect()
     self.document = self.effect.parse("TestFiles/unit_test_svg_path.svg")
     root = self.effect.document.getroot()
     self.node = self.findTag(root, "g")
     self.node = self.findTag(self.node, "path")
     self.canvas = Canvas(0, 0)
     '''Fictional data used in methods such as pathlineto, pathcurveto, pathmoveto, patharcto. we made it so that
     the 5th parameters (600) is larger then the others, guaranteeing this way that the sqrt value is not a negative
     value in patharcto.'''
     self.data = [1.0, 2.0, 3.0, 4.0, 5.0, 600.0, 7.0]
     self.path = Path(None, self.node, self.canvas, None)
 def setUp(self):
     self.effect = Effect()
     self.document = self.effect.parse("TestFiles/unit_test_svg_path.svg")
     root = self.effect.document.getroot()   
     self.node = self.findTag(root, "g")
     self.node = self.findTag(self.node, "path")    
     self.canvas = Canvas(0, 0)
     '''Fictional data used in methods such as pathlineto, pathcurveto, pathmoveto, patharcto. we made it so that
     the 5th parameters (600) is larger then the others, guaranteeing this way that the sqrt value is not a negative
     value in patharcto.'''
     self.data =[1.0, 2.0, 3.0, 4.0, 5.0, 600.0, 7.0]
     self.path = Path(None, self.node, self.canvas, None)
class TestSvgPath(unittest.TestCase):
    def setUp(self):
        self.effect = Effect()
        self.document = self.effect.parse("TestFiles/unit_test_svg_path.svg")
        root = self.effect.document.getroot()
        self.node = self.findTag(root, "g")
        self.node = self.findTag(self.node, "path")
        self.canvas = Canvas(0, 0)
        '''Fictional data used in methods such as pathlineto, pathcurveto, pathmoveto, patharcto. we made it so that
        the 5th parameters (600) is larger then the others, guaranteeing this way that the sqrt value is not a negative
        value in patharcto.'''
        self.data = [1.0, 2.0, 3.0, 4.0, 5.0, 600.0, 7.0]
        self.path = Path(None, self.node, self.canvas, None)

    def findTag(self, root, no):
        for node in root:
            tag = node.tag.split("}")[1]
            if tag == no:
                return node
        return ""

    def testGetData(self):
        vetor = self.path.getData()
        vetorDaElipse = [
            ['M', [447.49757, 166.4584]],
            ['A', [197.48482, 67.680222, 0.0, 1, 1, 52.527939, 166.4584]],
            ['A', [197.48482, 67.680222, 0.0, 1, 1, 447.49757, 166.4584]],
            ['Z', []]
        ]
        self.assertEqual(vetor, vetorDaElipse)

    def testPathMoveTo(self):
        self.path.pathMoveTo(self.data)
        self.assertEqual(self.path.canvasContext.code,
                         ['\tctx.moveTo(1.000000, 2.000000);\n'])

    def testPathLineTo(self):
        self.path.pathLineTo(self.data)
        self.assertEqual(self.path.canvasContext.code,
                         ['\tctx.lineTo(1.000000, 2.000000);\n'])

    def testPathCurveTo(self):
        self.path.pathCurveTo(self.data)
        self.assertEqual(self.path.canvasContext.code, [
            '\tctx.bezierCurveTo(1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 600.000000);\n'
        ])

    def testPathArcTo(self):
        self.path.currentPosition = [600.0, 7.0]
        self.path.pathArcTo(self.data)
        self.assertEqual(self.path.canvasContext.code, [])
        self.path.currentPosition = [0.25, 0.25]
        self.path.pathArcTo(self.data)
        self.assertEqual(self.path.canvasContext.code, [
            '\tctx.translate(300.125000, 3.625000);\n',
            '\tctx.rotate(0.052360);\n', '\tctx.scale(0.500000, 1.000000);\n',
            '\tctx.arc(0.000000, 0.000000, 599.408034, 3.121031, 6.26262379, -4);\n',
            '\tctx.scale(2.000000, 1.000000);\n', '\tctx.rotate(-0.052360);\n',
            '\tctx.translate(-300.125000, -3.625000);\n'
        ])

    def testDraw(self):
        self.maxDiff = None
        self.path.draw(False)
        self.assertEqual(self.path.canvasContext.code, [
            "\tctx.lineJoin = 'miter';\n",
            "\tctx.strokeStyle = 'rgb(0, 0, 0)';\n",
            "\tctx.lineCap = 'butt';\n", '\tctx.lineWidth = 1.000000;\n',
            "\tctx.fillStyle = 'rgb(255, 0, 0)';\n", '\tctx.beginPath();\n',
            '\tctx.transform(0.707107, -0.707107, 0.707107, 0.707107, -44.476826, 225.540250);\n',
            '\tctx.moveTo(447.497570, 166.458400);\n',
            '\tctx.translate(250.012754, 166.472848);\n',
            '\tctx.rotate(0.000000);\n', '\tctx.scale(1.000000, 0.342711);\n',
            '\tctx.arc(0.000000, 0.000000, 197.484820, -0.000213, 3.14180613, 0);\n',
            '\tctx.scale(1.000000, 2.917910);\n', '\tctx.rotate(-0.000000);\n',
            '\tctx.translate(-250.012754, -166.472848);\n',
            '\tctx.translate(250.012754, 166.443952);\n',
            '\tctx.rotate(0.000000);\n', '\tctx.scale(1.000000, 0.342711);\n',
            '\tctx.arc(0.000000, 0.000000, 197.484820, 3.141379, 6.28339879, 0);\n',
            '\tctx.scale(1.000000, 2.917910);\n', '\tctx.rotate(-0.000000);\n',
            '\tctx.translate(-250.012754, -166.443952);\n',
            '\tctx.closePath();\n', '\tctx.fill();\n', '\tctx.stroke();\n'
        ])
class TestSvgPath(unittest.TestCase):
    def setUp(self):
        self.effect = Effect()
        self.document = self.effect.parse("TestFiles/unit_test_svg_path.svg")
        root = self.effect.document.getroot()   
        self.node = self.findTag(root, "g")
        self.node = self.findTag(self.node, "path")    
        self.canvas = Canvas(0, 0)
        '''Fictional data used in methods such as pathlineto, pathcurveto, pathmoveto, patharcto. we made it so that
        the 5th parameters (600) is larger then the others, guaranteeing this way that the sqrt value is not a negative
        value in patharcto.'''
        self.data =[1.0, 2.0, 3.0, 4.0, 5.0, 600.0, 7.0]
        self.path = Path(None, self.node, self.canvas, None)
        
    def findTag(self, root, no):
        for node in root:
            tag = node.tag.split("}")[1]
            if tag == no:
                return node
        return ""   
    
    def testGetData(self):
        vetor = self.path.getData()
        vetorDaElipse = [['M', [447.49757, 166.4584]], ['A', [197.48482, 67.680222, 0.0, 1, 1, 52.527939, 166.4584]], ['A', [197.48482, 67.680222, 0.0, 1, 1, 447.49757, 166.4584]], ['Z', []]]
        self.assertEqual(vetor, vetorDaElipse)
        
    def testPathMoveTo(self):
        self.path.pathMoveTo(self.data)
        self.assertEqual(self.path.canvasContext.code, ['\tctx.moveTo(1.000000, 2.000000);\n'])

        
    def testPathLineTo(self):
        self.path.pathLineTo(self.data)
        self.assertEqual(self.path.canvasContext.code, ['\tctx.lineTo(1.000000, 2.000000);\n'])
        
    def testPathCurveTo(self):
        self.path.pathCurveTo(self.data)
        self.assertEqual(self.path.canvasContext.code, ['\tctx.bezierCurveTo(1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 600.000000);\n'])
        
    def testPathArcTo(self):         
        self.path.currentPosition = [600.0, 7.0]
        self.path.pathArcTo(self.data)
        self.assertEqual(self.path.canvasContext.code, [])
        self.path.currentPosition = [0.25, 0.25]
        self.path.pathArcTo(self.data)
        self.assertEqual(self.path.canvasContext.code, ['\tctx.translate(300.125000, 3.625000);\n', '\tctx.rotate(0.052360);\n', '\tctx.scale(0.500000, 1.000000);\n', '\tctx.arc(0.000000, 0.000000, 599.408034, 3.121031, 6.26262379, -4);\n', '\tctx.scale(2.000000, 1.000000);\n', '\tctx.rotate(-0.052360);\n', '\tctx.translate(-300.125000, -3.625000);\n'])

    def testDraw(self):
        self.maxDiff = None
        self.path.draw(False)
        self.assertEqual(self.path.canvasContext.code, ["\tctx.lineJoin = 'miter';\n", "\tctx.strokeStyle = 'rgb(0, 0, 0)';\n", "\tctx.lineCap = 'butt';\n", '\tctx.lineWidth = 1.000000;\n', "\tctx.fillStyle = 'rgb(255, 0, 0)';\n", '\tctx.beginPath();\n', '\tctx.transform(0.707107, -0.707107, 0.707107, 0.707107, -44.476826, 225.540250);\n', '\tctx.moveTo(447.497570, 166.458400);\n', '\tctx.translate(250.012754, 166.472848);\n', '\tctx.rotate(0.000000);\n', '\tctx.scale(1.000000, 0.342711);\n', '\tctx.arc(0.000000, 0.000000, 197.484820, -0.000213, 3.14180613, 0);\n', '\tctx.scale(1.000000, 2.917910);\n', '\tctx.rotate(-0.000000);\n', '\tctx.translate(-250.012754, -166.472848);\n', '\tctx.translate(250.012754, 166.443952);\n', '\tctx.rotate(0.000000);\n', '\tctx.scale(1.000000, 0.342711);\n', '\tctx.arc(0.000000, 0.000000, 197.484820, 3.141379, 6.28339879, 0);\n', '\tctx.scale(1.000000, 2.917910);\n', '\tctx.rotate(-0.000000);\n', '\tctx.translate(-250.012754, -166.443952);\n', '\tctx.closePath();\n', '\tctx.fill();\n', '\tctx.stroke();\n'])