blob: d85a493dd4933cc9be9b47227ad7ef3f566137c4 [file] [log] [blame]
// Copyright 2021 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.
// TODO(https://fxbug.dev/42169694): Audit each test and merge into the regular `strings.gidl`.
// These were ported from a legacy set of manual C/C++ tests termed `walker_tests`.
success("SinglePresentHandle") {
handle_defs = {
#0 = event(),
},
value = NonnullableHandle{
h: #0,
},
bytes = {
v2 = [
repeat(0xff):4, padding:4,
],
},
handles = {
v2 = [
#0,
],
},
}
// TODO(https://fxbug.dev/42170244): The following 4 tests can be auto-generated using padding metadata.
decode_failure("SinglePresentHandleCheckTrailingPadding_0") {
// TODO(https://fxbug.dev/42136336): Close handles on encode/decode failure.
bindings_denylist = [dart],
handle_defs = {
#0 = event(),
},
type = NonnullableHandle,
bytes = {
v2 = [
repeat(0xff):4, 0xaa, padding:3,
],
},
handles = {
v2 = [
#0,
],
},
err = INVALID_PADDING_BYTE,
}
decode_failure("SinglePresentHandleCheckTrailingPadding_1") {
// TODO(https://fxbug.dev/42136336): Close handles on encode/decode failure.
bindings_denylist = [dart],
handle_defs = {
#0 = event(),
},
type = NonnullableHandle,
bytes = {
v2 = [
repeat(0xff):4, padding:1, 0xaa, padding:2,
],
},
handles = {
v2 = [
#0,
],
},
err = INVALID_PADDING_BYTE,
}
decode_failure("SinglePresentHandleCheckTrailingPadding_2") {
// TODO(https://fxbug.dev/42136336): Close handles on encode/decode failure.
bindings_denylist = [dart],
handle_defs = {
#0 = event(),
},
type = NonnullableHandle,
bytes = {
v2 = [
repeat(0xff):4, padding:2, 0xaa, padding:1,
],
},
handles = {
v2 = [
#0,
],
},
err = INVALID_PADDING_BYTE,
}
decode_failure("SinglePresentHandleCheckTrailingPadding_3") {
// TODO(https://fxbug.dev/42136336): Close handles on encode/decode failure.
bindings_denylist = [dart],
handle_defs = {
#0 = event(),
},
type = NonnullableHandle,
bytes = {
v2 = [
repeat(0xff):4, padding:3, 0xaa,
],
},
handles = {
v2 = [
#0,
],
},
err = INVALID_PADDING_BYTE,
}
decode_failure("TooManyHandlesSpecifiedError") {
handle_defs = {
#0 = event(),
#1 = event(),
},
type = NonnullableHandle,
bytes = {
v2 = [
repeat(0xff):4, padding:4,
],
},
handles = {
v2 = [
#0, #1,
],
},
err = TOO_MANY_HANDLES_IN_MESSAGE,
}
decode_failure("TooManyBytesSpecifiedError") {
// TODO(https://fxbug.dev/42136336): Close handles on encode/decode failure for Rust.
// TODO(https://fxbug.dev/42170080) Add validation in Dart and go.
bindings_denylist = [dart],
handle_defs = {
#0 = event(),
#1 = event(),
},
type = NonnullableHandle,
bytes = {
v2 = [
repeat(0xff):4, padding:4,
padding:8,
],
},
handles = {
v2 = [
#0, #1,
],
},
err = TOO_MANY_BYTES_IN_MESSAGE,
}
success("MultiplePresentHandles") {
handle_defs = {
#0 = event(),
#1 = channel(),
#2 = event(),
},
value = MultipleNonnullableHandles{
data0: 0,
handle0: #0,
data1: 1,
handle1: #1,
handle2: #2,
data2: 2,
},
bytes = {
v2 = [
num(0):4,
repeat(0xff):4,
num(1):8,
repeat(0xff):4,
repeat(0xff):4,
num(2):8,
],
},
handles = {
v2 = [
#0, #1, #2,
],
},
}
success("SingleAbsentHandle") {
value = NullableHandle{},
bytes = {
v2 = [
repeat(0):4,
padding:4,
],
},
}
success("MultipleAbsentHandles") {
value = MultipleNullableHandles{
data0: 0,
data1: 1,
data2: 2,
},
bytes = {
v2 = [
num(0):4,
repeat(0):4,
num(1):8,
repeat(0):4,
repeat(0):4,
num(2):8,
],
},
}
success("ArrayOfPresentHandles") {
handle_defs = {
#0 = event(),
#1 = event(),
#2 = event(),
#3 = event(),
},
value = ArrayOfNonnullableHandles{
handles: [#0, #1, #2, #3],
},
bytes = {
v2 = [
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
],
},
handles = {
v2 = [
#0, #1, #2, #3,
],
},
}
decode_failure("ArrayOfPresentHandlesTooFewError") {
// TODO(https://fxbug.dev/42136336): Close handles on encode/decode failure.
bindings_denylist = [dart],
handle_defs = {
#0 = event(),
#1 = event(),
},
type = ArrayOfNonnullableHandles,
bytes = {
v2 = [
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
],
},
handles = {
v2 = [
#0, #1,
],
},
err = TOO_FEW_HANDLES,
}
decode_failure("ArrayOfNonnullableHandlesSomeAbsentError") {
// TODO(https://fxbug.dev/42136336): Close handles on encode/decode failure.
bindings_denylist = [dart],
handle_defs = {
#0 = event(),
#1 = event(),
#2 = event(),
},
type = ArrayOfNonnullableHandles,
bytes = {
v2 = [
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0):4,
],
},
handles = {
v2 = [
#0, #1, #2,
],
},
err = NON_NULLABLE_TYPE_WITH_NULL_VALUE,
}
success("ArrayOfNullableHandles") {
handle_defs = {
#0 = event(),
#1 = event(),
#2 = event(),
},
value = ArrayOfNullableHandles{
handles: [#0, null, #1, null, #2],
},
bytes = {
v2 = [
repeat(0xff):4,
repeat(0):4,
repeat(0xff):4,
repeat(0):4,
repeat(0xff):4,
padding:4,
],
},
handles = {
v2 = [
#0, #1, #2,
],
},
}
decode_failure("ArrayOfNullableHandlesWithInsufficientHandlesError") {
// TODO(https://fxbug.dev/42136336): Close handles on encode/decode failure.
bindings_denylist = [dart],
handle_defs = {
#0 = event(),
#1 = event(),
},
type = ArrayOfNullableHandles,
bytes = {
v2 = [
repeat(0xff):4,
repeat(0):4,
repeat(0xff):4,
repeat(0):4,
repeat(0xff):4,
padding:4,
],
},
handles = {
v2 = [
#0, #1,
],
},
err = TOO_FEW_HANDLES,
}
success("ArrayOfArrayOfPresentHandles") {
// 4x3 handle array = 12 handles
handle_defs = {
#0 = event(),
#1 = event(),
#2 = event(),
#3 = event(),
#4 = event(),
#5 = event(),
#6 = event(),
#7 = event(),
#8 = event(),
#9 = event(),
#10 = event(),
#11 = event(),
},
value = ArrayOfArrayOfNonnullableHandles{
handles: [
[#0, #1, #2],
[#3, #4, #5],
[#6, #7, #8],
[#9, #10, #11],
],
},
bytes = {
v2 = [
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
],
},
handles = {
v2 = [
#0, #1, #2, #3, #4, #5, #6, #7, #8, #9, #10, #11,
],
},
}
success("OutOfLineArrayOfNonnullableHandles") {
// TODO(https://fxbug.dev/42170268): generated Rust test does not compile.
bindings_denylist = [rust],
handle_defs = {
#0 = event(),
#1 = event(),
#2 = event(),
#3 = event(),
},
value = OutOfLineArrayOfNonnullableHandles{
handles: NonnullableHandleArray{
handles: [#0, #1, #2, #3],
},
},
bytes = {
v2 = [
// Presence marker
repeat(0xff):8,
// Out-of-line object
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
repeat(0xff):4,
],
},
handles = {
v2 = [
#0, #1, #2, #3,
],
},
}