| // Copyright 2020 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/llcpp/memory.h> |
| #include <lib/fidl/llcpp/message.h> |
| |
| #include <fidl/llcpp/linearized/test/llcpp/fidl.h> |
| #include <gtest/gtest.h> |
| |
| namespace fidl_linearized = ::llcpp::fidl::llcpp::linearized::test; |
| |
| TEST(LinearizedAndEncoded, FullyLinearizedAndEncoded) { |
| fidl_linearized::InnerStruct inner = {.x = 1}; |
| fidl_linearized::FullyLinearizedStruct input{.ptr = fidl::unowned_ptr(&inner)}; |
| fidl::OwnedEncodedMessage<fidl_linearized::FullyLinearizedStruct> encoded(&input); |
| EXPECT_TRUE(encoded.ok()); |
| |
| auto encoded_obj = reinterpret_cast<fidl_linearized::FullyLinearizedStruct*>( |
| encoded.GetOutgoingMessage().bytes()); |
| EXPECT_NE(encoded_obj, &input); |
| EXPECT_EQ(*reinterpret_cast<uintptr_t*>(&encoded_obj->ptr), FIDL_ALLOC_PRESENT); |
| EXPECT_EQ(reinterpret_cast<fidl_linearized::InnerStruct*>(encoded_obj + 1)->x, input.ptr->x); |
| } |