1// Copyright (c) 2012 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// This file is auto-generated from
6// gpu/command_buffer/build_gles2_cmd_buffer.py
7// DO NOT EDIT!
8
9// It is included by gles2_cmd_decoder_unittest_1.cc
10#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
11#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
12
13// TODO(gman): ActiveTexture
14
15TEST_F(GLES2DecoderTest1, AttachShaderValidArgs) {
16  EXPECT_CALL(*gl_, AttachShader(kServiceProgramId, kServiceShaderId));
17  SpecializedSetup<cmds::AttachShader, 0>(true);
18  cmds::AttachShader cmd;
19  cmd.Init(client_program_id_, client_shader_id_);
20  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
21  EXPECT_EQ(GL_NO_ERROR, GetGLError());
22}
23// TODO(gman): BindAttribLocation
24
25// TODO(gman): BindAttribLocationImmediate
26
27// TODO(gman): BindAttribLocationBucket
28
29TEST_F(GLES2DecoderTest1, BindBufferValidArgs) {
30  EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceBufferId));
31  SpecializedSetup<cmds::BindBuffer, 0>(true);
32  cmds::BindBuffer cmd;
33  cmd.Init(GL_ARRAY_BUFFER, client_buffer_id_);
34  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
35  EXPECT_EQ(GL_NO_ERROR, GetGLError());
36}
37
38TEST_F(GLES2DecoderTest1, BindBufferValidArgsNewId) {
39  EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kNewServiceId));
40  EXPECT_CALL(*gl_, GenBuffersARB(1, _))
41     .WillOnce(SetArgumentPointee<1>(kNewServiceId));
42  SpecializedSetup<cmds::BindBuffer, 0>(true);
43  cmds::BindBuffer cmd;
44  cmd.Init(GL_ARRAY_BUFFER, kNewClientId);
45  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
46  EXPECT_EQ(GL_NO_ERROR, GetGLError());
47  EXPECT_TRUE(GetBuffer(kNewClientId) != NULL);
48}
49
50TEST_F(GLES2DecoderTest1, BindBufferInvalidArgs0_0) {
51  EXPECT_CALL(*gl_, BindBuffer(_, _)).Times(0);
52  SpecializedSetup<cmds::BindBuffer, 0>(false);
53  cmds::BindBuffer cmd;
54  cmd.Init(GL_RENDERBUFFER, client_buffer_id_);
55  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
56  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
57}
58
59TEST_F(GLES2DecoderTest1, BindFramebufferValidArgs) {
60  EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kServiceFramebufferId));
61  SpecializedSetup<cmds::BindFramebuffer, 0>(true);
62  cmds::BindFramebuffer cmd;
63  cmd.Init(GL_FRAMEBUFFER, client_framebuffer_id_);
64  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
65  EXPECT_EQ(GL_NO_ERROR, GetGLError());
66}
67
68TEST_F(GLES2DecoderTest1, BindFramebufferValidArgsNewId) {
69  EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kNewServiceId));
70  EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _))
71     .WillOnce(SetArgumentPointee<1>(kNewServiceId));
72  SpecializedSetup<cmds::BindFramebuffer, 0>(true);
73  cmds::BindFramebuffer cmd;
74  cmd.Init(GL_FRAMEBUFFER, kNewClientId);
75  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
76  EXPECT_EQ(GL_NO_ERROR, GetGLError());
77  EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL);
78}
79
80TEST_F(GLES2DecoderTest1, BindFramebufferInvalidArgs0_0) {
81  EXPECT_CALL(*gl_, BindFramebufferEXT(_, _)).Times(0);
82  SpecializedSetup<cmds::BindFramebuffer, 0>(false);
83  cmds::BindFramebuffer cmd;
84  cmd.Init(GL_DRAW_FRAMEBUFFER, client_framebuffer_id_);
85  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
86  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
87}
88
89TEST_F(GLES2DecoderTest1, BindFramebufferInvalidArgs0_1) {
90  EXPECT_CALL(*gl_, BindFramebufferEXT(_, _)).Times(0);
91  SpecializedSetup<cmds::BindFramebuffer, 0>(false);
92  cmds::BindFramebuffer cmd;
93  cmd.Init(GL_READ_FRAMEBUFFER, client_framebuffer_id_);
94  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
95  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
96}
97
98TEST_F(GLES2DecoderTest1, BindRenderbufferValidArgs) {
99  EXPECT_CALL(
100      *gl_, BindRenderbufferEXT(GL_RENDERBUFFER, kServiceRenderbufferId));
101  SpecializedSetup<cmds::BindRenderbuffer, 0>(true);
102  cmds::BindRenderbuffer cmd;
103  cmd.Init(GL_RENDERBUFFER, client_renderbuffer_id_);
104  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
105  EXPECT_EQ(GL_NO_ERROR, GetGLError());
106}
107
108TEST_F(GLES2DecoderTest1, BindRenderbufferValidArgsNewId) {
109  EXPECT_CALL(*gl_, BindRenderbufferEXT(GL_RENDERBUFFER, kNewServiceId));
110  EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _))
111     .WillOnce(SetArgumentPointee<1>(kNewServiceId));
112  SpecializedSetup<cmds::BindRenderbuffer, 0>(true);
113  cmds::BindRenderbuffer cmd;
114  cmd.Init(GL_RENDERBUFFER, kNewClientId);
115  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
116  EXPECT_EQ(GL_NO_ERROR, GetGLError());
117  EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL);
118}
119
120TEST_F(GLES2DecoderTest1, BindRenderbufferInvalidArgs0_0) {
121  EXPECT_CALL(*gl_, BindRenderbufferEXT(_, _)).Times(0);
122  SpecializedSetup<cmds::BindRenderbuffer, 0>(false);
123  cmds::BindRenderbuffer cmd;
124  cmd.Init(GL_FRAMEBUFFER, client_renderbuffer_id_);
125  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
126  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
127}
128
129TEST_F(GLES2DecoderTest1, BindTextureValidArgs) {
130  EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId));
131  SpecializedSetup<cmds::BindTexture, 0>(true);
132  cmds::BindTexture cmd;
133  cmd.Init(GL_TEXTURE_2D, client_texture_id_);
134  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
135  EXPECT_EQ(GL_NO_ERROR, GetGLError());
136}
137
138TEST_F(GLES2DecoderTest1, BindTextureValidArgsNewId) {
139  EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kNewServiceId));
140  EXPECT_CALL(*gl_, GenTextures(1, _))
141     .WillOnce(SetArgumentPointee<1>(kNewServiceId));
142  SpecializedSetup<cmds::BindTexture, 0>(true);
143  cmds::BindTexture cmd;
144  cmd.Init(GL_TEXTURE_2D, kNewClientId);
145  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
146  EXPECT_EQ(GL_NO_ERROR, GetGLError());
147  EXPECT_TRUE(GetTexture(kNewClientId) != NULL);
148}
149
150TEST_F(GLES2DecoderTest1, BindTextureInvalidArgs0_0) {
151  EXPECT_CALL(*gl_, BindTexture(_, _)).Times(0);
152  SpecializedSetup<cmds::BindTexture, 0>(false);
153  cmds::BindTexture cmd;
154  cmd.Init(GL_TEXTURE_1D, client_texture_id_);
155  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
156  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
157}
158
159TEST_F(GLES2DecoderTest1, BindTextureInvalidArgs0_1) {
160  EXPECT_CALL(*gl_, BindTexture(_, _)).Times(0);
161  SpecializedSetup<cmds::BindTexture, 0>(false);
162  cmds::BindTexture cmd;
163  cmd.Init(GL_TEXTURE_3D, client_texture_id_);
164  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
165  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
166}
167
168TEST_F(GLES2DecoderTest1, BlendColorValidArgs) {
169  EXPECT_CALL(*gl_, BlendColor(1, 2, 3, 4));
170  SpecializedSetup<cmds::BlendColor, 0>(true);
171  cmds::BlendColor cmd;
172  cmd.Init(1, 2, 3, 4);
173  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
174  EXPECT_EQ(GL_NO_ERROR, GetGLError());
175}
176
177TEST_F(GLES2DecoderTest1, BlendEquationValidArgs) {
178  EXPECT_CALL(*gl_, BlendEquation(GL_FUNC_SUBTRACT));
179  SpecializedSetup<cmds::BlendEquation, 0>(true);
180  cmds::BlendEquation cmd;
181  cmd.Init(GL_FUNC_SUBTRACT);
182  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
183  EXPECT_EQ(GL_NO_ERROR, GetGLError());
184}
185
186TEST_F(GLES2DecoderTest1, BlendEquationInvalidArgs0_0) {
187  EXPECT_CALL(*gl_, BlendEquation(_)).Times(0);
188  SpecializedSetup<cmds::BlendEquation, 0>(false);
189  cmds::BlendEquation cmd;
190  cmd.Init(GL_MIN);
191  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
192  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
193}
194
195TEST_F(GLES2DecoderTest1, BlendEquationInvalidArgs0_1) {
196  EXPECT_CALL(*gl_, BlendEquation(_)).Times(0);
197  SpecializedSetup<cmds::BlendEquation, 0>(false);
198  cmds::BlendEquation cmd;
199  cmd.Init(GL_MAX);
200  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
201  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
202}
203
204TEST_F(GLES2DecoderTest1, BlendEquationSeparateValidArgs) {
205  EXPECT_CALL(*gl_, BlendEquationSeparate(GL_FUNC_SUBTRACT, GL_FUNC_ADD));
206  SpecializedSetup<cmds::BlendEquationSeparate, 0>(true);
207  cmds::BlendEquationSeparate cmd;
208  cmd.Init(GL_FUNC_SUBTRACT, GL_FUNC_ADD);
209  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
210  EXPECT_EQ(GL_NO_ERROR, GetGLError());
211}
212
213TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_0) {
214  EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
215  SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
216  cmds::BlendEquationSeparate cmd;
217  cmd.Init(GL_MIN, GL_FUNC_ADD);
218  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
219  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
220}
221
222TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_1) {
223  EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
224  SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
225  cmds::BlendEquationSeparate cmd;
226  cmd.Init(GL_MAX, GL_FUNC_ADD);
227  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
228  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
229}
230
231TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_0) {
232  EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
233  SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
234  cmds::BlendEquationSeparate cmd;
235  cmd.Init(GL_FUNC_SUBTRACT, GL_MIN);
236  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
237  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
238}
239
240TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_1) {
241  EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
242  SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
243  cmds::BlendEquationSeparate cmd;
244  cmd.Init(GL_FUNC_SUBTRACT, GL_MAX);
245  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
246  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
247}
248
249TEST_F(GLES2DecoderTest1, BlendFuncValidArgs) {
250  EXPECT_CALL(*gl_, BlendFunc(GL_ZERO, GL_ZERO));
251  SpecializedSetup<cmds::BlendFunc, 0>(true);
252  cmds::BlendFunc cmd;
253  cmd.Init(GL_ZERO, GL_ZERO);
254  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
255  EXPECT_EQ(GL_NO_ERROR, GetGLError());
256}
257
258TEST_F(GLES2DecoderTest1, BlendFuncSeparateValidArgs) {
259  EXPECT_CALL(*gl_, BlendFuncSeparate(GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO));
260  SpecializedSetup<cmds::BlendFuncSeparate, 0>(true);
261  cmds::BlendFuncSeparate cmd;
262  cmd.Init(GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO);
263  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
264  EXPECT_EQ(GL_NO_ERROR, GetGLError());
265}
266// TODO(gman): BufferData
267
268// TODO(gman): BufferDataImmediate
269
270// TODO(gman): BufferSubData
271
272// TODO(gman): BufferSubDataImmediate
273
274
275TEST_F(GLES2DecoderTest1, CheckFramebufferStatusValidArgs) {
276  EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER));
277  SpecializedSetup<cmds::CheckFramebufferStatus, 0>(true);
278  cmds::CheckFramebufferStatus cmd;
279  cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_);
280  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
281  EXPECT_EQ(GL_NO_ERROR, GetGLError());
282}
283
284TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_0) {
285  EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0);
286  SpecializedSetup<cmds::CheckFramebufferStatus, 0>(false);
287  cmds::CheckFramebufferStatus cmd;
288  cmd.Init(GL_DRAW_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_);
289  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
290  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
291}
292
293TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_1) {
294  EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0);
295  SpecializedSetup<cmds::CheckFramebufferStatus, 0>(false);
296  cmds::CheckFramebufferStatus cmd;
297  cmd.Init(GL_READ_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_);
298  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
299  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
300}
301
302TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgsBadSharedMemoryId) {
303  EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)).Times(0);
304  SpecializedSetup<cmds::CheckFramebufferStatus, 0>(false);
305  cmds::CheckFramebufferStatus cmd;
306  cmd.Init(GL_FRAMEBUFFER, kInvalidSharedMemoryId, shared_memory_offset_);
307  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
308  cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, kInvalidSharedMemoryOffset);
309  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
310}
311
312TEST_F(GLES2DecoderTest1, ClearValidArgs) {
313  EXPECT_CALL(*gl_, Clear(1));
314  SpecializedSetup<cmds::Clear, 0>(true);
315  cmds::Clear cmd;
316  cmd.Init(1);
317  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
318  EXPECT_EQ(GL_NO_ERROR, GetGLError());
319}
320
321TEST_F(GLES2DecoderTest1, ClearColorValidArgs) {
322  EXPECT_CALL(*gl_, ClearColor(1, 2, 3, 4));
323  SpecializedSetup<cmds::ClearColor, 0>(true);
324  cmds::ClearColor cmd;
325  cmd.Init(1, 2, 3, 4);
326  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
327  EXPECT_EQ(GL_NO_ERROR, GetGLError());
328}
329
330TEST_F(GLES2DecoderTest1, ClearDepthfValidArgs) {
331  EXPECT_CALL(*gl_, ClearDepth(0.5f));
332  SpecializedSetup<cmds::ClearDepthf, 0>(true);
333  cmds::ClearDepthf cmd;
334  cmd.Init(0.5f);
335  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
336  EXPECT_EQ(GL_NO_ERROR, GetGLError());
337}
338
339TEST_F(GLES2DecoderTest1, ClearStencilValidArgs) {
340  EXPECT_CALL(*gl_, ClearStencil(1));
341  SpecializedSetup<cmds::ClearStencil, 0>(true);
342  cmds::ClearStencil cmd;
343  cmd.Init(1);
344  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
345  EXPECT_EQ(GL_NO_ERROR, GetGLError());
346}
347
348TEST_F(GLES2DecoderTest1, ColorMaskValidArgs) {
349  SpecializedSetup<cmds::ColorMask, 0>(true);
350  cmds::ColorMask cmd;
351  cmd.Init(true, true, true, true);
352  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
353  EXPECT_EQ(GL_NO_ERROR, GetGLError());
354}
355// TODO(gman): CompileShader
356// TODO(gman): CompressedTexImage2D
357
358// TODO(gman): CompressedTexImage2DImmediate
359
360// TODO(gman): CompressedTexImage2DBucket
361// TODO(gman): CompressedTexSubImage2D
362
363// TODO(gman): CompressedTexSubImage2DImmediate
364
365// TODO(gman): CompressedTexSubImage2DBucket
366// TODO(gman): CopyTexImage2D
367
368TEST_F(GLES2DecoderTest1, CopyTexSubImage2DValidArgs) {
369  EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, 8));
370  SpecializedSetup<cmds::CopyTexSubImage2D, 0>(true);
371  cmds::CopyTexSubImage2D cmd;
372  cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, 8);
373  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
374  EXPECT_EQ(GL_NO_ERROR, GetGLError());
375}
376
377TEST_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs0_0) {
378  EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0);
379  SpecializedSetup<cmds::CopyTexSubImage2D, 0>(false);
380  cmds::CopyTexSubImage2D cmd;
381  cmd.Init(GL_PROXY_TEXTURE_CUBE_MAP, 2, 3, 4, 5, 6, 7, 8);
382  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
383  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
384}
385
386TEST_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs6_0) {
387  EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0);
388  SpecializedSetup<cmds::CopyTexSubImage2D, 0>(false);
389  cmds::CopyTexSubImage2D cmd;
390  cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, -1, 8);
391  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
392  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
393}
394
395TEST_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs7_0) {
396  EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0);
397  SpecializedSetup<cmds::CopyTexSubImage2D, 0>(false);
398  cmds::CopyTexSubImage2D cmd;
399  cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, -1);
400  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
401  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
402}
403
404TEST_F(GLES2DecoderTest1, CreateProgramValidArgs) {
405  EXPECT_CALL(*gl_, CreateProgram())
406      .WillOnce(Return(kNewServiceId));
407  SpecializedSetup<cmds::CreateProgram, 0>(true);
408  cmds::CreateProgram cmd;
409  cmd.Init(kNewClientId);
410  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
411  EXPECT_EQ(GL_NO_ERROR, GetGLError());
412  EXPECT_TRUE(GetProgram(kNewClientId) != NULL);
413}
414
415TEST_F(GLES2DecoderTest1, CreateShaderValidArgs) {
416  EXPECT_CALL(*gl_, CreateShader(GL_VERTEX_SHADER))
417      .WillOnce(Return(kNewServiceId));
418  SpecializedSetup<cmds::CreateShader, 0>(true);
419  cmds::CreateShader cmd;
420  cmd.Init(GL_VERTEX_SHADER, kNewClientId);
421  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
422  EXPECT_EQ(GL_NO_ERROR, GetGLError());
423  EXPECT_TRUE(GetShader(kNewClientId) != NULL);
424}
425
426TEST_F(GLES2DecoderTest1, CreateShaderInvalidArgs0_0) {
427  EXPECT_CALL(*gl_, CreateShader(_)).Times(0);
428  SpecializedSetup<cmds::CreateShader, 0>(false);
429  cmds::CreateShader cmd;
430  cmd.Init(GL_GEOMETRY_SHADER, kNewClientId);
431  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
432  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
433}
434
435TEST_F(GLES2DecoderTest1, CullFaceValidArgs) {
436  EXPECT_CALL(*gl_, CullFace(GL_FRONT));
437  SpecializedSetup<cmds::CullFace, 0>(true);
438  cmds::CullFace cmd;
439  cmd.Init(GL_FRONT);
440  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
441  EXPECT_EQ(GL_NO_ERROR, GetGLError());
442}
443
444TEST_F(GLES2DecoderTest1, DeleteBuffersValidArgs) {
445  EXPECT_CALL(
446      *gl_,
447      DeleteBuffersARB(1, Pointee(kServiceBufferId)))
448      .Times(1);
449  GetSharedMemoryAs<GLuint*>()[0] = client_buffer_id_;
450  SpecializedSetup<cmds::DeleteBuffers, 0>(true);
451  cmds::DeleteBuffers cmd;
452  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
453  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
454  EXPECT_EQ(GL_NO_ERROR, GetGLError());
455  EXPECT_TRUE(
456      GetBuffer(client_buffer_id_) == NULL);
457}
458
459TEST_F(GLES2DecoderTest1, DeleteBuffersInvalidArgs) {
460  GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
461  SpecializedSetup<cmds::DeleteBuffers, 0>(false);
462  cmds::DeleteBuffers cmd;
463  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
464  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
465}
466
467TEST_F(GLES2DecoderTest1, DeleteBuffersImmediateValidArgs) {
468  EXPECT_CALL(
469      *gl_,
470      DeleteBuffersARB(1, Pointee(kServiceBufferId)))
471      .Times(1);
472  cmds::DeleteBuffersImmediate& cmd =
473      *GetImmediateAs<cmds::DeleteBuffersImmediate>();
474  SpecializedSetup<cmds::DeleteBuffersImmediate, 0>(true);
475  cmd.Init(1, &client_buffer_id_);
476  EXPECT_EQ(error::kNoError,
477            ExecuteImmediateCmd(cmd, sizeof(client_buffer_id_)));
478  EXPECT_EQ(GL_NO_ERROR, GetGLError());
479  EXPECT_TRUE(
480      GetBuffer(client_buffer_id_) == NULL);
481}
482
483TEST_F(GLES2DecoderTest1, DeleteBuffersImmediateInvalidArgs) {
484  cmds::DeleteBuffersImmediate& cmd =
485      *GetImmediateAs<cmds::DeleteBuffersImmediate>();
486  SpecializedSetup<cmds::DeleteBuffersImmediate, 0>(false);
487  GLuint temp = kInvalidClientId;
488  cmd.Init(1, &temp);
489  EXPECT_EQ(error::kNoError,
490            ExecuteImmediateCmd(cmd, sizeof(temp)));
491}
492
493TEST_F(GLES2DecoderTest1, DeleteFramebuffersValidArgs) {
494  EXPECT_CALL(
495      *gl_,
496      DeleteFramebuffersEXT(1, Pointee(kServiceFramebufferId)))
497      .Times(1);
498  GetSharedMemoryAs<GLuint*>()[0] = client_framebuffer_id_;
499  SpecializedSetup<cmds::DeleteFramebuffers, 0>(true);
500  cmds::DeleteFramebuffers cmd;
501  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
502  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
503  EXPECT_EQ(GL_NO_ERROR, GetGLError());
504  EXPECT_TRUE(
505      GetFramebuffer(client_framebuffer_id_) == NULL);
506}
507
508TEST_F(GLES2DecoderTest1, DeleteFramebuffersInvalidArgs) {
509  GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
510  SpecializedSetup<cmds::DeleteFramebuffers, 0>(false);
511  cmds::DeleteFramebuffers cmd;
512  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
513  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
514}
515
516TEST_F(GLES2DecoderTest1, DeleteFramebuffersImmediateValidArgs) {
517  EXPECT_CALL(
518      *gl_,
519      DeleteFramebuffersEXT(1, Pointee(kServiceFramebufferId)))
520      .Times(1);
521  cmds::DeleteFramebuffersImmediate& cmd =
522      *GetImmediateAs<cmds::DeleteFramebuffersImmediate>();
523  SpecializedSetup<cmds::DeleteFramebuffersImmediate, 0>(true);
524  cmd.Init(1, &client_framebuffer_id_);
525  EXPECT_EQ(error::kNoError,
526            ExecuteImmediateCmd(cmd, sizeof(client_framebuffer_id_)));
527  EXPECT_EQ(GL_NO_ERROR, GetGLError());
528  EXPECT_TRUE(
529      GetFramebuffer(client_framebuffer_id_) == NULL);
530}
531
532TEST_F(GLES2DecoderTest1, DeleteFramebuffersImmediateInvalidArgs) {
533  cmds::DeleteFramebuffersImmediate& cmd =
534      *GetImmediateAs<cmds::DeleteFramebuffersImmediate>();
535  SpecializedSetup<cmds::DeleteFramebuffersImmediate, 0>(false);
536  GLuint temp = kInvalidClientId;
537  cmd.Init(1, &temp);
538  EXPECT_EQ(error::kNoError,
539            ExecuteImmediateCmd(cmd, sizeof(temp)));
540}
541
542TEST_F(GLES2DecoderTest1, DeleteProgramValidArgs) {
543  EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId));
544  SpecializedSetup<cmds::DeleteProgram, 0>(true);
545  cmds::DeleteProgram cmd;
546  cmd.Init(client_program_id_);
547  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
548  EXPECT_EQ(GL_NO_ERROR, GetGLError());
549}
550
551TEST_F(GLES2DecoderTest1, DeleteRenderbuffersValidArgs) {
552  EXPECT_CALL(
553      *gl_,
554      DeleteRenderbuffersEXT(1, Pointee(kServiceRenderbufferId)))
555      .Times(1);
556  GetSharedMemoryAs<GLuint*>()[0] = client_renderbuffer_id_;
557  SpecializedSetup<cmds::DeleteRenderbuffers, 0>(true);
558  cmds::DeleteRenderbuffers cmd;
559  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
560  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
561  EXPECT_EQ(GL_NO_ERROR, GetGLError());
562  EXPECT_TRUE(
563      GetRenderbuffer(client_renderbuffer_id_) == NULL);
564}
565
566TEST_F(GLES2DecoderTest1, DeleteRenderbuffersInvalidArgs) {
567  GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
568  SpecializedSetup<cmds::DeleteRenderbuffers, 0>(false);
569  cmds::DeleteRenderbuffers cmd;
570  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
571  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
572}
573
574TEST_F(GLES2DecoderTest1, DeleteRenderbuffersImmediateValidArgs) {
575  EXPECT_CALL(
576      *gl_,
577      DeleteRenderbuffersEXT(1, Pointee(kServiceRenderbufferId)))
578      .Times(1);
579  cmds::DeleteRenderbuffersImmediate& cmd =
580      *GetImmediateAs<cmds::DeleteRenderbuffersImmediate>();
581  SpecializedSetup<cmds::DeleteRenderbuffersImmediate, 0>(true);
582  cmd.Init(1, &client_renderbuffer_id_);
583  EXPECT_EQ(error::kNoError,
584            ExecuteImmediateCmd(cmd, sizeof(client_renderbuffer_id_)));
585  EXPECT_EQ(GL_NO_ERROR, GetGLError());
586  EXPECT_TRUE(
587      GetRenderbuffer(client_renderbuffer_id_) == NULL);
588}
589
590TEST_F(GLES2DecoderTest1, DeleteRenderbuffersImmediateInvalidArgs) {
591  cmds::DeleteRenderbuffersImmediate& cmd =
592      *GetImmediateAs<cmds::DeleteRenderbuffersImmediate>();
593  SpecializedSetup<cmds::DeleteRenderbuffersImmediate, 0>(false);
594  GLuint temp = kInvalidClientId;
595  cmd.Init(1, &temp);
596  EXPECT_EQ(error::kNoError,
597            ExecuteImmediateCmd(cmd, sizeof(temp)));
598}
599
600TEST_F(GLES2DecoderTest1, DeleteShaderValidArgs) {
601  EXPECT_CALL(*gl_, DeleteShader(kServiceShaderId));
602  SpecializedSetup<cmds::DeleteShader, 0>(true);
603  cmds::DeleteShader cmd;
604  cmd.Init(client_shader_id_);
605  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
606  EXPECT_EQ(GL_NO_ERROR, GetGLError());
607}
608
609TEST_F(GLES2DecoderTest1, DeleteTexturesValidArgs) {
610  EXPECT_CALL(
611      *gl_,
612      DeleteTextures(1, Pointee(kServiceTextureId)))
613      .Times(1);
614  GetSharedMemoryAs<GLuint*>()[0] = client_texture_id_;
615  SpecializedSetup<cmds::DeleteTextures, 0>(true);
616  cmds::DeleteTextures cmd;
617  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
618  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
619  EXPECT_EQ(GL_NO_ERROR, GetGLError());
620  EXPECT_TRUE(
621      GetTexture(client_texture_id_) == NULL);
622}
623
624TEST_F(GLES2DecoderTest1, DeleteTexturesInvalidArgs) {
625  GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
626  SpecializedSetup<cmds::DeleteTextures, 0>(false);
627  cmds::DeleteTextures cmd;
628  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
629  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
630}
631
632TEST_F(GLES2DecoderTest1, DeleteTexturesImmediateValidArgs) {
633  EXPECT_CALL(
634      *gl_,
635      DeleteTextures(1, Pointee(kServiceTextureId)))
636      .Times(1);
637  cmds::DeleteTexturesImmediate& cmd =
638      *GetImmediateAs<cmds::DeleteTexturesImmediate>();
639  SpecializedSetup<cmds::DeleteTexturesImmediate, 0>(true);
640  cmd.Init(1, &client_texture_id_);
641  EXPECT_EQ(error::kNoError,
642            ExecuteImmediateCmd(cmd, sizeof(client_texture_id_)));
643  EXPECT_EQ(GL_NO_ERROR, GetGLError());
644  EXPECT_TRUE(
645      GetTexture(client_texture_id_) == NULL);
646}
647
648TEST_F(GLES2DecoderTest1, DeleteTexturesImmediateInvalidArgs) {
649  cmds::DeleteTexturesImmediate& cmd =
650      *GetImmediateAs<cmds::DeleteTexturesImmediate>();
651  SpecializedSetup<cmds::DeleteTexturesImmediate, 0>(false);
652  GLuint temp = kInvalidClientId;
653  cmd.Init(1, &temp);
654  EXPECT_EQ(error::kNoError,
655            ExecuteImmediateCmd(cmd, sizeof(temp)));
656}
657
658TEST_F(GLES2DecoderTest1, DepthFuncValidArgs) {
659  EXPECT_CALL(*gl_, DepthFunc(GL_NEVER));
660  SpecializedSetup<cmds::DepthFunc, 0>(true);
661  cmds::DepthFunc cmd;
662  cmd.Init(GL_NEVER);
663  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
664  EXPECT_EQ(GL_NO_ERROR, GetGLError());
665}
666
667TEST_F(GLES2DecoderTest1, DepthMaskValidArgs) {
668  SpecializedSetup<cmds::DepthMask, 0>(true);
669  cmds::DepthMask cmd;
670  cmd.Init(true);
671  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
672  EXPECT_EQ(GL_NO_ERROR, GetGLError());
673}
674
675TEST_F(GLES2DecoderTest1, DepthRangefValidArgs) {
676  EXPECT_CALL(*gl_, DepthRange(1, 2));
677  SpecializedSetup<cmds::DepthRangef, 0>(true);
678  cmds::DepthRangef cmd;
679  cmd.Init(1, 2);
680  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
681  EXPECT_EQ(GL_NO_ERROR, GetGLError());
682}
683
684TEST_F(GLES2DecoderTest1, DetachShaderValidArgs) {
685  EXPECT_CALL(*gl_, DetachShader(kServiceProgramId, kServiceShaderId));
686  SpecializedSetup<cmds::DetachShader, 0>(true);
687  cmds::DetachShader cmd;
688  cmd.Init(client_program_id_, client_shader_id_);
689  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
690  EXPECT_EQ(GL_NO_ERROR, GetGLError());
691}
692
693TEST_F(GLES2DecoderTest1, DisableValidArgs) {
694  EXPECT_CALL(*gl_, Disable(GL_BLEND));
695  SpecializedSetup<cmds::Disable, 0>(true);
696  cmds::Disable cmd;
697  cmd.Init(GL_BLEND);
698  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
699  EXPECT_EQ(GL_NO_ERROR, GetGLError());
700}
701
702TEST_F(GLES2DecoderTest1, DisableInvalidArgs0_0) {
703  EXPECT_CALL(*gl_, Disable(_)).Times(0);
704  SpecializedSetup<cmds::Disable, 0>(false);
705  cmds::Disable cmd;
706  cmd.Init(GL_CLIP_PLANE0);
707  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
708  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
709}
710
711TEST_F(GLES2DecoderTest1, DisableInvalidArgs0_1) {
712  EXPECT_CALL(*gl_, Disable(_)).Times(0);
713  SpecializedSetup<cmds::Disable, 0>(false);
714  cmds::Disable cmd;
715  cmd.Init(GL_POINT_SPRITE);
716  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
717  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
718}
719
720TEST_F(GLES2DecoderTest1, DisableVertexAttribArrayValidArgs) {
721  EXPECT_CALL(*gl_, DisableVertexAttribArray(1));
722  SpecializedSetup<cmds::DisableVertexAttribArray, 0>(true);
723  cmds::DisableVertexAttribArray cmd;
724  cmd.Init(1);
725  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
726  EXPECT_EQ(GL_NO_ERROR, GetGLError());
727}
728// TODO(gman): DrawArrays
729
730// TODO(gman): DrawElements
731
732
733TEST_F(GLES2DecoderTest1, EnableValidArgs) {
734  EXPECT_CALL(*gl_, Enable(GL_BLEND));
735  SpecializedSetup<cmds::Enable, 0>(true);
736  cmds::Enable cmd;
737  cmd.Init(GL_BLEND);
738  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
739  EXPECT_EQ(GL_NO_ERROR, GetGLError());
740}
741
742TEST_F(GLES2DecoderTest1, EnableInvalidArgs0_0) {
743  EXPECT_CALL(*gl_, Enable(_)).Times(0);
744  SpecializedSetup<cmds::Enable, 0>(false);
745  cmds::Enable cmd;
746  cmd.Init(GL_CLIP_PLANE0);
747  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
748  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
749}
750
751TEST_F(GLES2DecoderTest1, EnableInvalidArgs0_1) {
752  EXPECT_CALL(*gl_, Enable(_)).Times(0);
753  SpecializedSetup<cmds::Enable, 0>(false);
754  cmds::Enable cmd;
755  cmd.Init(GL_POINT_SPRITE);
756  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
757  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
758}
759
760TEST_F(GLES2DecoderTest1, EnableVertexAttribArrayValidArgs) {
761  EXPECT_CALL(*gl_, EnableVertexAttribArray(1));
762  SpecializedSetup<cmds::EnableVertexAttribArray, 0>(true);
763  cmds::EnableVertexAttribArray cmd;
764  cmd.Init(1);
765  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
766  EXPECT_EQ(GL_NO_ERROR, GetGLError());
767}
768
769TEST_F(GLES2DecoderTest1, FinishValidArgs) {
770  EXPECT_CALL(*gl_, Finish());
771  SpecializedSetup<cmds::Finish, 0>(true);
772  cmds::Finish cmd;
773  cmd.Init();
774  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
775  EXPECT_EQ(GL_NO_ERROR, GetGLError());
776}
777
778TEST_F(GLES2DecoderTest1, FlushValidArgs) {
779  EXPECT_CALL(*gl_, Flush());
780  SpecializedSetup<cmds::Flush, 0>(true);
781  cmds::Flush cmd;
782  cmd.Init();
783  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
784  EXPECT_EQ(GL_NO_ERROR, GetGLError());
785}
786
787TEST_F(GLES2DecoderTest1, FramebufferRenderbufferValidArgs) {
788  EXPECT_CALL(
789      *gl_, FramebufferRenderbufferEXT(
790          GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
791          kServiceRenderbufferId));
792  SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(true);
793  cmds::FramebufferRenderbuffer cmd;
794  cmd.Init(
795      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
796      client_renderbuffer_id_);
797  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
798  EXPECT_EQ(GL_NO_ERROR, GetGLError());
799}
800
801TEST_F(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_0) {
802  EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
803  SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(false);
804  cmds::FramebufferRenderbuffer cmd;
805  cmd.Init(
806      GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
807      client_renderbuffer_id_);
808  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
809  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
810}
811
812TEST_F(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_1) {
813  EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
814  SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(false);
815  cmds::FramebufferRenderbuffer cmd;
816  cmd.Init(
817      GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
818      client_renderbuffer_id_);
819  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
820  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
821}
822
823TEST_F(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs2_0) {
824  EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
825  SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(false);
826  cmds::FramebufferRenderbuffer cmd;
827  cmd.Init(
828      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER,
829      client_renderbuffer_id_);
830  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
831  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
832}
833
834TEST_F(GLES2DecoderTest1, FramebufferTexture2DValidArgs) {
835  EXPECT_CALL(
836      *gl_, FramebufferTexture2DEXT(
837          GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
838          kServiceTextureId, 0));
839  SpecializedSetup<cmds::FramebufferTexture2D, 0>(true);
840  cmds::FramebufferTexture2D cmd;
841  cmd.Init(
842      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
843      0);
844  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
845  EXPECT_EQ(GL_NO_ERROR, GetGLError());
846}
847
848TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_0) {
849  EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
850  SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
851  cmds::FramebufferTexture2D cmd;
852  cmd.Init(
853      GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
854      client_texture_id_, 0);
855  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
856  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
857}
858
859TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_1) {
860  EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
861  SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
862  cmds::FramebufferTexture2D cmd;
863  cmd.Init(
864      GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
865      client_texture_id_, 0);
866  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
867  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
868}
869
870TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs2_0) {
871  EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
872  SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
873  cmds::FramebufferTexture2D cmd;
874  cmd.Init(
875      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_PROXY_TEXTURE_CUBE_MAP,
876      client_texture_id_, 0);
877  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
878  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
879}
880
881TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs4_0) {
882  EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
883  SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
884  cmds::FramebufferTexture2D cmd;
885  cmd.Init(
886      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
887      1);
888  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
889  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
890}
891
892TEST_F(GLES2DecoderTest1, FrontFaceValidArgs) {
893  EXPECT_CALL(*gl_, FrontFace(GL_CW));
894  SpecializedSetup<cmds::FrontFace, 0>(true);
895  cmds::FrontFace cmd;
896  cmd.Init(GL_CW);
897  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
898  EXPECT_EQ(GL_NO_ERROR, GetGLError());
899}
900
901TEST_F(GLES2DecoderTest1, GenBuffersValidArgs) {
902  EXPECT_CALL(*gl_, GenBuffersARB(1, _))
903      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
904  GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
905  SpecializedSetup<cmds::GenBuffers, 0>(true);
906  cmds::GenBuffers cmd;
907  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
908  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
909  EXPECT_EQ(GL_NO_ERROR, GetGLError());
910  EXPECT_TRUE(GetBuffer(kNewClientId) != NULL);
911}
912
913TEST_F(GLES2DecoderTest1, GenBuffersInvalidArgs) {
914  EXPECT_CALL(*gl_, GenBuffersARB(_, _)).Times(0);
915  GetSharedMemoryAs<GLuint*>()[0] = client_buffer_id_;
916  SpecializedSetup<cmds::GenBuffers, 0>(false);
917  cmds::GenBuffers cmd;
918  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
919  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
920}
921
922TEST_F(GLES2DecoderTest1, GenBuffersImmediateValidArgs) {
923  EXPECT_CALL(*gl_, GenBuffersARB(1, _))
924      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
925  cmds::GenBuffersImmediate* cmd = GetImmediateAs<cmds::GenBuffersImmediate>();
926  GLuint temp = kNewClientId;
927  SpecializedSetup<cmds::GenBuffersImmediate, 0>(true);
928  cmd->Init(1, &temp);
929  EXPECT_EQ(error::kNoError,
930            ExecuteImmediateCmd(*cmd, sizeof(temp)));
931  EXPECT_EQ(GL_NO_ERROR, GetGLError());
932  EXPECT_TRUE(GetBuffer(kNewClientId) != NULL);
933}
934
935TEST_F(GLES2DecoderTest1, GenBuffersImmediateInvalidArgs) {
936  EXPECT_CALL(*gl_, GenBuffersARB(_, _)).Times(0);
937  cmds::GenBuffersImmediate* cmd = GetImmediateAs<cmds::GenBuffersImmediate>();
938  SpecializedSetup<cmds::GenBuffersImmediate, 0>(false);
939  cmd->Init(1, &client_buffer_id_);
940  EXPECT_EQ(error::kInvalidArguments,
941            ExecuteImmediateCmd(*cmd, sizeof(&client_buffer_id_)));
942}
943
944TEST_F(GLES2DecoderTest1, GenerateMipmapValidArgs) {
945  EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D));
946  SpecializedSetup<cmds::GenerateMipmap, 0>(true);
947  cmds::GenerateMipmap cmd;
948  cmd.Init(GL_TEXTURE_2D);
949  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
950  EXPECT_EQ(GL_NO_ERROR, GetGLError());
951}
952
953TEST_F(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_0) {
954  EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
955  SpecializedSetup<cmds::GenerateMipmap, 0>(false);
956  cmds::GenerateMipmap cmd;
957  cmd.Init(GL_TEXTURE_1D);
958  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
959  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
960}
961
962TEST_F(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_1) {
963  EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
964  SpecializedSetup<cmds::GenerateMipmap, 0>(false);
965  cmds::GenerateMipmap cmd;
966  cmd.Init(GL_TEXTURE_3D);
967  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
968  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
969}
970
971TEST_F(GLES2DecoderTest1, GenFramebuffersValidArgs) {
972  EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _))
973      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
974  GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
975  SpecializedSetup<cmds::GenFramebuffers, 0>(true);
976  cmds::GenFramebuffers cmd;
977  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
978  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
979  EXPECT_EQ(GL_NO_ERROR, GetGLError());
980  EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL);
981}
982
983TEST_F(GLES2DecoderTest1, GenFramebuffersInvalidArgs) {
984  EXPECT_CALL(*gl_, GenFramebuffersEXT(_, _)).Times(0);
985  GetSharedMemoryAs<GLuint*>()[0] = client_framebuffer_id_;
986  SpecializedSetup<cmds::GenFramebuffers, 0>(false);
987  cmds::GenFramebuffers cmd;
988  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
989  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
990}
991
992TEST_F(GLES2DecoderTest1, GenFramebuffersImmediateValidArgs) {
993  EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _))
994      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
995  cmds::GenFramebuffersImmediate* cmd =
996      GetImmediateAs<cmds::GenFramebuffersImmediate>();
997  GLuint temp = kNewClientId;
998  SpecializedSetup<cmds::GenFramebuffersImmediate, 0>(true);
999  cmd->Init(1, &temp);
1000  EXPECT_EQ(error::kNoError,
1001            ExecuteImmediateCmd(*cmd, sizeof(temp)));
1002  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1003  EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL);
1004}
1005
1006TEST_F(GLES2DecoderTest1, GenFramebuffersImmediateInvalidArgs) {
1007  EXPECT_CALL(*gl_, GenFramebuffersEXT(_, _)).Times(0);
1008  cmds::GenFramebuffersImmediate* cmd =
1009      GetImmediateAs<cmds::GenFramebuffersImmediate>();
1010  SpecializedSetup<cmds::GenFramebuffersImmediate, 0>(false);
1011  cmd->Init(1, &client_framebuffer_id_);
1012  EXPECT_EQ(error::kInvalidArguments,
1013            ExecuteImmediateCmd(*cmd, sizeof(&client_framebuffer_id_)));
1014}
1015
1016TEST_F(GLES2DecoderTest1, GenRenderbuffersValidArgs) {
1017  EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _))
1018      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
1019  GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
1020  SpecializedSetup<cmds::GenRenderbuffers, 0>(true);
1021  cmds::GenRenderbuffers cmd;
1022  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
1023  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1024  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1025  EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL);
1026}
1027
1028TEST_F(GLES2DecoderTest1, GenRenderbuffersInvalidArgs) {
1029  EXPECT_CALL(*gl_, GenRenderbuffersEXT(_, _)).Times(0);
1030  GetSharedMemoryAs<GLuint*>()[0] = client_renderbuffer_id_;
1031  SpecializedSetup<cmds::GenRenderbuffers, 0>(false);
1032  cmds::GenRenderbuffers cmd;
1033  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
1034  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
1035}
1036
1037TEST_F(GLES2DecoderTest1, GenRenderbuffersImmediateValidArgs) {
1038  EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _))
1039      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
1040  cmds::GenRenderbuffersImmediate* cmd =
1041      GetImmediateAs<cmds::GenRenderbuffersImmediate>();
1042  GLuint temp = kNewClientId;
1043  SpecializedSetup<cmds::GenRenderbuffersImmediate, 0>(true);
1044  cmd->Init(1, &temp);
1045  EXPECT_EQ(error::kNoError,
1046            ExecuteImmediateCmd(*cmd, sizeof(temp)));
1047  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1048  EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL);
1049}
1050
1051TEST_F(GLES2DecoderTest1, GenRenderbuffersImmediateInvalidArgs) {
1052  EXPECT_CALL(*gl_, GenRenderbuffersEXT(_, _)).Times(0);
1053  cmds::GenRenderbuffersImmediate* cmd =
1054      GetImmediateAs<cmds::GenRenderbuffersImmediate>();
1055  SpecializedSetup<cmds::GenRenderbuffersImmediate, 0>(false);
1056  cmd->Init(1, &client_renderbuffer_id_);
1057  EXPECT_EQ(error::kInvalidArguments,
1058            ExecuteImmediateCmd(*cmd, sizeof(&client_renderbuffer_id_)));
1059}
1060
1061TEST_F(GLES2DecoderTest1, GenTexturesValidArgs) {
1062  EXPECT_CALL(*gl_, GenTextures(1, _))
1063      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
1064  GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
1065  SpecializedSetup<cmds::GenTextures, 0>(true);
1066  cmds::GenTextures cmd;
1067  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
1068  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1069  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1070  EXPECT_TRUE(GetTexture(kNewClientId) != NULL);
1071}
1072
1073TEST_F(GLES2DecoderTest1, GenTexturesInvalidArgs) {
1074  EXPECT_CALL(*gl_, GenTextures(_, _)).Times(0);
1075  GetSharedMemoryAs<GLuint*>()[0] = client_texture_id_;
1076  SpecializedSetup<cmds::GenTextures, 0>(false);
1077  cmds::GenTextures cmd;
1078  cmd.Init(1, shared_memory_id_, shared_memory_offset_);
1079  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
1080}
1081
1082TEST_F(GLES2DecoderTest1, GenTexturesImmediateValidArgs) {
1083  EXPECT_CALL(*gl_, GenTextures(1, _))
1084      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
1085  cmds::GenTexturesImmediate* cmd =
1086      GetImmediateAs<cmds::GenTexturesImmediate>();
1087  GLuint temp = kNewClientId;
1088  SpecializedSetup<cmds::GenTexturesImmediate, 0>(true);
1089  cmd->Init(1, &temp);
1090  EXPECT_EQ(error::kNoError,
1091            ExecuteImmediateCmd(*cmd, sizeof(temp)));
1092  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1093  EXPECT_TRUE(GetTexture(kNewClientId) != NULL);
1094}
1095
1096TEST_F(GLES2DecoderTest1, GenTexturesImmediateInvalidArgs) {
1097  EXPECT_CALL(*gl_, GenTextures(_, _)).Times(0);
1098  cmds::GenTexturesImmediate* cmd =
1099      GetImmediateAs<cmds::GenTexturesImmediate>();
1100  SpecializedSetup<cmds::GenTexturesImmediate, 0>(false);
1101  cmd->Init(1, &client_texture_id_);
1102  EXPECT_EQ(error::kInvalidArguments,
1103            ExecuteImmediateCmd(*cmd, sizeof(&client_texture_id_)));
1104}
1105// TODO(gman): GetActiveAttrib
1106
1107// TODO(gman): GetActiveUniform
1108
1109// TODO(gman): GetAttachedShaders
1110
1111// TODO(gman): GetAttribLocation
1112
1113// TODO(gman): GetAttribLocationImmediate
1114
1115// TODO(gman): GetAttribLocationBucket
1116
1117
1118TEST_F(GLES2DecoderTest1, GetBooleanvValidArgs) {
1119  EXPECT_CALL(*gl_, GetError())
1120      .WillOnce(Return(GL_NO_ERROR))
1121      .WillOnce(Return(GL_NO_ERROR))
1122      .RetiresOnSaturation();
1123  SpecializedSetup<cmds::GetBooleanv, 0>(true);
1124  typedef cmds::GetBooleanv::Result Result;
1125  Result* result = static_cast<Result*>(shared_memory_address_);
1126  EXPECT_CALL(*gl_, GetBooleanv(GL_ACTIVE_TEXTURE, result->GetData()));
1127  result->size = 0;
1128  cmds::GetBooleanv cmd;
1129  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_);
1130  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1131  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1132                GL_ACTIVE_TEXTURE),
1133            result->GetNumResults());
1134  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1135}
1136
1137TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs0_0) {
1138  EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0);
1139  SpecializedSetup<cmds::GetBooleanv, 0>(false);
1140  cmds::GetBooleanv::Result* result =
1141      static_cast<cmds::GetBooleanv::Result*>(shared_memory_address_);
1142  result->size = 0;
1143  cmds::GetBooleanv cmd;
1144  cmd.Init(GL_FOG_HINT, shared_memory_id_, shared_memory_offset_);
1145  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1146  EXPECT_EQ(0u, result->size);
1147  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1148}
1149
1150TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs1_0) {
1151  EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0);
1152  SpecializedSetup<cmds::GetBooleanv, 0>(false);
1153  cmds::GetBooleanv::Result* result =
1154      static_cast<cmds::GetBooleanv::Result*>(shared_memory_address_);
1155  result->size = 0;
1156  cmds::GetBooleanv cmd;
1157  cmd.Init(GL_ACTIVE_TEXTURE, kInvalidSharedMemoryId, 0);
1158  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1159  EXPECT_EQ(0u, result->size);
1160}
1161
1162TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs1_1) {
1163  EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0);
1164  SpecializedSetup<cmds::GetBooleanv, 0>(false);
1165  cmds::GetBooleanv::Result* result =
1166      static_cast<cmds::GetBooleanv::Result*>(shared_memory_address_);
1167  result->size = 0;
1168  cmds::GetBooleanv cmd;
1169  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, kInvalidSharedMemoryOffset);
1170  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1171  EXPECT_EQ(0u, result->size);
1172}
1173
1174TEST_F(GLES2DecoderTest1, GetBufferParameterivValidArgs) {
1175  SpecializedSetup<cmds::GetBufferParameteriv, 0>(true);
1176  typedef cmds::GetBufferParameteriv::Result Result;
1177  Result* result = static_cast<Result*>(shared_memory_address_);
1178  result->size = 0;
1179  cmds::GetBufferParameteriv cmd;
1180  cmd.Init(
1181      GL_ARRAY_BUFFER, GL_BUFFER_SIZE, shared_memory_id_,
1182      shared_memory_offset_);
1183  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1184  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1185                GL_BUFFER_SIZE),
1186            result->GetNumResults());
1187  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1188}
1189
1190TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs0_0) {
1191  EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
1192  SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
1193  cmds::GetBufferParameteriv::Result* result =
1194      static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
1195  result->size = 0;
1196  cmds::GetBufferParameteriv cmd;
1197  cmd.Init(
1198      GL_RENDERBUFFER, GL_BUFFER_SIZE, shared_memory_id_,
1199      shared_memory_offset_);
1200  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1201  EXPECT_EQ(0u, result->size);
1202  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1203}
1204
1205TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs1_0) {
1206  EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
1207  SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
1208  cmds::GetBufferParameteriv::Result* result =
1209      static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
1210  result->size = 0;
1211  cmds::GetBufferParameteriv cmd;
1212  cmd.Init(
1213      GL_ARRAY_BUFFER, GL_PIXEL_PACK_BUFFER, shared_memory_id_,
1214      shared_memory_offset_);
1215  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1216  EXPECT_EQ(0u, result->size);
1217  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1218}
1219
1220TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_0) {
1221  EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
1222  SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
1223  cmds::GetBufferParameteriv::Result* result =
1224      static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
1225  result->size = 0;
1226  cmds::GetBufferParameteriv cmd;
1227  cmd.Init(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, kInvalidSharedMemoryId, 0);
1228  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1229  EXPECT_EQ(0u, result->size);
1230}
1231
1232TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_1) {
1233  EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
1234  SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
1235  cmds::GetBufferParameteriv::Result* result =
1236      static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
1237  result->size = 0;
1238  cmds::GetBufferParameteriv cmd;
1239  cmd.Init(
1240      GL_ARRAY_BUFFER, GL_BUFFER_SIZE, shared_memory_id_,
1241      kInvalidSharedMemoryOffset);
1242  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1243  EXPECT_EQ(0u, result->size);
1244}
1245
1246TEST_F(GLES2DecoderTest1, GetErrorValidArgs) {
1247  EXPECT_CALL(*gl_, GetError());
1248  SpecializedSetup<cmds::GetError, 0>(true);
1249  cmds::GetError cmd;
1250  cmd.Init(shared_memory_id_, shared_memory_offset_);
1251  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1252  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1253}
1254
1255TEST_F(GLES2DecoderTest1, GetErrorInvalidArgsBadSharedMemoryId) {
1256  EXPECT_CALL(*gl_, GetError()).Times(0);
1257  SpecializedSetup<cmds::GetError, 0>(false);
1258  cmds::GetError cmd;
1259  cmd.Init(kInvalidSharedMemoryId, shared_memory_offset_);
1260  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1261  cmd.Init(shared_memory_id_, kInvalidSharedMemoryOffset);
1262  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1263}
1264
1265TEST_F(GLES2DecoderTest1, GetFloatvValidArgs) {
1266  EXPECT_CALL(*gl_, GetError())
1267      .WillOnce(Return(GL_NO_ERROR))
1268      .WillOnce(Return(GL_NO_ERROR))
1269      .RetiresOnSaturation();
1270  SpecializedSetup<cmds::GetFloatv, 0>(true);
1271  typedef cmds::GetFloatv::Result Result;
1272  Result* result = static_cast<Result*>(shared_memory_address_);
1273  EXPECT_CALL(*gl_, GetFloatv(GL_ACTIVE_TEXTURE, result->GetData()));
1274  result->size = 0;
1275  cmds::GetFloatv cmd;
1276  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_);
1277  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1278  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1279                GL_ACTIVE_TEXTURE),
1280            result->GetNumResults());
1281  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1282}
1283
1284TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs0_0) {
1285  EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0);
1286  SpecializedSetup<cmds::GetFloatv, 0>(false);
1287  cmds::GetFloatv::Result* result =
1288      static_cast<cmds::GetFloatv::Result*>(shared_memory_address_);
1289  result->size = 0;
1290  cmds::GetFloatv cmd;
1291  cmd.Init(GL_FOG_HINT, shared_memory_id_, shared_memory_offset_);
1292  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1293  EXPECT_EQ(0u, result->size);
1294  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1295}
1296
1297TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs1_0) {
1298  EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0);
1299  SpecializedSetup<cmds::GetFloatv, 0>(false);
1300  cmds::GetFloatv::Result* result =
1301      static_cast<cmds::GetFloatv::Result*>(shared_memory_address_);
1302  result->size = 0;
1303  cmds::GetFloatv cmd;
1304  cmd.Init(GL_ACTIVE_TEXTURE, kInvalidSharedMemoryId, 0);
1305  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1306  EXPECT_EQ(0u, result->size);
1307}
1308
1309TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs1_1) {
1310  EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0);
1311  SpecializedSetup<cmds::GetFloatv, 0>(false);
1312  cmds::GetFloatv::Result* result =
1313      static_cast<cmds::GetFloatv::Result*>(shared_memory_address_);
1314  result->size = 0;
1315  cmds::GetFloatv cmd;
1316  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, kInvalidSharedMemoryOffset);
1317  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1318  EXPECT_EQ(0u, result->size);
1319}
1320
1321TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivValidArgs) {
1322  EXPECT_CALL(*gl_, GetError())
1323      .WillOnce(Return(GL_NO_ERROR))
1324      .WillOnce(Return(GL_NO_ERROR))
1325      .RetiresOnSaturation();
1326  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(true);
1327  typedef cmds::GetFramebufferAttachmentParameteriv::Result Result;
1328  Result* result = static_cast<Result*>(shared_memory_address_);
1329  EXPECT_CALL(
1330      *gl_, GetFramebufferAttachmentParameterivEXT(
1331          GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
1332          GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, result->GetData()));
1333  result->size = 0;
1334  cmds::GetFramebufferAttachmentParameteriv cmd;
1335  cmd.Init(
1336      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
1337      GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_,
1338      shared_memory_offset_);
1339  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1340  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1341                GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE),
1342            result->GetNumResults());
1343  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1344}
1345
1346TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_0) {
1347  EXPECT_CALL(
1348      *gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)).Times(0);
1349  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
1350  cmds::GetFramebufferAttachmentParameteriv::Result* result =
1351      static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
1352          shared_memory_address_);
1353  result->size = 0;
1354  cmds::GetFramebufferAttachmentParameteriv cmd;
1355  cmd.Init(
1356      GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
1357      GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_,
1358      shared_memory_offset_);
1359  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1360  EXPECT_EQ(0u, result->size);
1361  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1362}
1363
1364TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_1) {
1365  EXPECT_CALL(
1366      *gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)).Times(0);
1367  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
1368  cmds::GetFramebufferAttachmentParameteriv::Result* result =
1369      static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
1370          shared_memory_address_);
1371  result->size = 0;
1372  cmds::GetFramebufferAttachmentParameteriv cmd;
1373  cmd.Init(
1374      GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
1375      GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_,
1376      shared_memory_offset_);
1377  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1378  EXPECT_EQ(0u, result->size);
1379  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1380}
1381
1382TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_0) {
1383  EXPECT_CALL(
1384      *gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)).Times(0);
1385  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
1386  cmds::GetFramebufferAttachmentParameteriv::Result* result =
1387      static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
1388          shared_memory_address_);
1389  result->size = 0;
1390  cmds::GetFramebufferAttachmentParameteriv cmd;
1391  cmd.Init(
1392      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
1393      GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, kInvalidSharedMemoryId, 0);
1394  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1395  EXPECT_EQ(0u, result->size);
1396}
1397
1398TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_1) {
1399  EXPECT_CALL(
1400      *gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)).Times(0);
1401  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
1402  cmds::GetFramebufferAttachmentParameteriv::Result* result =
1403      static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
1404          shared_memory_address_);
1405  result->size = 0;
1406  cmds::GetFramebufferAttachmentParameteriv cmd;
1407  cmd.Init(
1408      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
1409      GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_,
1410      kInvalidSharedMemoryOffset);
1411  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1412  EXPECT_EQ(0u, result->size);
1413}
1414
1415TEST_F(GLES2DecoderTest1, GetIntegervValidArgs) {
1416  EXPECT_CALL(*gl_, GetError())
1417      .WillOnce(Return(GL_NO_ERROR))
1418      .WillOnce(Return(GL_NO_ERROR))
1419      .RetiresOnSaturation();
1420  SpecializedSetup<cmds::GetIntegerv, 0>(true);
1421  typedef cmds::GetIntegerv::Result Result;
1422  Result* result = static_cast<Result*>(shared_memory_address_);
1423  EXPECT_CALL(*gl_, GetIntegerv(GL_ACTIVE_TEXTURE, result->GetData()));
1424  result->size = 0;
1425  cmds::GetIntegerv cmd;
1426  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_);
1427  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1428  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1429                GL_ACTIVE_TEXTURE),
1430            result->GetNumResults());
1431  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1432}
1433
1434TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs0_0) {
1435  EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0);
1436  SpecializedSetup<cmds::GetIntegerv, 0>(false);
1437  cmds::GetIntegerv::Result* result =
1438      static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
1439  result->size = 0;
1440  cmds::GetIntegerv cmd;
1441  cmd.Init(GL_FOG_HINT, shared_memory_id_, shared_memory_offset_);
1442  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1443  EXPECT_EQ(0u, result->size);
1444  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1445}
1446
1447TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs1_0) {
1448  EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0);
1449  SpecializedSetup<cmds::GetIntegerv, 0>(false);
1450  cmds::GetIntegerv::Result* result =
1451      static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
1452  result->size = 0;
1453  cmds::GetIntegerv cmd;
1454  cmd.Init(GL_ACTIVE_TEXTURE, kInvalidSharedMemoryId, 0);
1455  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1456  EXPECT_EQ(0u, result->size);
1457}
1458
1459TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs1_1) {
1460  EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0);
1461  SpecializedSetup<cmds::GetIntegerv, 0>(false);
1462  cmds::GetIntegerv::Result* result =
1463      static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
1464  result->size = 0;
1465  cmds::GetIntegerv cmd;
1466  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, kInvalidSharedMemoryOffset);
1467  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1468  EXPECT_EQ(0u, result->size);
1469}
1470
1471TEST_F(GLES2DecoderTest1, GetProgramivValidArgs) {
1472  SpecializedSetup<cmds::GetProgramiv, 0>(true);
1473  typedef cmds::GetProgramiv::Result Result;
1474  Result* result = static_cast<Result*>(shared_memory_address_);
1475  result->size = 0;
1476  cmds::GetProgramiv cmd;
1477  cmd.Init(
1478      client_program_id_, GL_DELETE_STATUS, shared_memory_id_,
1479      shared_memory_offset_);
1480  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1481  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1482                GL_DELETE_STATUS),
1483            result->GetNumResults());
1484  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1485}
1486
1487TEST_F(GLES2DecoderTest1, GetProgramivInvalidArgs2_0) {
1488  EXPECT_CALL(*gl_, GetProgramiv(_, _, _)).Times(0);
1489  SpecializedSetup<cmds::GetProgramiv, 0>(false);
1490  cmds::GetProgramiv::Result* result =
1491      static_cast<cmds::GetProgramiv::Result*>(shared_memory_address_);
1492  result->size = 0;
1493  cmds::GetProgramiv cmd;
1494  cmd.Init(client_program_id_, GL_DELETE_STATUS, kInvalidSharedMemoryId, 0);
1495  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1496  EXPECT_EQ(0u, result->size);
1497}
1498
1499TEST_F(GLES2DecoderTest1, GetProgramivInvalidArgs2_1) {
1500  EXPECT_CALL(*gl_, GetProgramiv(_, _, _)).Times(0);
1501  SpecializedSetup<cmds::GetProgramiv, 0>(false);
1502  cmds::GetProgramiv::Result* result =
1503      static_cast<cmds::GetProgramiv::Result*>(shared_memory_address_);
1504  result->size = 0;
1505  cmds::GetProgramiv cmd;
1506  cmd.Init(
1507      client_program_id_, GL_DELETE_STATUS, shared_memory_id_,
1508      kInvalidSharedMemoryOffset);
1509  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1510  EXPECT_EQ(0u, result->size);
1511}
1512
1513TEST_F(GLES2DecoderTest1, GetProgramInfoLogValidArgs) {
1514  const char* kInfo = "hello";
1515  const uint32 kBucketId = 123;
1516  SpecializedSetup<cmds::GetProgramInfoLog, 0>(true);
1517
1518  cmds::GetProgramInfoLog cmd;
1519  cmd.Init(client_program_id_, kBucketId);
1520  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1521  CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
1522  ASSERT_TRUE(bucket != NULL);
1523  EXPECT_EQ(strlen(kInfo) + 1, bucket->size());
1524  EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kInfo,
1525                      bucket->size()));
1526  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1527}
1528
1529TEST_F(GLES2DecoderTest1, GetProgramInfoLogInvalidArgs) {
1530  const uint32 kBucketId = 123;
1531  cmds::GetProgramInfoLog cmd;
1532  cmd.Init(kInvalidClientId, kBucketId);
1533  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1534  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1535}
1536
1537TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivValidArgs) {
1538  EXPECT_CALL(*gl_, GetError())
1539      .WillOnce(Return(GL_NO_ERROR))
1540      .WillOnce(Return(GL_NO_ERROR))
1541      .RetiresOnSaturation();
1542  SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(true);
1543  typedef cmds::GetRenderbufferParameteriv::Result Result;
1544  Result* result = static_cast<Result*>(shared_memory_address_);
1545  EXPECT_CALL(
1546      *gl_, GetRenderbufferParameterivEXT(
1547          GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, result->GetData()));
1548  result->size = 0;
1549  cmds::GetRenderbufferParameteriv cmd;
1550  cmd.Init(
1551      GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, shared_memory_id_,
1552      shared_memory_offset_);
1553  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1554  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1555                GL_RENDERBUFFER_RED_SIZE),
1556            result->GetNumResults());
1557  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1558}
1559
1560TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs0_0) {
1561  EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
1562  SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(false);
1563  cmds::GetRenderbufferParameteriv::Result* result =
1564      static_cast<cmds::GetRenderbufferParameteriv::Result*>(
1565          shared_memory_address_);
1566  result->size = 0;
1567  cmds::GetRenderbufferParameteriv cmd;
1568  cmd.Init(
1569      GL_FRAMEBUFFER, GL_RENDERBUFFER_RED_SIZE, shared_memory_id_,
1570      shared_memory_offset_);
1571  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1572  EXPECT_EQ(0u, result->size);
1573  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1574}
1575
1576TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_0) {
1577  EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
1578  SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(false);
1579  cmds::GetRenderbufferParameteriv::Result* result =
1580      static_cast<cmds::GetRenderbufferParameteriv::Result*>(
1581          shared_memory_address_);
1582  result->size = 0;
1583  cmds::GetRenderbufferParameteriv cmd;
1584  cmd.Init(
1585      GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, kInvalidSharedMemoryId, 0);
1586  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1587  EXPECT_EQ(0u, result->size);
1588}
1589
1590TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_1) {
1591  EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
1592  SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(false);
1593  cmds::GetRenderbufferParameteriv::Result* result =
1594      static_cast<cmds::GetRenderbufferParameteriv::Result*>(
1595          shared_memory_address_);
1596  result->size = 0;
1597  cmds::GetRenderbufferParameteriv cmd;
1598  cmd.Init(
1599      GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, shared_memory_id_,
1600      kInvalidSharedMemoryOffset);
1601  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1602  EXPECT_EQ(0u, result->size);
1603}
1604
1605TEST_F(GLES2DecoderTest1, GetShaderivValidArgs) {
1606  EXPECT_CALL(*gl_, GetError())
1607      .WillOnce(Return(GL_NO_ERROR))
1608      .WillOnce(Return(GL_NO_ERROR))
1609      .RetiresOnSaturation();
1610  SpecializedSetup<cmds::GetShaderiv, 0>(true);
1611  typedef cmds::GetShaderiv::Result Result;
1612  Result* result = static_cast<Result*>(shared_memory_address_);
1613  EXPECT_CALL(
1614      *gl_, GetShaderiv(kServiceShaderId, GL_SHADER_TYPE, result->GetData()));
1615  result->size = 0;
1616  cmds::GetShaderiv cmd;
1617  cmd.Init(
1618      client_shader_id_, GL_SHADER_TYPE, shared_memory_id_,
1619      shared_memory_offset_);
1620  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1621  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1622                GL_SHADER_TYPE),
1623            result->GetNumResults());
1624  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1625}
1626
1627TEST_F(GLES2DecoderTest1, GetShaderivInvalidArgs2_0) {
1628  EXPECT_CALL(*gl_, GetShaderiv(_, _, _)).Times(0);
1629  SpecializedSetup<cmds::GetShaderiv, 0>(false);
1630  cmds::GetShaderiv::Result* result =
1631      static_cast<cmds::GetShaderiv::Result*>(shared_memory_address_);
1632  result->size = 0;
1633  cmds::GetShaderiv cmd;
1634  cmd.Init(client_shader_id_, GL_SHADER_TYPE, kInvalidSharedMemoryId, 0);
1635  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1636  EXPECT_EQ(0u, result->size);
1637}
1638
1639TEST_F(GLES2DecoderTest1, GetShaderivInvalidArgs2_1) {
1640  EXPECT_CALL(*gl_, GetShaderiv(_, _, _)).Times(0);
1641  SpecializedSetup<cmds::GetShaderiv, 0>(false);
1642  cmds::GetShaderiv::Result* result =
1643      static_cast<cmds::GetShaderiv::Result*>(shared_memory_address_);
1644  result->size = 0;
1645  cmds::GetShaderiv cmd;
1646  cmd.Init(
1647      client_shader_id_, GL_SHADER_TYPE, shared_memory_id_,
1648      kInvalidSharedMemoryOffset);
1649  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1650  EXPECT_EQ(0u, result->size);
1651}
1652// TODO(gman): GetShaderInfoLog
1653// TODO(gman): GetShaderPrecisionFormat
1654
1655// TODO(gman): GetShaderSource
1656// TODO(gman): GetString
1657
1658
1659TEST_F(GLES2DecoderTest1, GetTexParameterfvValidArgs) {
1660  EXPECT_CALL(*gl_, GetError())
1661      .WillOnce(Return(GL_NO_ERROR))
1662      .WillOnce(Return(GL_NO_ERROR))
1663      .RetiresOnSaturation();
1664  SpecializedSetup<cmds::GetTexParameterfv, 0>(true);
1665  typedef cmds::GetTexParameterfv::Result Result;
1666  Result* result = static_cast<Result*>(shared_memory_address_);
1667  EXPECT_CALL(
1668      *gl_, GetTexParameterfv(
1669          GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, result->GetData()));
1670  result->size = 0;
1671  cmds::GetTexParameterfv cmd;
1672  cmd.Init(
1673      GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
1674      shared_memory_offset_);
1675  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1676  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1677                GL_TEXTURE_MAG_FILTER),
1678            result->GetNumResults());
1679  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1680}
1681
1682TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs0_0) {
1683  EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
1684  SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
1685  cmds::GetTexParameterfv::Result* result =
1686      static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
1687  result->size = 0;
1688  cmds::GetTexParameterfv cmd;
1689  cmd.Init(
1690      GL_PROXY_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
1691      shared_memory_offset_);
1692  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1693  EXPECT_EQ(0u, result->size);
1694  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1695}
1696
1697TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs1_0) {
1698  EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
1699  SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
1700  cmds::GetTexParameterfv::Result* result =
1701      static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
1702  result->size = 0;
1703  cmds::GetTexParameterfv cmd;
1704  cmd.Init(
1705      GL_TEXTURE_2D, GL_GENERATE_MIPMAP, shared_memory_id_,
1706      shared_memory_offset_);
1707  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1708  EXPECT_EQ(0u, result->size);
1709  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1710}
1711
1712TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs2_0) {
1713  EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
1714  SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
1715  cmds::GetTexParameterfv::Result* result =
1716      static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
1717  result->size = 0;
1718  cmds::GetTexParameterfv cmd;
1719  cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, kInvalidSharedMemoryId, 0);
1720  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1721  EXPECT_EQ(0u, result->size);
1722}
1723
1724TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs2_1) {
1725  EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
1726  SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
1727  cmds::GetTexParameterfv::Result* result =
1728      static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
1729  result->size = 0;
1730  cmds::GetTexParameterfv cmd;
1731  cmd.Init(
1732      GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
1733      kInvalidSharedMemoryOffset);
1734  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1735  EXPECT_EQ(0u, result->size);
1736}
1737
1738TEST_F(GLES2DecoderTest1, GetTexParameterivValidArgs) {
1739  EXPECT_CALL(*gl_, GetError())
1740      .WillOnce(Return(GL_NO_ERROR))
1741      .WillOnce(Return(GL_NO_ERROR))
1742      .RetiresOnSaturation();
1743  SpecializedSetup<cmds::GetTexParameteriv, 0>(true);
1744  typedef cmds::GetTexParameteriv::Result Result;
1745  Result* result = static_cast<Result*>(shared_memory_address_);
1746  EXPECT_CALL(
1747      *gl_, GetTexParameteriv(
1748          GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, result->GetData()));
1749  result->size = 0;
1750  cmds::GetTexParameteriv cmd;
1751  cmd.Init(
1752      GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
1753      shared_memory_offset_);
1754  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1755  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1756                GL_TEXTURE_MAG_FILTER),
1757            result->GetNumResults());
1758  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1759}
1760
1761TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs0_0) {
1762  EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
1763  SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
1764  cmds::GetTexParameteriv::Result* result =
1765      static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
1766  result->size = 0;
1767  cmds::GetTexParameteriv cmd;
1768  cmd.Init(
1769      GL_PROXY_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
1770      shared_memory_offset_);
1771  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1772  EXPECT_EQ(0u, result->size);
1773  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1774}
1775
1776TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs1_0) {
1777  EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
1778  SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
1779  cmds::GetTexParameteriv::Result* result =
1780      static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
1781  result->size = 0;
1782  cmds::GetTexParameteriv cmd;
1783  cmd.Init(
1784      GL_TEXTURE_2D, GL_GENERATE_MIPMAP, shared_memory_id_,
1785      shared_memory_offset_);
1786  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1787  EXPECT_EQ(0u, result->size);
1788  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1789}
1790
1791TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_0) {
1792  EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
1793  SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
1794  cmds::GetTexParameteriv::Result* result =
1795      static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
1796  result->size = 0;
1797  cmds::GetTexParameteriv cmd;
1798  cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, kInvalidSharedMemoryId, 0);
1799  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1800  EXPECT_EQ(0u, result->size);
1801}
1802
1803TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_1) {
1804  EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
1805  SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
1806  cmds::GetTexParameteriv::Result* result =
1807      static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
1808  result->size = 0;
1809  cmds::GetTexParameteriv cmd;
1810  cmd.Init(
1811      GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
1812      kInvalidSharedMemoryOffset);
1813  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1814  EXPECT_EQ(0u, result->size);
1815}
1816// TODO(gman): GetUniformfv
1817
1818// TODO(gman): GetUniformiv
1819
1820// TODO(gman): GetUniformLocation
1821
1822// TODO(gman): GetUniformLocationImmediate
1823
1824// TODO(gman): GetUniformLocationBucket
1825
1826
1827TEST_F(GLES2DecoderTest1, GetVertexAttribfvValidArgs) {
1828  SpecializedSetup<cmds::GetVertexAttribfv, 0>(true);
1829  typedef cmds::GetVertexAttribfv::Result Result;
1830  Result* result = static_cast<Result*>(shared_memory_address_);
1831  result->size = 0;
1832  cmds::GetVertexAttribfv cmd;
1833  cmd.Init(
1834      1, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, shared_memory_id_,
1835      shared_memory_offset_);
1836  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1837  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
1838                GL_VERTEX_ATTRIB_ARRAY_NORMALIZED),
1839            result->GetNumResults());
1840  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1841}
1842
1843TEST_F(GLES2DecoderTest1, GetVertexAttribfvInvalidArgs2_0) {
1844  EXPECT_CALL(*gl_, GetVertexAttribfv(_, _, _)).Times(0);
1845  SpecializedSetup<cmds::GetVertexAttribfv, 0>(false);
1846  cmds::GetVertexAttribfv::Result* result =
1847      static_cast<cmds::GetVertexAttribfv::Result*>(shared_memory_address_);
1848  result->size = 0;
1849  cmds::GetVertexAttribfv cmd;
1850  cmd.Init(1, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, kInvalidSharedMemoryId, 0);
1851  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1852  EXPECT_EQ(0u, result->size);
1853}
1854
1855TEST_F(GLES2DecoderTest1, GetVertexAttribfvInvalidArgs2_1) {
1856  EXPECT_CALL(*gl_, GetVertexAttribfv(_, _, _)).Times(0);
1857  SpecializedSetup<cmds::GetVertexAttribfv, 0>(false);
1858  cmds::GetVertexAttribfv::Result* result =
1859      static_cast<cmds::GetVertexAttribfv::Result*>(shared_memory_address_);
1860  result->size = 0;
1861  cmds::GetVertexAttribfv cmd;
1862  cmd.Init(
1863      1, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, shared_memory_id_,
1864      kInvalidSharedMemoryOffset);
1865  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1866  EXPECT_EQ(0u, result->size);
1867}
1868#endif  // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
1869
1870