def test_mapping_type(): # type: () -> None s = SimpleProto3() s.map_scalar[5] = "abcd" assert s.map_scalar[5] == "abcd" s.map_message[5].a_bool = True assert s.map_message[5] == OuterMessage3(a_bool=True) assert s.map_message.get_or_create(6) == OuterMessage3() assert s.map_message[6] == OuterMessage3() assert s.map_message.get_or_create(6) == OuterMessage3()
def test_mapping_type() -> None: s = SimpleProto3() s.map_scalar[5] = "abcd" assert s.map_scalar[5] == "abcd" s.map_message[5].a_string = "hi" assert s.map_message[5] == OuterMessage3(a_string="hi") assert s.map_message.get_or_create(6) == OuterMessage3() assert s.map_message[6] == OuterMessage3() assert s.map_message.get_or_create(6) == OuterMessage3() s2 = SimpleProto3(map_scalar={5: "abcd"}, map_message={5: OuterMessage3(a_string="hi")})
def test_extensions_proto3() -> None: assert (MessageOptionsTestMsg.DESCRIPTOR.GetOptions(). Extensions[scalar_option] == "Hello world!") assert SCALAR_OPTION_FIELD_NUMBER == 51234 assert MessageOptionsTestMsg.DESCRIPTOR.GetOptions( ).Extensions[repeated_scalar_option] == ["A", "B", "C"] assert MessageOptionsTestMsg.DESCRIPTOR.GetOptions( ).Extensions[enum_option] == FOO3 assert MessageOptionsTestMsg.DESCRIPTOR.GetOptions( ).Extensions[repeated_enum_option] == [FOO3, BAR3] assert MessageOptionsTestMsg.DESCRIPTOR.GetOptions( ).Extensions[msg_option] == OuterMessage3(a_string="Hello OuterMessage3") assert list(MessageOptionsTestMsg.DESCRIPTOR.GetOptions(). Extensions[repeated_msg_option]) == [ OuterMessage3(a_string="Hello OuterMessage3 A"), OuterMessage3(a_string="Hello OuterMessage3 B"), ]
map_val = 5 map_val = s7.map_scalar.get(0) # E:2.7 E:3.8 map_val = s7.map_message.get(0) # E:2.7 E:3.8 # Incorrect constructor type should error s7 = SimpleProto3(map_scalar={"abcd": 5}, map_message={"abcd": "abcd"}) # E:2.7 E:3.8 # Castable types are typed as their cast, not the base type s8 = Simple1() s8.user_id = 55 # E:2.7 E:3.8 s8.email = "*****@*****.**" # E:2.7 E:3.8 s8.email_by_uid[55] = "*****@*****.**" # E:2.7 E:3.8 s8.email_by_uid[UserId(55)] = "*****@*****.**" # E:2.7 E:3.8 s8.email_by_uid[55] = Email("*****@*****.**") # E:2.7 E:3.8 s8 = Simple1(user_id=55, email="*****@*****.**", email_by_uid={55: "*****@*****.**"}) # E:2.7 E:3.8 # Should not reexport inner.proto, since it doesn't have public tag. from testproto.reexport_pb2 import Inner # E:2.7 E:3.8 # In proto2 - you can pass in None for primitive, but not in proto3 Simple2(a_string=None) OuterMessage3(a_bool=None) # E:2.7 E:3.8 # Repeated scalar fields are not assignable only extendable s9 = Simple1() s10 = Simple1() s9.a_repeated_string = s10.a_repeated_string # E:2.7 E:3.8 s9.rep_inner_enum = s10.rep_inner_enum # E:2.7 E:3.8
s8.email = "*****@*****.**" # E:2.7 E:3.8 s8.email_by_uid[55] = "*****@*****.**" # E:2.7 E:3.8 s8.email_by_uid[UserId(55)] = "*****@*****.**" # E:2.7 E:3.8 s8.email_by_uid[55] = Email("*****@*****.**") # E:2.7 E:3.8 s8 = Simple1( user_id=55, # E:2.7 E:3.8 email="*****@*****.**", # E:2.7 E:3.8 email_by_uid={55: "*****@*****.**"}, # E:2.7 E:3.8 ) # Should not reexport inner.proto, since it doesn't have public tag. from testproto.reexport_pb2 import Inner # E:2.7 E:3.8 # In proto2 - you can pass in None for primitive, but not in proto3 Simple2(a_string=None) OuterMessage3(a_string=None) # E:2.7 E:3.8 # Repeated scalar fields are not assignable only extendable s9 = Simple1() s10 = Simple1() s9.a_repeated_string = s10.a_repeated_string # E:2.7 E:3.8 s9.rep_inner_enum = s10.rep_inner_enum # E:2.7 E:3.8 # Some reserved keywored testing # Confirm that messages and enums w/ reserved names type properly PythonReservedKeywords().none.valid PythonReservedKeywords().none.invalid # E:2.7 E:3.8 # Enum should be int, even on enum with invalid name assert PythonReservedKeywords( ).valid == PythonReservedKeywords.valid_in_finally a_string = "hi"