Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Side by Side Diff: command_buffer/service/cross/cmd_parser_test.cc

Issue 212018: Change command buffer client code to use structures.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « command_buffer/service/cross/cmd_parser.cc ('k') | command_buffer/service/cross/effect_utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2009, Google Inc. 2 * Copyright 2009, Google Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 CommandHeader header; 108 CommandHeader header;
109 109
110 // add a single command, no args 110 // add a single command, no args
111 header.size = 1; 111 header.size = 1;
112 header.command = 123; 112 header.command = 123;
113 buffer()[put++].value_header = header; 113 buffer()[put++].value_header = header;
114 114
115 parser->set_put(put); 115 parser->set_put(put);
116 EXPECT_EQ(put, parser->put()); 116 EXPECT_EQ(put, parser->put());
117 117
118 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, 123, 0, NULL); 118 AddDoCommandExpect(BufferSyncInterface::kParseNoError, 123, 0, NULL);
119 EXPECT_EQ(BufferSyncInterface::PARSE_NO_ERROR, parser->ProcessCommand()); 119 EXPECT_EQ(BufferSyncInterface::kParseNoError, parser->ProcessCommand());
120 EXPECT_EQ(put, parser->get()); 120 EXPECT_EQ(put, parser->get());
121 Mock::VerifyAndClearExpectations(api_mock()); 121 Mock::VerifyAndClearExpectations(api_mock());
122 122
123 // add a single command, 2 args 123 // add a single command, 2 args
124 header.size = 3; 124 header.size = 3;
125 header.command = 456; 125 header.command = 456;
126 buffer()[put++].value_header = header; 126 buffer()[put++].value_header = header;
127 buffer()[put++].value_int32 = 2134; 127 buffer()[put++].value_int32 = 2134;
128 buffer()[put++].value_float = 1.f; 128 buffer()[put++].value_float = 1.f;
129 129
130 parser->set_put(put); 130 parser->set_put(put);
131 EXPECT_EQ(put, parser->put()); 131 EXPECT_EQ(put, parser->put());
132 132
133 CommandBufferEntry param_array[2]; 133 CommandBufferEntry param_array[2];
134 param_array[0].value_int32 = 2134; 134 param_array[0].value_int32 = 2134;
135 param_array[1].value_float = 1.f; 135 param_array[1].value_float = 1.f;
136 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, 456, 2, param_array); 136 AddDoCommandExpect(BufferSyncInterface::kParseNoError, 456, 2, param_array);
137 EXPECT_EQ(BufferSyncInterface::PARSE_NO_ERROR, parser->ProcessCommand()); 137 EXPECT_EQ(BufferSyncInterface::kParseNoError, parser->ProcessCommand());
138 EXPECT_EQ(put, parser->get()); 138 EXPECT_EQ(put, parser->get());
139 Mock::VerifyAndClearExpectations(api_mock()); 139 Mock::VerifyAndClearExpectations(api_mock());
140 } 140 }
141 141
142 // Tests having multiple commands in the buffer. 142 // Tests having multiple commands in the buffer.
143 TEST_F(CommandParserTest, TestMultipleCommands) { 143 TEST_F(CommandParserTest, TestMultipleCommands) {
144 scoped_ptr<CommandParser> parser(MakeParser(10)); 144 scoped_ptr<CommandParser> parser(MakeParser(10));
145 CommandBufferOffset put = parser->put(); 145 CommandBufferOffset put = parser->put();
146 CommandHeader header; 146 CommandHeader header;
147 147
148 // add 2 commands, test with single ProcessCommand() 148 // add 2 commands, test with single ProcessCommand()
149 header.size = 2; 149 header.size = 2;
150 header.command = 789; 150 header.command = 789;
151 buffer()[put++].value_header = header; 151 buffer()[put++].value_header = header;
152 buffer()[put++].value_int32 = 5151; 152 buffer()[put++].value_int32 = 5151;
153 153
154 CommandBufferOffset put_cmd2 = put; 154 CommandBufferOffset put_cmd2 = put;
155 header.size = 2; 155 header.size = 2;
156 header.command = 2121; 156 header.command = 2121;
157 buffer()[put++].value_header = header; 157 buffer()[put++].value_header = header;
158 buffer()[put++].value_int32 = 3434; 158 buffer()[put++].value_int32 = 3434;
159 159
160 parser->set_put(put); 160 parser->set_put(put);
161 EXPECT_EQ(put, parser->put()); 161 EXPECT_EQ(put, parser->put());
162 162
163 CommandBufferEntry param_array[2]; 163 CommandBufferEntry param_array[2];
164 param_array[0].value_int32 = 5151; 164 param_array[0].value_int32 = 5151;
165 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, 789, 1, param_array); 165 AddDoCommandExpect(BufferSyncInterface::kParseNoError, 789, 1, param_array);
166 param_array[1].value_int32 = 3434; 166 param_array[1].value_int32 = 3434;
167 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, 2121, 1, 167 AddDoCommandExpect(BufferSyncInterface::kParseNoError, 2121, 1,
168 param_array+1); 168 param_array+1);
169 169
170 EXPECT_EQ(BufferSyncInterface::PARSE_NO_ERROR, parser->ProcessCommand()); 170 EXPECT_EQ(BufferSyncInterface::kParseNoError, parser->ProcessCommand());
171 EXPECT_EQ(put_cmd2, parser->get()); 171 EXPECT_EQ(put_cmd2, parser->get());
172 EXPECT_EQ(BufferSyncInterface::PARSE_NO_ERROR, parser->ProcessCommand()); 172 EXPECT_EQ(BufferSyncInterface::kParseNoError, parser->ProcessCommand());
173 EXPECT_EQ(put, parser->get()); 173 EXPECT_EQ(put, parser->get());
174 Mock::VerifyAndClearExpectations(api_mock()); 174 Mock::VerifyAndClearExpectations(api_mock());
175 175
176 // add 2 commands again, test with ProcessAllCommands() 176 // add 2 commands again, test with ProcessAllCommands()
177 header.size = 2; 177 header.size = 2;
178 header.command = 4545; 178 header.command = 4545;
179 buffer()[put++].value_header = header; 179 buffer()[put++].value_header = header;
180 buffer()[put++].value_int32 = 5656; 180 buffer()[put++].value_int32 = 5656;
181 181
182 header.size = 2; 182 header.size = 2;
183 header.command = 6767; 183 header.command = 6767;
184 buffer()[put++].value_header = header; 184 buffer()[put++].value_header = header;
185 buffer()[put++].value_int32 = 7878; 185 buffer()[put++].value_int32 = 7878;
186 186
187 parser->set_put(put); 187 parser->set_put(put);
188 EXPECT_EQ(put, parser->put()); 188 EXPECT_EQ(put, parser->put());
189 189
190 param_array[0].value_int32 = 5656; 190 param_array[0].value_int32 = 5656;
191 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, 4545, 1, param_array); 191 AddDoCommandExpect(BufferSyncInterface::kParseNoError, 4545, 1, param_array);
192 param_array[1].value_int32 = 7878; 192 param_array[1].value_int32 = 7878;
193 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, 6767, 1, 193 AddDoCommandExpect(BufferSyncInterface::kParseNoError, 6767, 1,
194 param_array+1); 194 param_array+1);
195 195
196 EXPECT_EQ(BufferSyncInterface::PARSE_NO_ERROR, parser->ProcessAllCommands()); 196 EXPECT_EQ(BufferSyncInterface::kParseNoError, parser->ProcessAllCommands());
197 EXPECT_EQ(put, parser->get()); 197 EXPECT_EQ(put, parser->get());
198 Mock::VerifyAndClearExpectations(api_mock()); 198 Mock::VerifyAndClearExpectations(api_mock());
199 } 199 }
200 200
201 // Tests that the parser will wrap correctly at the end of the buffer. 201 // Tests that the parser will wrap correctly at the end of the buffer.
202 TEST_F(CommandParserTest, TestWrap) { 202 TEST_F(CommandParserTest, TestWrap) {
203 scoped_ptr<CommandParser> parser(MakeParser(5)); 203 scoped_ptr<CommandParser> parser(MakeParser(5));
204 CommandBufferOffset put = parser->put(); 204 CommandBufferOffset put = parser->put();
205 CommandHeader header; 205 CommandHeader header;
206 206
207 // add 3 commands with no args (1 word each) 207 // add 3 commands with no args (1 word each)
208 for (unsigned int i = 0; i < 3; ++i) { 208 for (unsigned int i = 0; i < 3; ++i) {
209 header.size = 1; 209 header.size = 1;
210 header.command = i; 210 header.command = i;
211 buffer()[put++].value_header = header; 211 buffer()[put++].value_header = header;
212 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, i, 0, NULL); 212 AddDoCommandExpect(BufferSyncInterface::kParseNoError, i, 0, NULL);
213 } 213 }
214 parser->set_put(put); 214 parser->set_put(put);
215 EXPECT_EQ(put, parser->put()); 215 EXPECT_EQ(put, parser->put());
216 EXPECT_EQ(BufferSyncInterface::PARSE_NO_ERROR, parser->ProcessAllCommands()); 216 EXPECT_EQ(BufferSyncInterface::kParseNoError, parser->ProcessAllCommands());
217 EXPECT_EQ(put, parser->get()); 217 EXPECT_EQ(put, parser->get());
218 Mock::VerifyAndClearExpectations(api_mock()); 218 Mock::VerifyAndClearExpectations(api_mock());
219 219
220 // add 1 command with 1 arg (2 words). That should put us at the end of the 220 // add 1 command with 1 arg (2 words). That should put us at the end of the
221 // buffer. 221 // buffer.
222 header.size = 2; 222 header.size = 2;
223 header.command = 3; 223 header.command = 3;
224 buffer()[put++].value_header = header; 224 buffer()[put++].value_header = header;
225 buffer()[put++].value_int32 = 5; 225 buffer()[put++].value_int32 = 5;
226 CommandBufferEntry param; 226 CommandBufferEntry param;
227 param.value_int32 = 5; 227 param.value_int32 = 5;
228 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, 3, 1, &param); 228 AddDoCommandExpect(BufferSyncInterface::kParseNoError, 3, 1, &param);
229 229
230 DCHECK_EQ(5, put); 230 DCHECK_EQ(5, put);
231 put = 0; 231 put = 0;
232 parser->set_put(put); 232 parser->set_put(put);
233 EXPECT_EQ(put, parser->put()); 233 EXPECT_EQ(put, parser->put());
234 EXPECT_EQ(BufferSyncInterface::PARSE_NO_ERROR, parser->ProcessAllCommands()); 234 EXPECT_EQ(BufferSyncInterface::kParseNoError, parser->ProcessAllCommands());
235 EXPECT_EQ(put, parser->get()); 235 EXPECT_EQ(put, parser->get());
236 Mock::VerifyAndClearExpectations(api_mock()); 236 Mock::VerifyAndClearExpectations(api_mock());
237 237
238 // add 1 command with 1 arg (2 words). 238 // add 1 command with 1 arg (2 words).
239 header.size = 2; 239 header.size = 2;
240 header.command = 4; 240 header.command = 4;
241 buffer()[put++].value_header = header; 241 buffer()[put++].value_header = header;
242 buffer()[put++].value_int32 = 6; 242 buffer()[put++].value_int32 = 6;
243 param.value_int32 = 6; 243 param.value_int32 = 6;
244 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, 4, 1, &param); 244 AddDoCommandExpect(BufferSyncInterface::kParseNoError, 4, 1, &param);
245 parser->set_put(put); 245 parser->set_put(put);
246 EXPECT_EQ(put, parser->put()); 246 EXPECT_EQ(put, parser->put());
247 EXPECT_EQ(BufferSyncInterface::PARSE_NO_ERROR, parser->ProcessAllCommands()); 247 EXPECT_EQ(BufferSyncInterface::kParseNoError, parser->ProcessAllCommands());
248 EXPECT_EQ(put, parser->get()); 248 EXPECT_EQ(put, parser->get());
249 Mock::VerifyAndClearExpectations(api_mock()); 249 Mock::VerifyAndClearExpectations(api_mock());
250 } 250 }
251 251
252 // Tests error conditions. 252 // Tests error conditions.
253 TEST_F(CommandParserTest, TestError) { 253 TEST_F(CommandParserTest, TestError) {
254 scoped_ptr<CommandParser> parser(MakeParser(5)); 254 scoped_ptr<CommandParser> parser(MakeParser(5));
255 CommandBufferOffset put = parser->put(); 255 CommandBufferOffset put = parser->put();
256 CommandHeader header; 256 CommandHeader header;
257 257
258 // Generate a command with size 0. 258 // Generate a command with size 0.
259 header.size = 0; 259 header.size = 0;
260 header.command = 3; 260 header.command = 3;
261 buffer()[put++].value_header = header; 261 buffer()[put++].value_header = header;
262 262
263 parser->set_put(put); 263 parser->set_put(put);
264 EXPECT_EQ(put, parser->put()); 264 EXPECT_EQ(put, parser->put());
265 EXPECT_EQ(BufferSyncInterface::PARSE_INVALID_SIZE, 265 EXPECT_EQ(BufferSyncInterface::kParseInvalidSize,
266 parser->ProcessAllCommands()); 266 parser->ProcessAllCommands());
267 // check that no DoCommand call was made. 267 // check that no DoCommand call was made.
268 Mock::VerifyAndClearExpectations(api_mock()); 268 Mock::VerifyAndClearExpectations(api_mock());
269 269
270 parser.reset(MakeParser(5)); 270 parser.reset(MakeParser(5));
271 put = parser->put(); 271 put = parser->put();
272 272
273 // Generate a command with size 6, extends beyond the end of the buffer. 273 // Generate a command with size 6, extends beyond the end of the buffer.
274 header.size = 6; 274 header.size = 6;
275 header.command = 3; 275 header.command = 3;
276 buffer()[put++].value_header = header; 276 buffer()[put++].value_header = header;
277 277
278 parser->set_put(put); 278 parser->set_put(put);
279 EXPECT_EQ(put, parser->put()); 279 EXPECT_EQ(put, parser->put());
280 EXPECT_EQ(BufferSyncInterface::PARSE_OUT_OF_BOUNDS, 280 EXPECT_EQ(BufferSyncInterface::kParseOutOfBounds,
281 parser->ProcessAllCommands()); 281 parser->ProcessAllCommands());
282 // check that no DoCommand call was made. 282 // check that no DoCommand call was made.
283 Mock::VerifyAndClearExpectations(api_mock()); 283 Mock::VerifyAndClearExpectations(api_mock());
284 284
285 parser.reset(MakeParser(5)); 285 parser.reset(MakeParser(5));
286 put = parser->put(); 286 put = parser->put();
287 287
288 // Generates 2 commands. 288 // Generates 2 commands.
289 header.size = 1; 289 header.size = 1;
290 header.command = 3; 290 header.command = 3;
291 buffer()[put++].value_header = header; 291 buffer()[put++].value_header = header;
292 CommandBufferOffset put_post_fail = put; 292 CommandBufferOffset put_post_fail = put;
293 header.size = 1; 293 header.size = 1;
294 header.command = 4; 294 header.command = 4;
295 buffer()[put++].value_header = header; 295 buffer()[put++].value_header = header;
296 296
297 parser->set_put(put); 297 parser->set_put(put);
298 EXPECT_EQ(put, parser->put()); 298 EXPECT_EQ(put, parser->put());
299 // have the first command fail to parse. 299 // have the first command fail to parse.
300 AddDoCommandExpect(BufferSyncInterface::PARSE_UNKNOWN_COMMAND, 3, 0, NULL); 300 AddDoCommandExpect(BufferSyncInterface::kParseUnknownCommand, 3, 0, NULL);
301 EXPECT_EQ(BufferSyncInterface::PARSE_UNKNOWN_COMMAND, 301 EXPECT_EQ(BufferSyncInterface::kParseUnknownCommand,
302 parser->ProcessAllCommands()); 302 parser->ProcessAllCommands());
303 // check that only one command was executed, and that get reflects that 303 // check that only one command was executed, and that get reflects that
304 // correctly. 304 // correctly.
305 EXPECT_EQ(put_post_fail, parser->get()); 305 EXPECT_EQ(put_post_fail, parser->get());
306 Mock::VerifyAndClearExpectations(api_mock()); 306 Mock::VerifyAndClearExpectations(api_mock());
307 // make the second one succeed, and check that the parser recovered fine. 307 // make the second one succeed, and check that the parser recovered fine.
308 AddDoCommandExpect(BufferSyncInterface::PARSE_NO_ERROR, 4, 0, NULL); 308 AddDoCommandExpect(BufferSyncInterface::kParseNoError, 4, 0, NULL);
309 EXPECT_EQ(BufferSyncInterface::PARSE_NO_ERROR, parser->ProcessAllCommands()); 309 EXPECT_EQ(BufferSyncInterface::kParseNoError, parser->ProcessAllCommands());
310 EXPECT_EQ(put, parser->get()); 310 EXPECT_EQ(put, parser->get());
311 Mock::VerifyAndClearExpectations(api_mock()); 311 Mock::VerifyAndClearExpectations(api_mock());
312 } 312 }
313 313
314 } // namespace command_buffer 314 } // namespace command_buffer
315 } // namespace o3d 315 } // namespace o3d
OLDNEW
« no previous file with comments | « command_buffer/service/cross/cmd_parser.cc ('k') | command_buffer/service/cross/effect_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698