/usr/share/pyshared/traits/tests/test_event_order.py is in python-traits 4.1.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #-------------------------------------------------------------------------------
#
# Copyright (c) 2007, Enthought, Inc.
# All rights reserved.
#
# This Str()oftware is provided without warranty under the terms of the
# BSD
# license included in /LICENSE.txt and may be redistributed only
# under the conditions described in the aforementioned license. The
# license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
#
#-------------------------------------------------------------------------------
from __future__ import absolute_import
import unittest
from ..api import HasTraits, Str, Instance, Any
class TestEventOrder( unittest.TestCase ):
""" Tests that demonstrate that trait events are delivered in LIFO
order rather than FIFO order.
Baz receives the "effect" event before it receives the "cause" event.
"""
def setUp(self):
foo = Foo( cause='ORIGINAL')
bar = Bar( foo=foo, test=self )
baz = Baz( bar=bar, test=self )
self.events_delivered = []
foo.cause = 'CHANGE'
return
def test_lifo_order(self):
lifo = ['Bar._caused_changed',
'Baz._effect_changed',
'Baz._caused_changed']
self.failUnlessEqual( self.events_delivered, lifo)
return
def test_not_fifo_order(self):
fifo = ['Bar._caused_changed',
'Baz._caused_changed',
'Baz._effect_changed']
self.failIfEqual( self.events_delivered, fifo)
return
class Foo(HasTraits):
cause = Str
class Bar(HasTraits):
foo = Instance(Foo)
effect = Str
test = Any
def _foo_changed(self, obj, old, new):
if old is not None and old is not new:
old.on_trait_change( self._cause_changed, name='cause', remove=True)
if new is not None:
new.on_trait_change( self._cause_changed, name='cause')
return
def _cause_changed(self, obj, name, old, new):
self.test.events_delivered.append( 'Bar._caused_changed' )
self.effect = new.lower()
return
class Baz(HasTraits):
bar = Instance(Bar)
test = Any
def _bar_changed(self, obj, old, new):
if old is not None and old is not new:
old.on_trait_change( self._effect_changed, name='effect',
remove=True)
old.foo.on_trait_change( self._cause_changed, name='cause',
remove=True)
if new is not None:
new.foo.on_trait_change( self._cause_changed, name='cause')
new.on_trait_change( self._effect_changed, name='effect')
return
def _cause_changed(self, obj, name, old, new):
self.test.events_delivered.append( 'Baz._caused_changed' )
return
def _effect_changed(self, obj, name, old, new):
self.test.events_delivered.append( 'Baz._effect_changed' )
return
### EOF #######################################################################
|