Show More
@@ -16,7 +16,7 import nose.tools as nt | |||
|
16 | 16 | from nose import SkipTest |
|
17 | 17 | |
|
18 | 18 | from IPython.utils.traitlets import ( |
|
19 | HasTraits, MetaHasTraits, TraitType, Any, CBytes, Dict, | |
|
19 | HasTraits, MetaHasTraits, TraitType, AllowNone, Any, CBytes, Dict, | |
|
20 | 20 | Int, Long, Integer, Float, Complex, Bytes, Unicode, TraitError, |
|
21 | 21 | Undefined, Type, This, Instance, TCPAddress, List, Tuple, |
|
22 | 22 | ObjectName, DottedObjectName, CRegExp, link |
@@ -73,7 +73,7 class TestTraitType(TestCase): | |||
|
73 | 73 | self.assertEqual(a.tt, -1) |
|
74 | 74 | |
|
75 | 75 | def test_default_validate(self): |
|
76 |
class MyIntTT( |
|
|
76 | class MyIntTT(AllowNone): | |
|
77 | 77 | def validate(self, obj, value): |
|
78 | 78 | if isinstance(value, int): |
|
79 | 79 | return value |
@@ -354,29 +354,29 class TestHasTraitsNotify(TestCase): | |||
|
354 | 354 | |
|
355 | 355 | class A(HasTraits): |
|
356 | 356 | listen_to = ['a'] |
|
357 | ||
|
357 | ||
|
358 | 358 | a = Int(0) |
|
359 | 359 | b = 0 |
|
360 | ||
|
360 | ||
|
361 | 361 | def __init__(self, **kwargs): |
|
362 | 362 | super(A, self).__init__(**kwargs) |
|
363 | 363 | self.on_trait_change(self.listener1, ['a']) |
|
364 | ||
|
364 | ||
|
365 | 365 | def listener1(self, name, old, new): |
|
366 | 366 | self.b += 1 |
|
367 | 367 | |
|
368 | 368 | class B(A): |
|
369 | ||
|
369 | ||
|
370 | 370 | c = 0 |
|
371 | 371 | d = 0 |
|
372 | ||
|
372 | ||
|
373 | 373 | def __init__(self, **kwargs): |
|
374 | 374 | super(B, self).__init__(**kwargs) |
|
375 | 375 | self.on_trait_change(self.listener2) |
|
376 | ||
|
376 | ||
|
377 | 377 | def listener2(self, name, old, new): |
|
378 | 378 | self.c += 1 |
|
379 | ||
|
379 | ||
|
380 | 380 | def _a_changed(self, name, old, new): |
|
381 | 381 | self.d += 1 |
|
382 | 382 | |
@@ -442,7 +442,7 class TestHasTraits(TestCase): | |||
|
442 | 442 | def __init__(self, i): |
|
443 | 443 | super(A, self).__init__() |
|
444 | 444 | self.i = i |
|
445 | ||
|
445 | ||
|
446 | 446 | a = A(5) |
|
447 | 447 | self.assertEqual(a.i, 5) |
|
448 | 448 | # should raise TypeError if no positional arg given |
@@ -673,6 +673,23 class TraitTestBase(TestCase): | |||
|
673 | 673 | if hasattr(self, '_default_value'): |
|
674 | 674 | self.assertEqual(self._default_value, self.obj.value) |
|
675 | 675 | |
|
676 | def test_allow_none(self): | |
|
677 | if (hasattr(self, '_bad_values') and hasattr(self, '_good_values') and | |
|
678 | None in self._bad_values): | |
|
679 | trait=self.obj.traits()['value'] | |
|
680 | if isinstance(trait, AllowNone) and not trait._allow_none: | |
|
681 | trait._allow_none = True | |
|
682 | self._bad_values.remove(None) | |
|
683 | #skip coerce. Allow None casts None to None. | |
|
684 | self.assign(None) | |
|
685 | self.assertEqual(self.obj.value,None) | |
|
686 | self.test_good_values() | |
|
687 | self.test_bad_values() | |
|
688 | #tear down | |
|
689 | trait._allow_none = False | |
|
690 | self._bad_values.append(None) | |
|
691 | ||
|
692 | ||
|
676 | 693 | def tearDown(self): |
|
677 | 694 | # restore default value after tests, if set |
|
678 | 695 | if hasattr(self, '_default_value'): |
@@ -830,7 +847,7 class TestObjectName(TraitTestBase): | |||
|
830 | 847 | _default_value = "abc" |
|
831 | 848 | _good_values = ["a", "gh", "g9", "g_", "_G", u"a345_"] |
|
832 | 849 | _bad_values = [1, "", u"€", "9g", "!", "#abc", "aj@", "a.b", "a()", "a[0]", |
|
833 |
|
|
|
850 | None, object(), object] | |
|
834 | 851 | if sys.version_info[0] < 3: |
|
835 | 852 | _bad_values.append(u"þ") |
|
836 | 853 | else: |
@@ -845,7 +862,7 class TestDottedObjectName(TraitTestBase): | |||
|
845 | 862 | |
|
846 | 863 | _default_value = "a.b" |
|
847 | 864 | _good_values = ["A", "y.t", "y765.__repr__", "os.path.join", u"os.path.join"] |
|
848 | _bad_values = [1, u"abc.€", "_.@", ".", ".abc", "abc.", ".abc."] | |
|
865 | _bad_values = [1, u"abc.€", "_.@", ".", ".abc", "abc.", ".abc.", None] | |
|
849 | 866 | if sys.version_info[0] < 3: |
|
850 | 867 | _bad_values.append(u"t.þ") |
|
851 | 868 | else: |
@@ -862,7 +879,7 class TestTCPAddress(TraitTestBase): | |||
|
862 | 879 | |
|
863 | 880 | _default_value = ('127.0.0.1',0) |
|
864 | 881 | _good_values = [('localhost',0),('192.168.0.1',1000),('www.google.com',80)] |
|
865 | _bad_values = [(0,0),('localhost',10.0),('localhost',-1)] | |
|
882 | _bad_values = [(0,0),('localhost',10.0),('localhost',-1), None] | |
|
866 | 883 | |
|
867 | 884 | class ListTrait(HasTraits): |
|
868 | 885 | |
@@ -875,7 +892,7 class TestList(TraitTestBase): | |||
|
875 | 892 | _default_value = [] |
|
876 | 893 | _good_values = [[], [1], list(range(10)), (1,2)] |
|
877 | 894 | _bad_values = [10, [1,'a'], 'a'] |
|
878 | ||
|
895 | ||
|
879 | 896 | def coerce(self, value): |
|
880 | 897 | if value is not None: |
|
881 | 898 | value = list(value) |
@@ -1054,7 +1071,7 class TestLink(TestCase): | |||
|
1054 | 1071 | count = Int() |
|
1055 | 1072 | a = A(value=9) |
|
1056 | 1073 | b = B(count=8) |
|
1057 | ||
|
1074 | ||
|
1058 | 1075 | # Register callbacks that count. |
|
1059 | 1076 | callback_count = [] |
|
1060 | 1077 | def a_callback(name, old, new): |
General Comments 0
You need to be logged in to leave comments.
Login now