diff options
Diffstat (limited to 'python/helpers/pydev/tests_python/_debugger_case1.py')
-rw-r--r-- | python/helpers/pydev/tests_python/_debugger_case1.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/python/helpers/pydev/tests_python/_debugger_case1.py b/python/helpers/pydev/tests_python/_debugger_case1.py new file mode 100644 index 000000000000..964d951f382f --- /dev/null +++ b/python/helpers/pydev/tests_python/_debugger_case1.py @@ -0,0 +1,61 @@ +import sys +import weakref + +def SetUp(): + observable = Observable() + observer = Observer() + observable.AddObserver(observer) + return observable + + +class Observable(object): + def __init__(self): + self.observers = [] + + def AddObserver(self, observer): + sys.stdout.write( 'observer %s\n' % (observer,)) + ref = weakref.ref(observer) + self.observers.append(ref) + sys.stdout.write('weakref: %s\n' % (ref(),)) + + def Notify(self): + for o in self.observers: + o = o() + + + try: + import gc + except ImportError: + o = None #some jython does not have gc, so, there's no sense testing this in it + else: + try: + gc.get_referrers(o) + except: + o = None #jython and ironpython do not have get_referrers + + if o is not None: + sys.stdout.write('still observing %s\n' % (o,)) + sys.stdout.write('number of referrers: %s\n' % len(gc.get_referrers(o))) + frame = gc.get_referrers(o)[0] + frame_referrers = gc.get_referrers(frame) + sys.stdout.write('frame referrer %s\n' % (frame_referrers,)) + referrers1 = gc.get_referrers(frame_referrers[1]) + sys.stdout.write('%s\n' % (referrers1,)) + sys.stderr.write('TEST FAILED: The observer should have died, even when running in debug\n') + else: + sys.stdout.write('TEST SUCEEDED: observer died\n') + + sys.stdout.flush() + sys.stderr.flush() + +class Observer(object): + pass + + +def main(): + observable = SetUp() + observable.Notify() + + +if __name__ == '__main__': + main() |