blob: f28722b6d8a81711107d1aa02fa8d40661f4d9bd [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 <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 }}