Implementing pickle methods (#535)
Continuing work from #484 by @kevinaud to fix #419 * Implementing pickle methods * Implement __copy__, __reduce__, and fix __setstate__ * Moved pickling tests into their own file * Add test for caching
This commit is contained in:
@@ -545,47 +545,6 @@ def test_oneof_default_value_set_causes_writes_wire():
|
||||
)
|
||||
|
||||
|
||||
def test_recursive_message():
|
||||
from tests.output_betterproto.recursivemessage import Test as RecursiveMessage
|
||||
|
||||
msg = RecursiveMessage()
|
||||
|
||||
assert msg.child == RecursiveMessage()
|
||||
|
||||
# Lazily-created zero-value children must not affect equality.
|
||||
assert msg == RecursiveMessage()
|
||||
|
||||
# Lazily-created zero-value children must not affect serialization.
|
||||
assert bytes(msg) == b""
|
||||
|
||||
|
||||
def test_recursive_message_defaults():
|
||||
from tests.output_betterproto.recursivemessage import (
|
||||
Intermediate,
|
||||
Test as RecursiveMessage,
|
||||
)
|
||||
|
||||
msg = RecursiveMessage(name="bob", intermediate=Intermediate(42))
|
||||
|
||||
# set values are as expected
|
||||
assert msg == RecursiveMessage(name="bob", intermediate=Intermediate(42))
|
||||
|
||||
# lazy initialized works modifies the message
|
||||
assert msg != RecursiveMessage(
|
||||
name="bob", intermediate=Intermediate(42), child=RecursiveMessage(name="jude")
|
||||
)
|
||||
msg.child.child.name = "jude"
|
||||
assert msg == RecursiveMessage(
|
||||
name="bob",
|
||||
intermediate=Intermediate(42),
|
||||
child=RecursiveMessage(child=RecursiveMessage(name="jude")),
|
||||
)
|
||||
|
||||
# lazily initialization recurses as needed
|
||||
assert msg.child.child.child.child.child.child.child == RecursiveMessage()
|
||||
assert msg.intermediate.child.intermediate == Intermediate()
|
||||
|
||||
|
||||
def test_message_repr():
|
||||
from tests.output_betterproto.recursivemessage import Test
|
||||
|
||||
@@ -699,25 +658,6 @@ def test_service_argument__expected_parameter():
|
||||
assert do_thing_request_parameter.annotation == "DoThingRequest"
|
||||
|
||||
|
||||
def test_copyability():
|
||||
@dataclass
|
||||
class Spam(betterproto.Message):
|
||||
foo: bool = betterproto.bool_field(1)
|
||||
bar: int = betterproto.int32_field(2)
|
||||
baz: List[str] = betterproto.string_field(3)
|
||||
|
||||
spam = Spam(bar=12, baz=["hello"])
|
||||
copied = copy(spam)
|
||||
assert spam == copied
|
||||
assert spam is not copied
|
||||
assert spam.baz is copied.baz
|
||||
|
||||
deepcopied = deepcopy(spam)
|
||||
assert spam == deepcopied
|
||||
assert spam is not deepcopied
|
||||
assert spam.baz is not deepcopied.baz
|
||||
|
||||
|
||||
def test_is_set():
|
||||
@dataclass
|
||||
class Spam(betterproto.Message):
|
||||
|
||||
Reference in New Issue
Block a user