Skip to content

Commit 54bce80

Browse files
authored
Merge pull request #394 from francisco-dlp/link_link
Add link method to link and dlink
2 parents 3d41bb7 + a99f7c2 commit 54bce80

File tree

2 files changed

+68
-55
lines changed

2 files changed

+68
-55
lines changed

traitlets/tests/test_traitlets.py

Lines changed: 56 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
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

15111511
class NoneInstanceListTrait(HasTraits):
1512-
1512+
15131513
value = List(Instance(Foo))
15141514

15151515
class 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

19721980
class 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

20852093
class 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

23142322
class 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):
23422350
class 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

23672375
class 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

23762384
class 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

23912399
class 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

24062414
class 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):
24762484
def 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

Comments
 (0)