blob: 355e091d565077aa721d3c8dbc6936001b4bf49c [file] [log] [blame]
{{/*
// 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 <test/conformance/cpp/fidl.h>
#include <ctf/tests/pkg/fidl/cpp/test/test_util.h>
#ifdef __Fuchsia__
#include <ctf/tests/pkg/fidl/cpp/test/handle_util.h>
#include <zircon/syscalls.h>
#endif
{{ range .EncodeSuccessCases }}
{{- if .FuchsiaOnly }}
#ifdef __Fuchsia__
{{- end }}
TEST(Conformance, {{ .Name }}_Encode) {
{{- if .HandleDefs }}
const auto handle_defs = {{ .HandleDefs }};
{{- end }}
{{ .ValueBuild }}
const auto expected_bytes = {{ .Bytes }};
const auto expected_handles = {{ .Handles }};
{{/* Must use a variable because macros don't understand commas in template args. */ -}}
const auto result =
fidl::test::util::ValueToBytes<{{ .ValueType }}>(
{{ .WireFormat }}, {{ .ValueVar }}, expected_bytes, expected_handles, {{ .CheckRights }});
EXPECT_TRUE(result);
{{- /* The handles are closed by the fidl::Message destructor in ValueToBytes. */}}
}
{{- 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 }};
auto {{ .ActualValueVar }} =
fidl::test::util::DecodedBytes<{{ .ValueType }}>({{ .WireFormat }}, std::move(bytes), std::move(handles));
{{ .EqualityCheck }}
}
{{- if .FuchsiaOnly }}
#endif // __Fuchsia__
{{- end }}
{{ end }}
{{ range .EncodeFailureCases }}
{{- if .FuchsiaOnly }}
#ifdef __Fuchsia__
{{- end }}
TEST(Conformance, {{ .Name }}_Encode_Failure) {
{{- if .HandleDefs }}
const auto handle_defs = {{ .HandleDefs }};
{{- end }}
{{ .ValueBuild }}
fidl::test::util::CheckEncodeFailure<{{ .ValueType }}>(
{{ .WireFormat }}, {{ .ValueVar }}, {{ .ErrorCode }});
{{- 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 }}_Decode_Failure) {
{{- if .HandleDefs }}
const auto handle_defs = {{ .HandleDefs }};
{{- end }}
auto bytes = {{ .Bytes }};
auto handles = {{ .Handles }};
fidl::test::util::CheckDecodeFailure<{{ .ValueType }}>({{ .WireFormat }}, std::move(bytes), std::move(handles), {{ .ErrorCode }});
{{- 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 }}