| Index: mojo/public/rust/tests/validation.rs
|
| diff --git a/mojo/public/rust/tests/validation.rs b/mojo/public/rust/tests/validation.rs
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2362dbd97edcab3ac33e387c6c7d847c79df5cc4
|
| --- /dev/null
|
| +++ b/mojo/public/rust/tests/validation.rs
|
| @@ -0,0 +1,127 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +//! Tests encoding and decoding functionality in the bindings package
|
| +//!
|
| +//! Test failure is defined as the function returning via panicking
|
| +//! and the result being caught in the test! macro. If a test function
|
| +//! returns without panicking, it is assumed to pass.
|
| +
|
| +#[macro_use]
|
| +extern crate mojo;
|
| +
|
| +use mojo::bindings::mojom::MojomMessageOption;
|
| +use mojo::system;
|
| +
|
| +#[macro_use]
|
| +mod util;
|
| +
|
| +use util::mojom_validation::*;
|
| +
|
| +/// This macro is a wrapper for the tests! macro as it takes advantage of the
|
| +/// shared code between tests.
|
| +///
|
| +/// Given a test name, it will generate a test function. In this test function
|
| +/// we perform the following steps:
|
| +/// 1. Decode the header of the validation input.
|
| +/// 3. Decode the payload of the validation input.
|
| +///
|
| +macro_rules! validation_tests {
|
| + ($($name:ident => $req_type:ident;)*) => {
|
| + tests! {
|
| + $(
|
| + fn $name() {
|
| + let data = include_str!(concat!("../../interfaces/bindings/tests/data/validation/",
|
| + stringify!($name),
|
| + ".data"));
|
| + let expected = include_str!(concat!("../../interfaces/bindings/tests/data/validation/",
|
| + stringify!($name),
|
| + ".expected")).trim();
|
| + match util::parse_validation_test(data) {
|
| + Ok((data, num_handles)) => {
|
| + let mut mock_handles = Vec::with_capacity(num_handles);
|
| + for _ in 0..num_handles {
|
| + mock_handles.push(unsafe { system::acquire(0) });
|
| + }
|
| + match $req_type::decode_message(data, mock_handles) {
|
| + Ok(_) => panic!("Should not be valid!"),
|
| + Err(err) => assert_eq!(err.as_str(), expected),
|
| + }
|
| + },
|
| + Err(msg) => panic!("Error: {}", msg),
|
| + }
|
| + }
|
| + )*
|
| + }
|
| + }
|
| +}
|
| +
|
| +validation_tests! {
|
| + conformance_empty => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd0_incomplete_struct => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd0_incomplete_struct_header => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd0_invalid_request_flags => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd0_invalid_request_flags2 => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd0_struct_num_bytes_huge => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd0_struct_num_bytes_less_than_min_requirement => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd0_struct_num_bytes_less_than_struct_header => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd10_null_keys => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd10_null_values => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd10_one_null_key => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd10_unequal_array_size => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd11_num_bytes_version_mismatch_1 => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd11_num_bytes_version_mismatch_2 => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd12_invalid_request_flags => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd14_unexpected_null_array_in_union => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd14_unexpected_null_map_in_union => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd14_unexpected_null_struct_in_union => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd14_unexpected_null_union_in_union => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd15_unexpected_null_union_in_array => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd1_misaligned_struct => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd1_struct_pointer_overflow => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd1_unexpected_null_struct => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd2_multiple_pointers_to_same_struct => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd2_overlapped_objects => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd2_wrong_layout_order => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd3_array_num_bytes_huge => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd3_array_num_bytes_less_than_array_header => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd3_array_num_bytes_less_than_necessary_size => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd3_array_pointer_overflow => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd3_incomplete_array => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd3_incomplete_array_header => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd3_misaligned_array => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd3_unexpected_null_array => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd4_multiple_pointers_to_same_array => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd4_overlapped_objects => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd4_wrong_layout_order => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd5_handle_out_of_range => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd5_multiple_handles_with_same_value_1 => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd5_multiple_handles_with_same_value_2 => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd5_unexpected_invalid_handle => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd5_wrong_handle_order => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd6_nested_array_num_bytes_less_than_necessary_size => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd7_unexpected_null_fixed_array => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd7_unmatched_array_elements => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd7_unmatched_array_elements_nested => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd8_array_num_bytes_overflow => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd8_unexpected_null_array => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd8_unexpected_null_string => ConformanceTestInterfaceRequestOption;
|
| + conformance_mthd9_unexpected_null_array => ConformanceTestInterfaceRequestOption;
|
| + boundscheck_msghdr_no_such_method => BoundsCheckTestInterfaceRequestOption;
|
| + conformance_msghdr_incomplete_struct => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_incomplete_struct_header => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_invalid_flag_combo => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_missing_request_id => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_no_such_method => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_num_bytes_huge => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_num_bytes_less_than_min_requirement => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_num_bytes_less_than_struct_header => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_num_bytes_version_mismatch_1 => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_num_bytes_version_mismatch_2 => ConformanceTestInterfaceRequestOption;
|
| + conformance_msghdr_num_bytes_version_mismatch_3 => ConformanceTestInterfaceRequestOption;
|
| + resp_boundscheck_msghdr_no_such_method => BoundsCheckTestInterfaceResponseOption;
|
| + resp_conformance_msghdr_invalid_response_flags1 => ConformanceTestInterfaceResponseOption;
|
| + resp_conformance_msghdr_invalid_response_flags2 => ConformanceTestInterfaceResponseOption;
|
| + resp_conformance_msghdr_no_such_method => ConformanceTestInterfaceResponseOption;
|
| +}
|
|
|