| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- """The vendored protoc codegen descriptors must be loadable and usable.
- Loaded by file path (not via ``import chattolib._codegen``) so this test is
- valid even before the generated service stubs exist — importing through the
- ``chattolib`` package would otherwise trigger ``chattolib/__init__.py``.
- """
- import importlib.util
- import os
- _CODEGEN_DIR = os.path.join(
- os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
- "src",
- "chattolib",
- "_codegen",
- )
- def _load(name):
- path = os.path.join(_CODEGEN_DIR, f"{name}.py")
- spec = importlib.util.spec_from_file_location(f"_test_codegen_{name}", path)
- mod = importlib.util.module_from_spec(spec)
- spec.loader.exec_module(mod) # type: ignore[union-attr]
- return mod
- def test_codegen_request_round_trips():
- g = _load("protoc_gen_request_pb2")
- req = g.CodeGeneratorRequest()
- req.language = "chattolib"
- req.file_to_generate.append("chatto/api/v1/rooms.proto")
- fd = req.proto_file.add()
- fd.name = "chatto/api/v1/rooms.proto"
- fd.package = "chatto.api.v1"
- svc = fd.service.add()
- svc.name = "RoomService"
- m = svc.method.add()
- m.name = "JoinRoom"
- m.input_type = ".chatto.api.v1.JoinRoomRequest"
- m.output_type = ".chatto.api.v1.JoinRoomResponse"
- req2 = g.CodeGeneratorRequest.FromString(req.SerializeToString())
- assert req2.file_to_generate[0] == "chatto/api/v1/rooms.proto"
- assert req2.proto_file[0].service[0].method[0].name == "JoinRoom"
- def test_codegen_response_file_field():
- g = _load("protoc_gen_response_pb2")
- resp = g.CodeGeneratorResponse()
- resp.file.add().name = "out/foo_connect.py"
- resp.file.add().content = "print('hi')"
- resp2 = g.CodeGeneratorResponse.FromString(resp.SerializeToString())
- assert resp2.file[1].content == "print('hi')"
|