|
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