| // Copyright 2022 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/features.h> |
| |
| #include <gtest/gtest.h> |
| #include <src/lib/fidl/llcpp/tests/arena_checker.h> |
| |
| #if __FIDL_SUPPORT_HANDLES |
| #include <fidl/test.types/cpp/fidl.h> |
| #include <lib/zx/event.h> |
| #else |
| #include <fidl/test.types/cpp/type_conversions.h> |
| #endif |
| |
| TEST(WireToNaturalConversion, Primitives) { |
| EXPECT_EQ(true, fidl::ToNatural(true)); |
| EXPECT_EQ(1u, fidl::ToNatural(1u)); |
| EXPECT_EQ(1ull, fidl::ToNatural(1ull)); |
| EXPECT_EQ(0.12, fidl::ToNatural(0.12)); |
| } |
| |
| TEST(NaturalToWireConversion, Primitives) { |
| fidl::Arena arena; |
| EXPECT_EQ(true, fidl::ToWire(arena, true)); |
| EXPECT_EQ(1u, fidl::ToWire(arena, 1u)); |
| EXPECT_EQ(1ull, fidl::ToWire(arena, 1ull)); |
| EXPECT_EQ(0.12, fidl::ToWire(arena, 0.12)); |
| } |
| |
| TEST(WireNaturalConversionTraits, Enum) { |
| EXPECT_EQ(test_types::StrictEnum::kB, fidl::ToNatural(test_types::wire::StrictEnum::kB)); |
| EXPECT_EQ(test_types::FlexibleEnum(100), fidl::ToNatural(test_types::wire::FlexibleEnum(100))); |
| } |
| |
| TEST(NaturalToWireConversion, Enum) { |
| fidl::Arena arena; |
| EXPECT_EQ(test_types::wire::StrictEnum::kB, fidl::ToWire(arena, test_types::StrictEnum::kB)); |
| EXPECT_EQ(test_types::wire::FlexibleEnum(100), |
| fidl::ToWire(arena, test_types::FlexibleEnum(100))); |
| } |
| |
| TEST(WireToNaturalConversion, Bits) { |
| EXPECT_EQ(test_types::StrictBits::kB | test_types::StrictBits::kD, |
| fidl::ToNatural(test_types::wire::StrictBits::kB | test_types::wire::StrictBits::kD)); |
| EXPECT_EQ(test_types::FlexibleBits(100), fidl::ToNatural(test_types::wire::FlexibleBits(100))); |
| } |
| |
| TEST(NaturalToWireConversion, Bits) { |
| fidl::Arena arena; |
| EXPECT_EQ(test_types::wire::StrictBits::kB | test_types::wire::StrictBits::kD, |
| fidl::ToWire(arena, test_types::StrictBits::kB | test_types::StrictBits::kD)); |
| EXPECT_EQ(test_types::wire::FlexibleBits(100), |
| fidl::ToWire(arena, test_types::FlexibleBits(100))); |
| } |
| |
| #if __FIDL_SUPPORT_HANDLES |
| TEST(WireToNaturalConversion, Handle) { |
| zx::event ev; |
| ASSERT_EQ(ZX_OK, zx::event::create(0, &ev)); |
| zx_handle_t handle = ev.get(); |
| |
| { |
| zx::event ev2 = fidl::ToNatural(std::move(ev)); |
| EXPECT_EQ(ZX_OK, zx_handle_check_valid(ev2.get())); |
| EXPECT_EQ(handle, ev2.get()); |
| } |
| EXPECT_EQ(ZX_ERR_NOT_FOUND, zx_handle_check_valid(handle)); |
| } |
| |
| TEST(NaturalToWireConversion, Handle) { |
| fidl::Arena arena; |
| zx::event ev; |
| ASSERT_EQ(ZX_OK, zx::event::create(0, &ev)); |
| zx_handle_t handle = ev.get(); |
| |
| { |
| zx::event ev2 = fidl::ToWire(arena, std::move(ev)); |
| EXPECT_EQ(ZX_OK, zx_handle_check_valid(ev2.get())); |
| EXPECT_EQ(handle, ev2.get()); |
| } |
| EXPECT_EQ(ZX_ERR_NOT_FOUND, zx_handle_check_valid(handle)); |
| } |
| |
| TEST(WireToNaturalConversion, InvalidHandle) { |
| EXPECT_EQ(zx::handle(), fidl::ToNatural(zx::handle())); |
| } |
| |
| TEST(NaturalToWireConversion, InvalidHandle) { |
| fidl::Arena arena; |
| EXPECT_EQ(zx::handle(), fidl::ToWire(arena, zx::handle())); |
| } |
| |
| TEST(WireToNaturalConversion, ClientEnd) { |
| static_assert(std::is_same_v<decltype(fidl::ToNatural(fidl::ClientEnd<test_types::Baz>())), |
| fidl::ClientEnd<test_types::Baz>>); |
| EXPECT_EQ(fidl::ClientEnd<test_types::Baz>(), |
| fidl::ToNatural(fidl::ClientEnd<test_types::Baz>())); |
| } |
| |
| TEST(NaturalToWireConversion, ClientEnd) { |
| static_assert(std::is_same_v<decltype(fidl::ToNatural(fidl::ClientEnd<test_types::Baz>())), |
| fidl::ClientEnd<test_types::Baz>>); |
| fidl::Arena arena; |
| EXPECT_EQ(fidl::ClientEnd<test_types::Baz>(), |
| fidl::ToWire(arena, fidl::ClientEnd<test_types::Baz>())); |
| } |
| |
| TEST(WireToNaturalConversion, ServerEnd) { |
| static_assert(std::is_same_v<decltype(fidl::ToNatural(fidl::ServerEnd<test_types::Baz>())), |
| fidl::ServerEnd<test_types::Baz>>); |
| EXPECT_EQ(fidl::ServerEnd<test_types::Baz>(), |
| fidl::ToNatural(fidl::ServerEnd<test_types::Baz>())); |
| } |
| |
| TEST(NaturalToWireConversion, ServerEnd) { |
| static_assert(std::is_same_v<decltype(fidl::ToNatural(fidl::ServerEnd<test_types::Baz>())), |
| fidl::ServerEnd<test_types::Baz>>); |
| fidl::Arena arena; |
| EXPECT_EQ(fidl::ServerEnd<test_types::Baz>(), |
| fidl::ToWire(arena, fidl::ServerEnd<test_types::Baz>())); |
| } |
| #endif |
| |
| TEST(WireToNaturalConversion, String) { |
| EXPECT_EQ(std::string("abcd"), fidl::internal::ToNatural<std::string>(fidl::StringView("abcd"))); |
| EXPECT_EQ(std::string(), fidl::internal::ToNatural<std::string>(fidl::StringView(""))); |
| EXPECT_EQ(std::string(), fidl::internal::ToNatural<std::string>(fidl::StringView())); |
| } |
| |
| TEST(NaturalToWireConversion, String) { |
| fidl::Arena arena; |
| fidl::StringView str = fidl::ToWire(arena, std::string("abcd")); |
| EXPECT_EQ("abcd", str.get()); |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(str.data(), arena)); |
| |
| fidl::StringView empty_str = fidl::ToWire(arena, std::string("")); |
| EXPECT_EQ(0u, empty_str.size()); |
| EXPECT_NE(nullptr, empty_str.data()); |
| |
| fidl::StringView null_str = fidl::ToWire(arena, std::string()); |
| EXPECT_EQ(0u, null_str.size()); |
| EXPECT_NE(nullptr, null_str.data()); |
| } |
| |
| TEST(WireToNaturalConversion, OptionalString) { |
| EXPECT_EQ(std::optional(std::string("abcd")), fidl::ToNatural(fidl::StringView("abcd"))); |
| EXPECT_EQ(std::nullopt, fidl::ToNatural(fidl::StringView())); |
| } |
| |
| TEST(NaturalToWireConversion, OptionalString) { |
| fidl::Arena arena; |
| fidl::StringView str = fidl::ToWire(arena, std::optional(std::string("abcd"))); |
| EXPECT_EQ("abcd", str.get()); |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(str.data(), arena)); |
| |
| fidl::StringView empty_str = fidl::ToWire(arena, std::optional(std::string(""))); |
| EXPECT_EQ(0u, empty_str.size()); |
| EXPECT_NE(nullptr, empty_str.data()); |
| |
| fidl::StringView null_str = fidl::ToWire(arena, std::optional(std::string())); |
| EXPECT_EQ(0u, null_str.size()); |
| EXPECT_NE(nullptr, null_str.data()); |
| |
| fidl::StringView nullopt_str = fidl::ToWire(arena, std::optional<std::string>()); |
| EXPECT_EQ(0u, nullopt_str.size()); |
| EXPECT_EQ(nullptr, nullopt_str.data()); |
| } |
| |
| TEST(WireToNaturalConversion, Vector) { |
| uint32_t data[] = {1, 2, 3}; |
| EXPECT_EQ(std::vector<uint32_t>(data, data + std::size(data)), |
| fidl::internal::ToNatural<std::vector<uint32_t>>( |
| fidl::VectorView<uint32_t>::FromExternal(data, std::size(data)))); |
| } |
| |
| TEST(NaturalToWireConversion, Vector) { |
| fidl::Arena arena; |
| fidl::VectorView<uint32_t> vec = fidl::ToWire(arena, std::vector<uint32_t>{1, 2, 3}); |
| EXPECT_EQ(3u, vec.size()); |
| EXPECT_EQ(1u, vec[0]); |
| EXPECT_EQ(2u, vec[1]); |
| EXPECT_EQ(3u, vec[2]); |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(vec.data(), arena)); |
| |
| fidl::VectorView<uint32_t> empty_vec = fidl::ToWire(arena, std::vector<uint32_t>({})); |
| EXPECT_EQ(0u, empty_vec.size()); |
| EXPECT_NE(nullptr, empty_vec.data()); |
| |
| fidl::VectorView<uint32_t> null_vec = fidl::ToWire(arena, std::vector<uint32_t>()); |
| EXPECT_EQ(0u, null_vec.size()); |
| EXPECT_NE(nullptr, null_vec.data()); |
| } |
| |
| TEST(WireToNaturalConversion, OptionalVector) { |
| uint32_t data[] = {1, 2, 3}; |
| EXPECT_EQ(std::optional(std::vector<uint32_t>(data, data + std::size(data))), |
| fidl::ToNatural(fidl::VectorView<uint32_t>::FromExternal(data, std::size(data)))); |
| EXPECT_EQ(std::nullopt, fidl::ToNatural(fidl::VectorView<uint32_t>())); |
| } |
| |
| TEST(NaturalToWireConversion, OptionalVector) { |
| fidl::Arena arena; |
| fidl::VectorView<uint32_t> vec = |
| fidl::ToWire(arena, std::optional(std::vector<uint32_t>{1, 2, 3})); |
| EXPECT_EQ(3u, vec.size()); |
| EXPECT_EQ(1u, vec[0]); |
| EXPECT_EQ(2u, vec[1]); |
| EXPECT_EQ(3u, vec[2]); |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(vec.data(), arena)); |
| |
| fidl::VectorView<uint32_t> empty_vec = |
| fidl::ToWire(arena, std::optional(std::vector<uint32_t>({}))); |
| EXPECT_EQ(0u, empty_vec.size()); |
| EXPECT_NE(nullptr, empty_vec.data()); |
| |
| fidl::VectorView<uint32_t> null_vec = fidl::ToWire(arena, std::optional(std::vector<uint32_t>())); |
| EXPECT_EQ(0u, null_vec.size()); |
| EXPECT_NE(nullptr, null_vec.data()); |
| |
| fidl::VectorView<uint32_t> nullopt_vec = |
| fidl::ToWire(arena, std::optional<std::vector<uint32_t>>()); |
| EXPECT_EQ(0u, nullopt_vec.size()); |
| EXPECT_EQ(nullptr, nullopt_vec.data()); |
| } |
| |
| TEST(WireToNaturalConversion, ObjectView) { |
| EXPECT_EQ(nullptr, fidl::ToNatural(fidl::ObjectView<test_types::wire::CopyableStruct>())); |
| |
| fidl::Arena<512> arena; |
| fidl::Box<test_types::CopyableStruct> val = |
| fidl::ToNatural(fidl::ObjectView<test_types::wire::CopyableStruct>( |
| arena, test_types::wire::CopyableStruct{.x = 123})); |
| EXPECT_EQ(123, val->x()); |
| } |
| |
| TEST(NaturalToWireConversion, ObjectView) { |
| fidl::Arena arena; |
| EXPECT_EQ(nullptr, fidl::ToWire(arena, fidl::Box<test_types::CopyableStruct>(nullptr))); |
| |
| fidl::ObjectView<test_types::wire::CopyableStruct> val = |
| fidl::ToWire(arena, fidl::Box(std::make_unique<test_types::CopyableStruct>(123))); |
| EXPECT_EQ(123, val->x); |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(val.get(), arena)); |
| } |
| |
| TEST(WireToNaturalConversion, Union) { |
| fidl::Arena arena; |
| |
| test_types::TestStrictXUnion union_with_uint32 = |
| fidl::internal::ToNatural<test_types::TestStrictXUnion>( |
| test_types::wire::TestStrictXUnion::WithPrimitive(123)); |
| ASSERT_EQ(test_types::TestStrictXUnion::Tag::kPrimitive, union_with_uint32.Which()); |
| EXPECT_EQ(123, union_with_uint32.primitive().value()); |
| |
| test_types::UnionWithUint64 union_with_uint64 = |
| fidl::internal::ToNatural<test_types::UnionWithUint64>( |
| test_types::wire::UnionWithUint64::WithValue(arena, 123)); |
| ASSERT_EQ(test_types::UnionWithUint64::Tag::kValue, union_with_uint64.Which()); |
| EXPECT_EQ(123ll, union_with_uint64.value().value()); |
| } |
| |
| TEST(NaturalToWireConversion, Union) { |
| fidl::Arena arena; |
| |
| test_types::wire::TestStrictXUnion union_with_uint32 = |
| fidl::ToWire(arena, test_types::TestStrictXUnion::WithPrimitive(123)); |
| ASSERT_EQ(test_types::wire::TestStrictXUnion::Tag::kPrimitive, union_with_uint32.Which()); |
| EXPECT_EQ(123, union_with_uint32.primitive()); |
| // Inline union value. |
| EXPECT_FALSE(fidl_testing::ArenaChecker::IsPointerInArena(&union_with_uint32.primitive(), arena)); |
| |
| test_types::wire::UnionWithUint64 union_with_uint64 = |
| fidl::ToWire(arena, test_types::UnionWithUint64::WithValue(123)); |
| ASSERT_EQ(test_types::wire::UnionWithUint64::Tag::kValue, union_with_uint64.Which()); |
| EXPECT_EQ(123ll, union_with_uint64.value()); |
| // Inline union value. |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(&union_with_uint64.value(), arena)); |
| } |
| |
| TEST(WireToNaturalConversion, OptionalUnion) { |
| fidl::Arena arena; |
| |
| ASSERT_EQ(nullptr, fidl::ToNatural(fidl::WireOptional<test_types::wire::TestStrictXUnion>())); |
| |
| fidl::Box<test_types::TestStrictXUnion> union_with_uint32 = |
| fidl::ToNatural(fidl::WireOptional<test_types::wire::TestStrictXUnion>( |
| test_types::wire::TestStrictXUnion::WithPrimitive(123))); |
| ASSERT_EQ(test_types::TestStrictXUnion::Tag::kPrimitive, union_with_uint32->Which()); |
| EXPECT_EQ(123, union_with_uint32->primitive().value()); |
| |
| fidl::Box<test_types::UnionWithUint64> union_with_uint64 = |
| fidl::ToNatural(fidl::WireOptional<test_types::wire::UnionWithUint64>( |
| test_types::wire::UnionWithUint64::WithValue(arena, 123ll))); |
| ASSERT_EQ(test_types::UnionWithUint64::Tag::kValue, union_with_uint64->Which()); |
| EXPECT_EQ(123ll, union_with_uint64->value().value()); |
| } |
| |
| TEST(NaturalToWireConversion, OptionalUnion) { |
| fidl::Arena arena; |
| |
| fidl::WireOptional<test_types::wire::TestStrictXUnion> empty = |
| fidl::ToWire(arena, fidl::Box(std::unique_ptr<test_types::TestStrictXUnion>())); |
| ASSERT_FALSE(empty.has_value()); |
| |
| fidl::WireOptional<test_types::wire::TestStrictXUnion> xunion = |
| fidl::ToWire(arena, fidl::Box(std::make_unique<test_types::TestStrictXUnion>( |
| test_types::TestStrictXUnion::WithPrimitive(123)))); |
| ASSERT_TRUE(xunion.has_value()); |
| ASSERT_EQ(test_types::wire::TestStrictXUnion::Tag::kPrimitive, xunion->Which()); |
| EXPECT_EQ(123, xunion->primitive()); |
| // Inline union value. |
| EXPECT_FALSE(fidl_testing::ArenaChecker::IsPointerInArena(&xunion->primitive(), arena)); |
| |
| fidl::WireOptional<test_types::wire::UnionWithUint64> union_with_uint64 = |
| fidl::ToWire(arena, fidl::Box(std::make_unique<test_types::UnionWithUint64>( |
| test_types::UnionWithUint64::WithValue(123ll)))); |
| ASSERT_TRUE(union_with_uint64.has_value()); |
| ASSERT_EQ(test_types::wire::UnionWithUint64::Tag::kValue, union_with_uint64->Which()); |
| EXPECT_EQ(123ll, union_with_uint64->value()); |
| // Inline union value. |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(&union_with_uint64->value(), arena)); |
| } |
| |
| TEST(WireToNaturalConversion, Table) { |
| fidl::Arena<512> arena; |
| test_types::SampleTable table = |
| fidl::ToNatural(test_types::wire::SampleTable::Builder(arena).x(12).y(34).Build()); |
| EXPECT_EQ(12, table.x()); |
| EXPECT_EQ(34, table.y()); |
| } |
| |
| TEST(NaturalToWireConversion, Table) { |
| fidl::Arena arena; |
| test_types::wire::SampleTable table = fidl::ToWire(arena, test_types::SampleTable({ |
| .x = 12, |
| .y = 34, |
| })); |
| EXPECT_EQ(12, table.x()); |
| EXPECT_EQ(34, table.y()); |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(&table.x(), arena)); |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(&table.y(), arena)); |
| |
| void* frame = reinterpret_cast<fidl_vector_t*>(&table)->data; |
| EXPECT_TRUE(fidl_testing::ArenaChecker::IsPointerInArena(frame, arena)); |
| } |
| |
| #if __FIDL_SUPPORT_HANDLES |
| TEST(WireToNaturalConversion, MoveOnlyUnion) { |
| test_types::wire::TestXUnion wire = test_types::wire::TestXUnion::WithH(zx::handle()); |
| test_types::TestXUnion natural = |
| fidl::internal::ToNatural<test_types::TestXUnion>(std::move(wire)); |
| EXPECT_FALSE(natural.h()->is_valid()); |
| } |
| |
| TEST(NaturalToWireConversion, MoveOnlyUnion) { |
| fidl::Arena arena; |
| test_types::TestXUnion natural = test_types::TestXUnion::WithH(zx::handle()); |
| test_types::wire::TestXUnion wire = fidl::ToWire(arena, std::move(natural)); |
| EXPECT_FALSE(wire.h().is_valid()); |
| } |
| |
| TEST(WireToNaturalConversion, MoveOnlyTable) { |
| zx::event ev; |
| ASSERT_EQ(ZX_OK, zx::event::create(0, &ev)); |
| zx_handle_t handle = ev.get(); |
| |
| fidl::Arena arena; |
| test_types::wire::TestHandleTable wire_table = |
| test_types::wire::TestHandleTable::Builder(arena).hs({std::move(ev)}).Build(); |
| test_types::TestHandleTable table = fidl::ToNatural(wire_table); |
| EXPECT_FALSE(wire_table.hs().h.is_valid()); |
| EXPECT_TRUE(table.hs()->h().is_valid()); |
| EXPECT_EQ(handle, table.hs()->h().get()); |
| } |
| |
| TEST(NaturalToWireConversion, MoveOnlyTable) { |
| zx::event ev; |
| ASSERT_EQ(ZX_OK, zx::event::create(0, &ev)); |
| zx_handle_t handle = ev.get(); |
| |
| fidl::Arena arena; |
| test_types::TestHandleTable natural_table = test_types::TestHandleTable({.hs = std::move(ev)}); |
| test_types::wire::TestHandleTable table = fidl::ToWire(arena, std::move(natural_table)); |
| EXPECT_TRUE(natural_table.hs().has_value()); |
| EXPECT_FALSE(natural_table.hs().value().h().is_valid()); |
| EXPECT_TRUE(table.has_hs()); |
| EXPECT_EQ(handle, table.hs().h.get()); |
| } |
| |
| TEST(WireToNaturalConversion, MoveOnlyTableNonInlinableField) { |
| zx::event ev; |
| ASSERT_EQ(ZX_OK, zx::event::create(0, &ev)); |
| zx_handle_t handle = ev.get(); |
| |
| fidl::Arena arena; |
| test_types::wire::TestHandleTableNonInlinableField wire_table = |
| test_types::wire::TestHandleTableNonInlinableField::Builder(arena) |
| .hs(test_types::wire::NonInlinableHandleStruct{.h = std::move(ev), .i = 100}) |
| .Build(); |
| test_types::TestHandleTableNonInlinableField table = fidl::ToNatural(wire_table); |
| EXPECT_FALSE(wire_table.hs().h.is_valid()); |
| EXPECT_TRUE(table.hs()->h().is_valid()); |
| EXPECT_EQ(handle, table.hs()->h().get()); |
| EXPECT_EQ(100, table.hs()->i()); |
| } |
| |
| TEST(NaturalToWireConversion, MoveOnlyTableNonInlinableField) { |
| zx::event ev; |
| ASSERT_EQ(ZX_OK, zx::event::create(0, &ev)); |
| zx_handle_t handle = ev.get(); |
| |
| fidl::Arena arena; |
| test_types::TestHandleTableNonInlinableField natural_table = |
| test_types::TestHandleTableNonInlinableField({.hs = {{std::move(ev), 100}}}); |
| test_types::wire::TestHandleTableNonInlinableField table = |
| fidl::ToWire(arena, std::move(natural_table)); |
| EXPECT_TRUE(natural_table.hs().has_value()); |
| EXPECT_FALSE(natural_table.hs().value().h().is_valid()); |
| EXPECT_TRUE(table.has_hs()); |
| EXPECT_EQ(handle, table.hs().h.get()); |
| EXPECT_EQ(100, table.hs().i); |
| } |
| |
| TEST(WireToNaturalConversion, Request) { |
| fidl::Request<test_types::Baz::Foo> request = |
| fidl::ToNatural(fidl::WireRequest<test_types::Baz::Foo>{{.bar = 123}}); |
| EXPECT_EQ(123, request.req().bar()); |
| } |
| |
| TEST(WireToNaturalConversion, Response) { |
| fidl::Response<test_types::Baz::Foo> response = |
| fidl::ToNatural(fidl::WireResponse<test_types::Baz::Foo>({.bar = 123})); |
| EXPECT_EQ(123, response.res().bar()); |
| } |
| |
| TEST(NaturalToWireConversion, Response) { |
| fidl::Arena arena; |
| fidl::WireResponse<test_types::Baz::Foo> response = |
| fidl::ToWire(arena, fidl::Response<test_types::Baz::Foo>(test_types::FooResponse(123))); |
| EXPECT_EQ(123, response.res.bar); |
| } |
| |
| TEST(WireToNaturalConversion, ResponseEmptyResultSuccess) { |
| fidl::Response<test_types::ErrorSyntax::EmptyPayload> natural = |
| fidl::ToNatural(fidl::WireResponse<test_types::ErrorSyntax::EmptyPayload>()); |
| ASSERT_TRUE(natural.is_ok()); |
| } |
| |
| TEST(NaturalToWireConversion, ResponseEmptyResultSuccess) { |
| fidl::Arena arena; |
| fidl::WireResponse<test_types::ErrorSyntax::EmptyPayload> wire = |
| fidl::ToWire(arena, fidl::Response<test_types::ErrorSyntax::EmptyPayload>(::fit::ok())); |
| ASSERT_TRUE(wire.is_response()); |
| } |
| |
| TEST(WireToNaturalConversion, ResponseEmptyResultError) { |
| fidl::WireResponse<test_types::ErrorSyntax::EmptyPayload> wire( |
| test_types::wire::ErrorSyntaxEmptyPayloadResult::WithErr(123)); |
| fidl::Response<test_types::ErrorSyntax::EmptyPayload> natural = fidl::ToNatural(wire); |
| ASSERT_TRUE(natural.is_error()); |
| EXPECT_EQ(123, natural.error_value()); |
| } |
| |
| TEST(NaturalToWireConversion, ResponseEmptyResultError) { |
| fidl::Arena arena; |
| fidl::Response<test_types::ErrorSyntax::EmptyPayload> natural(::fit::error(123)); |
| fidl::WireResponse<test_types::ErrorSyntax::EmptyPayload> wire = fidl::ToWire(arena, natural); |
| ASSERT_TRUE(wire.is_err()); |
| EXPECT_EQ(123, wire.err()); |
| } |
| |
| TEST(WireToNaturalConversion, ResponseResultSuccess) { |
| fidl::WireResponse<test_types::ErrorSyntax::FooPayload> wire( |
| test_types::wire::ErrorSyntaxFooPayloadResult::WithResponse({.bar = 123})); |
| fidl::Response<test_types::ErrorSyntax::FooPayload> natural = fidl::ToNatural(wire); |
| ASSERT_TRUE(natural.is_ok()); |
| EXPECT_EQ(123, natural.value().bar()); |
| } |
| |
| TEST(NaturalToWireConversion, ResponseResultSuccess) { |
| fidl::Arena arena; |
| fidl::Response<test_types::ErrorSyntax::FooPayload> natural(::fit::ok(123)); |
| fidl::WireResponse<test_types::ErrorSyntax::FooPayload> wire = |
| fidl::ToWire(arena, std::move(natural)); |
| ASSERT_TRUE(wire.is_response()); |
| EXPECT_EQ(123, wire.response().bar); |
| } |
| |
| TEST(WireToNaturalConversion, ResponseResultError) { |
| fidl::WireResponse<test_types::ErrorSyntax::FooPayload> wire( |
| test_types::wire::ErrorSyntaxFooPayloadResult::WithErr(123)); |
| fidl::Response<test_types::ErrorSyntax::FooPayload> natural = fidl::ToNatural(wire); |
| ASSERT_TRUE(natural.is_error()); |
| EXPECT_EQ(123, natural.error_value()); |
| } |
| |
| TEST(NaturalToWireConversion, ResponseResultError) { |
| fidl::Arena arena; |
| fidl::Response<test_types::ErrorSyntax::FooPayload> natural(fit::error(123)); |
| fidl::WireResponse<test_types::ErrorSyntax::FooPayload> wire = |
| fidl::ToWire(arena, std::move(natural)); |
| ASSERT_TRUE(wire.is_err()); |
| EXPECT_EQ(123, wire.err()); |
| } |
| |
| TEST(WireToNaturalConversion, Event) { |
| fidl::Event<test_types::Baz::FooEvent> event = |
| fidl::ToNatural(fidl::WireEvent<test_types::Baz::FooEvent>{123}); |
| EXPECT_EQ(123, event.bar()); |
| } |
| |
| TEST(NaturalToWireConversion, Event) { |
| fidl::Arena arena; |
| fidl::WireEvent<test_types::Baz::FooEvent> event = |
| fidl::ToWire(arena, fidl::Event<test_types::Baz::FooEvent>{123}); |
| EXPECT_EQ(123, event.bar); |
| } |
| #endif |