test_async.cpp revision 14299:2fbea9df56d2
1/*
2    tests/test_async.cpp -- __await__ support
3
4    Copyright (c) 2019 Google Inc.
5
6    All rights reserved. Use of this source code is governed by a
7    BSD-style license that can be found in the LICENSE file.
8*/
9
10#include "pybind11_tests.h"
11
12TEST_SUBMODULE(async_module, m) {
13    struct DoesNotSupportAsync {};
14    py::class_<DoesNotSupportAsync>(m, "DoesNotSupportAsync")
15        .def(py::init<>());
16    struct SupportsAsync {};
17    py::class_<SupportsAsync>(m, "SupportsAsync")
18        .def(py::init<>())
19        .def("__await__", [](const SupportsAsync& self) -> py::object {
20            static_cast<void>(self);
21            py::object loop = py::module::import("asyncio.events").attr("get_event_loop")();
22            py::object f = loop.attr("create_future")();
23            f.attr("set_result")(5);
24            return f.attr("__await__")();
25        });
26}
27