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 |