OLD | NEW |
| (Empty) |
1 // Copyright 2014 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 #ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_VALIDATION_TEST_INPUT_PARSER_H_ | |
6 #define MOJO_PUBLIC_CPP_BINDINGS_TESTS_VALIDATION_TEST_INPUT_PARSER_H_ | |
7 | |
8 #include <stdint.h> | |
9 | |
10 #include <string> | |
11 #include <vector> | |
12 | |
13 namespace mojo { | |
14 namespace test { | |
15 | |
16 // Input Format of Mojo Message Validation Tests. | |
17 // | |
18 // Data items are separated by whitespaces: | |
19 // - ' ' (0x20) space; | |
20 // - '\t' (0x09) horizontal tab; | |
21 // - '\n' (0x0a) newline; | |
22 // - '\r' (0x0d) carriage return. | |
23 // A comment starts with //, extending to the end of the line. | |
24 // Each data item is of the format [<type>]<value>. The types defined and the | |
25 // corresponding value formats are described below. | |
26 // | |
27 // Type: u1 / u2 / u4 / u8 | |
28 // Description: Little-endian 1/2/4/8-byte unsigned integer. | |
29 // Value Format: | |
30 // - Decimal integer: 0|[1-9][0-9]* | |
31 // - Hexadecimal integer: 0[xX][0-9a-fA-F]+ | |
32 // - The type prefix (including the square brackets) of 1-byte unsigned | |
33 // integer is optional. | |
34 // | |
35 // Type: s1 / s2 / s4 / s8 | |
36 // Description: Little-endian 1/2/4/8-byte signed integer. | |
37 // Value Format: | |
38 // - Decimal integer: [-+]?(0|[1-9][0-9]*) | |
39 // - Hexadecimal integer: [-+]?0[xX][0-9a-fA-F]+ | |
40 // | |
41 // Type: b | |
42 // Description: Binary sequence of 1 byte. | |
43 // Value Format: [01]{8} | |
44 // | |
45 // Type: f / d | |
46 // Description: Little-endian IEEE-754 format of float (4 bytes) and double (8 | |
47 // bytes). | |
48 // Value Format: [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? | |
49 // | |
50 // Type: dist4 / dist8 | |
51 // Description: Little-endian 4/8-byte unsigned integer. The actual value is set | |
52 // to the byte distance from the location of this integer to the location of the | |
53 // anchr item with the same ID. A dist8 and anchr pair can be used to easily | |
54 // represent an encoded pointer. A dist4 and anchr pair can be used to easily | |
55 // calculate struct/array size. | |
56 // Value Format: The value is an ID: [0-9a-zA-Z_]+ | |
57 // | |
58 // Type: anchr | |
59 // Description: Mark an anchor location. It doesn’t translate into any actual | |
60 // data. | |
61 // Value Format: The value is an ID of the same format as that of dist4/8. | |
62 // | |
63 // Type: handles | |
64 // Description: The number of handles that are associated with the message. This | |
65 // special item is not part of the message data. If specified, it should be the | |
66 // first item. | |
67 // Value Format: The same format as u1/2/4/8. | |
68 // | |
69 // EXAMPLE: | |
70 // | |
71 // Suppose you have the following Mojo types defined: | |
72 // struct Bar { | |
73 // int32 a; | |
74 // bool b; | |
75 // bool c; | |
76 // }; | |
77 // struct Foo { | |
78 // Bar x; | |
79 // uint32 y; | |
80 // }; | |
81 // | |
82 // The following describes a valid message whose payload is a Foo struct: | |
83 // // message header | |
84 // [dist4]message_header // num_bytes | |
85 // [u4]3 // num_fields | |
86 // [u4]0 // type | |
87 // [u4]1 // flags | |
88 // [u8]1234 // request_id | |
89 // [anchr]message_header | |
90 // | |
91 // // payload | |
92 // [dist4]foo // num_bytes | |
93 // [u4]2 // num_fields | |
94 // [dist8]bar_ptr // x | |
95 // [u4]0xABCD // y | |
96 // [u4]0 // padding | |
97 // [anchr]foo | |
98 // | |
99 // [anchr]bar_ptr | |
100 // [dist4]bar // num_bytes | |
101 // [u4]3 // num_fields | |
102 // [s4]-1 // a | |
103 // [b]00000010 // b and c | |
104 // 0 0 0 // padding | |
105 // [anchr]bar | |
106 | |
107 // Parses validation test input. | |
108 // On success, |data| and |num_handles| store the parsing result, | |
109 // |error_message| is cleared; on failure, |error_message| is set to a message | |
110 // describing the error, |data| is cleared and |num_handles| set to 0. | |
111 // Note: For now, this method only works on little-endian platforms. | |
112 bool ParseValidationTestInput(const std::string& input, | |
113 std::vector<uint8_t>* data, | |
114 size_t* num_handles, | |
115 std::string* error_message); | |
116 | |
117 } // namespace test | |
118 } // namespace mojo | |
119 | |
120 #endif // MOJO_PUBLIC_CPP_BINDINGS_TESTS_VALIDATION_TEST_INPUT_PARSER_H_ | |
OLD | NEW |