114299Sbbruce@ucdavis.edu/* 214299Sbbruce@ucdavis.edu tests/test_async.cpp -- __await__ support 314299Sbbruce@ucdavis.edu 414299Sbbruce@ucdavis.edu Copyright (c) 2019 Google Inc. 514299Sbbruce@ucdavis.edu 614299Sbbruce@ucdavis.edu All rights reserved. Use of this source code is governed by a 714299Sbbruce@ucdavis.edu BSD-style license that can be found in the LICENSE file. 814299Sbbruce@ucdavis.edu*/ 914299Sbbruce@ucdavis.edu 1014299Sbbruce@ucdavis.edu#include "pybind11_tests.h" 1114299Sbbruce@ucdavis.edu 1214299Sbbruce@ucdavis.eduTEST_SUBMODULE(async_module, m) { 1314299Sbbruce@ucdavis.edu struct DoesNotSupportAsync {}; 1414299Sbbruce@ucdavis.edu py::class_<DoesNotSupportAsync>(m, "DoesNotSupportAsync") 1514299Sbbruce@ucdavis.edu .def(py::init<>()); 1614299Sbbruce@ucdavis.edu struct SupportsAsync {}; 1714299Sbbruce@ucdavis.edu py::class_<SupportsAsync>(m, "SupportsAsync") 1814299Sbbruce@ucdavis.edu .def(py::init<>()) 1914299Sbbruce@ucdavis.edu .def("__await__", [](const SupportsAsync& self) -> py::object { 2014299Sbbruce@ucdavis.edu static_cast<void>(self); 2114299Sbbruce@ucdavis.edu py::object loop = py::module::import("asyncio.events").attr("get_event_loop")(); 2214299Sbbruce@ucdavis.edu py::object f = loop.attr("create_future")(); 2314299Sbbruce@ucdavis.edu f.attr("set_result")(5); 2414299Sbbruce@ucdavis.edu return f.attr("__await__")(); 2514299Sbbruce@ucdavis.edu }); 2614299Sbbruce@ucdavis.edu} 27