33
44# Copyright (c) IPython Development Team.
55# Distributed under the terms of the Modified BSD License.
6- #
6+ #
77# Adapted from enthought.traits, Copyright (c) Enthought, Inc.,
88# also under the terms of the Modified BSD License.
99
@@ -521,29 +521,29 @@ def test_notify_only_once(self):
521521
522522 class A (HasTraits ):
523523 listen_to = ['a' ]
524-
524+
525525 a = Int (0 )
526526 b = 0
527-
527+
528528 def __init__ (self , ** kwargs ):
529529 super (A , self ).__init__ (** kwargs )
530530 self .on_trait_change (self .listener1 , ['a' ])
531-
531+
532532 def listener1 (self , name , old , new ):
533533 self .b += 1
534534
535535 class B (A ):
536-
536+
537537 c = 0
538538 d = 0
539-
539+
540540 def __init__ (self , ** kwargs ):
541541 super (B , self ).__init__ (** kwargs )
542542 self .on_trait_change (self .listener2 )
543-
543+
544544 def listener2 (self , name , old , new ):
545545 self .c += 1
546-
546+
547547 def _a_changed (self , name , old , new ):
548548 self .d += 1
549549
@@ -653,7 +653,7 @@ class A(HasTraits):
653653 b = Int ()
654654 _notify1 = []
655655 _notify_any = []
656-
656+
657657 @observe ('a' )
658658 def _a_changed (self , change ):
659659 self ._notify1 .append (change )
@@ -717,29 +717,29 @@ def test_notify_only_once(self):
717717
718718 class A (HasTraits ):
719719 listen_to = ['a' ]
720-
720+
721721 a = Int (0 )
722722 b = 0
723-
723+
724724 def __init__ (self , ** kwargs ):
725725 super (A , self ).__init__ (** kwargs )
726726 self .observe (self .listener1 , ['a' ])
727-
727+
728728 def listener1 (self , change ):
729729 self .b += 1
730730
731731 class B (A ):
732-
732+
733733 c = 0
734734 d = 0
735-
735+
736736 def __init__ (self , ** kwargs ):
737737 super (B , self ).__init__ (** kwargs )
738738 self .observe (self .listener2 )
739-
739+
740740 def listener2 (self , change ):
741741 self .c += 1
742-
742+
743743 @observe ('a' )
744744 def _a_changed (self , change ):
745745 self .d += 1
@@ -839,7 +839,7 @@ class A(HasTraits):
839839 def __init__ (self , i ):
840840 super (A , self ).__init__ ()
841841 self .i = i
842-
842+
843843 a = A (5 )
844844 self .assertEqual (a .i , 5 )
845845 # should raise TypeError if no positional arg given
@@ -1499,7 +1499,7 @@ class TestList(TraitTestBase):
14991499 _default_value = []
15001500 _good_values = [[], [1 ], list (range (10 )), (1 ,2 )]
15011501 _bad_values = [10 , [1 ,'a' ], 'a' ]
1502-
1502+
15031503 def coerce (self , value ):
15041504 if value is not None :
15051505 value = list (value )
@@ -1509,7 +1509,7 @@ class Foo(object):
15091509 pass
15101510
15111511class NoneInstanceListTrait (HasTraits ):
1512-
1512+
15131513 value = List (Instance (Foo ))
15141514
15151515class TestNoneInstanceList (TraitTestBase ):
@@ -1575,7 +1575,7 @@ class TestTupleTrait(TraitTestBase):
15751575
15761576 obj = TupleTrait ()
15771577
1578- _default_value = (1 ,)
1578+ _default_value = (1 ,)
15791579 _good_values = [(1 ,), (0 ,), [1 ]]
15801580 _bad_values = [10 , (1 , 2 ), ('a' ), (), None ]
15811581
@@ -1647,7 +1647,7 @@ def test_dict_assignment():
16471647 c = DictTrait ()
16481648 c .value = d
16491649 d ['a' ] = 5
1650- assert d == c .value
1650+ assert d == c .value
16511651 assert c .value is d
16521652
16531653
@@ -1745,7 +1745,7 @@ def _value_validate(self, proposal):
17451745 if self .parity == 'odd' and (value % 2 == 0 ):
17461746 raise TraitError ('Expected an odd number' )
17471747 return value
1748-
1748+
17491749 u = Parity ()
17501750 u .parity = 'odd'
17511751 u .value = 1 # OK
@@ -1827,8 +1827,8 @@ class B(HasTraits):
18271827 b .count = 4
18281828 self .assertEqual (a .value , b .count )
18291829
1830- def test_unlink (self ):
1831- """Verify two linked traitlets can be unlinked."""
1830+ def test_unlink_link (self ):
1831+ """Verify two linked traitlets can be unlinked and relinked ."""
18321832
18331833 # Create two simple classes with Int traitlets.
18341834 class A (HasTraits ):
@@ -1844,6 +1844,10 @@ class A(HasTraits):
18441844 # Change one of the values to make sure they don't stay in sync.
18451845 a .value = 5
18461846 self .assertNotEqual (a .value , b .value )
1847+ c .link ()
1848+ self .assertEqual (a .value , b .value )
1849+ a .value += 1
1850+ self .assertEqual (a .value , b .value )
18471851
18481852 def test_callbacks (self ):
18491853 """Verify two linked traitlets have their callbacks called once."""
@@ -1855,7 +1859,7 @@ class B(HasTraits):
18551859 count = Int ()
18561860 a = A (value = 9 )
18571861 b = B (count = 8 )
1858-
1862+
18591863 # Register callbacks that count.
18601864 callback_count = []
18611865 def a_callback (name , old , new ):
@@ -1951,8 +1955,8 @@ class B(HasTraits):
19511955 b .value = 6
19521956 self .assertEqual (a .value , 5 )
19531957
1954- def test_unlink (self ):
1955- """Verify two linked traitlets can be unlinked."""
1958+ def test_unlink_link (self ):
1959+ """Verify two linked traitlets can be unlinked and relinked ."""
19561960
19571961 # Create two simple classes with Int traitlets.
19581962 class A (HasTraits ):
@@ -1968,6 +1972,10 @@ class A(HasTraits):
19681972 # Change one of the values to make sure they don't stay in sync.
19691973 a .value = 5
19701974 self .assertNotEqual (a .value , b .value )
1975+ c .link ()
1976+ self .assertEqual (a .value , b .value )
1977+ a .value += 1
1978+ self .assertEqual (a .value , b .value )
19711979
19721980class Pickleable (HasTraits ):
19731981
@@ -1979,7 +1987,7 @@ def _i_validate(self, commit):
19791987 return commit ['value' ]
19801988
19811989 j = Int ()
1982-
1990+
19831991 def __init__ (self ):
19841992 with self .hold_trait_notifications ():
19851993 self .i = 1
@@ -2084,7 +2092,7 @@ def test_cache_modification():
20842092
20852093class OrderTraits (HasTraits ):
20862094 notified = Dict ()
2087-
2095+
20882096 a = Unicode ()
20892097 b = Unicode ()
20902098 c = Unicode ()
@@ -2097,10 +2105,10 @@ class OrderTraits(HasTraits):
20972105 j = Unicode ()
20982106 k = Unicode ()
20992107 l = Unicode ()
2100-
2108+
21012109 def _notify (self , name , old , new ):
21022110 """check the value of all traits when each trait change is triggered
2103-
2111+
21042112 This verifies that the values are not sensitive
21052113 to dict ordering when loaded from kwargs
21062114 """
@@ -2109,7 +2117,7 @@ def _notify(self, name, old, new):
21092117 self .notified [name ] = {
21102118 c : getattr (self , c ) for c in 'abcdefghijkl'
21112119 }
2112-
2120+
21132121 def __init__ (self , ** kwargs ):
21142122 self .on_trait_change (self ._notify )
21152123 super (OrderTraits , self ).__init__ (** kwargs )
@@ -2303,7 +2311,7 @@ class C(HasTraits):
23032311 n = Integer (0 )
23042312 lis = List ()
23052313 d = Dict ()
2306-
2314+
23072315 assert C .t .default_value_repr () == "'traitlets.HasTraits'"
23082316 assert C .t2 .default_value_repr () == "'traitlets.traitlets.HasTraits'"
23092317 assert C .n .default_value_repr () == '0'
@@ -2312,27 +2320,27 @@ class C(HasTraits):
23122320
23132321
23142322class TransitionalClass (HasTraits ):
2315-
2323+
23162324 d = Any ()
23172325 @default ('d' )
23182326 def _d_default (self ):
23192327 return TransitionalClass
23202328
23212329 parent_super = False
23222330 calls_super = Integer (0 )
2323-
2331+
23242332 @default ('calls_super' )
23252333 def _calls_super_default (self ):
23262334 return - 1
2327-
2335+
23282336 @observe ('calls_super' )
23292337 @observe_compat
23302338 def _calls_super_changed (self , change ):
23312339 self .parent_super = change
2332-
2340+
23332341 parent_override = False
23342342 overrides = Integer (0 )
2335-
2343+
23362344 @observe ('overrides' )
23372345 @observe_compat
23382346 def _overrides_changed (self , change ):
@@ -2342,12 +2350,12 @@ def _overrides_changed(self, change):
23422350class SubClass (TransitionalClass ):
23432351 def _d_default (self ):
23442352 return SubClass
2345-
2353+
23462354 subclass_super = False
23472355 def _calls_super_changed (self , name , old , new ):
23482356 self .subclass_super = True
23492357 super (SubClass , self )._calls_super_changed (name , old , new )
2350-
2358+
23512359 subclass_override = False
23522360 def _overrides_changed (self , name , old , new ):
23532361 self .subclass_override = True
@@ -2366,7 +2374,7 @@ def test_subclass_compat():
23662374
23672375class DefinesHandler (HasTraits ):
23682376 parent_called = False
2369-
2377+
23702378 trait = Integer ()
23712379 @observe ('trait' )
23722380 def handler (self , change ):
@@ -2375,7 +2383,7 @@ def handler(self, change):
23752383
23762384class OverridesHandler (DefinesHandler ):
23772385 child_called = False
2378-
2386+
23792387 @observe ('trait' )
23802388 def handler (self , change ):
23812389 self .child_called = True
@@ -2390,7 +2398,7 @@ def test_subclass_override_observer():
23902398
23912399class DoesntRegisterHandler (DefinesHandler ):
23922400 child_called = False
2393-
2401+
23942402 def handler (self , change ):
23952403 self .child_called = True
23962404
@@ -2405,7 +2413,7 @@ def test_subclass_override_not_registered():
24052413
24062414class AddsHandler (DefinesHandler ):
24072415 child_called = False
2408-
2416+
24092417 @observe ('trait' )
24102418 def child_handler (self , change ):
24112419 self .child_called = True
@@ -2462,10 +2470,10 @@ class SuperRecorder(object):
24622470 def __init__ (self , * args , ** kwargs ):
24632471 self .super_args = args
24642472 self .super_kwargs = kwargs
2465-
2473+
24662474 class SuperHasTraits (HasTraits , SuperRecorder ):
24672475 i = Integer ()
2468-
2476+
24692477 obj = SuperHasTraits ('a1' , 'a2' , b = 10 , i = 5 , c = 'x' )
24702478 assert obj .i == 5
24712479 assert not hasattr (obj , 'b' )
@@ -2476,15 +2484,15 @@ class SuperHasTraits(HasTraits, SuperRecorder):
24762484def test_super_bad_args ():
24772485 class SuperHasTraits (HasTraits ):
24782486 a = Integer ()
2479-
2487+
24802488 if sys .version_info < (3 ,):
24812489 # Legacy Python, object.__init__ warns itself, instead of raising
24822490 w = ['object.__init__' ]
24832491 else :
24842492 w = ["Passing unrecoginized arguments" ]
24852493 with expected_warnings (w ):
24862494 obj = SuperHasTraits (a = 1 , b = 2 )
2487- assert obj .a == 1
2495+ assert obj .a == 1
24882496 assert not hasattr (obj , 'b' )
24892497
24902498
0 commit comments