| {{/* |
| // 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 <zxtest/zxtest.h> |
| |
| #include <fidl/test.conformance/cpp/natural_types.h> |
| |
| #include "src/lib/fidl/cpp/tests/conformance/conformance_utils.h" |
| |
| {{ range .EncodeSuccessCases }} |
| {{- if .FuchsiaOnly }} |
| #ifdef __Fuchsia__ |
| {{- end }} |
| TEST(Conformance, {{ .Name }}_Encode) { |
| {{- if .HandleDefs }} |
| const auto handle_defs = {{ .HandleDefs }}; |
| {{- end }} |
| {{ .ValueBuild }} |
| auto obj = {{ .ValueVar }}; |
| const auto expected_bytes = {{ .Bytes }}; |
| const auto expected_handles = {{ .Handles }}; |
| conformance_utils::EncodeSuccess( |
| {{ .WireFormatVersion }}, obj, expected_bytes, expected_handles, {{ .CheckHandleRights }}); |
| } |
| {{- if .FuchsiaOnly }} |
| #endif // __Fuchsia__ |
| {{- end }} |
| {{ end }} |
| |
| {{ range .DecodeSuccessCases }} |
| {{- if .FuchsiaOnly }} |
| #ifdef __Fuchsia__ |
| {{- end }} |
| TEST(Conformance, {{ .Name }}_Decode) { |
| {{- if .HandleDefs }} |
| const auto handle_defs = {{ .HandleDefs }}; |
| std::vector<zx_koid_t> {{ .HandleKoidVectorName }}; |
| for (zx_handle_info_t def : handle_defs) { |
| zx_info_handle_basic_t info; |
| ASSERT_OK(zx_object_get_info(def.handle, ZX_INFO_HANDLE_BASIC, &info, sizeof(info), nullptr, nullptr)); |
| {{ .HandleKoidVectorName }}.push_back(info.koid); |
| } |
| {{- end }} |
| auto bytes = {{ .Bytes }}; |
| auto handles = {{ .Handles }}; |
| conformance_utils::DecodeSuccess<{{ .Type }}>( |
| {{ .WireFormatVersion }}, bytes, handles, [&]({{ .Type }}& value) { |
| {{ .EqualityCheck }} |
| }); |
| } |
| {{- if .FuchsiaOnly }} |
| #endif // __Fuchsia__ |
| {{- end }} |
| {{ end }} |
| |
| {{ range .EncodeFailureCases }} |
| {{- if .FuchsiaOnly }} |
| #ifdef __Fuchsia__ |
| {{- end }} |
| TEST(Conformance, {{ .Name }}_EncodeFailure) { |
| {{- if .HandleDefs }} |
| const auto handle_defs = {{ .HandleDefs }}; |
| {{- end }} |
| {{ .ValueBuild }} |
| auto obj = {{ .ValueVar }}; |
| conformance_utils::EncodeFailure( |
| {{ .WireFormatVersion }}, obj); |
| {{- if .HandleDefs }} |
| for (const auto handle_def : handle_defs) { |
| EXPECT_EQ(ZX_ERR_BAD_HANDLE, zx_object_get_info( |
| handle_def, ZX_INFO_HANDLE_VALID, nullptr, 0, nullptr, nullptr)); |
| } |
| {{- end }} |
| } |
| {{- if .FuchsiaOnly }} |
| #endif // __Fuchsia__ |
| {{- end }} |
| {{ end }} |
| |
| {{ range .DecodeFailureCases }} |
| {{- if .FuchsiaOnly }} |
| #ifdef __Fuchsia__ |
| {{- end }} |
| TEST(Conformance, {{ .Name }}_DecodeFailure) { |
| {{- if .HandleDefs }} |
| const auto handle_defs = {{ .HandleDefs }}; |
| {{- end }} |
| auto bytes = {{ .Bytes }}; |
| auto handles = {{ .Handles }}; |
| conformance_utils::DecodeFailure<{{ .Type }}>( |
| {{ .WireFormatVersion }}, bytes, handles); |
| {{- if .HandleDefs }} |
| for (const auto handle_def : handle_defs) { |
| EXPECT_EQ(ZX_ERR_BAD_HANDLE, zx_object_get_info( |
| handle_def.handle, ZX_INFO_HANDLE_VALID, nullptr, 0, nullptr, nullptr)); |
| } |
| {{- end }} |
| } |
| {{- if .FuchsiaOnly }} |
| #endif // __Fuchsia__ |
| {{- end }} |
| {{ end }} |