| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- from direct.showbase.CountedResource import CountedResource
- def test_CountedResource():
- class MouseResource(CountedResource):
- """
- A simple class to demonstrate the acquisition of a resource.
- """
- @classmethod
- def acquire(cls):
- # The call to the super-class's acquire() is
- # not necessary at the moment, but may be in
- # the future, so do it now for good measure.
- super(MouseResource, cls).acquire()
- # Now acquire the resource this class is
- # managing.
- print('-- Acquire Mouse')
- @classmethod
- def release(cls):
- # First, release the resource this class is
- # managing.
- print('-- Release Mouse')
- # The call to the super-class's release() is
- # not necessary at the moment, but may be in
- # the future, so do it now for good measure.
- super(MouseResource, cls).release()
- def __init__(self):
- super(MouseResource, self).__init__()
- def __del__(self):
- super(MouseResource, self).__del__()
- class CursorResource(CountedResource):
- """
- A class to demonstrate how to implement a dependent
- resource. Notice how this class also inherits from
- CountedResource. Instead of subclassing MouseCounter,
- we will just acquire it in our __init__() and release
- it in our __del__().
- """
- @classmethod
- def acquire(cls):
- super(CursorResource, cls).acquire()
- print('-- Acquire Cursor')
- @classmethod
- def release(cls):
- print('-- Release Cursor')
- super(CursorResource, cls).release()
- def __init__(self):
- # The required resource references should
- # be stored on 'self' since we want to
- # release it when the object is deleted.
- self.__mouseResource = MouseResource()
- # Call the super-classes __init__()
- # after all required resources are
- # referenced.
- super(CursorResource, self).__init__()
- def __del__(self):
- # Free up the most dependent resource
- # first, the one this class is managing.
- super(CursorResource, self).__del__()
- # Now unlink any required resources.
- del self.__mouseResource
- class InvalidResource(MouseResource):
- @classmethod
- def acquire(cls):
- super(InvalidResource, cls).acquire()
- print('-- Acquire Invalid')
- @classmethod
- def release(cls):
- print('-- Release Invalid')
- super(InvalidResource, cls).release()
- print('\nAllocate Mouse')
- m = MouseResource()
- print('Free up Mouse')
- del m
- print('\nAllocate Cursor')
- c = CursorResource()
- print('Free up Cursor')
- del c
- print('\nAllocate Mouse then Cursor')
- m = MouseResource()
- c = CursorResource()
- print('Free up Cursor')
- del c
- print('Free up Mouse')
- del m
- print('\nAllocate Mouse then Cursor')
- m = MouseResource()
- c = CursorResource()
- print('Free up Mouse')
- del m
- print('Free up Cursor')
- del c
- print('\nAllocate Cursor then Mouse')
- c = CursorResource()
- m = MouseResource()
- print('Free up Mouse')
- del m
- print('Free up Cursor')
- del c
- print('\nAllocate Cursor then Mouse')
- c = CursorResource()
- m = MouseResource()
- print('Free up Cursor')
- del c
- # example of an invalid subclass
- try:
- print('\nAllocate Invalid')
- i = InvalidResource()
- print('Free up Invalid')
- except AssertionError as e:
- print(e)
- print('')
- print('Free up Mouse')
- del m
- def demoFunc():
- print('\nAllocate Cursor within function')
- c = CursorResource()
- print('Cursor will be freed on function exit')
- demoFunc()
|