| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 //! Tests encoding and decoding functionality in the bindings package | |
| 6 //! | |
| 7 //! Test failure is defined as the function returning via panicking | |
| 8 //! and the result being caught in the test! macro. If a test function | |
| 9 //! returns without panicking, it is assumed to pass. | |
| 10 | |
| 11 #[macro_use] | |
| 12 extern crate mojo; | |
| 13 | |
| 14 use mojo::bindings::mojom::MojomMessageOption; | |
| 15 use mojo::system; | |
| 16 | |
| 17 #[macro_use] | |
| 18 mod util; | |
| 19 | |
| 20 use util::mojom_validation::*; | |
| 21 | |
| 22 /// This macro is a wrapper for the tests! macro as it takes advantage of the | |
| 23 /// shared code between tests. | |
| 24 /// | |
| 25 /// Given a test name, it will generate a test function. In this test function | |
| 26 /// we perform the following steps: | |
| 27 /// 1. Decode the header of the validation input. | |
| 28 /// 2. Decode the payload of the validation input, expecting a validation | |
| 29 /// error. | |
| 30 /// | |
| 31 macro_rules! validation_tests { | |
| 32 ($($name:ident => $req_type:ident;)*) => { | |
| 33 tests! { | |
| 34 $( | |
| 35 fn $name() { | |
| 36 let data = include_str!(concat!("../../interfaces/bindings/tests
/data/validation/", | |
| 37 stringify!($name), | |
| 38 ".data")); | |
| 39 let expected = include_str!(concat!("../../interfaces/bindings/t
ests/data/validation/", | |
| 40 stringify!($name), | |
| 41 ".expected")).trim(); | |
| 42 match util::parse_validation_test(data) { | |
| 43 Ok((data, num_handles)) => { | |
| 44 let mut mock_handles = Vec::with_capacity(num_handles); | |
| 45 for _ in 0..num_handles { | |
| 46 mock_handles.push(unsafe { system::acquire(0) }); | |
| 47 } | |
| 48 match $req_type::decode_message(data, mock_handles) { | |
| 49 Ok(_) => panic!("Should not be valid!"), | |
| 50 Err(err) => assert_eq!(err.as_str(), expected), | |
| 51 } | |
| 52 }, | |
| 53 Err(msg) => panic!("Error: {}", msg), | |
| 54 } | |
| 55 } | |
| 56 )* | |
| 57 } | |
| 58 } | |
| 59 } | |
| 60 | |
| 61 validation_tests! { | |
| 62 conformance_empty => ConformanceTestInterfaceRequestOption; | |
| 63 conformance_mthd0_incomplete_struct => ConformanceTestInterfaceRequestOption
; | |
| 64 conformance_mthd0_incomplete_struct_header => ConformanceTestInterfaceReques
tOption; | |
| 65 conformance_mthd0_invalid_request_flags => ConformanceTestInterfaceRequestOp
tion; | |
| 66 conformance_mthd0_invalid_request_flags2 => ConformanceTestInterfaceRequestO
ption; | |
| 67 conformance_mthd0_struct_num_bytes_huge => ConformanceTestInterfaceRequestOp
tion; | |
| 68 conformance_mthd0_struct_num_bytes_less_than_min_requirement => ConformanceT
estInterfaceRequestOption; | |
| 69 conformance_mthd0_struct_num_bytes_less_than_struct_header => ConformanceTes
tInterfaceRequestOption; | |
| 70 conformance_mthd10_null_keys => ConformanceTestInterfaceRequestOption; | |
| 71 conformance_mthd10_null_values => ConformanceTestInterfaceRequestOption; | |
| 72 conformance_mthd10_one_null_key => ConformanceTestInterfaceRequestOption; | |
| 73 conformance_mthd10_unequal_array_size => ConformanceTestInterfaceRequestOpti
on; | |
| 74 conformance_mthd11_num_bytes_version_mismatch_1 => ConformanceTestInterfaceR
equestOption; | |
| 75 conformance_mthd11_num_bytes_version_mismatch_2 => ConformanceTestInterfaceR
equestOption; | |
| 76 conformance_mthd12_invalid_request_flags => ConformanceTestInterfaceRequestO
ption; | |
| 77 conformance_mthd14_unexpected_null_array_in_union => ConformanceTestInterfac
eRequestOption; | |
| 78 conformance_mthd14_unexpected_null_map_in_union => ConformanceTestInterfaceR
equestOption; | |
| 79 conformance_mthd14_unexpected_null_struct_in_union => ConformanceTestInterfa
ceRequestOption; | |
| 80 conformance_mthd14_unexpected_null_union_in_union => ConformanceTestInterfac
eRequestOption; | |
| 81 conformance_mthd15_unexpected_null_union_in_array => ConformanceTestInterfac
eRequestOption; | |
| 82 conformance_mthd1_misaligned_struct => ConformanceTestInterfaceRequestOption
; | |
| 83 conformance_mthd1_struct_pointer_overflow => ConformanceTestInterfaceRequest
Option; | |
| 84 conformance_mthd1_unexpected_null_struct => ConformanceTestInterfaceRequestO
ption; | |
| 85 conformance_mthd2_multiple_pointers_to_same_struct => ConformanceTestInterfa
ceRequestOption; | |
| 86 conformance_mthd2_overlapped_objects => ConformanceTestInterfaceRequestOptio
n; | |
| 87 conformance_mthd2_wrong_layout_order => ConformanceTestInterfaceRequestOptio
n; | |
| 88 conformance_mthd3_array_num_bytes_huge => ConformanceTestInterfaceRequestOpt
ion; | |
| 89 conformance_mthd3_array_num_bytes_less_than_array_header => ConformanceTestI
nterfaceRequestOption; | |
| 90 conformance_mthd3_array_num_bytes_less_than_necessary_size => ConformanceTes
tInterfaceRequestOption; | |
| 91 conformance_mthd3_array_pointer_overflow => ConformanceTestInterfaceRequestO
ption; | |
| 92 conformance_mthd3_incomplete_array => ConformanceTestInterfaceRequestOption; | |
| 93 conformance_mthd3_incomplete_array_header => ConformanceTestInterfaceRequest
Option; | |
| 94 conformance_mthd3_misaligned_array => ConformanceTestInterfaceRequestOption; | |
| 95 conformance_mthd3_unexpected_null_array => ConformanceTestInterfaceRequestOp
tion; | |
| 96 conformance_mthd4_multiple_pointers_to_same_array => ConformanceTestInterfac
eRequestOption; | |
| 97 conformance_mthd4_overlapped_objects => ConformanceTestInterfaceRequestOptio
n; | |
| 98 conformance_mthd4_wrong_layout_order => ConformanceTestInterfaceRequestOptio
n; | |
| 99 conformance_mthd5_handle_out_of_range => ConformanceTestInterfaceRequestOpti
on; | |
| 100 conformance_mthd5_multiple_handles_with_same_value_1 => ConformanceTestInter
faceRequestOption; | |
| 101 conformance_mthd5_multiple_handles_with_same_value_2 => ConformanceTestInter
faceRequestOption; | |
| 102 conformance_mthd5_unexpected_invalid_handle => ConformanceTestInterfaceReque
stOption; | |
| 103 conformance_mthd5_wrong_handle_order => ConformanceTestInterfaceRequestOptio
n; | |
| 104 conformance_mthd6_nested_array_num_bytes_less_than_necessary_size => Conform
anceTestInterfaceRequestOption; | |
| 105 conformance_mthd7_unexpected_null_fixed_array => ConformanceTestInterfaceReq
uestOption; | |
| 106 conformance_mthd7_unmatched_array_elements => ConformanceTestInterfaceReques
tOption; | |
| 107 conformance_mthd7_unmatched_array_elements_nested => ConformanceTestInterfac
eRequestOption; | |
| 108 conformance_mthd8_array_num_bytes_overflow => ConformanceTestInterfaceReques
tOption; | |
| 109 conformance_mthd8_unexpected_null_array => ConformanceTestInterfaceRequestOp
tion; | |
| 110 conformance_mthd8_unexpected_null_string => ConformanceTestInterfaceRequestO
ption; | |
| 111 conformance_mthd9_unexpected_null_array => ConformanceTestInterfaceRequestOp
tion; | |
| 112 boundscheck_msghdr_no_such_method => BoundsCheckTestInterfaceRequestOption; | |
| 113 conformance_msghdr_incomplete_struct => ConformanceTestInterfaceRequestOptio
n; | |
| 114 conformance_msghdr_incomplete_struct_header => ConformanceTestInterfaceReque
stOption; | |
| 115 conformance_msghdr_invalid_flag_combo => ConformanceTestInterfaceRequestOpti
on; | |
| 116 conformance_msghdr_missing_request_id => ConformanceTestInterfaceRequestOpti
on; | |
| 117 conformance_msghdr_no_such_method => ConformanceTestInterfaceRequestOption; | |
| 118 conformance_msghdr_num_bytes_huge => ConformanceTestInterfaceRequestOption; | |
| 119 conformance_msghdr_num_bytes_less_than_min_requirement => ConformanceTestInt
erfaceRequestOption; | |
| 120 conformance_msghdr_num_bytes_less_than_struct_header => ConformanceTestInter
faceRequestOption; | |
| 121 conformance_msghdr_num_bytes_version_mismatch_1 => ConformanceTestInterfaceR
equestOption; | |
| 122 conformance_msghdr_num_bytes_version_mismatch_2 => ConformanceTestInterfaceR
equestOption; | |
| 123 conformance_msghdr_num_bytes_version_mismatch_3 => ConformanceTestInterfaceR
equestOption; | |
| 124 resp_boundscheck_msghdr_no_such_method => BoundsCheckTestInterfaceResponseOp
tion; | |
| 125 resp_conformance_msghdr_invalid_response_flags1 => ConformanceTestInterfaceR
esponseOption; | |
| 126 resp_conformance_msghdr_invalid_response_flags2 => ConformanceTestInterfaceR
esponseOption; | |
| 127 resp_conformance_msghdr_no_such_method => ConformanceTestInterfaceResponseOp
tion; | |
| 128 integration_intf_resp_mthd0_unexpected_array_header => IntegrationTestInterf
aceResponseOption; | |
| 129 integration_intf_rqst_mthd0_unexpected_struct_header => IntegrationTestInter
faceRequestOption; | |
| 130 integration_msghdr_invalid_flags => IntegrationTestInterfaceRequestOption; | |
| 131 } | |
| OLD | NEW |