blob: 040f61430d4d16091d50b4f15449a1ef8d472107 [file] [log] [blame]
#![cfg(test)]
#![allow(unused_imports)]
use {
assert_matches::assert_matches,
fidl::{AsHandleRef, Error, Handle, HandleDisposition, HandleInfo, HandleOp, ObjectType, Rights},
fidl::encoding::{Context, Decode, Decoder, Encoder, WireFormatVersion},
fidl_test_conformance as test_conformance,
fuchsia_zircon_status::Status,
fuchsia_zircon_types as zx_types,
gidl_util::{
HandleDef, HandleSubtype, copy_handle, create_handles, decode_value,
get_handle_koid, get_info_handle_valid, repeat, select_handle_infos,
select_raw_handle_infos, to_zx_handle_t, to_zx_handle_disposition_t,
},
};
const _V2_CONTEXT: Context = Context { wire_format_version: WireFormatVersion::V2 };
#[test]
fn test_golden_bool_struct_v2_encode() {
let value = test_conformance::GoldenBoolStruct { v: true };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenBoolStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_int_struct_v2_encode() {
let value = test_conformance::GoldenIntStruct { v: 1i16 };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenIntStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_uint_struct_v2_encode() {
let value = test_conformance::GoldenUintStruct { v: 1u16 };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenUintStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_float_struct_v2_encode() {
let value = test_conformance::GoldenFloatStruct { v: 0f32 };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenFloatStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_double_struct_v2_encode() {
let value = test_conformance::GoldenDoubleStruct { v: 0f64 };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenDoubleStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_string_struct_v2_encode() {
let value = test_conformance::GoldenStringStruct { v: String::from("abcd") };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenStringStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x61,0x62,0x63,0x64,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_nullable_string_struct_non_null_v2_encode() {
let value = test_conformance::GoldenNullableStringStruct { v: Some(String::from("abcd")) };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableStringStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x61,0x62,0x63,0x64,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_nullable_string_struct_null_v2_encode() {
let value = test_conformance::GoldenNullableStringStruct { v: None };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableStringStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_enum_struct_v2_encode() {
let value = test_conformance::GoldenEnumStruct { v: test_conformance::GoldenEnum::from_primitive(1u16).unwrap() };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenEnumStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_bits_struct_v2_encode() {
let value = test_conformance::GoldenBitsStruct { v: test_conformance::GoldenBits::from_bits_retain(1u16) };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenBitsStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_table_struct_v2_encode() {
let value = test_conformance::GoldenTableStruct { v: test_conformance::GoldenTable { v: Some(1i16), ..Default::default() } };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenTableStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_union_struct_v2_encode() {
let value = test_conformance::GoldenUnionStruct { v: test_conformance::GoldenUnion::V(1i16) };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenUnionStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_nullable_union_struct_non_null_v2_encode() {
let value = test_conformance::GoldenNullableUnionStruct { v: Some(Box::new(test_conformance::GoldenUnion::V(1i16))) };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableUnionStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_nullable_union_struct_null_v2_encode() {
let value = test_conformance::GoldenNullableUnionStruct { v: None };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableUnionStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_byte_array_struct_v2_encode() {
let value = test_conformance::GoldenByteArrayStruct { v: [1u8, 2u8, 3u8, 4u8] };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenByteArrayStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x02,0x03,0x04,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_struct_array_struct_v2_encode() {
let value = test_conformance::GoldenStructArrayStruct { v: [test_conformance::GoldenIntStruct { v: 1i16 }, test_conformance::GoldenIntStruct { v: 2i16 }] };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenStructArrayStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_byte_vector_struct_v2_encode() {
let value = test_conformance::GoldenByteVectorStruct { v: vec![1u8, 2u8, 3u8, 4u8, 1u8, 2u8, 3u8, 4u8, 1u8, 2u8, 3u8, 4u8] };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenByteVectorStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x02,0x03,0x04,0x01,0x02,0x03,0x04,
0x01,0x02,0x03,0x04,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_byte_nullable_vector_struct_non_null_v2_encode() {
let value = test_conformance::GoldenNullableByteVectorStruct { v: Some(vec![1u8, 2u8, 3u8, 4u8]) };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableByteVectorStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x02,0x03,0x04,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_nullable_byte_vector_struct_null_v2_encode() {
let value = test_conformance::GoldenNullableByteVectorStruct { v: None };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableByteVectorStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_struct_vector_struct_v2_encode() {
let value = test_conformance::GoldenStructVectorStruct { v: vec![test_conformance::GoldenIntStruct { v: 1i16 }, test_conformance::GoldenIntStruct { v: 2i16 }] };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenStructVectorStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_nullable_struct_non_null_v2_encode() {
let value = test_conformance::GoldenNullableStruct { v: Some(Box::new(test_conformance::GoldenBoolStruct { v: true })) };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_nullable_struct_null_v2_encode() {
let value = test_conformance::GoldenNullableStruct { v: None };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, & value).unwrap();
assert_eq!(bytes, &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_handle_basic_rights_struct_v2_encode() {
let handle_defs = create_handles(&[
// #0
HandleDef{
subtype: HandleSubtype::Channel,
rights: Rights::from_bits(61454).unwrap(),
},
]);
let mut value = test_conformance::GoldenHandleBasicRightsStruct { v: copy_handle(&handle_defs[0]) };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenHandleBasicRightsStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, &mut value).unwrap();
assert_eq!(bytes, &[
0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
]);
assert_eq!(
handle_dispositions.iter().map(to_zx_handle_disposition_t).collect::<Vec<_>>(),
&[
zx_types::zx_handle_disposition_t {
operation: zx_types::ZX_HANDLE_OP_MOVE,
handle: handle_defs[0].handle,
type_: 5,
rights: 49155,
result: zx_types::ZX_OK,
},]
);
}
#[test]
fn test_golden_nullable_handle_struct_non_null_v2_encode() {
let handle_defs = create_handles(&[
// #0
HandleDef{
subtype: HandleSubtype::Event,
rights: Rights::from_bits(2147483648).unwrap(),
},
]);
let mut value = test_conformance::GoldenNullableHandleStruct { v: Some(copy_handle(&handle_defs[0])) };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableHandleStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, &mut value).unwrap();
assert_eq!(bytes, &[
0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
]);
assert_eq!(
handle_dispositions.iter().map(to_zx_handle_t).collect::<Vec<_>>(),
&[handle_defs[0].handle,
]
);
}
#[test]
fn test_golden_nullable_handle_struct_null_v2_encode() {
let mut value = test_conformance::GoldenNullableHandleStruct { v: None };
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenNullableHandleStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, &mut value).unwrap();
assert_eq!(bytes, &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]);
assert_eq!(handle_dispositions, &[]);
}
#[test]
fn test_golden_handle_basic_rights_struct_re_encode_v2_encode() {
let handle_defs = create_handles(&[
// #0
HandleDef{
subtype: HandleSubtype::Event,
rights: Rights::from_bits(49155).unwrap(),
},
]);
let mut value = decode_value::<test_conformance::GoldenHandleBasicRightsStruct>(_V2_CONTEXT, &[
0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
], &mut select_handle_infos(&handle_defs, &[
0,]));
let mut bytes = Vec::new();
let mut handle_dispositions = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
Encoder::encode_with_context::<test_conformance::GoldenHandleBasicRightsStruct>(
_V2_CONTEXT, &mut bytes, &mut handle_dispositions, &mut value).unwrap();
assert_eq!(bytes, &[
0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
]);
assert_eq!(
handle_dispositions.iter().map(to_zx_handle_disposition_t).collect::<Vec<_>>(),
&[
zx_types::zx_handle_disposition_t {
operation: zx_types::ZX_HANDLE_OP_MOVE,
handle: handle_defs[0].handle,
type_: 5,
rights: 49155,
result: zx_types::ZX_OK,
},]
);
}
#[test]
fn test_golden_bool_struct_v2_decode() {
let bytes = &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenBoolStruct);
Decoder::decode_with_context::<test_conformance::GoldenBoolStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenBoolStruct { v: true });
}
#[test]
fn test_golden_int_struct_v2_decode() {
let bytes = &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenIntStruct);
Decoder::decode_with_context::<test_conformance::GoldenIntStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenIntStruct { v: 1i16 });
}
#[test]
fn test_golden_uint_struct_v2_decode() {
let bytes = &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenUintStruct);
Decoder::decode_with_context::<test_conformance::GoldenUintStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenUintStruct { v: 1u16 });
}
#[test]
fn test_golden_float_struct_v2_decode() {
let bytes = &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenFloatStruct);
Decoder::decode_with_context::<test_conformance::GoldenFloatStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenFloatStruct { v: 0f32 });
}
#[test]
fn test_golden_double_struct_v2_decode() {
let bytes = &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenDoubleStruct);
Decoder::decode_with_context::<test_conformance::GoldenDoubleStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenDoubleStruct { v: 0f64 });
}
#[test]
fn test_golden_string_struct_v2_decode() {
let bytes = &[
0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x61,0x62,0x63,0x64,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenStringStruct);
Decoder::decode_with_context::<test_conformance::GoldenStringStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenStringStruct { v: String::from("abcd") });
}
#[test]
fn test_golden_nullable_string_struct_non_null_v2_decode() {
let bytes = &[
0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x61,0x62,0x63,0x64,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenNullableStringStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableStringStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenNullableStringStruct { v: Some(String::from("abcd")) });
}
#[test]
fn test_golden_nullable_string_struct_null_v2_decode() {
let bytes = &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenNullableStringStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableStringStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenNullableStringStruct { v: None });
}
#[test]
fn test_golden_enum_struct_v2_decode() {
let bytes = &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenEnumStruct);
Decoder::decode_with_context::<test_conformance::GoldenEnumStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenEnumStruct { v: test_conformance::GoldenEnum::from_primitive(1u16).unwrap() });
}
#[test]
fn test_golden_bits_struct_v2_decode() {
let bytes = &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenBitsStruct);
Decoder::decode_with_context::<test_conformance::GoldenBitsStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenBitsStruct { v: test_conformance::GoldenBits::from_bits_retain(1u16) });
}
#[test]
fn test_golden_table_struct_v2_decode() {
let bytes = &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenTableStruct);
Decoder::decode_with_context::<test_conformance::GoldenTableStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenTableStruct { v: test_conformance::GoldenTable { v: Some(1i16), ..Default::default() } });
}
#[test]
fn test_golden_union_struct_v2_decode() {
let bytes = &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenUnionStruct);
Decoder::decode_with_context::<test_conformance::GoldenUnionStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenUnionStruct { v: test_conformance::GoldenUnion::V(1i16) });
}
#[test]
fn test_golden_nullable_union_struct_non_null_v2_decode() {
let bytes = &[
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenNullableUnionStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableUnionStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenNullableUnionStruct { v: Some(Box::new(test_conformance::GoldenUnion::V(1i16))) });
}
#[test]
fn test_golden_nullable_union_struct_null_v2_decode() {
let bytes = &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenNullableUnionStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableUnionStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenNullableUnionStruct { v: None });
}
#[test]
fn test_golden_byte_array_struct_v2_decode() {
let bytes = &[
0x01,0x02,0x03,0x04,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenByteArrayStruct);
Decoder::decode_with_context::<test_conformance::GoldenByteArrayStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenByteArrayStruct { v: [1u8, 2u8, 3u8, 4u8] });
}
#[test]
fn test_golden_struct_array_struct_v2_decode() {
let bytes = &[
0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenStructArrayStruct);
Decoder::decode_with_context::<test_conformance::GoldenStructArrayStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenStructArrayStruct { v: [test_conformance::GoldenIntStruct { v: 1i16 }, test_conformance::GoldenIntStruct { v: 2i16 }] });
}
#[test]
fn test_golden_byte_vector_struct_v2_decode() {
let bytes = &[
0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x02,0x03,0x04,0x01,0x02,0x03,0x04,
0x01,0x02,0x03,0x04,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenByteVectorStruct);
Decoder::decode_with_context::<test_conformance::GoldenByteVectorStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenByteVectorStruct { v: vec![1u8, 2u8, 3u8, 4u8, 1u8, 2u8, 3u8, 4u8, 1u8, 2u8, 3u8, 4u8] });
}
#[test]
fn test_golden_byte_nullable_vector_struct_non_null_v2_decode() {
let bytes = &[
0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x02,0x03,0x04,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenNullableByteVectorStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableByteVectorStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenNullableByteVectorStruct { v: Some(vec![1u8, 2u8, 3u8, 4u8]) });
}
#[test]
fn test_golden_nullable_byte_vector_struct_null_v2_decode() {
let bytes = &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenNullableByteVectorStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableByteVectorStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenNullableByteVectorStruct { v: None });
}
#[test]
fn test_golden_struct_vector_struct_v2_decode() {
let bytes = &[
0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenStructVectorStruct);
Decoder::decode_with_context::<test_conformance::GoldenStructVectorStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenStructVectorStruct { v: vec![test_conformance::GoldenIntStruct { v: 1i16 }, test_conformance::GoldenIntStruct { v: 2i16 }] });
}
#[test]
fn test_golden_nullable_struct_non_null_v2_decode() {
let bytes = &[
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenNullableStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenNullableStruct { v: Some(Box::new(test_conformance::GoldenBoolStruct { v: true })) });
}
#[test]
fn test_golden_nullable_struct_null_v2_decode() {
let bytes = &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenNullableStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenNullableStruct { v: None });
}
#[test]
fn test_golden_handle_basic_rights_struct_v2_decode() {
let bytes = &[
0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
];
let handle_defs = create_handles(&[
// #0
HandleDef{
subtype: HandleSubtype::Event,
rights: Rights::from_bits(53251).unwrap(),
},
]);
let _handle_koids = handle_defs.iter().map(get_handle_koid).collect::<Vec<_>>();
let mut handle_infos = select_handle_infos(&handle_defs, &[
0,]);
let mut value = fidl::new_empty!(test_conformance::GoldenHandleBasicRightsStruct);
Decoder::decode_with_context::<test_conformance::GoldenHandleBasicRightsStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
match value.v.basic_info() {
Ok(info) => {
assert_eq!(info.koid.raw_koid(), _handle_koids[0]);
assert_eq!(info.object_type, fidl::ObjectType::EVENT);
assert_eq!(info.rights, Rights::from_bits(49155).unwrap());
},
Err(e) => panic!("handle basic_info failed: {}", e),
}
}
#[test]
fn test_golden_nullable_handle_struct_non_null_v2_decode() {
let bytes = &[
0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
];
let handle_defs = create_handles(&[
// #0
HandleDef{
subtype: HandleSubtype::Event,
rights: Rights::from_bits(2147483648).unwrap(),
},
]);
let _handle_koids = handle_defs.iter().map(get_handle_koid).collect::<Vec<_>>();
let mut handle_infos = select_handle_infos(&handle_defs, &[
0,]);
let mut value = fidl::new_empty!(test_conformance::GoldenNullableHandleStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableHandleStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value.v.as_ref().unwrap().basic_info().unwrap().koid.raw_koid(), _handle_koids[0]);
}
#[test]
fn test_golden_nullable_handle_struct_null_v2_decode() {
let bytes = &[
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenNullableHandleStruct);
Decoder::decode_with_context::<test_conformance::GoldenNullableHandleStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenNullableHandleStruct { v: None });
}
#[test]
fn test_golden_table_unknown_dropped_v2_decode() {
let bytes = &[
0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0x01,0x00,0x01,0x00,
];
let handle_defs = create_handles(&[
// #0
HandleDef{
subtype: HandleSubtype::Event,
rights: Rights::from_bits(2147483648).unwrap(),
},
]);
let _handle_koids = handle_defs.iter().map(get_handle_koid).collect::<Vec<_>>();
let mut handle_infos = select_handle_infos(&handle_defs, &[
0,]);
let mut value = fidl::new_empty!(test_conformance::GoldenTableStruct);
Decoder::decode_with_context::<test_conformance::GoldenTableStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value).unwrap();
assert_eq!(value, test_conformance::GoldenTableStruct { v: test_conformance::GoldenTable { ..Default::default() } });
let unused_handles = select_raw_handle_infos(&handle_defs, &[
0,]);
assert_eq!(
unused_handles.iter().map(get_info_handle_valid).collect::<Vec<_>>(),
repeat(Err(Status::BAD_HANDLE), unused_handles.len()),
);
}
#[test]
fn test_golden_string_with_max_size2_v2_encode_failure() {
let value = test_conformance::GoldenStringWithMaxSize2 { s: String::from("abc") };
let mut bytes = Vec::new();
let mut handles = Vec::new();
bytes.resize(65536, 0xcd); // fill with junk data
match Encoder::encode_with_context::<test_conformance::GoldenStringWithMaxSize2>(
_V2_CONTEXT, &mut bytes, &mut handles, &value
) {
Err(err) => assert_matches!(err, Error::StringTooLong { .. }),
Ok(_) => panic!("unexpected successful encoding"),
}
}
#[test]
fn test_golden_string_struct_null_body_v2_decode_failure() {
let bytes = &[
0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut handle_infos = Vec::new();
let mut value = fidl::new_empty!(test_conformance::GoldenStringStruct);
match Decoder::decode_with_context::<test_conformance::GoldenStringStruct>(_V2_CONTEXT, bytes, &mut handle_infos, &mut value) {
Err(err) => assert_matches!(err, Error::UnexpectedNullRef { .. }),
Ok(_) => panic!("unexpected successful decoding"),
}
}