Add a ShaderCompileTreeTest base class to use in compiler tests

The test class provides facilities for parsing test shader source into
an AST and determining compile status. Compilation flags change for
some of the tests, but this should only have a minor effect on code
coverage - mostly affecting non-core parts such as intermediate
output.

BUG=angleproject:1673
TEST=angle_unittests

Change-Id: I7d0900ef490e021272a27c4b0c938bfee02abf39
Reviewed-on: https://chromium-review.googlesource.com/422367
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/tests/test_utils/ShaderCompileTreeTest.h b/src/tests/test_utils/ShaderCompileTreeTest.h
new file mode 100644
index 0000000..dc5eac6
--- /dev/null
+++ b/src/tests/test_utils/ShaderCompileTreeTest.h
@@ -0,0 +1,59 @@
+//
+// Copyright (c) 2016 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.
+//
+// ShaderCompileTreeTest.h:
+//   Test that shader validation results in the correct compile status.
+//
+
+#ifndef TESTS_TEST_UTILS_SHADER_COMPILE_TREE_TEST_H_
+#define TESTS_TEST_UTILS_SHADER_COMPILE_TREE_TEST_H_
+
+#include "angle_gl.h"
+#include "compiler/translator/PoolAlloc.h"
+#include "gtest/gtest.h"
+#include "GLSLANG/ShaderLang.h"
+
+namespace sh
+{
+
+class TIntermBlock;
+class TranslatorESSL;
+
+class ShaderCompileTreeTest : public testing::Test
+{
+  public:
+    ShaderCompileTreeTest() : mExtraCompileOptions(0) {}
+
+  protected:
+    void SetUp() override;
+
+    void TearDown() override;
+
+    // Return true when compilation succeeds
+    bool compile(const std::string &shaderString);
+    void compileAssumeSuccess(const std::string &shaderString);
+
+    bool hasWarning() const;
+
+    const std::vector<sh::Uniform> getUniforms();
+
+    virtual void initResources(ShBuiltInResources *resources) {}
+    virtual ::GLenum getShaderType() const     = 0;
+    virtual ShShaderSpec getShaderSpec() const = 0;
+
+    std::string mInfoLog;
+    ShCompileOptions mExtraCompileOptions;
+
+    TIntermBlock *mASTRoot;
+
+  private:
+    TranslatorESSL *mTranslator;
+
+    TPoolAllocator mAllocator;
+};
+
+}  // namespace sh
+
+#endif  // TESTS_TEST_UTILS_SHADER_COMPILE_TREE_TEST_H_