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