Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
added rectangle drawing to ascii canvas
  • Loading branch information
Frimkron committed Dec 23, 2015
1 parent 34c1774 commit 4c4e298
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
16 changes: 16 additions & 0 deletions mrf/ascii.py
Expand Up @@ -78,6 +78,22 @@ def write(self, x,y, text, maxlength=-1):
self.set(x,y,c)
x+=1
i+=1

def rectangle(self, x, y, width, height):
"""
Draws an ascii rectangle on the canvas, using '+' for the corners and '-'/'|' for the sides. The width and
height include the sides.
"""
self.set(x, y, '+')
self.set(x+width-1, y, '+')
self.set(x, y+height-1, '+')
self.set(x+width-1, y+height-1, '+')
for i in range(width-2):
self.set(x+1+i, y, '-')
self.set(x+1+i, y+height-1, '-')
for i in range(height-2):
self.set(x, y+1+i, '|')
self.set(x+width-1, y+1+i, '|')

def render(self):
"""
Expand Down
53 changes: 53 additions & 0 deletions tests/test_ascii.py
@@ -0,0 +1,53 @@
import unittest
from mrf.ascii import Canvas


class TestCanvas(unittest.TestCase):

def setUp(self):
self.canvas = Canvas()

def test_set_and_get_at_origin(self):
self.assertEqual(' ', self.canvas.get(0, 0))
self.canvas.set(0, 0, '@')
self.assertEqual('@', self.canvas.get(0, 0))

def test_set_and_get_at_position(self):
self.assertEqual(' ', self.canvas.get(4, 5))
self.canvas.set(4, 5, '@')
self.assertEqual('@', self.canvas.get(4, 5))

def test_write_sets_characters(self):
self.assertEqual(' ', self.canvas.get(1, 2))
self.canvas.write(1, 2, 'test')
self.assertEqual('t', self.canvas.get(1, 2))
self.assertEqual('e', self.canvas.get(2, 2))
self.assertEqual('s', self.canvas.get(3, 2))
self.assertEqual('t', self.canvas.get(4, 2))

def test_render_empty_canvas(self):
self.assertEqual('', self.canvas.render())

def test_render_single_line_at_origin(self):
self.canvas.write(0, 0, 'test')
self.assertEqual('test\n', self.canvas.render())

def test_render_single_line_at_position(self):
self.canvas.write(1, 2, 'test')
self.assertEqual(' \n \n test\n', self.canvas.render())

def test_render_multiple_positions(self):
self.canvas.set(1, 2, '1')
self.canvas.set(5, 3, '2')
self.canvas.set(3, 4, '3')
self.assertEqual(' \n \n 1 \n 2\n 3 \n', self.canvas.render())

def test_clear(self):
self.canvas.write(5, 6, 'blah')
self.assertNotEqual('', self.canvas.render())
self.canvas.clear()
self.assertEqual('', self.canvas.render())

def test_rectangle(self):
self.canvas.rectangle(1, 2, 4, 5)
self.assertEqual(' \n \n +--+\n | |\n | |\n | |\n +--+\n', self.canvas.render())

0 comments on commit 4c4e298

Please sign in to comment.