class ImplementingAPIClass(object): API.implements(ArbAPI, ArbAPI2) def __init__(self, value1, value2): """APIs can have arbritrary initialization""" self.value1 = value1 self.value2 = value2 def i_support_api(self): return True def i_add_value(self): return self.value1 + self.value2
class SlightlyDeceptive(with_metaclass(API.APIMeta, object)): API.implements(ArbAPI) def i_support_api(self, x): return True
class LiarAndFraud(with_metaclass(API.APIMeta, object)): API.implements(ArbAPI)
class TrueAndSimple(with_metaclass(API.APIMeta, object)): API.implements(ArbAPI3) def i_never_give_up(self): while True: yield "bottles"
def test_check_implementing(self): """checks the sample implementing class""" assert API.supports(ImplementingAPIClass, ArbAPI) assert API.supports(ImplementingAPIClass, ArbAPI2) assert API.supports(ImplementingAPIClass, ArbAPI, ArbAPI2) assert API.supports(ImplementingAPIClass) assert not API.supports(ImplementingAPIClass, ArbAPI3) assert not API.supports(ImplementingAPIClass, ArbAPI, ArbAPI3) x = ImplementingAPIClass(3, 4) assert API.supports(x, ArbAPI) assert API.supports(x, ArbAPI2) assert API.supports(x, ArbAPI, ArbAPI2) assert API.supports(x) assert not API.supports(x, ArbAPI3) assert not API.supports(x, ArbAPI, ArbAPI3) assert x.i_support_api() assert x.i_add_value() == 7 assert not API.supports(ImplementingAPIClass, NotAnAPI)
class Parent(object): API.implements(ArbAPI2)
class SlightlyDeceptive(object): __metaclass__ = API.APIMeta API.implements(ArbAPI) def i_support_api(self, x): return True
class LiarAndFraud(object): __metaclass__ = API.APIMeta API.implements(ArbAPI)
class TrueAndSimple(object): __metaclass__ = API.APIMeta API.implements(ArbAPI3) def i_never_give_up(self): while True: yield "bottles"
def test_check_implementing(self): """checks the sample implementing class""" assert API.supports(ImplementingAPIClass, ArbAPI) assert API.supports(ImplementingAPIClass, ArbAPI2) assert API.supports(ImplementingAPIClass, ArbAPI, ArbAPI2) assert API.supports(ImplementingAPIClass) assert not API.supports(ImplementingAPIClass, ArbAPI3) assert not API.supports(ImplementingAPIClass, ArbAPI, ArbAPI3) x = ImplementingAPIClass(3,4) assert API.supports(x, ArbAPI) assert API.supports(x, ArbAPI2) assert API.supports(x, ArbAPI, ArbAPI2) assert API.supports(x) assert not API.supports(x, ArbAPI3) assert not API.supports(x, ArbAPI, ArbAPI3) assert x.i_support_api() assert x.i_add_value() == 7