| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <lib/fidl/cpp/event_sender.h> |
| |
| #include <string> |
| #include <thread> |
| #include <utility> |
| #include <vector> |
| |
| #include "gtest/gtest.h" |
| #include "lib/fidl/cpp/interface_ptr.h" |
| #include "lib/fidl/cpp/test/async_loop_for_test.h" |
| #include "lib/fidl/cpp/test/frobinator_impl.h" |
| |
| namespace fidl { |
| namespace { |
| |
| TEST(EventSender, Events) { |
| fidl::test::AsyncLoopForTest loop; |
| |
| fidl::test::frobinator::FrobinatorPtr ptr; |
| auto request = ptr.NewRequest(); |
| |
| std::vector<std::string> hrobs; |
| ptr.events().Hrob = [&hrobs](StringPtr value) { hrobs.push_back(value); }; |
| |
| auto background = std::thread([&request]() { |
| // Notice that this thread does not have an async loop. |
| EventSender<fidl::test::frobinator::Frobinator> sender(std::move(request)); |
| EXPECT_TRUE(sender.channel().is_valid()); |
| sender.events().Hrob("one"); |
| }); |
| background.join(); |
| |
| loop.RunUntilIdle(); |
| |
| EXPECT_EQ(1u, hrobs.size()); |
| EXPECT_EQ("one", hrobs[0]); |
| } |
| |
| } // namespace |
| } // namespace fidl |