|
5 | 5 | # Distributed under the terms of the Modified BSD License. |
6 | 6 |
|
7 | 7 | from unittest import TestCase |
8 | | -from traitlets import HasTraits |
| 8 | +from traitlets import HasTraits, observe |
9 | 9 | from traitlets.tests.test_traitlets import TraitTestBase |
10 | 10 | from traittypes import Array |
11 | 11 | import numpy as np |
12 | 12 |
|
13 | 13 |
|
14 | | -class ArrayTraitTestBase(TraitTestBase): |
15 | | - """A best testing class for numpy trait types. |
16 | | -
|
17 | | - :meth:`assertEqual` is overloaded to not use the `__eq__` operator. |
18 | | - """ |
19 | | - |
20 | | - def assertEqual(self, v1, v2): |
21 | | - return np.testing.assert_array_equal(v1, v2) |
| 14 | +# Good / Bad value trait test cases |
22 | 15 |
|
23 | 16 |
|
24 | 17 | class IntArrayTrait(HasTraits): |
25 | 18 | value = Array().tag(dtype=np.int) |
26 | 19 |
|
27 | 20 |
|
28 | | -class TestIntArray(ArrayTraitTestBase): |
29 | | - """Test d-type validation with a ``dtype=np.int``.""" |
| 21 | +class TestIntArray(TraitTestBase): |
| 22 | + """ |
| 23 | + Test dtype validation with a ``dtype=np.int`` |
| 24 | + """ |
30 | 25 | obj = IntArrayTrait() |
31 | 26 |
|
32 | 27 | _good_values = [1, [1, 2, 3], [[1, 2, 3], [4, 5, 6]], np.array([1])] |
33 | 28 | _bad_values = [[1, [0, 0]]] |
| 29 | + |
| 30 | + |
| 31 | + def assertEqual(self, v1, v2): |
| 32 | + return np.testing.assert_array_equal(v1, v2) |
| 33 | + |
| 34 | + |
| 35 | +# Other test cases |
| 36 | + |
| 37 | + |
| 38 | +class TestArray(TestCase): |
| 39 | + |
| 40 | + def test_array_equal(self): |
| 41 | + notifications = [] |
| 42 | + |
| 43 | + class Foo(HasTraits): |
| 44 | + bar = Array(default_value=[1, 2]) |
| 45 | + @observe('bar') |
| 46 | + def _(self, change): |
| 47 | + notifications.append(change) |
| 48 | + |
| 49 | + foo = Foo() |
| 50 | + foo.bar = [1, 2] |
| 51 | + self.assertFalse(len(notifications)) |
| 52 | + foo.bar = [1, 1] |
| 53 | + self.assertTrue(len(notifications)) |
0 commit comments