| // Copyright 2018 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/interface_handle.h" | |
| #include <lib/zx/channel.h> | |
| #include <fidl/test/frobinator/cpp/fidl.h> | |
| #include <gtest/gtest.h> | |
| #include "lib/fidl/cpp/test/async_loop_for_test.h" | |
| namespace fidl { | |
| namespace { | |
| TEST(InterfaceHandle, Trivial) { InterfaceHandle<fidl::test::frobinator::Frobinator> handle; } | |
| TEST(InterfaceHandle, InterfacePtrConversion) { | |
| fidl::test::AsyncLoopForTest loop; | |
| fidl::test::frobinator::FrobinatorPtr ptr; | |
| auto request = ptr.NewRequest(); | |
| EXPECT_TRUE(request.is_valid()); | |
| EXPECT_TRUE(ptr.is_bound()); | |
| InterfaceHandle<fidl::test::frobinator::Frobinator> handle = std::move(ptr); | |
| EXPECT_TRUE(handle.is_valid()); | |
| EXPECT_FALSE(ptr.is_bound()); | |
| handle = nullptr; | |
| EXPECT_FALSE(handle.is_valid()); | |
| } | |
| TEST(InterfaceHandle, NewRequest) { | |
| fidl::test::AsyncLoopForTest loop; | |
| InterfaceHandle<fidl::test::frobinator::Frobinator> handle; | |
| EXPECT_FALSE(handle.is_valid()); | |
| auto request = handle.NewRequest(); | |
| EXPECT_TRUE(request.is_valid()); | |
| EXPECT_TRUE(handle.is_valid()); | |
| fidl::test::frobinator::FrobinatorPtr ptr = handle.Bind(); | |
| EXPECT_FALSE(handle.is_valid()); | |
| EXPECT_TRUE(ptr.is_bound()); | |
| } | |
| TEST(InterfaceHandle, Channel) { | |
| zx::channel h1, h2; | |
| EXPECT_EQ(ZX_OK, zx::channel::create(0, &h1, &h2)); | |
| zx_handle_t saved = h1.get(); | |
| InterfaceHandle<fidl::test::frobinator::Frobinator> handle(std::move(h1)); | |
| EXPECT_TRUE(handle.is_valid()); | |
| EXPECT_EQ(saved, handle.channel().get()); | |
| zx::channel h3 = handle.TakeChannel(); | |
| EXPECT_EQ(saved, h3.get()); | |
| handle.set_channel(std::move(h3)); | |
| EXPECT_EQ(saved, handle.channel().get()); | |
| } | |
| } // namespace | |
| } // namespace fidl |