From 71737cf696bbee0fad726427fe7df167202ea79a Mon Sep 17 00:00:00 2001 From: boukeversteegh Date: Sun, 24 May 2020 20:29:32 +0200 Subject: [PATCH] Test case for issue #63 --- .../inputs/oneof_enum/oneof_enum-enum-0.json | 3 ++ .../inputs/oneof_enum/oneof_enum-enum-1.json | 3 ++ .../tests/inputs/oneof_enum/oneof_enum.json | 6 +++ .../tests/inputs/oneof_enum/oneof_enum.proto | 18 ++++++++ .../inputs/oneof_enum/test_oneof_enum.py | 42 +++++++++++++++++++ 5 files changed, 72 insertions(+) create mode 100644 betterproto/tests/inputs/oneof_enum/oneof_enum-enum-0.json create mode 100644 betterproto/tests/inputs/oneof_enum/oneof_enum-enum-1.json create mode 100644 betterproto/tests/inputs/oneof_enum/oneof_enum.json create mode 100644 betterproto/tests/inputs/oneof_enum/oneof_enum.proto create mode 100644 betterproto/tests/inputs/oneof_enum/test_oneof_enum.py diff --git a/betterproto/tests/inputs/oneof_enum/oneof_enum-enum-0.json b/betterproto/tests/inputs/oneof_enum/oneof_enum-enum-0.json new file mode 100644 index 0000000..be30cf0 --- /dev/null +++ b/betterproto/tests/inputs/oneof_enum/oneof_enum-enum-0.json @@ -0,0 +1,3 @@ +{ + "signal": "PASS" +} diff --git a/betterproto/tests/inputs/oneof_enum/oneof_enum-enum-1.json b/betterproto/tests/inputs/oneof_enum/oneof_enum-enum-1.json new file mode 100644 index 0000000..cb63873 --- /dev/null +++ b/betterproto/tests/inputs/oneof_enum/oneof_enum-enum-1.json @@ -0,0 +1,3 @@ +{ + "signal": "RESIGN" +} diff --git a/betterproto/tests/inputs/oneof_enum/oneof_enum.json b/betterproto/tests/inputs/oneof_enum/oneof_enum.json new file mode 100644 index 0000000..3220b70 --- /dev/null +++ b/betterproto/tests/inputs/oneof_enum/oneof_enum.json @@ -0,0 +1,6 @@ +{ + "move": { + "x": 2, + "y": 3 + } +} diff --git a/betterproto/tests/inputs/oneof_enum/oneof_enum.proto b/betterproto/tests/inputs/oneof_enum/oneof_enum.proto new file mode 100644 index 0000000..dfe19d4 --- /dev/null +++ b/betterproto/tests/inputs/oneof_enum/oneof_enum.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +message Test { + oneof action { + Signal signal = 1; + Move move = 2; + } +} + +enum Signal { + PASS = 0; + RESIGN = 1; +} + +message Move { + int32 x = 1; + int32 y = 2; +} \ No newline at end of file diff --git a/betterproto/tests/inputs/oneof_enum/test_oneof_enum.py b/betterproto/tests/inputs/oneof_enum/test_oneof_enum.py new file mode 100644 index 0000000..1d6ea98 --- /dev/null +++ b/betterproto/tests/inputs/oneof_enum/test_oneof_enum.py @@ -0,0 +1,42 @@ +import pytest + +import betterproto +from betterproto.tests.output_betterproto.oneof_enum.oneof_enum import ( + Move, + Signal, + Test, +) +from betterproto.tests.util import get_test_case_json_data + + +@pytest.mark.xfail +def test_which_one_of_returns_enum_with_default_value(): + """ + returns first field when it is enum and set with default value + """ + message = Test() + message.from_json(get_test_case_json_data("oneof_enum", "oneof_enum-enum-0.json")) + assert message.move is None + assert message.signal == Signal.PASS + assert betterproto.which_one_of(message, "action") == ("signal", Signal.PASS) + + +@pytest.mark.xfail +def test_which_one_of_returns_enum_with_non_default_value(): + """ + returns first field when it is enum and set with non default value + """ + message = Test() + message.from_json(get_test_case_json_data("oneof_enum", "oneof_enum-enum-1.json")) + assert message.move is None + assert message.signal == Signal.PASS + assert betterproto.which_one_of(message, "action") == ("signal", Signal.RESIGN) + + +@pytest.mark.xfail +def test_which_one_of_returns_second_field_when_set(): + message = Test() + message.from_json(get_test_case_json_data("oneof_enum")) + assert message.move == Move(x=2, y=3) + assert message.signal == 0 + assert betterproto.which_one_of(message, "action") == ("move", Move(x=2, y=3))