Example #1
0
class TestRenderer(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        self.shapes = BasicShapes(10, 10)
        self.line1 = self.shapes.drawLine(0, 5, 9, 5, (255, 0, 0))
        self.line2 = self.shapes.drawLine(0, 5, 9, 5, (0, 255, 0))
        self.line3 = self.shapes.drawLine(5, 0, 5, 9, (0, 0, 255))

    def setUp(self):
        self.renderer = Renderer(10, 10)

    def test_interface(self):
        for func in ('render', 'clearBuffer', 'setBackgroundColor', 'drawOver', 'drawUnder'):
            self.assertTrue(hasattr(self.renderer, func) and callable(getattr(self.renderer, func)), "Interface requires function: " + func)

    def test_render(self):
        self.renderer.setBackgroundColor(200, 200, 200)
        self.renderer.clearBuffer()
        self.renderer.drawOver(self.line1)
        self.renderer.drawUnder(self.line2, 3, 3)

        render = self.renderer.render()
        self.assertIs(type(render), list)
        self.assertEqual(render[5], [255, 0, 0]*10, "The red line was not rendered properly")
        self.assertEqual(render[8], [200, 200, 200]*3 + [0, 255, 0]*7, "The green line was not rendered properly")
        for row in [0, 1, 2, 3, 4, 6, 7, 9]:
            self.assertEqual(render[row], [200, 200, 200]*10, "Row " + str(row) + " did not render background properly")

        self.renderer.render('./test.png')
        self.assertTrue(os.path.exists('./test.png'), "The file wasn't created upon rendering")
        try:
            os.remove('./test.png')
        except OSError:
            fail("Could not clean up the created test file")

    def test_clearBuffer(self):
        self.renderer.setBackgroundColor(10, 20, 30)
        self.renderer.clearBuffer()
        for i, row in enumerate(self.renderer.pixels):
            self.assertEqual(row[0:30], [10, 20, 30]*10, "Row " + str(i) + " was not cleared")

    def test_setBackgroundColor(self):
        self.assertEqual(self.renderer.setBackgroundColor(200, 200, 200), [200, 200, 200])
        self.assertEqual(self.renderer.setBackgroundColor(256, 255, 255), [200, 200, 200])
        self.assertEqual(self.renderer.setBackgroundColor(), [200, 200, 200])
        self.assertEqual(self.renderer.setBackgroundColor(200, 100), [200, 200, 200])
        self.assertEqual(self.renderer.setBackgroundColor(200, 100, 50), [200, 100, 50])

    def test_drawOver(self):
        self.renderer.drawOver(self.line1)
        self.assertEqual(self.renderer.pixels[5], [255, 0, 0]*10)

        self.renderer.drawOver(self.line1, 3, 2)
        self.assertEqual(self.renderer.pixels[7][9:30], [255, 0, 0]*7)

        self.renderer.drawOver(self.line2, 2, 0)
        self.assertEqual(self.renderer.pixels[5], [255, 0, 0]*2 + [0, 255, 0]*8)

    def test_drawUnder(self):
        self.renderer.drawUnder(self.line1)
        self.assertEqual(self.renderer.pixels[5], [255, 0, 0]*10)

        self.renderer.drawUnder(self.line1, 3, 2)
        self.assertEqual(self.renderer.pixels[7][9:30], [255, 0, 0]*7)

        self.renderer.drawUnder(self.line2, 2, 0)
        self.assertEqual(self.renderer.pixels[5], [255, 0, 0]*10)

    def test_integration_drawOrder(self):
        self.renderer.drawOver(self.line1, 0, -2)
        self.renderer.setBackgroundColor(100, 100, 100)
        self.renderer.clearBuffer()
        self.renderer.drawOver(self.line1)
        self.renderer.drawUnder(self.line2, 1, 3)
        self.renderer.drawOver(self.line3)
        self.renderer.drawUnder(self.line3, 2)
        render = self.renderer.render()

        self.renderer.render('./integration_drawOrder.png')
        self.assertTrue(os.path.exists('./integration_drawOrder.png'), "The file wasn't created upon rendering")

        self.assertIs(type(render), list)
        for row in [0, 1, 2, 3, 4, 6, 7, 9]:
            self.assertEqual(render[row], [100, 100, 100]*5 + [0, 0, 255] + [100, 100, 100] + [0, 0, 255] + [100, 100, 100]*2,
                    "Background did not render properly on row: " + str(row))
        self.assertEqual(render[5], [255, 0, 0]*5 + [0, 0, 255] + [255, 0, 0]*4, "Redline did not render properly")
        self.assertEqual(render[8], [100, 100, 100] + [0, 255, 0]*4 + [0, 0, 255] + [0, 255, 0]*4, "GreenLine did not render properly")