# coding: utf-8 from __future__ import unicode_literals import pytest from spacy.tokens import Doc from spacy.vocab import Vocab @pytest.fixture def doc_w_attrs(en_tokenizer): Doc.set_extension("_test_attr", default=False) Doc.set_extension("_test_prop", getter=lambda doc: len(doc.text)) Doc.set_extension( "_test_method", method=lambda doc, arg: "{}{}".format(len(doc.text), arg) ) doc = en_tokenizer("This is a test.") doc._._test_attr = "test" return doc def test_serialize_ext_attrs_from_bytes(doc_w_attrs): doc_b = doc_w_attrs.to_bytes() doc = Doc(Vocab()).from_bytes(doc_b) assert doc._.has("_test_attr") assert doc._._test_attr == "test" assert doc._._test_prop == len(doc.text) assert doc._._test_method("test") == "{}{}".format(len(doc.text), "test")