Move end2end and standalone tests to gl_tests and egl_tests

Also introduce a test_utils directory that contains helpers used for all
types of tests.

BUG=angleproject:892

Change-Id: I9e1bff895020ffd3a109162283971a290a1098bd
Reviewed-on: https://chromium-review.googlesource.com/270198
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/tests/gl_tests/SimpleOperationTest.cpp b/src/tests/gl_tests/SimpleOperationTest.cpp
new file mode 100644
index 0000000..c6e991f
--- /dev/null
+++ b/src/tests/gl_tests/SimpleOperationTest.cpp
@@ -0,0 +1,206 @@
+//
+// Copyright 2015 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// SimpleOperationTest:
+//   Basic GL commands such as linking a program, initializing a buffer, etc.
+
+#include "test_utils/ANGLETest.h"
+
+#include <vector>
+
+using namespace angle;
+
+namespace
+{
+
+class SimpleOperationTest : public ANGLETest
+{
+  protected:
+    SimpleOperationTest()
+    {
+        setWindowWidth(128);
+        setWindowHeight(128);
+        setConfigRedBits(8);
+        setConfigGreenBits(8);
+        setConfigBlueBits(8);
+        setConfigAlphaBits(8);
+    }
+};
+
+TEST_P(SimpleOperationTest, CompileVertexShader)
+{
+    const std::string source = SHADER_SOURCE
+    (
+        attribute vec4 a_input;
+        void main()
+        {
+            gl_Position = a_input;
+        }
+    );
+
+    GLuint shader = CompileShader(GL_VERTEX_SHADER, source);
+    EXPECT_NE(shader, 0u);
+    glDeleteShader(shader);
+
+    EXPECT_GL_NO_ERROR();
+}
+
+TEST_P(SimpleOperationTest, CompileFragmentShader)
+{
+    const std::string source = SHADER_SOURCE
+    (
+        precision mediump float;
+        varying vec4 v_input;
+        void main()
+        {
+            gl_FragColor = v_input;
+        }
+    );
+
+    GLuint shader = CompileShader(GL_FRAGMENT_SHADER, source);
+    EXPECT_NE(shader, 0u);
+    glDeleteShader(shader);
+
+    EXPECT_GL_NO_ERROR();
+}
+
+TEST_P(SimpleOperationTest, LinkProgram)
+{
+    const std::string vsSource = SHADER_SOURCE
+    (
+        void main()
+        {
+            gl_Position = vec4(1.0, 1.0, 1.0, 1.0);
+        }
+    );
+
+    const std::string fsSource = SHADER_SOURCE
+    (
+        void main()
+        {
+            gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
+        }
+    );
+
+    GLuint program = CompileProgram(vsSource, fsSource);
+    EXPECT_NE(program, 0u);
+    glDeleteProgram(program);
+
+    EXPECT_GL_NO_ERROR();
+}
+
+TEST_P(SimpleOperationTest, LinkProgramWithUniforms)
+{
+    const std::string vsSource = SHADER_SOURCE
+    (
+        void main()
+        {
+            gl_Position = vec4(1.0, 1.0, 1.0, 1.0);
+        }
+    );
+
+    const std::string fsSource = SHADER_SOURCE
+    (
+        precision mediump float;
+        uniform vec4 u_input;
+        void main()
+        {
+            gl_FragColor = u_input;
+        }
+    );
+
+    GLuint program = CompileProgram(vsSource, fsSource);
+    EXPECT_NE(program, 0u);
+
+    GLint uniformLoc = glGetUniformLocation(program, "u_input");
+    EXPECT_NE(-1, uniformLoc);
+
+    glDeleteProgram(program);
+
+    EXPECT_GL_NO_ERROR();
+}
+
+TEST_P(SimpleOperationTest, LinkProgramWithAttributes)
+{
+    const std::string vsSource = SHADER_SOURCE
+    (
+        attribute vec4 a_input;
+        void main()
+        {
+            gl_Position = a_input;
+        }
+    );
+
+    const std::string fsSource = SHADER_SOURCE
+    (
+        void main()
+        {
+            gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
+        }
+    );
+
+    GLuint program = CompileProgram(vsSource, fsSource);
+    EXPECT_NE(program, 0u);
+
+    GLint attribLoc = glGetAttribLocation(program, "a_input");
+    EXPECT_NE(-1, attribLoc);
+
+    glDeleteProgram(program);
+
+    EXPECT_GL_NO_ERROR();
+}
+
+TEST_P(SimpleOperationTest, BufferDataWithData)
+{
+    GLuint buffer;
+    glGenBuffers(1, &buffer);
+    glBindBuffer(GL_ARRAY_BUFFER, buffer);
+
+    std::vector<uint8_t> data(1024);
+    glBufferData(GL_ARRAY_BUFFER, data.size(), &data[0], GL_STATIC_DRAW);
+
+    glDeleteBuffers(1, &buffer);
+
+    EXPECT_GL_NO_ERROR();
+}
+
+TEST_P(SimpleOperationTest, BufferDataWithNoData)
+{
+    GLuint buffer;
+    glGenBuffers(1, &buffer);
+    glBindBuffer(GL_ARRAY_BUFFER, buffer);
+    glBufferData(GL_ARRAY_BUFFER, 1024, nullptr, GL_STATIC_DRAW);
+    glDeleteBuffers(1, &buffer);
+
+    EXPECT_GL_NO_ERROR();
+}
+
+TEST_P(SimpleOperationTest, BufferSubData)
+{
+    GLuint buffer;
+    glGenBuffers(1, &buffer);
+    glBindBuffer(GL_ARRAY_BUFFER, buffer);
+
+    const size_t bufferSize = 1024;
+    glBufferData(GL_ARRAY_BUFFER, bufferSize, nullptr, GL_STATIC_DRAW);
+
+    const size_t subDataCount = 16;
+    std::vector<uint8_t> data(bufferSize / subDataCount);
+    for (size_t i = 0; i < subDataCount; i++)
+    {
+        glBufferSubData(GL_ARRAY_BUFFER, data.size() * i, data.size(), &data[0]);
+    }
+
+    glDeleteBuffers(1, &buffer);
+
+    EXPECT_GL_NO_ERROR();
+}
+
+// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
+ANGLE_INSTANTIATE_TEST(
+    SimpleOperationTest,
+    ES2_D3D9(), ES2_D3D11(), ES3_D3D11(), ES2_OPENGL(), ES3_OPENGL());
+
+} // namespace