| // 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 <fidl/test/frobinator/cpp/fidl.h> |
| #include <lib/zx/channel.h> |
| |
| #include "gtest/gtest.h" |
| #include "lib/fidl/cpp/interface_handle.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 |