Implement basic functionality of ProgramGL.

BUG=angle:882

Change-Id: I1d859197011081729c4c5733b78ac10491fe926c
Reviewed-on: https://chromium-review.googlesource.com/251542
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/tests/angle_tests/SimpleOperationTest.cpp b/tests/angle_tests/SimpleOperationTest.cpp
index 1d78eb5..7eb97cf 100644
--- a/tests/angle_tests/SimpleOperationTest.cpp
+++ b/tests/angle_tests/SimpleOperationTest.cpp
@@ -56,3 +56,89 @@
 
     EXPECT_GL_NO_ERROR();
 }
+
+TYPED_TEST(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();
+}
+
+TYPED_TEST(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();
+}
+
+TYPED_TEST(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();
+}