| // 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(fxbug.dev/88460): 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 = { |
| v1, v2 = [ |
| repeat(0xff):4, padding:4, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, |
| ], |
| }, |
| } |
| |
| // TODO(fxbug.dev/88957): The following 4 tests can be auto-generated using padding metadata. |
| decode_failure("SinglePresentHandleCheckTrailingPadding_0") { |
| // TODO(fxbug.dev/58385): Close handles on encode/decode failure. |
| bindings_denylist = [rust, dart], |
| handle_defs = { |
| #0 = event(), |
| }, |
| type = NonnullableHandle, |
| bytes = { |
| v1, v2 = [ |
| repeat(0xff):4, 0xaa, padding:3, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, |
| ], |
| }, |
| err = INVALID_PADDING_BYTE, |
| } |
| |
| decode_failure("SinglePresentHandleCheckTrailingPadding_1") { |
| // TODO(fxbug.dev/58385): Close handles on encode/decode failure. |
| bindings_denylist = [rust, dart], |
| handle_defs = { |
| #0 = event(), |
| }, |
| type = NonnullableHandle, |
| bytes = { |
| v1, v2 = [ |
| repeat(0xff):4, padding:1, 0xaa, padding:2, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, |
| ], |
| }, |
| err = INVALID_PADDING_BYTE, |
| } |
| |
| decode_failure("SinglePresentHandleCheckTrailingPadding_2") { |
| // TODO(fxbug.dev/58385): Close handles on encode/decode failure. |
| bindings_denylist = [rust, dart], |
| handle_defs = { |
| #0 = event(), |
| }, |
| type = NonnullableHandle, |
| bytes = { |
| v1, v2 = [ |
| repeat(0xff):4, padding:2, 0xaa, padding:1, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, |
| ], |
| }, |
| err = INVALID_PADDING_BYTE, |
| } |
| |
| decode_failure("SinglePresentHandleCheckTrailingPadding_3") { |
| // TODO(fxbug.dev/58385): Close handles on encode/decode failure. |
| bindings_denylist = [rust, dart], |
| handle_defs = { |
| #0 = event(), |
| }, |
| type = NonnullableHandle, |
| bytes = { |
| v1, v2 = [ |
| repeat(0xff):4, padding:3, 0xaa, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, |
| ], |
| }, |
| err = INVALID_PADDING_BYTE, |
| } |
| |
| decode_failure("TooManyHandlesSpecifiedError") { |
| // TODO(fxbug.dev/58385): Close handles on encode/decode failure. |
| bindings_denylist = [rust], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| }, |
| type = NonnullableHandle, |
| bytes = { |
| v1, v2 = [ |
| repeat(0xff):4, padding:4, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, #1, |
| ], |
| }, |
| err = TOO_MANY_HANDLES_IN_MESSAGE, |
| } |
| |
| decode_failure("TooManyBytesSpecifiedError") { |
| // TODO(fxbug.dev/58385): Close handles on encode/decode failure for Rust. |
| // TODO(fxbug.dev/88808) Add validation in Dart and go. |
| bindings_denylist = [rust, dart], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| }, |
| type = NonnullableHandle, |
| bytes = { |
| v1, v2 = [ |
| repeat(0xff):4, padding:4, |
| padding:8, |
| ], |
| }, |
| handles = { |
| v1, 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 = { |
| v1, v2 = [ |
| num(0):4, |
| repeat(0xff):4, |
| num(1):8, |
| repeat(0xff):4, |
| repeat(0xff):4, |
| num(2):8, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, #1, #2, |
| ], |
| }, |
| } |
| |
| success("SingleAbsentHandle") { |
| value = NullableHandle{}, |
| bytes = { |
| v1, v2 = [ |
| repeat(0):4, |
| padding:4, |
| ], |
| }, |
| } |
| |
| success("MultipleAbsentHandles") { |
| value = MultipleNullableHandles{ |
| data0: 0, |
| data1: 1, |
| data2: 2, |
| }, |
| bytes = { |
| v1, 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 = { |
| v1, v2 = [ |
| repeat(0xff):4, |
| repeat(0xff):4, |
| repeat(0xff):4, |
| repeat(0xff):4, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, #1, #2, #3, |
| ], |
| }, |
| } |
| |
| decode_failure("ArrayOfPresentHandlesTooFewError") { |
| // TODO(fxbug.dev/58385): Close handles on encode/decode failure. |
| bindings_denylist = [rust, dart], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| }, |
| type = ArrayOfNonnullableHandles, |
| bytes = { |
| v1, v2 = [ |
| repeat(0xff):4, |
| repeat(0xff):4, |
| repeat(0xff):4, |
| repeat(0xff):4, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, #1, |
| ], |
| }, |
| err = TOO_FEW_HANDLES, |
| } |
| |
| decode_failure("ArrayOfNonnullableHandlesSomeAbsentError") { |
| // TODO(fxbug.dev/58385): Close handles on encode/decode failure. |
| bindings_denylist = [rust, dart], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| #2 = event(), |
| }, |
| type = ArrayOfNonnullableHandles, |
| bytes = { |
| v1, v2 = [ |
| repeat(0xff):4, |
| repeat(0xff):4, |
| repeat(0xff):4, |
| repeat(0):4, |
| ], |
| }, |
| handles = { |
| v1, 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 = { |
| v1, v2 = [ |
| repeat(0xff):4, |
| repeat(0):4, |
| repeat(0xff):4, |
| repeat(0):4, |
| repeat(0xff):4, |
| padding:4, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, #1, #2, |
| ], |
| }, |
| } |
| |
| decode_failure("ArrayOfNullableHandlesWithInsufficientHandlesError") { |
| // TODO(fxbug.dev/58385): Close handles on encode/decode failure. |
| bindings_denylist = [rust, dart], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| }, |
| type = ArrayOfNullableHandles, |
| bytes = { |
| v1, v2 = [ |
| repeat(0xff):4, |
| repeat(0):4, |
| repeat(0xff):4, |
| repeat(0):4, |
| repeat(0xff):4, |
| padding:4, |
| ], |
| }, |
| handles = { |
| v1, 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 = { |
| v1, 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 = { |
| v1, v2 = [ |
| #0, #1, #2, #3, #4, #5, #6, #7, #8, #9, #10, #11, |
| ], |
| }, |
| } |
| |
| success("OutOfLineArrayOfNonnullableHandles") { |
| // TODO(fxbug.dev/88979): 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 = { |
| v1, v2 = [ |
| // Presence marker |
| repeat(0xff):8, |
| // Out-of-line object |
| repeat(0xff):4, |
| repeat(0xff):4, |
| repeat(0xff):4, |
| repeat(0xff):4, |
| ], |
| }, |
| handles = { |
| v1, v2 = [ |
| #0, #1, #2, #3, |
| ], |
| }, |
| } |