summaryrefslogtreecommitdiffstats
path: root/tests/oneof_pattern_matching.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/oneof_pattern_matching.py')
-rw-r--r--tests/oneof_pattern_matching.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/oneof_pattern_matching.py b/tests/oneof_pattern_matching.py
new file mode 100644
index 0000000..2c5e797
--- /dev/null
+++ b/tests/oneof_pattern_matching.py
@@ -0,0 +1,46 @@
+from dataclasses import dataclass
+
+import pytest
+
+import aristaproto
+
+
+def test_oneof_pattern_matching():
+ @dataclass
+ class Sub(aristaproto.Message):
+ val: int = aristaproto.int32_field(1)
+
+ @dataclass
+ class Foo(aristaproto.Message):
+ bar: int = aristaproto.int32_field(1, group="group1")
+ baz: str = aristaproto.string_field(2, group="group1")
+ sub: Sub = aristaproto.message_field(3, group="group2")
+ abc: str = aristaproto.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'")