mirror of https://github.com/pyodide/pyodide.git
66 lines
3.1 KiB
Python
66 lines
3.1 KiB
Python
# mypy: ignore-errors
|
|
from pytest_pyodide.decorator import run_in_pyodide
|
|
|
|
|
|
@run_in_pyodide(packages=["protobuf"])
|
|
def test_protobuf(selenium):
|
|
from google.protobuf.descriptor_pb2 import FieldDescriptorProto
|
|
from google.protobuf.internal import api_implementation
|
|
from google.protobuf.proto_builder import MakeSimpleProtoClass
|
|
|
|
_message = api_implementation._c_module
|
|
assert _message is not None # check presence of binary component
|
|
|
|
SampleObject = MakeSimpleProtoClass(
|
|
{
|
|
"field1": FieldDescriptorProto.TYPE_INT64,
|
|
"field2": FieldDescriptorProto.TYPE_INT64,
|
|
}
|
|
)
|
|
|
|
sample = SampleObject()
|
|
sample.field1 = 1
|
|
sample.field2 = 2
|
|
|
|
assert repr(sample) == "field1: 1\nfield2: 2\n"
|
|
|
|
|
|
@run_in_pyodide(packages=["protobuf"])
|
|
def test_generated_protobuf_code(selenium):
|
|
"""
|
|
This tests whether the package works with a generated _pb2.py file.
|
|
It uses the addressbook.proto from here:
|
|
https://github.com/protocolbuffers/protobuf/blob/main/examples/addressbook.proto
|
|
After generation some small modifications have been made to fit the tests.
|
|
It doesn't create any new globals for example.
|
|
"""
|
|
from copy import copy, deepcopy
|
|
|
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
from google.protobuf import symbol_database as _symbol_database
|
|
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
|
|
from google.protobuf.internal import builder as _builder
|
|
|
|
_sym_db = _symbol_database.Default()
|
|
|
|
assert google_dot_protobuf_dot_timestamp__pb2 # silence flake8 by "using it"
|
|
|
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
|
|
b'\n\x11\x61\x64\x64ressbook.proto\x12\x08tutorial\x1a\x1fgoogle/protobuf/timestamp.proto"\x87\x02\n\x06Person\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x05\x12\r\n\x05\x65mail\x18\x03 \x01(\t\x12,\n\x06phones\x18\x04 \x03(\x0b\x32\x1c.tutorial.Person.PhoneNumber\x12\x30\n\x0clast_updated\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1aG\n\x0bPhoneNumber\x12\x0e\n\x06number\x18\x01 \x01(\t\x12(\n\x04type\x18\x02 \x01(\x0e\x32\x1a.tutorial.Person.PhoneType"+\n\tPhoneType\x12\n\n\x06MOBILE\x10\x00\x12\x08\n\x04HOME\x10\x01\x12\x08\n\x04WORK\x10\x02"/\n\x0b\x41\x64\x64ressBook\x12 \n\x06people\x18\x01 \x03(\x0b\x32\x10.tutorial.PersonB\x95\x01\n\x1b\x63om.example.tutorial.protosB\x11\x41\x64\x64ressBookProtosP\x01Z:github.com/protocolbuffers/protobuf/examples/go/tutorialpb\xaa\x02$Google.Protobuf.Examples.AddressBookb\x06proto3'
|
|
)
|
|
|
|
_globals = {} # use a regular dict instead of the actual globals
|
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "addressbook_pb2", _globals)
|
|
|
|
# normally this would simply be person = Person(),
|
|
# but we intentionally don't modify globals here
|
|
person = _globals["Person"]()
|
|
person.name = "test"
|
|
person.id = 1
|
|
assert repr(person) == 'name: "test"\nid: 1\n'
|
|
|
|
# the main reason to test copying and deepcopying is that we patch message.c
|
|
assert repr(person) == repr(copy(person))
|
|
assert repr(person) == repr(deepcopy(person))
|