1//
2// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#ifndef ANGLE_TESTS_ANGLE_TEST_H_
8#define ANGLE_TESTS_ANGLE_TEST_H_
9
10#include "gtest/gtest.h"
11
12#define GL_GLEXT_PROTOTYPES
13
14#include "angle_gl.h"
15#include <algorithm>
16
17#include "shared_utils.h"
18#include "shader_utils.h"
19
20#define EXPECT_GL_ERROR(err) EXPECT_EQ((err), glGetError())
21#define EXPECT_GL_NO_ERROR() EXPECT_GL_ERROR(GL_NO_ERROR)
22
23#define ASSERT_GL_ERROR(err) ASSERT_EQ((err), glGetError())
24#define ASSERT_GL_NO_ERROR() ASSERT_GL_ERROR(GL_NO_ERROR)
25
26#define EXPECT_PIXEL_EQ(x, y, r, g, b, a) \
27{ \
28    GLubyte pixel[4]; \
29    glReadPixels((x), (y), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel); \
30    EXPECT_GL_NO_ERROR(); \
31    EXPECT_EQ((r), pixel[0]); \
32    EXPECT_EQ((g), pixel[1]); \
33    EXPECT_EQ((b), pixel[2]); \
34    EXPECT_EQ((a), pixel[3]); \
35}
36
37class EGLWindow;
38class OSWindow;
39
40class ANGLETest : public testing::Test
41{
42  protected:
43    ANGLETest();
44
45  public:
46    static bool InitTestWindow();
47    static bool DestroyTestWindow();
48    static bool ResizeWindow(int width, int height);
49
50  protected:
51    virtual void SetUp();
52    virtual void TearDown();
53
54    virtual void swapBuffers();
55
56    static void drawQuad(GLuint program, const std::string& positionAttribName, GLfloat quadDepth);
57    static GLuint compileShader(GLenum type, const std::string &source);
58    static bool extensionEnabled(const std::string &extName);
59
60    void setClientVersion(int clientVersion);
61    void setWindowWidth(int width);
62    void setWindowHeight(int height);
63    void setConfigRedBits(int bits);
64    void setConfigGreenBits(int bits);
65    void setConfigBlueBits(int bits);
66    void setConfigAlphaBits(int bits);
67    void setConfigDepthBits(int bits);
68    void setConfigStencilBits(int bits);
69    void setMultisampleEnabled(bool enabled);
70
71    int getClientVersion() const;
72    int getWindowWidth() const;
73    int getWindowHeight() const;
74    bool isMultisampleEnabled() const;
75
76  private:
77    bool createEGLContext();
78    bool destroyEGLContext();
79
80    EGLWindow *mEGLWindow;
81
82    static OSWindow *mOSWindow;
83};
84
85class ANGLETestEnvironment : public testing::Environment
86{
87  public:
88    virtual void SetUp();
89    virtual void TearDown();
90};
91
92#endif  // ANGLE_TESTS_ANGLE_TEST_H_
93