def test_process_document_events_with_refs(): e = _Event([_M(), _M()], []) r, bufs = process_document_events([e]) assert bufs == [] json = loads(r) assert sorted(list(json)) == ['events', 'references'] assert len(json['references']) == 2 assert len(json['events']) == 1 assert json['events'] == ['junk']
def test_process_document_events_with_buffers_and_use_buffers_false() -> None: e = _Event([], [1, 2]) r, bufs = process_document_events([e], use_buffers=False) assert bufs == [] json = loads(r) assert sorted(list(json)) == ['events', 'references'] assert len(json['references']) == 0 assert len(json['events']) == 1 assert json['events'] == ['junk']
def test_process_document_events_no_buffers() -> None: e = _Event([], []) r, bufs = process_document_events([e]) assert bufs == [] json = loads(r) assert sorted(list(json)) == ['events', 'references'] assert len(json['references']) == 0 assert len(json['events']) == 1 assert json['events'] == ['junk']
def patch_test(new_value): serializable_new = root1.lookup('foo').property.to_serializable(root1, 'foo', new_value) event1 = ModelChangedEvent(d, root1, 'foo', root1.foo, new_value, serializable_new) patch1, buffers = process_document_events([event1]) d.apply_json_patch_string(patch1) if isinstance(new_value, dict): return root1.lookup('foo').serializable_value(root1) else: return root1.foo
def test_process_document_events_with_buffers_and_use_buffers_false(): e = _Event([], [1,2]) r, bufs = process_document_events([e], use_buffers=False) assert bufs == [] json = loads(r) assert sorted(list(json)) == ['events', 'references'] assert len(json['references']) == 0 assert len(json['events']) == 1 assert json['events'] == ['junk']
def test_process_document_events_no_buffers(): e = _Event([], []) r, bufs = process_document_events([e]) assert bufs == [] json = loads(r) assert sorted(list(json)) == ['events', 'references'] assert len(json['references']) == 0 assert len(json['events']) == 1 assert json['events'] == ['junk']
def pysync(event): json_patch, buffers = process_document_events([event], use_buffers=True) buffer_map = {} for (ref, buffer) in buffers: buffer_map[ref['id']] = pyodide.to_js(buffer).buffer jsdoc.apply_json_patch(JSON.parse(json_patch), pyodide.to_js(buffer_map), setter_id='js')
def test_patch_reference_property(self) -> None: d = document.Document() assert not d.roots assert len(d._all_models) == 0 root1 = SomeModelInTestDocument(foo=42) root2 = SomeModelInTestDocument(foo=43) child1 = SomeModelInTestDocument(foo=44) child2 = SomeModelInTestDocument(foo=45) child3 = SomeModelInTestDocument(foo=46, child=child2) root1.child = child1 root2.child = child1 d.add_root(root1) d.add_root(root2) assert len(d.roots) == 2 assert child1.id in d._all_models assert child2.id not in d._all_models assert child3.id not in d._all_models event1 = ModelChangedEvent(d, root1, 'child', root1.child, child3, child3) patch1, buffers = process_document_events([event1]) d.apply_json_patch_string(patch1) assert root1.child.id == child3.id assert root1.child.child.id == child2.id assert child1.id in d._all_models assert child2.id in d._all_models assert child3.id in d._all_models # put it back how it was before event2 = ModelChangedEvent(d, root1, 'child', root1.child, child1, child1) patch2, buffers = process_document_events([event2]) d.apply_json_patch_string(patch2) assert root1.child.id == child1.id assert root1.child.child is None assert child1.id in d._all_models assert child2.id not in d._all_models assert child3.id not in d._all_models
def test_process_document_events_mixed() -> None: e1 = _Event([], [1, 2]) e2 = _Event([_M(), _M(), _M()], [3, 4, 5]) e3 = _Event([_M(), _M()], []) r, bufs = process_document_events([e1, e2, e3]) assert bufs == [1, 2, 3, 4, 5] json = loads(r) assert sorted(list(json)) == ['events', 'references'] assert len(json['references']) == 5 assert len(json['events']) == 3 assert json['events'] == ['junk', 'junk', 'junk']
def test_process_document_events_mixed(): e1 = _Event([], [1,2]) e2 = _Event([_M(),_M(),_M()], [3,4, 5]) e3 = _Event([_M(),_M()], []) r, bufs = process_document_events([e1, e2, e3]) assert bufs == [1, 2, 3, 4, 5] json = loads(r) assert sorted(list(json)) == ['events', 'references'] assert len(json['references']) == 5 assert len(json['events']) == 3 assert json['events'] == ['junk', 'junk', 'junk']
def test_patch_reference_property(self): d = document.Document() assert not d.roots assert len(d._all_models) == 0 root1 = SomeModelInTestDocument(foo=42) root2 = SomeModelInTestDocument(foo=43) child1 = SomeModelInTestDocument(foo=44) child2 = SomeModelInTestDocument(foo=45) child3 = SomeModelInTestDocument(foo=46, child=child2) root1.child = child1 root2.child = child1 d.add_root(root1) d.add_root(root2) assert len(d.roots) == 2 assert child1.id in d._all_models assert child2.id not in d._all_models assert child3.id not in d._all_models event1 = ModelChangedEvent(d, root1, 'child', root1.child, child3, child3) patch1, buffers = process_document_events([event1]) d.apply_json_patch_string(patch1) assert root1.child.id == child3.id assert root1.child.child.id == child2.id assert child1.id in d._all_models assert child2.id in d._all_models assert child3.id in d._all_models # put it back how it was before event2 = ModelChangedEvent(d, root1, 'child', root1.child, child1, child1) patch2, buffers = process_document_events([event2]) d.apply_json_patch_string(patch2) assert root1.child.id == child1.id assert root1.child.child is None assert child1.id in d._all_models assert child2.id not in d._all_models assert child3.id not in d._all_models
def patch_test(new_value): serializable_new = root1.lookup('foo').property.to_serializable(root1, 'foo', new_value) event1 = ModelChangedEvent(d, root1, 'foo', root1.foo, new_value, serializable_new) patch1, buffers = process_document_events([event1]) d.apply_json_patch_string(patch1) if isinstance(new_value, dict): expected = copy(new_value) if 'units' not in expected: expected['units'] = root1.foo_units assert expected == root1.lookup('foo').serializable_value(root1) else: assert new_value == root1.foo
def test_patch_integer_property(self) -> None: d = document.Document() assert not d.roots assert len(d._all_models) == 0 root1 = SomeModelInTestDocument(foo=42) root2 = SomeModelInTestDocument(foo=43) child1 = SomeModelInTestDocument(foo=44) root1.child = child1 root2.child = child1 d.add_root(root1) d.add_root(root2) assert len(d.roots) == 2 event1 = ModelChangedEvent(d, root1, 'foo', root1.foo, 57, 57) patch1, buffers = process_document_events([event1]) d.apply_json_patch_string(patch1) assert root1.foo == 57 event2 = ModelChangedEvent(d, child1, 'foo', child1.foo, 67, 67) patch2, buffers = process_document_events([event2]) d.apply_json_patch_string(patch2) assert child1.foo == 67
def test_patch_integer_property(self): d = document.Document() assert not d.roots assert len(d._all_models) == 0 root1 = SomeModelInTestDocument(foo=42) root2 = SomeModelInTestDocument(foo=43) child1 = SomeModelInTestDocument(foo=44) root1.child = child1 root2.child = child1 d.add_root(root1) d.add_root(root2) assert len(d.roots) == 2 event1 = ModelChangedEvent(d, root1, 'foo', root1.foo, 57, 57) patch1, buffers = process_document_events([event1]) d.apply_json_patch_string(patch1) assert root1.foo == 57 event2 = ModelChangedEvent(d, child1, 'foo', child1.foo, 67, 67) patch2, buffers = process_document_events([event2]) d.apply_json_patch_string(patch2) assert child1.foo == 67
def test_patch_two_properties_at_once(self): d = document.Document() assert not d.roots assert len(d._all_models) == 0 root1 = SomeModelInTestDocument(foo=42) child1 = SomeModelInTestDocument(foo=43) root1.child = child1 d.add_root(root1) assert len(d.roots) == 1 assert root1.child == child1 assert root1.foo == 42 assert root1.child.foo == 43 child2 = SomeModelInTestDocument(foo=44) event1 = ModelChangedEvent(d, root1, 'foo', root1.foo, 57, 57) event2 = ModelChangedEvent(d, root1, 'child', root1.child, child2, child2) patch1, buffers = process_document_events([event1, event2]) d.apply_json_patch_string(patch1) assert root1.foo == 57 assert root1.child.foo == 44