94 lines
3.0 KiB
Python
94 lines
3.0 KiB
Python
from unittest import TestCase
|
|
from pypatterns.structural.bridge import Bridge
|
|
|
|
|
|
class BridgeTestCase(TestCase):
|
|
"""
|
|
Unit testing class for the Bridge class.
|
|
"""
|
|
def setUp(self):
|
|
"""
|
|
Initialize testing data.
|
|
"""
|
|
class DrawingAPI(object):
|
|
|
|
def __init__(self): pass
|
|
|
|
def draw_circle(self): pass
|
|
|
|
def draw_rectangle(self): pass
|
|
|
|
class DrawingAPI1(DrawingAPI):
|
|
|
|
def draw_circle(self):
|
|
return 'draw circle 1'
|
|
|
|
def draw_rectangle(self):
|
|
return 'draw rectangle 1'
|
|
|
|
class DrawingAPI2(DrawingAPI):
|
|
|
|
def draw_circle(self):
|
|
return 'draw circle 2'
|
|
|
|
def draw_rectangle(self):
|
|
return 'draw rectangle 2'
|
|
|
|
class Shape(Bridge):
|
|
|
|
def draw(self): pass
|
|
|
|
def do_something_high_level(self): pass
|
|
|
|
class CircleShape(Shape):
|
|
|
|
def draw(self):
|
|
return self.implementor.draw_circle()
|
|
|
|
def do_something_high_level(self):
|
|
return 'high level circle'
|
|
|
|
class RectangleShape(Shape):
|
|
|
|
def draw(self):
|
|
return self.implementor.draw_rectangle()
|
|
|
|
def do_something_high_level(self):
|
|
return 'high level rectangle'
|
|
|
|
self.drawing_api_one = DrawingAPI1()
|
|
self.drawing_api_two = DrawingAPI2()
|
|
|
|
self.circle_shape_one = CircleShape(self.drawing_api_one)
|
|
self.circle_shape_two = CircleShape(self.drawing_api_two)
|
|
|
|
self.rectangle_shape_one = RectangleShape(self.drawing_api_one)
|
|
self.rectangle_shape_two = RectangleShape(self.drawing_api_two)
|
|
|
|
def test_init(self):
|
|
"""
|
|
Test the __init__ method.
|
|
|
|
@raise AssertionError: If the test fails.
|
|
"""
|
|
self.assertEquals(self.drawing_api_one, self.circle_shape_one.implementor)
|
|
self.assertEquals(self.drawing_api_two, self.circle_shape_two.implementor)
|
|
self.assertEquals(self.drawing_api_one, self.rectangle_shape_one.implementor)
|
|
self.assertEquals(self.drawing_api_two, self.rectangle_shape_two.implementor)
|
|
|
|
def test_implementation(self):
|
|
"""
|
|
Test an implementation of the bridge pattern
|
|
|
|
@raise AssertionError: If the test fails.
|
|
"""
|
|
self.assertEquals('draw circle 1', self.circle_shape_one.draw())
|
|
self.assertEquals('draw circle 2', self.circle_shape_two.draw())
|
|
self.assertEquals('draw rectangle 1', self.rectangle_shape_one.draw())
|
|
self.assertEquals('draw rectangle 2', self.rectangle_shape_two.draw())
|
|
|
|
self.assertEquals('high level circle', self.circle_shape_one.do_something_high_level())
|
|
self.assertEquals('high level circle', self.circle_shape_two.do_something_high_level())
|
|
self.assertEquals('high level rectangle', self.rectangle_shape_one.do_something_high_level())
|
|
self.assertEquals('high level rectangle', self.rectangle_shape_two.do_something_high_level())
|