def test_compute_remove_root_patch(self): from bokeh.document import Document d = Document() root1 = SomeModelInTestDocument(foo=42) child1 = AnotherModelInTestDocument(bar=43) root1.child = child1 d.add_root(root1) before = d.to_json() d.remove_root(root1) after = d.to_json() patch = Document._compute_patch_between_json(before, after) expected = dict(references=[], events= [ {'kind': 'RootRemoved', 'model': {'id': None, 'type': 'SomeModelInTestDocument'}} ]) expected['events'][0]['model']['id'] = root1._id self.assertDictEqual(expected, patch) d2 = Document.from_json(before) d2.apply_json_patch(patch) self.assertEqual([], d2.roots)
def test_compute_remove_root_patch(self): from bokeh.document import Document d = Document() root1 = SomeModelInTestDocument(foo=42) child1 = AnotherModelInTestDocument(bar=43) root1.child = child1 d.add_root(root1) before = d.to_json() d.remove_root(root1) after = d.to_json() patch = Document._compute_patch_between_json(before, after) expected = dict( references=[], events=[{"kind": "RootRemoved", "model": {"id": None, "type": "SomeModelInTestDocument"}}] ) expected["events"][0]["model"]["id"] = root1._id self.assertDictEqual(expected, patch) d2 = Document.from_json(before) d2.apply_json_patch(patch) self.assertEqual([], d2.roots)
def test_compute_remove_root_patch(): d = Document() root1 = SomeModelInTestDocument(foo=42) child1 = AnotherModelInTestDocument(bar=43) root1.child = child1 d.add_root(root1) before = d.to_json() d.remove_root(root1) after = d.to_json() patch = bdu.compute_patch_between_json(before, after) expected = dict(references=[], events=[{ 'kind': 'RootRemoved', 'model': { 'id': None, 'type': 'SomeModelInTestDocument' } }]) expected['events'][0]['model']['id'] = root1._id assert expected == patch d2 = Document.from_json(before) d2.apply_json_patch(patch) assert d2.roots == []
def test_len(self) -> None: d = Document() dm = d.models assert len(dm) == 0 r1 = Row(children=[Div()]) r2 = Row(children=[Div(), Div()]) d.add_root(r1) assert len(dm) == 2 d.add_root(r2) assert len(dm) == 5 d.remove_root(r1) assert len(dm) == 3 d.remove_root(r2) assert len(dm) == 0
def test_theming_a_document_before_adding_root(self) -> None: theme = Theme(json={'attrs': {'ThemedModel': {'string': 'w00t'}}}) obj = ThemedModel() doc = Document() assert 'hello' == obj.string doc.theme = theme assert doc.theme is theme changes = dict(calls=[]) def record_trigger(attr, old, new_): changes['calls'].append((attr, old, new_)) obj.on_change('string', record_trigger) doc.add_root(obj) assert 'w00t' == obj.string doc.remove_root(obj) assert 'hello' == obj.string assert [('string', 'hello', 'w00t'), ('string', 'w00t', 'hello')] == changes['calls']
def test_theming_a_document_before_adding_root(self): theme = Theme(json={'attrs': {'ThemedModel': {'string': 'w00t'}}}) obj = ThemedModel() doc = Document() self.assertEqual('hello', obj.string) doc.theme = theme self.assertIs(doc.theme, theme) changes = dict(calls=[]) def record_trigger(attr, old, new_): changes['calls'].append((attr, old, new_)) obj.on_change('string', record_trigger) doc.add_root(obj) self.assertEqual('w00t', obj.string) doc.remove_root(obj) self.assertEqual('hello', obj.string) self.assertEqual([('string', 'hello', 'w00t'), ('string', 'w00t', 'hello')], changes['calls'])
def test_theming_a_document_before_adding_root(self): theme = Theme(json={ 'attrs' : { 'ThemedModel' : { 'string' : 'w00t' } } }) obj = ThemedModel() doc = Document() assert 'hello' == obj.string doc.theme = theme assert doc.theme is theme changes = dict(calls=[]) def record_trigger(attr, old, new_): changes['calls'].append((attr, old, new_)) obj.on_change('string', record_trigger) doc.add_root(obj) assert 'w00t' == obj.string doc.remove_root(obj) assert 'hello' == obj.string assert [('string', 'hello', 'w00t'), ('string', 'w00t', 'hello')] == changes['calls']
def test_seen(self) -> None: d = Document() dm = d.models assert len(dm) == 0 m1 = Div(id="m1") m2 = Div(id="m2") d.add_root(m1) d.add_root(m2) assert not dm.seen("m1") assert not dm.seen("m2") d.remove_root(m2) assert not dm.seen("m1") assert dm.seen("m2") d.remove_root(m1) assert dm.seen("m1") assert dm.seen("m2")
def test_theming_a_document_before_adding_root(self): theme = Theme(json={ 'attrs' : { 'ThemedModel' : { 'string' : 'w00t' } } }) obj = ThemedModel() doc = Document() self.assertEqual('hello', obj.string) doc.theme = theme self.assertIs(doc.theme, theme) changes = dict(calls=[]) def record_trigger(attr, old, new_): changes['calls'].append((attr, old, new_)) obj.on_change('string', record_trigger) doc.add_root(obj) self.assertEqual('w00t', obj.string) doc.remove_root(obj) self.assertEqual('hello', obj.string) self.assertEqual([('string', 'hello', 'w00t'), ('string', 'w00t', 'hello')], changes['calls'])
def test_recompute(self) -> None: d = Document() dm = d.models assert len(dm) == 0 r1 = Row(children=[Div(id="d1", name="dr1")]) r2 = Row(children=[Div(id="d2", name="dr2"), Div(id="d3", name="dr2")]) d.add_root(r1) d.add_root(r2) assert set(dm._models_by_name._dict) == {"dr1", "dr2"} for m in dm: assert m._document is d d.remove_root(r1) for m in dm: assert m._document is d assert r1._document is None assert r1.children[0]._document is None assert set(dm._models_by_name._dict) == {"dr2"}