Files
PyPattyrn/tests/structural_tests/test_proxy.py
tylerlaberge 5cef83cf60 improved proxy implementation.
proxy must now contain all public methods that the subject has.
2016-08-24 21:04:35 -04:00

66 lines
1.8 KiB
Python

from unittest import TestCase
from pypatterns.structural.proxy import Proxy
class ProxyTestCase(TestCase):
"""
Unit testing class for the Proxy class.
"""
def setUp(self):
"""
Initialize testing data.
"""
class Car(object):
def drive_car(self):
return 'drive car'
class Driver(object):
def __init__(self, age):
self.age = age
self.car = Car()
self.driver = Driver(17)
def test_valid_proxy(self):
"""
Test a Proxy class following the same interface as the subject.
@raise AssertionError: If the test fails.
"""
class ProxyCar(Proxy):
def __init__(self, subject, driver):
super().__init__(subject)
self.driver = driver
def drive_car(self):
if self.driver.age > 16:
return self._subject.drive_car()
else:
return 'Driver is too young to drive'
try:
proxy = ProxyCar(self.car, self.driver)
except AttributeError:
raise AssertionError()
else:
self.assertEqual('drive car', proxy.drive_car())
proxy.driver.age = 15
self.assertEqual('Driver is too young to drive', proxy.drive_car())
def test_invalid_proxy(self):
"""
Test a Proxy class that is not following the same interface as the subject.
@raise AssertionError: If the test fails.
"""
class ProxyCar(Proxy):
def __init__(self, subject, driver):
super().__init__(subject)
self.driver = driver
self.assertRaises(AttributeError, lambda: ProxyCar(self.car, self.driver))