|
|
"""Test trait types of the widget packages."""
|
|
|
|
|
|
# Copyright (c) IPython Development Team.
|
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
|
|
|
from unittest import TestCase
|
|
|
from IPython.utils.traitlets import HasTraits
|
|
|
from traitlets.tests.test_traitlets import TraitTestBase
|
|
|
from jupyter_notebook.widgets import Color, EventfulDict, EventfulList
|
|
|
|
|
|
|
|
|
class ColorTrait(HasTraits):
|
|
|
value = Color("black")
|
|
|
|
|
|
|
|
|
class TestColor(TraitTestBase):
|
|
|
obj = ColorTrait()
|
|
|
|
|
|
_good_values = ["blue", "#AA0", "#FFFFFF"]
|
|
|
_bad_values = ["vanilla", "blues"]
|
|
|
|
|
|
|
|
|
class TestEventful(TestCase):
|
|
|
|
|
|
def test_list(self):
|
|
|
"""Does the EventfulList work?"""
|
|
|
event_cache = []
|
|
|
|
|
|
class A(HasTraits):
|
|
|
x = EventfulList([c for c in 'abc'])
|
|
|
a = A()
|
|
|
a.x.on_events(lambda i, x: event_cache.append('insert'), \
|
|
|
lambda i, x: event_cache.append('set'), \
|
|
|
lambda i: event_cache.append('del'), \
|
|
|
lambda: event_cache.append('reverse'), \
|
|
|
lambda *p, **k: event_cache.append('sort'))
|
|
|
|
|
|
a.x.remove('c')
|
|
|
# ab
|
|
|
a.x.insert(0, 'z')
|
|
|
# zab
|
|
|
del a.x[1]
|
|
|
# zb
|
|
|
a.x.reverse()
|
|
|
# bz
|
|
|
a.x[1] = 'o'
|
|
|
# bo
|
|
|
a.x.append('a')
|
|
|
# boa
|
|
|
a.x.sort()
|
|
|
# abo
|
|
|
|
|
|
# Were the correct events captured?
|
|
|
self.assertEqual(event_cache, ['del', 'insert', 'del', 'reverse', 'set', 'set', 'sort'])
|
|
|
|
|
|
# Is the output correct?
|
|
|
self.assertEqual(a.x, [c for c in 'abo'])
|
|
|
|
|
|
def test_dict(self):
|
|
|
"""Does the EventfulDict work?"""
|
|
|
event_cache = []
|
|
|
|
|
|
class A(HasTraits):
|
|
|
x = EventfulDict({c: c for c in 'abc'})
|
|
|
a = A()
|
|
|
a.x.on_events(lambda k, v: event_cache.append('add'), \
|
|
|
lambda k, v: event_cache.append('set'), \
|
|
|
lambda k: event_cache.append('del'))
|
|
|
|
|
|
del a.x['c']
|
|
|
# ab
|
|
|
a.x['z'] = 1
|
|
|
# abz
|
|
|
a.x['z'] = 'z'
|
|
|
# abz
|
|
|
a.x.pop('a')
|
|
|
# bz
|
|
|
|
|
|
# Were the correct events captured?
|
|
|
self.assertEqual(event_cache, ['del', 'add', 'set', 'del'])
|
|
|
|
|
|
# Is the output correct?
|
|
|
self.assertEqual(a.x, {c: c for c in 'bz'})
|
|
|
|