Raise AttributeError on attempts to access unset oneof fields (#510)
This commit is contained in:
committed by
GitHub
parent
098989e9e9
commit
6faac1d1ca
46
tests/oneof_pattern_matching.py
Normal file
46
tests/oneof_pattern_matching.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
import pytest
|
||||
|
||||
import betterproto
|
||||
|
||||
|
||||
def test_oneof_pattern_matching():
|
||||
@dataclass
|
||||
class Sub(betterproto.Message):
|
||||
val: int = betterproto.int32_field(1)
|
||||
|
||||
@dataclass
|
||||
class Foo(betterproto.Message):
|
||||
bar: int = betterproto.int32_field(1, group="group1")
|
||||
baz: str = betterproto.string_field(2, group="group1")
|
||||
sub: Sub = betterproto.message_field(3, group="group2")
|
||||
abc: str = betterproto.string_field(4, group="group2")
|
||||
|
||||
foo = Foo(baz="test1", abc="test2")
|
||||
|
||||
match foo:
|
||||
case Foo(bar=_):
|
||||
pytest.fail("Matched 'bar' instead of 'baz'")
|
||||
case Foo(baz=v):
|
||||
assert v == "test1"
|
||||
case _:
|
||||
pytest.fail("Matched neither 'bar' nor 'baz'")
|
||||
|
||||
match foo:
|
||||
case Foo(sub=_):
|
||||
pytest.fail("Matched 'sub' instead of 'abc'")
|
||||
case Foo(abc=v):
|
||||
assert v == "test2"
|
||||
case _:
|
||||
pytest.fail("Matched neither 'sub' nor 'abc'")
|
||||
|
||||
foo.sub = Sub(val=1)
|
||||
|
||||
match foo:
|
||||
case Foo(sub=Sub(val=v)):
|
||||
assert v == 1
|
||||
case Foo(abc=v):
|
||||
pytest.fail("Matched 'abc' instead of 'sub'")
|
||||
case _:
|
||||
pytest.fail("Matched neither 'sub' nor 'abc'")
|
||||
Reference in New Issue
Block a user