summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryongsheng.zhu@intel.com <yongsheng.zhu@intel.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-26 03:50:23 +0000
committeryongsheng.zhu@intel.com <yongsheng.zhu@intel.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-26 03:50:23 +0000
commitb5e3497fd9c61698b4529c2e5c66b89695f34b3b (patch)
treeb7b37b82843ea3593df4f30733a19eddd1d87fde
parent3f9ab536e81f6ba3fb21123c71130781e0da0ca3 (diff)
downloadchromium_src-b5e3497fd9c61698b4529c2e5c66b89695f34b3b.zip
chromium_src-b5e3497fd9c61698b4529c2e5c66b89695f34b3b.tar.gz
chromium_src-b5e3497fd9c61698b4529c2e5c66b89695f34b3b.tar.bz2
Enable webgl conformance tests under content/test/gpu in content_browsertests
It enables the webgl conformace test in content_browsertests basing on chrome/test/gpu. BUG=149892 TEST= Review URL: https://chromiumcodereview.appspot.com/10916334 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158742 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--build/android/pylib/single_test_runner.py2
-rw-r--r--chrome/test/base/ui_test_utils.cc38
-rw-r--r--chrome/test/base/ui_test_utils.h31
-rw-r--r--chrome/test/gpu/gpu_crash_browsertest.cc4
-rw-r--r--chrome/test/gpu/gpu_feature_browsertest.cc3
-rw-r--r--chrome/test/gpu/gpu_mapsgl_endurance_browsertest.cc2
-rw-r--r--chrome/test/gpu/gpu_pixel_browsertest.cc2
-rw-r--r--chrome/test/gpu/webgl_conformance_tests.cc3
-rw-r--r--chrome/test/perf/rendering/latency_tests.cc3
-rwxr-xr-xcontent/browser/gpu/generate_webgl_conformance_test_list.py108
-rw-r--r--content/browser/gpu/test_support_gpu.gypi71
-rw-r--r--content/browser/gpu/webgl_conformance_test_list_autogen.h1080
-rw-r--r--content/browser/gpu/webgl_conformance_tests.cc90
-rw-r--r--content/content_tests.gypi6
-rw-r--r--content/public/test/browser_test_utils.cc39
-rw-r--r--content/public/test/browser_test_utils.h32
-rw-r--r--content/test/data/gpu/webgl_conformance.html99
-rw-r--r--content/test/data/gpu/webgl_conformance_test_expectations.txt (renamed from chrome/test/gpu/webgl_conformance_test_expectations.txt)0
-rw-r--r--content/test/gpu/gpu_test_expectations_parser.cc7
19 files changed, 1539 insertions, 81 deletions
diff --git a/build/android/pylib/single_test_runner.py b/build/android/pylib/single_test_runner.py
index f95d9c3..a680c68 100644
--- a/build/android/pylib/single_test_runner.py
+++ b/build/android/pylib/single_test_runner.py
@@ -230,7 +230,7 @@ class SingleTestRunner(BaseTestRunner):
]
elif self.test_package.test_suite_basename == 'content_unittests':
return [
- 'chrome/test/gpu/webgl_conformance_test_expectations.txt',
+ 'content/test/data/gpu/webgl_conformance_test_expectations.txt',
'net/data/ssl/certificates/',
'webkit/data/dom_storage/webcore_test_database.localstorage',
'third_party/hyphen/hyph_en_US.dic',
diff --git a/chrome/test/base/ui_test_utils.cc b/chrome/test/base/ui_test_utils.cc
index 21d54b1..f2a08db 100644
--- a/chrome/test/base/ui_test_utils.cc
+++ b/chrome/test/base/ui_test_utils.cc
@@ -609,44 +609,6 @@ Browser* BrowserAddedObserver::WaitForSingleNewBrowser() {
return GetBrowserNotInSet(original_browsers_);
}
-DOMMessageQueue::DOMMessageQueue() : waiting_for_message_(false) {
- registrar_.Add(this, content::NOTIFICATION_DOM_OPERATION_RESPONSE,
- content::NotificationService::AllSources());
-}
-
-DOMMessageQueue::~DOMMessageQueue() {}
-
-void DOMMessageQueue::Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- content::Details<DomOperationNotificationDetails> dom_op_details(details);
- content::Source<RenderViewHost> sender(source);
- message_queue_.push(dom_op_details->json);
- if (waiting_for_message_) {
- waiting_for_message_ = false;
- message_loop_runner_->Quit();
- }
-}
-
-void DOMMessageQueue::ClearQueue() {
- message_queue_ = std::queue<std::string>();
-}
-
-bool DOMMessageQueue::WaitForMessage(std::string* message) {
- if (message_queue_.empty()) {
- waiting_for_message_ = true;
- // This will be quit when a new message comes in.
- message_loop_runner_ = new content::MessageLoopRunner;
- message_loop_runner_->Run();
- }
- // The queue should not be empty, unless we were quit because of a timeout.
- if (message_queue_.empty())
- return false;
- if (message)
- *message = message_queue_.front();
- return true;
-}
-
// Coordinates taking snapshots of a |RenderWidget|.
class SnapshotTaker {
public:
diff --git a/chrome/test/base/ui_test_utils.h b/chrome/test/base/ui_test_utils.h
index 8ab4043..b158e4c 100644
--- a/chrome/test/base/ui_test_utils.h
+++ b/chrome/test/base/ui_test_utils.h
@@ -361,37 +361,6 @@ void HideNativeWindow(gfx::NativeWindow window);
// Show and focus a native window. Returns true on success.
bool ShowAndFocusNativeWindow(gfx::NativeWindow window) WARN_UNUSED_RESULT;
-// Watches for responses from the DOMAutomationController and keeps them in a
-// queue. Useful for waiting for a message to be received.
-class DOMMessageQueue : public content::NotificationObserver {
- public:
- // Constructs a DOMMessageQueue and begins listening for messages from the
- // DOMAutomationController. Do not construct this until the browser has
- // started.
- DOMMessageQueue();
- virtual ~DOMMessageQueue();
-
- // Removes all messages in the message queue.
- void ClearQueue();
-
- // Wait for the next message to arrive. |message| will be set to the next
- // message, if not null. Returns true on success.
- bool WaitForMessage(std::string* message) WARN_UNUSED_RESULT;
-
- // Overridden content::NotificationObserver methods.
- virtual void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) OVERRIDE;
-
- private:
- content::NotificationRegistrar registrar_;
- std::queue<std::string> message_queue_;
- bool waiting_for_message_;
- scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
-
- DISALLOW_COPY_AND_ASSIGN(DOMMessageQueue);
-};
-
// Takes a snapshot of the given render widget, rendered at |page_size|. The
// snapshot is set to |bitmap|. Returns true on success.
bool TakeRenderWidgetSnapshot(content::RenderWidgetHost* rwh,
diff --git a/chrome/test/gpu/gpu_crash_browsertest.cc b/chrome/test/gpu/gpu_crash_browsertest.cc
index 941d73b..1b3e445 100644
--- a/chrome/test/gpu/gpu_crash_browsertest.cc
+++ b/chrome/test/gpu/gpu_crash_browsertest.cc
@@ -47,7 +47,7 @@ class GPUCrashTest : public InProcessBrowserTest {
// Currently Kill times out on GPU bots: http://crbug.com/101513
IN_PROC_BROWSER_TEST_F(GPUCrashTest, DISABLED_Kill) {
- ui_test_utils::DOMMessageQueue message_queue;
+ content::DOMMessageQueue message_queue;
ui_test_utils::NavigateToURL(
browser(),
@@ -62,7 +62,7 @@ IN_PROC_BROWSER_TEST_F(GPUCrashTest, DISABLED_Kill) {
IN_PROC_BROWSER_TEST_F(GPUCrashTest, WebkitLoseContext) {
- ui_test_utils::DOMMessageQueue message_queue;
+ content::DOMMessageQueue message_queue;
ui_test_utils::NavigateToURL(
browser(),
diff --git a/chrome/test/gpu/gpu_feature_browsertest.cc b/chrome/test/gpu/gpu_feature_browsertest.cc
index 78da1a258..6fba303 100644
--- a/chrome/test/gpu/gpu_feature_browsertest.cc
+++ b/chrome/test/gpu/gpu_feature_browsertest.cc
@@ -20,6 +20,7 @@
#include "content/public/browser/gpu_data_manager.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/gpu_info.h"
+#include "content/public/test/browser_test_utils.h"
#include "content/test/gpu/gpu_test_config.h"
#include "content/test/gpu/test_switches.h"
#include "net/base/net_util.h"
@@ -93,7 +94,7 @@ class GpuFeatureTest : public InProcessBrowserTest {
ASSERT_TRUE(file_util::PathExists(test_path))
<< "Missing test file: " << test_path.value();
- ui_test_utils::DOMMessageQueue message_queue;
+ content::DOMMessageQueue message_queue;
if (new_tab) {
ui_test_utils::NavigateToURLWithDisposition(
browser(), net::FilePathToFileURL(test_path),
diff --git a/chrome/test/gpu/gpu_mapsgl_endurance_browsertest.cc b/chrome/test/gpu/gpu_mapsgl_endurance_browsertest.cc
index 7ae07c3..7438090 100644
--- a/chrome/test/gpu/gpu_mapsgl_endurance_browsertest.cc
+++ b/chrome/test/gpu/gpu_mapsgl_endurance_browsertest.cc
@@ -77,7 +77,7 @@ class MapsGLEnduranceTest : public InProcessBrowserTest {
gfx::Rect new_bounds = GetNewTabContainerBounds(tab_container_size);
browser()->window()->SetBounds(new_bounds);
- ui_test_utils::DOMMessageQueue message_queue;
+ content::DOMMessageQueue message_queue;
ui_test_utils::NavigateToURL(browser(), GURL(url));
// Wait for notification that the test completed.
diff --git a/chrome/test/gpu/gpu_pixel_browsertest.cc b/chrome/test/gpu/gpu_pixel_browsertest.cc
index f21974c..9cf3563 100644
--- a/chrome/test/gpu/gpu_pixel_browsertest.cc
+++ b/chrome/test/gpu/gpu_pixel_browsertest.cc
@@ -169,7 +169,7 @@ class GpuPixelBrowserTest : public InProcessBrowserTest {
ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
- ui_test_utils::DOMMessageQueue message_queue;
+ content::DOMMessageQueue message_queue;
ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(url));
// Wait for notification that page is loaded.
diff --git a/chrome/test/gpu/webgl_conformance_tests.cc b/chrome/test/gpu/webgl_conformance_tests.cc
index 7e23795..70d334f 100644
--- a/chrome/test/gpu/webgl_conformance_tests.cc
+++ b/chrome/test/gpu/webgl_conformance_tests.cc
@@ -10,6 +10,7 @@
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/common/content_switches.h"
+#include "content/public/test/browser_test_utils.h"
#include "content/test/gpu/gpu_test_config.h"
#include "content/test/gpu/gpu_test_expectations_parser.h"
#include "net/base/net_util.h"
@@ -58,7 +59,7 @@ class WebGLConformanceTests : public InProcessBrowserTest {
return;
}
- ui_test_utils::DOMMessageQueue message_queue;
+ content::DOMMessageQueue message_queue;
ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(test_path_));
ui_test_utils::NavigateToURL(
browser(), GURL("javascript:start('" + url + "');"));
diff --git a/chrome/test/perf/rendering/latency_tests.cc b/chrome/test/perf/rendering/latency_tests.cc
index 323830e..9ac511d 100644
--- a/chrome/test/perf/rendering/latency_tests.cc
+++ b/chrome/test/perf/rendering/latency_tests.cc
@@ -25,6 +25,7 @@
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_switches.h"
+#include "content/public/test/browser_test_utils.h"
#include "content/test/gpu/gpu_test_config.h"
#include "net/base/net_util.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -432,7 +433,7 @@ void LatencyTest::RunTestInternal(const std::string& test_url,
}
// Wait for message indicating the test has finished running.
- ui_test_utils::DOMMessageQueue message_queue;
+ content::DOMMessageQueue message_queue;
ASSERT_TRUE(message_queue.WaitForMessage(NULL));
timer_.Stop();
diff --git a/content/browser/gpu/generate_webgl_conformance_test_list.py b/content/browser/gpu/generate_webgl_conformance_test_list.py
new file mode 100755
index 0000000..9dff85b
--- /dev/null
+++ b/content/browser/gpu/generate_webgl_conformance_test_list.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Auto-generates the WebGL conformance test list header file.
+
+Parses the WebGL conformance test *.txt file, which contains a list of URLs
+for individual conformance tests (each on a new line). It recursively parses
+*.txt files. For each test URL, the matching gtest call is created and
+sent to the C++ header file.
+"""
+
+import getopt
+import os
+import re
+import sys
+
+COPYRIGHT = """\
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+"""
+WARNING = """\
+// DO NOT EDIT! This file is auto-generated by
+// generate_webgl_conformance_test_list.py
+// It is included by webgl_conformance_tests.cc
+
+"""
+HEADER_GUARD = """\
+#ifndef CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_
+#define CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_
+
+"""
+HEADER_GUARD_END = """
+#endif // CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_
+
+"""
+
+# Assume this script is run from the src/content/test/gpu directory.
+INPUT_DIR = "../../../third_party/webgl_conformance"
+INPUT_FILE = "00_test_list.txt"
+OUTPUT_FILE = "webgl_conformance_test_list_autogen.h"
+
+def main(argv):
+ """Main function for the WebGL conformance test list generator.
+ """
+ if not os.path.exists(os.path.join(INPUT_DIR, INPUT_FILE)):
+ print >> sys.stderr, "ERROR: WebGL conformance tests do not exist."
+ print >> sys.stderr, "Run the script from the directory containing it."
+ return 1
+
+ output = open(OUTPUT_FILE, "w")
+ output.write(COPYRIGHT)
+ output.write(WARNING)
+ output.write(HEADER_GUARD)
+
+ test_prefix = {}
+
+ unparsed_files = [INPUT_FILE]
+ while unparsed_files:
+ filename = unparsed_files.pop(0)
+ try:
+ input = open(os.path.join(INPUT_DIR, filename))
+ except IOError:
+ print >> sys.stderr, "WARNING: %s does not exist (skipped)." % filename
+ continue
+
+ for url in input:
+ url = re.sub("//.*", "", url)
+ url = re.sub("#.*", "", url)
+ url = url.strip()
+ # Some filename has options before them, for example,
+ # --min-version 1.0.2 testname.html
+ pos = url.rfind(" ")
+ if pos != -1:
+ url = url[pos+1:]
+
+ if not url:
+ continue
+
+ # Cannot use os.path.join() because Windows with use "\\" but this path
+ # is sent through javascript.
+ if os.path.dirname(filename):
+ url = "%s/%s" % (os.path.dirname(filename), url)
+
+ # Queue all text files for parsing, because test list URLs are nested
+ # through .txt files.
+ if re.match(".+\.txt\s*$", url):
+ unparsed_files.append(url)
+
+ # Convert the filename to a valid test name and output the gtest code.
+ else:
+ name = os.path.splitext(url)[0]
+ name = re.sub("\W+", "_", name)
+ if os.path.exists(os.path.join(INPUT_DIR, url)):
+ output.write('CONFORMANCE_TEST(%s,\n "%s");\n' % (name, url))
+ else:
+ print >> sys.stderr, "WARNING: %s does not exist (skipped)." % url
+ input.close()
+
+ output.write(HEADER_GUARD_END)
+ output.close()
+ return 0
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv[1:]))
diff --git a/content/browser/gpu/test_support_gpu.gypi b/content/browser/gpu/test_support_gpu.gypi
new file mode 100644
index 0000000..13ea57c
--- /dev/null
+++ b/content/browser/gpu/test_support_gpu.gypi
@@ -0,0 +1,71 @@
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This file is meant to be included into targets which run gpu tests.
+{
+ 'variables': {
+ 'test_list_out_dir': '<(SHARED_INTERMEDIATE_DIR)/content/test/gpu',
+ 'src_dir': '../../..',
+ },
+ 'defines': [
+ 'HAS_OUT_OF_PROC_TEST_RUNNER',
+ ],
+ 'include_dirs': [
+ '<(src_dir)',
+ '<(test_list_out_dir)',
+ ],
+ # hard_dependency is necessary for this target because it has actions
+ # that generate a header file included by dependent targets. The header
+ # file must be generated before the dependents are compiled. The usual
+ # semantics are to allow the two targets to build concurrently.
+ 'hard_dependency': 1,
+ 'conditions': [
+ ['OS=="win"', {
+ 'include_dirs': [
+ '<(DEPTH)/third_party/wtl/include',
+ ],
+ 'sources': [
+ '<(SHARED_INTERMEDIATE_DIR)/content/content_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/net/net_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_chromium_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_resources.rc',
+ ],
+ 'conditions': [
+ ['win_use_allocator_shim==1', {
+ 'dependencies': [
+ '../base/allocator/allocator.gyp:allocator',
+ ],
+ }],
+ ],
+ 'configurations': {
+ 'Debug': {
+ 'msvs_settings': {
+ 'VCLinkerTool': {
+ 'LinkIncremental': '<(msvs_large_module_debug_link_mode)',
+ },
+ },
+ },
+ },
+ }],
+ ['OS=="mac"', {
+ # See comments about "xcode_settings" elsewhere in this file.
+ 'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-ObjC']},
+ }],
+ ['toolkit_uses_gtk == 1', {
+ 'dependencies': [
+ '<(src_dir)/build/linux/system.gyp:gtk',
+ ],
+ }],
+ ['toolkit_uses_gtk == 1 or chromeos==1 or (OS=="linux" and use_aura==1)', {
+ 'dependencies': [
+ '<(src_dir)/build/linux/system.gyp:ssl',
+ ],
+ }],
+ ['toolkit_views==1', {
+ 'dependencies': [
+ '<(src_dir)/ui/views/views.gyp:views',
+ ],
+ }],
+ ],
+}
diff --git a/content/browser/gpu/webgl_conformance_test_list_autogen.h b/content/browser/gpu/webgl_conformance_test_list_autogen.h
new file mode 100644
index 0000000..9f5b5a0
--- /dev/null
+++ b/content/browser/gpu/webgl_conformance_test_list_autogen.h
@@ -0,0 +1,1080 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// DO NOT EDIT! This file is auto-generated by
+// generate_webgl_conformance_test_list.py
+// It is included by webgl_conformance_tests.cc
+
+#ifndef CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_
+#define CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_
+
+CONFORMANCE_TEST(conformance_more_conformance_constants,
+ "conformance/more/conformance/constants.html");
+CONFORMANCE_TEST(conformance_more_conformance_getContext,
+ "conformance/more/conformance/getContext.html");
+CONFORMANCE_TEST(conformance_more_conformance_methods,
+ "conformance/more/conformance/methods.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_A,
+ "conformance/more/conformance/quickCheckAPI-A.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_B1,
+ "conformance/more/conformance/quickCheckAPI-B1.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_B2,
+ "conformance/more/conformance/quickCheckAPI-B2.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_B3,
+ "conformance/more/conformance/quickCheckAPI-B3.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_B4,
+ "conformance/more/conformance/quickCheckAPI-B4.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_C,
+ "conformance/more/conformance/quickCheckAPI-C.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_D_G,
+ "conformance/more/conformance/quickCheckAPI-D_G.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_G_I,
+ "conformance/more/conformance/quickCheckAPI-G_I.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_L_S,
+ "conformance/more/conformance/quickCheckAPI-L_S.html");
+CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_S_V,
+ "conformance/more/conformance/quickCheckAPI-S_V.html");
+CONFORMANCE_TEST(conformance_more_conformance_webGLArrays,
+ "conformance/more/conformance/webGLArrays.html");
+CONFORMANCE_TEST(conformance_more_functions_bindBuffer,
+ "conformance/more/functions/bindBuffer.html");
+CONFORMANCE_TEST(conformance_more_functions_bindBufferBadArgs,
+ "conformance/more/functions/bindBufferBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_bindFramebufferLeaveNonZero,
+ "conformance/more/functions/bindFramebufferLeaveNonZero.html");
+CONFORMANCE_TEST(conformance_more_functions_bufferData,
+ "conformance/more/functions/bufferData.html");
+CONFORMANCE_TEST(conformance_more_functions_bufferDataBadArgs,
+ "conformance/more/functions/bufferDataBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_bufferSubData,
+ "conformance/more/functions/bufferSubData.html");
+CONFORMANCE_TEST(conformance_more_functions_bufferSubDataBadArgs,
+ "conformance/more/functions/bufferSubDataBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_copyTexImage2D,
+ "conformance/more/functions/copyTexImage2D.html");
+CONFORMANCE_TEST(conformance_more_functions_copyTexImage2DBadArgs,
+ "conformance/more/functions/copyTexImage2DBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_copyTexSubImage2D,
+ "conformance/more/functions/copyTexSubImage2D.html");
+CONFORMANCE_TEST(conformance_more_functions_copyTexSubImage2DBadArgs,
+ "conformance/more/functions/copyTexSubImage2DBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_deleteBufferBadArgs,
+ "conformance/more/functions/deleteBufferBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_drawArrays,
+ "conformance/more/functions/drawArrays.html");
+CONFORMANCE_TEST(conformance_more_functions_drawArraysOutOfBounds,
+ "conformance/more/functions/drawArraysOutOfBounds.html");
+CONFORMANCE_TEST(conformance_more_functions_drawElements,
+ "conformance/more/functions/drawElements.html");
+CONFORMANCE_TEST(conformance_more_functions_drawElementsBadArgs,
+ "conformance/more/functions/drawElementsBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_isTests,
+ "conformance/more/functions/isTests.html");
+CONFORMANCE_TEST(conformance_more_functions_isTestsBadArgs,
+ "conformance/more/functions/isTestsBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_readPixels,
+ "conformance/more/functions/readPixels.html");
+CONFORMANCE_TEST(conformance_more_functions_readPixelsBadArgs,
+ "conformance/more/functions/readPixelsBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_texImage2D,
+ "conformance/more/functions/texImage2D.html");
+CONFORMANCE_TEST(conformance_more_functions_texImage2DBadArgs,
+ "conformance/more/functions/texImage2DBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_texImage2DHTML,
+ "conformance/more/functions/texImage2DHTML.html");
+CONFORMANCE_TEST(conformance_more_functions_texImage2DHTMLBadArgs,
+ "conformance/more/functions/texImage2DHTMLBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_texSubImage2D,
+ "conformance/more/functions/texSubImage2D.html");
+CONFORMANCE_TEST(conformance_more_functions_texSubImage2DBadArgs,
+ "conformance/more/functions/texSubImage2DBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_texSubImage2DHTML,
+ "conformance/more/functions/texSubImage2DHTML.html");
+CONFORMANCE_TEST(conformance_more_functions_texSubImage2DHTMLBadArgs,
+ "conformance/more/functions/texSubImage2DHTMLBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_uniformf,
+ "conformance/more/functions/uniformf.html");
+CONFORMANCE_TEST(conformance_more_functions_uniformfBadArgs,
+ "conformance/more/functions/uniformfBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_uniformfArrayLen1,
+ "conformance/more/functions/uniformfArrayLen1.html");
+CONFORMANCE_TEST(conformance_more_functions_uniformi,
+ "conformance/more/functions/uniformi.html");
+CONFORMANCE_TEST(conformance_more_functions_uniformiBadArgs,
+ "conformance/more/functions/uniformiBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_uniformMatrix,
+ "conformance/more/functions/uniformMatrix.html");
+CONFORMANCE_TEST(conformance_more_functions_uniformMatrixBadArgs,
+ "conformance/more/functions/uniformMatrixBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_vertexAttrib,
+ "conformance/more/functions/vertexAttrib.html");
+CONFORMANCE_TEST(conformance_more_functions_vertexAttribBadArgs,
+ "conformance/more/functions/vertexAttribBadArgs.html");
+CONFORMANCE_TEST(conformance_more_functions_vertexAttribPointer,
+ "conformance/more/functions/vertexAttribPointer.html");
+CONFORMANCE_TEST(conformance_more_functions_vertexAttribPointerBadArgs,
+ "conformance/more/functions/vertexAttribPointerBadArgs.html");
+CONFORMANCE_TEST(conformance_more_glsl_arrayOutOfBounds,
+ "conformance/more/glsl/arrayOutOfBounds.html");
+CONFORMANCE_TEST(conformance_more_glsl_uniformOutOfBounds,
+ "conformance/more/glsl/uniformOutOfBounds.html");
+CONFORMANCE_TEST(conformance_attribs_gl_enable_vertex_attrib,
+ "conformance/attribs/gl-enable-vertex-attrib.html");
+CONFORMANCE_TEST(conformance_attribs_gl_vertex_attrib_render,
+ "conformance/attribs/gl-vertex-attrib-render.html");
+CONFORMANCE_TEST(conformance_attribs_gl_disabled_vertex_attrib,
+ "conformance/attribs/gl-disabled-vertex-attrib.html");
+CONFORMANCE_TEST(conformance_attribs_gl_vertex_attrib_zero_issues,
+ "conformance/attribs/gl-vertex-attrib-zero-issues.html");
+CONFORMANCE_TEST(conformance_attribs_gl_vertex_attrib,
+ "conformance/attribs/gl-vertex-attrib.html");
+CONFORMANCE_TEST(conformance_attribs_gl_vertexattribpointer_offsets,
+ "conformance/attribs/gl-vertexattribpointer-offsets.html");
+CONFORMANCE_TEST(conformance_attribs_gl_vertexattribpointer,
+ "conformance/attribs/gl-vertexattribpointer.html");
+CONFORMANCE_TEST(conformance_buffers_buffer_bind_test,
+ "conformance/buffers/buffer-bind-test.html");
+CONFORMANCE_TEST(conformance_buffers_buffer_data_array_buffer,
+ "conformance/buffers/buffer-data-array-buffer.html");
+CONFORMANCE_TEST(conformance_buffers_index_validation_copies_indices,
+ "conformance/buffers/index-validation-copies-indices.html");
+CONFORMANCE_TEST(conformance_buffers_index_validation_crash_with_buffer_sub_data,
+ "conformance/buffers/index-validation-crash-with-buffer-sub-data.html");
+CONFORMANCE_TEST(conformance_buffers_index_validation_verifies_too_many_indices,
+ "conformance/buffers/index-validation-verifies-too-many-indices.html");
+CONFORMANCE_TEST(conformance_buffers_index_validation_with_resized_buffer,
+ "conformance/buffers/index-validation-with-resized-buffer.html");
+CONFORMANCE_TEST(conformance_buffers_index_validation,
+ "conformance/buffers/index-validation.html");
+CONFORMANCE_TEST(conformance_canvas_buffer_offscreen_test,
+ "conformance/canvas/buffer-offscreen-test.html");
+CONFORMANCE_TEST(conformance_canvas_buffer_preserve_test,
+ "conformance/canvas/buffer-preserve-test.html");
+CONFORMANCE_TEST(conformance_canvas_canvas_test,
+ "conformance/canvas/canvas-test.html");
+CONFORMANCE_TEST(conformance_canvas_canvas_zero_size,
+ "conformance/canvas/canvas-zero-size.html");
+CONFORMANCE_TEST(conformance_canvas_drawingbuffer_static_canvas_test,
+ "conformance/canvas/drawingbuffer-static-canvas-test.html");
+CONFORMANCE_TEST(conformance_canvas_drawingbuffer_test,
+ "conformance/canvas/drawingbuffer-test.html");
+CONFORMANCE_TEST(conformance_canvas_framebuffer_bindings_unaffected_on_resize,
+ "conformance/canvas/framebuffer-bindings-unaffected-on-resize.html");
+CONFORMANCE_TEST(conformance_canvas_texture_bindings_unaffected_on_resize,
+ "conformance/canvas/texture-bindings-unaffected-on-resize.html");
+CONFORMANCE_TEST(conformance_canvas_viewport_unchanged_upon_resize,
+ "conformance/canvas/viewport-unchanged-upon-resize.html");
+CONFORMANCE_TEST(conformance_context_constants,
+ "conformance/context/constants.html");
+CONFORMANCE_TEST(conformance_context_context_attribute_preserve_drawing_buffer,
+ "conformance/context/context-attribute-preserve-drawing-buffer.html");
+CONFORMANCE_TEST(conformance_context_context_attributes_alpha_depth_stencil_antialias,
+ "conformance/context/context-attributes-alpha-depth-stencil-antialias.html");
+CONFORMANCE_TEST(conformance_context_context_creation_and_destruction,
+ "conformance/context/context-creation-and-destruction.html");
+CONFORMANCE_TEST(conformance_context_context_lost_restored,
+ "conformance/context/context-lost-restored.html");
+CONFORMANCE_TEST(conformance_context_context_lost,
+ "conformance/context/context-lost.html");
+CONFORMANCE_TEST(conformance_context_context_type_test,
+ "conformance/context/context-type-test.html");
+CONFORMANCE_TEST(conformance_context_incorrect_context_object_behaviour,
+ "conformance/context/incorrect-context-object-behaviour.html");
+CONFORMANCE_TEST(conformance_context_methods,
+ "conformance/context/methods.html");
+CONFORMANCE_TEST(conformance_context_premultiplyalpha_test,
+ "conformance/context/premultiplyalpha-test.html");
+CONFORMANCE_TEST(conformance_context_resource_sharing_test,
+ "conformance/context/resource-sharing-test.html");
+CONFORMANCE_TEST(conformance_extensions_get_extension,
+ "conformance/extensions/get-extension.html");
+CONFORMANCE_TEST(conformance_extensions_oes_standard_derivatives,
+ "conformance/extensions/oes-standard-derivatives.html");
+CONFORMANCE_TEST(conformance_extensions_oes_texture_float_with_canvas,
+ "conformance/extensions/oes-texture-float-with-canvas.html");
+CONFORMANCE_TEST(conformance_extensions_oes_texture_float_with_image_data,
+ "conformance/extensions/oes-texture-float-with-image-data.html");
+CONFORMANCE_TEST(conformance_extensions_oes_texture_float_with_image,
+ "conformance/extensions/oes-texture-float-with-image.html");
+CONFORMANCE_TEST(conformance_extensions_oes_texture_float_with_video,
+ "conformance/extensions/oes-texture-float-with-video.html");
+CONFORMANCE_TEST(conformance_extensions_oes_texture_float,
+ "conformance/extensions/oes-texture-float.html");
+CONFORMANCE_TEST(conformance_extensions_oes_vertex_array_object,
+ "conformance/extensions/oes-vertex-array-object.html");
+CONFORMANCE_TEST(conformance_extensions_webgl_debug_renderer_info,
+ "conformance/extensions/webgl-debug-renderer-info.html");
+CONFORMANCE_TEST(conformance_extensions_webgl_debug_shaders,
+ "conformance/extensions/webgl-debug-shaders.html");
+CONFORMANCE_TEST(conformance_extensions_webgl_compressed_texture_s3tc,
+ "conformance/extensions/webgl-compressed-texture-s3tc.html");
+CONFORMANCE_TEST(conformance_extensions_ext_texture_filter_anisotropic,
+ "conformance/extensions/ext-texture-filter-anisotropic.html");
+CONFORMANCE_TEST(conformance_limits_gl_min_attribs,
+ "conformance/limits/gl-min-attribs.html");
+CONFORMANCE_TEST(conformance_limits_gl_max_texture_dimensions,
+ "conformance/limits/gl-max-texture-dimensions.html");
+CONFORMANCE_TEST(conformance_limits_gl_min_textures,
+ "conformance/limits/gl-min-textures.html");
+CONFORMANCE_TEST(conformance_limits_gl_min_uniforms,
+ "conformance/limits/gl-min-uniforms.html");
+CONFORMANCE_TEST(conformance_misc_bad_arguments_test,
+ "conformance/misc/bad-arguments-test.html");
+CONFORMANCE_TEST(conformance_misc_delayed_drawing,
+ "conformance/misc/delayed-drawing.html");
+CONFORMANCE_TEST(conformance_misc_error_reporting,
+ "conformance/misc/error-reporting.html");
+CONFORMANCE_TEST(conformance_misc_instanceof_test,
+ "conformance/misc/instanceof-test.html");
+CONFORMANCE_TEST(conformance_misc_invalid_passed_params,
+ "conformance/misc/invalid-passed-params.html");
+CONFORMANCE_TEST(conformance_misc_is_object,
+ "conformance/misc/is-object.html");
+CONFORMANCE_TEST(conformance_misc_null_object_behaviour,
+ "conformance/misc/null-object-behaviour.html");
+CONFORMANCE_TEST(conformance_misc_functions_returning_strings,
+ "conformance/misc/functions-returning-strings.html");
+CONFORMANCE_TEST(conformance_misc_object_deletion_behaviour,
+ "conformance/misc/object-deletion-behaviour.html");
+CONFORMANCE_TEST(conformance_misc_shader_precision_format,
+ "conformance/misc/shader-precision-format.html");
+CONFORMANCE_TEST(conformance_misc_type_conversion_test,
+ "conformance/misc/type-conversion-test.html");
+CONFORMANCE_TEST(conformance_misc_uninitialized_test,
+ "conformance/misc/uninitialized-test.html");
+CONFORMANCE_TEST(conformance_misc_webgl_specific,
+ "conformance/misc/webgl-specific.html");
+CONFORMANCE_TEST(conformance_programs_get_active_test,
+ "conformance/programs/get-active-test.html");
+CONFORMANCE_TEST(conformance_programs_gl_bind_attrib_location_test,
+ "conformance/programs/gl-bind-attrib-location-test.html");
+CONFORMANCE_TEST(conformance_programs_gl_bind_attrib_location_long_names_test,
+ "conformance/programs/gl-bind-attrib-location-long-names-test.html");
+CONFORMANCE_TEST(conformance_programs_gl_get_active_attribute,
+ "conformance/programs/gl-get-active-attribute.html");
+CONFORMANCE_TEST(conformance_programs_gl_get_active_uniform,
+ "conformance/programs/gl-get-active-uniform.html");
+CONFORMANCE_TEST(conformance_programs_gl_getshadersource,
+ "conformance/programs/gl-getshadersource.html");
+CONFORMANCE_TEST(conformance_programs_gl_shader_test,
+ "conformance/programs/gl-shader-test.html");
+CONFORMANCE_TEST(conformance_programs_invalid_UTF_16,
+ "conformance/programs/invalid-UTF-16.html");
+CONFORMANCE_TEST(conformance_programs_program_test,
+ "conformance/programs/program-test.html");
+CONFORMANCE_TEST(conformance_programs_use_program_crash_with_discard_in_fragment_shader,
+ "conformance/programs/use-program-crash-with-discard-in-fragment-shader.html");
+CONFORMANCE_TEST(conformance_reading_read_pixels_pack_alignment,
+ "conformance/reading/read-pixels-pack-alignment.html");
+CONFORMANCE_TEST(conformance_reading_read_pixels_test,
+ "conformance/reading/read-pixels-test.html");
+CONFORMANCE_TEST(conformance_renderbuffers_framebuffer_object_attachment,
+ "conformance/renderbuffers/framebuffer-object-attachment.html");
+CONFORMANCE_TEST(conformance_renderbuffers_framebuffer_state_restoration,
+ "conformance/renderbuffers/framebuffer-state-restoration.html");
+CONFORMANCE_TEST(conformance_renderbuffers_framebuffer_test,
+ "conformance/renderbuffers/framebuffer-test.html");
+CONFORMANCE_TEST(conformance_renderbuffers_renderbuffer_initialization,
+ "conformance/renderbuffers/renderbuffer-initialization.html");
+CONFORMANCE_TEST(conformance_rendering_culling,
+ "conformance/rendering/culling.html");
+CONFORMANCE_TEST(conformance_rendering_draw_arrays_out_of_bounds,
+ "conformance/rendering/draw-arrays-out-of-bounds.html");
+CONFORMANCE_TEST(conformance_rendering_draw_elements_out_of_bounds,
+ "conformance/rendering/draw-elements-out-of-bounds.html");
+CONFORMANCE_TEST(conformance_rendering_gl_clear,
+ "conformance/rendering/gl-clear.html");
+CONFORMANCE_TEST(conformance_rendering_gl_drawelements,
+ "conformance/rendering/gl-drawelements.html");
+CONFORMANCE_TEST(conformance_rendering_gl_scissor_test,
+ "conformance/rendering/gl-scissor-test.html");
+CONFORMANCE_TEST(conformance_rendering_more_than_65536_indices,
+ "conformance/rendering/more-than-65536-indices.html");
+CONFORMANCE_TEST(conformance_rendering_point_size,
+ "conformance/rendering/point-size.html");
+CONFORMANCE_TEST(conformance_rendering_triangle,
+ "conformance/rendering/triangle.html");
+CONFORMANCE_TEST(conformance_rendering_line_loop_tri_fan,
+ "conformance/rendering/line-loop-tri-fan.html");
+CONFORMANCE_TEST(conformance_state_gl_enable_enum_test,
+ "conformance/state/gl-enable-enum-test.html");
+CONFORMANCE_TEST(conformance_state_gl_enum_tests,
+ "conformance/state/gl-enum-tests.html");
+CONFORMANCE_TEST(conformance_state_gl_get_calls,
+ "conformance/state/gl-get-calls.html");
+CONFORMANCE_TEST(conformance_state_gl_geterror,
+ "conformance/state/gl-geterror.html");
+CONFORMANCE_TEST(conformance_state_gl_getstring,
+ "conformance/state/gl-getstring.html");
+CONFORMANCE_TEST(conformance_state_gl_object_get_calls,
+ "conformance/state/gl-object-get-calls.html");
+CONFORMANCE_TEST(conformance_textures_compressed_tex_image,
+ "conformance/textures/compressed-tex-image.html");
+CONFORMANCE_TEST(conformance_textures_copy_tex_image_and_sub_image_2d,
+ "conformance/textures/copy-tex-image-and-sub-image-2d.html");
+CONFORMANCE_TEST(conformance_textures_gl_pixelstorei,
+ "conformance/textures/gl-pixelstorei.html");
+CONFORMANCE_TEST(conformance_textures_gl_teximage,
+ "conformance/textures/gl-teximage.html");
+CONFORMANCE_TEST(conformance_textures_origin_clean_conformance,
+ "conformance/textures/origin-clean-conformance.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_array_buffer_view,
+ "conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_canvas,
+ "conformance/textures/tex-image-and-sub-image-2d-with-canvas.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_canvas_rgb565,
+ "conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_canvas_rgba4444,
+ "conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_canvas_rgba5551,
+ "conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_data,
+ "conformance/textures/tex-image-and-sub-image-2d-with-image-data.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_data_rgb565,
+ "conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_data_rgba4444,
+ "conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgba4444.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_data_rgba5551,
+ "conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgba5551.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image,
+ "conformance/textures/tex-image-and-sub-image-2d-with-image.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_rgb565,
+ "conformance/textures/tex-image-and-sub-image-2d-with-image-rgb565.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_rgba4444,
+ "conformance/textures/tex-image-and-sub-image-2d-with-image-rgba4444.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_rgba5551,
+ "conformance/textures/tex-image-and-sub-image-2d-with-image-rgba5551.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_video,
+ "conformance/textures/tex-image-and-sub-image-2d-with-video.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_video_rgb565,
+ "conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_video_rgba4444,
+ "conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_video_rgba5551,
+ "conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_and_uniform_binding_bugs,
+ "conformance/textures/tex-image-and-uniform-binding-bugs.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_with_format_and_type,
+ "conformance/textures/tex-image-with-format-and-type.html");
+CONFORMANCE_TEST(conformance_textures_tex_image_with_invalid_data,
+ "conformance/textures/tex-image-with-invalid-data.html");
+CONFORMANCE_TEST(conformance_textures_tex_input_validation,
+ "conformance/textures/tex-input-validation.html");
+CONFORMANCE_TEST(conformance_textures_tex_sub_image_2d_bad_args,
+ "conformance/textures/tex-sub-image-2d-bad-args.html");
+CONFORMANCE_TEST(conformance_textures_tex_sub_image_2d,
+ "conformance/textures/tex-sub-image-2d.html");
+CONFORMANCE_TEST(conformance_textures_texparameter_test,
+ "conformance/textures/texparameter-test.html");
+CONFORMANCE_TEST(conformance_textures_texture_active_bind_2,
+ "conformance/textures/texture-active-bind-2.html");
+CONFORMANCE_TEST(conformance_textures_texture_active_bind,
+ "conformance/textures/texture-active-bind.html");
+CONFORMANCE_TEST(conformance_textures_texture_attachment_formats,
+ "conformance/textures/texture-attachment-formats.html");
+CONFORMANCE_TEST(conformance_textures_texture_clear,
+ "conformance/textures/texture-clear.html");
+CONFORMANCE_TEST(conformance_textures_texture_complete,
+ "conformance/textures/texture-complete.html");
+CONFORMANCE_TEST(conformance_textures_texture_formats_test,
+ "conformance/textures/texture-formats-test.html");
+CONFORMANCE_TEST(conformance_textures_texture_mips,
+ "conformance/textures/texture-mips.html");
+CONFORMANCE_TEST(conformance_textures_texture_npot_video,
+ "conformance/textures/texture-npot-video.html");
+CONFORMANCE_TEST(conformance_textures_texture_npot,
+ "conformance/textures/texture-npot.html");
+CONFORMANCE_TEST(conformance_textures_texture_size,
+ "conformance/textures/texture-size.html");
+CONFORMANCE_TEST(conformance_textures_texture_size_cube_maps,
+ "conformance/textures/texture-size-cube-maps.html");
+CONFORMANCE_TEST(conformance_textures_texture_transparent_pixels_initialized,
+ "conformance/textures/texture-transparent-pixels-initialized.html");
+CONFORMANCE_TEST(conformance_textures_texture_upload_cube_maps,
+ "conformance/textures/texture-upload-cube-maps.html");
+CONFORMANCE_TEST(conformance_typedarrays_array_buffer_crash,
+ "conformance/typedarrays/array-buffer-crash.html");
+CONFORMANCE_TEST(conformance_typedarrays_array_buffer_view_crash,
+ "conformance/typedarrays/array-buffer-view-crash.html");
+CONFORMANCE_TEST(conformance_typedarrays_array_unit_tests,
+ "conformance/typedarrays/array-unit-tests.html");
+CONFORMANCE_TEST(conformance_typedarrays_data_view_crash,
+ "conformance/typedarrays/data-view-crash.html");
+CONFORMANCE_TEST(conformance_typedarrays_data_view_test,
+ "conformance/typedarrays/data-view-test.html");
+CONFORMANCE_TEST(conformance_uniforms_gl_uniform_arrays,
+ "conformance/uniforms/gl-uniform-arrays.html");
+CONFORMANCE_TEST(conformance_uniforms_gl_uniform_bool,
+ "conformance/uniforms/gl-uniform-bool.html");
+CONFORMANCE_TEST(conformance_uniforms_gl_uniformmatrix4fv,
+ "conformance/uniforms/gl-uniformmatrix4fv.html");
+CONFORMANCE_TEST(conformance_uniforms_gl_unknown_uniform,
+ "conformance/uniforms/gl-unknown-uniform.html");
+CONFORMANCE_TEST(conformance_uniforms_null_uniform_location,
+ "conformance/uniforms/null-uniform-location.html");
+CONFORMANCE_TEST(conformance_uniforms_uniform_default_values,
+ "conformance/uniforms/uniform-default-values.html");
+CONFORMANCE_TEST(conformance_uniforms_uniform_location,
+ "conformance/uniforms/uniform-location.html");
+CONFORMANCE_TEST(conformance_uniforms_uniform_samplers_test,
+ "conformance/uniforms/uniform-samplers-test.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function,
+ "conformance/glsl/functions/glsl-function.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_abs,
+ "conformance/glsl/functions/glsl-function-abs.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_acos,
+ "conformance/glsl/functions/glsl-function-acos.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_asin,
+ "conformance/glsl/functions/glsl-function-asin.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_atan,
+ "conformance/glsl/functions/glsl-function-atan.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_atan_xy,
+ "conformance/glsl/functions/glsl-function-atan-xy.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_ceil,
+ "conformance/glsl/functions/glsl-function-ceil.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_clamp_float,
+ "conformance/glsl/functions/glsl-function-clamp-float.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_clamp_gentype,
+ "conformance/glsl/functions/glsl-function-clamp-gentype.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_cos,
+ "conformance/glsl/functions/glsl-function-cos.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_cross,
+ "conformance/glsl/functions/glsl-function-cross.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_distance,
+ "conformance/glsl/functions/glsl-function-distance.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_dot,
+ "conformance/glsl/functions/glsl-function-dot.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_faceforward,
+ "conformance/glsl/functions/glsl-function-faceforward.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_floor,
+ "conformance/glsl/functions/glsl-function-floor.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_fract,
+ "conformance/glsl/functions/glsl-function-fract.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_length,
+ "conformance/glsl/functions/glsl-function-length.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_max_float,
+ "conformance/glsl/functions/glsl-function-max-float.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_max_gentype,
+ "conformance/glsl/functions/glsl-function-max-gentype.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_min_float,
+ "conformance/glsl/functions/glsl-function-min-float.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_min_gentype,
+ "conformance/glsl/functions/glsl-function-min-gentype.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_mix_float,
+ "conformance/glsl/functions/glsl-function-mix-float.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_mix_gentype,
+ "conformance/glsl/functions/glsl-function-mix-gentype.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_mod_float,
+ "conformance/glsl/functions/glsl-function-mod-float.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_mod_gentype,
+ "conformance/glsl/functions/glsl-function-mod-gentype.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_normalize,
+ "conformance/glsl/functions/glsl-function-normalize.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_reflect,
+ "conformance/glsl/functions/glsl-function-reflect.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_sign,
+ "conformance/glsl/functions/glsl-function-sign.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_sin,
+ "conformance/glsl/functions/glsl-function-sin.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_step_float,
+ "conformance/glsl/functions/glsl-function-step-float.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_step_gentype,
+ "conformance/glsl/functions/glsl-function-step-gentype.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_smoothstep_float,
+ "conformance/glsl/functions/glsl-function-smoothstep-float.html");
+CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_smoothstep_gentype,
+ "conformance/glsl/functions/glsl-function-smoothstep-gentype.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_int_float_vert,
+ "conformance/glsl/implicit/add_int_float.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_int_mat2_vert,
+ "conformance/glsl/implicit/add_int_mat2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_int_mat3_vert,
+ "conformance/glsl/implicit/add_int_mat3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_int_mat4_vert,
+ "conformance/glsl/implicit/add_int_mat4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_int_vec2_vert,
+ "conformance/glsl/implicit/add_int_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_int_vec3_vert,
+ "conformance/glsl/implicit/add_int_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_int_vec4_vert,
+ "conformance/glsl/implicit/add_int_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_ivec2_vec2_vert,
+ "conformance/glsl/implicit/add_ivec2_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_ivec3_vec3_vert,
+ "conformance/glsl/implicit/add_ivec3_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_add_ivec4_vec4_vert,
+ "conformance/glsl/implicit/add_ivec4_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_assign_int_to_float_vert,
+ "conformance/glsl/implicit/assign_int_to_float.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_assign_ivec2_to_vec2_vert,
+ "conformance/glsl/implicit/assign_ivec2_to_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_assign_ivec3_to_vec3_vert,
+ "conformance/glsl/implicit/assign_ivec3_to_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_assign_ivec4_to_vec4_vert,
+ "conformance/glsl/implicit/assign_ivec4_to_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_construct_struct_vert,
+ "conformance/glsl/implicit/construct_struct.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_float_vert,
+ "conformance/glsl/implicit/divide_int_float.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_mat2_vert,
+ "conformance/glsl/implicit/divide_int_mat2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_mat3_vert,
+ "conformance/glsl/implicit/divide_int_mat3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_mat4_vert,
+ "conformance/glsl/implicit/divide_int_mat4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_vec2_vert,
+ "conformance/glsl/implicit/divide_int_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_vec3_vert,
+ "conformance/glsl/implicit/divide_int_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_vec4_vert,
+ "conformance/glsl/implicit/divide_int_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_ivec2_vec2_vert,
+ "conformance/glsl/implicit/divide_ivec2_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_ivec3_vec3_vert,
+ "conformance/glsl/implicit/divide_ivec3_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_divide_ivec4_vec4_vert,
+ "conformance/glsl/implicit/divide_ivec4_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_equal_int_float_vert,
+ "conformance/glsl/implicit/equal_int_float.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_equal_ivec2_vec2_vert,
+ "conformance/glsl/implicit/equal_ivec2_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_equal_ivec3_vec3_vert,
+ "conformance/glsl/implicit/equal_ivec3_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_equal_ivec4_vec4_vert,
+ "conformance/glsl/implicit/equal_ivec4_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_function_int_float_vert,
+ "conformance/glsl/implicit/function_int_float.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_function_ivec2_vec2_vert,
+ "conformance/glsl/implicit/function_ivec2_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_function_ivec3_vec3_vert,
+ "conformance/glsl/implicit/function_ivec3_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_function_ivec4_vec4_vert,
+ "conformance/glsl/implicit/function_ivec4_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_greater_than_vert,
+ "conformance/glsl/implicit/greater_than.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_greater_than_equal_vert,
+ "conformance/glsl/implicit/greater_than_equal.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_less_than_vert,
+ "conformance/glsl/implicit/less_than.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_less_than_equal_vert,
+ "conformance/glsl/implicit/less_than_equal.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_float_vert,
+ "conformance/glsl/implicit/multiply_int_float.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_mat2_vert,
+ "conformance/glsl/implicit/multiply_int_mat2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_mat3_vert,
+ "conformance/glsl/implicit/multiply_int_mat3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_mat4_vert,
+ "conformance/glsl/implicit/multiply_int_mat4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_vec2_vert,
+ "conformance/glsl/implicit/multiply_int_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_vec3_vert,
+ "conformance/glsl/implicit/multiply_int_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_vec4_vert,
+ "conformance/glsl/implicit/multiply_int_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_ivec2_vec2_vert,
+ "conformance/glsl/implicit/multiply_ivec2_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_ivec3_vec3_vert,
+ "conformance/glsl/implicit/multiply_ivec3_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_multiply_ivec4_vec4_vert,
+ "conformance/glsl/implicit/multiply_ivec4_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_not_equal_int_float_vert,
+ "conformance/glsl/implicit/not_equal_int_float.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_not_equal_ivec2_vec2_vert,
+ "conformance/glsl/implicit/not_equal_ivec2_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_not_equal_ivec3_vec3_vert,
+ "conformance/glsl/implicit/not_equal_ivec3_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_not_equal_ivec4_vec4_vert,
+ "conformance/glsl/implicit/not_equal_ivec4_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_float_vert,
+ "conformance/glsl/implicit/subtract_int_float.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_mat2_vert,
+ "conformance/glsl/implicit/subtract_int_mat2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_mat3_vert,
+ "conformance/glsl/implicit/subtract_int_mat3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_mat4_vert,
+ "conformance/glsl/implicit/subtract_int_mat4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_vec2_vert,
+ "conformance/glsl/implicit/subtract_int_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_vec3_vert,
+ "conformance/glsl/implicit/subtract_int_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_vec4_vert,
+ "conformance/glsl/implicit/subtract_int_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_ivec2_vec2_vert,
+ "conformance/glsl/implicit/subtract_ivec2_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_ivec3_vec3_vert,
+ "conformance/glsl/implicit/subtract_ivec3_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_subtract_ivec4_vec4_vert,
+ "conformance/glsl/implicit/subtract_ivec4_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_ternary_int_float_vert,
+ "conformance/glsl/implicit/ternary_int_float.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_ternary_ivec2_vec2_vert,
+ "conformance/glsl/implicit/ternary_ivec2_vec2.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_ternary_ivec3_vec3_vert,
+ "conformance/glsl/implicit/ternary_ivec3_vec3.vert.html");
+CONFORMANCE_TEST(conformance_glsl_implicit_ternary_ivec4_vec4_vert,
+ "conformance/glsl/implicit/ternary_ivec4_vec4.vert.html");
+CONFORMANCE_TEST(conformance_glsl_matrices_glsl_mat4_to_mat3,
+ "conformance/glsl/matrices/glsl-mat4-to-mat3.html");
+CONFORMANCE_TEST(conformance_glsl_misc_attrib_location_length_limits,
+ "conformance/glsl/misc/attrib-location-length-limits.html");
+CONFORMANCE_TEST(conformance_glsl_misc_embedded_struct_definitions_forbidden,
+ "conformance/glsl/misc/embedded-struct-definitions-forbidden.html");
+CONFORMANCE_TEST(conformance_glsl_misc_glsl_function_nodes,
+ "conformance/glsl/misc/glsl-function-nodes.html");
+CONFORMANCE_TEST(conformance_glsl_misc_glsl_vertex_branch,
+ "conformance/glsl/misc/glsl-vertex-branch.html");
+CONFORMANCE_TEST(conformance_glsl_misc_glsl_long_variable_names,
+ "conformance/glsl/misc/glsl-long-variable-names.html");
+CONFORMANCE_TEST(conformance_glsl_misc_non_ascii_comments_vert,
+ "conformance/glsl/misc/non-ascii-comments.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_non_ascii_vert,
+ "conformance/glsl/misc/non-ascii.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_re_compile_re_link,
+ "conformance/glsl/misc/re-compile-re-link.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_256_character_define,
+ "conformance/glsl/misc/shader-with-256-character-define.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_256_character_identifier_frag,
+ "conformance/glsl/misc/shader-with-256-character-identifier.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_257_character_define,
+ "conformance/glsl/misc/shader-with-257-character-define.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_257_character_identifier_frag,
+ "conformance/glsl/misc/shader-with-257-character-identifier.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with__webgl_identifier_vert,
+ "conformance/glsl/misc/shader-with-_webgl-identifier.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_arbitrary_indexing_frag,
+ "conformance/glsl/misc/shader-with-arbitrary-indexing.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_arbitrary_indexing_vert,
+ "conformance/glsl/misc/shader-with-arbitrary-indexing.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_attrib_array_vert,
+ "conformance/glsl/misc/shader-with-attrib-array.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_attrib_struct_vert,
+ "conformance/glsl/misc/shader-with-attrib-struct.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_clipvertex_vert,
+ "conformance/glsl/misc/shader-with-clipvertex.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_conditional_scoping,
+ "conformance/glsl/misc/shader-with-conditional-scoping.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_conditional_scoping_negative,
+ "conformance/glsl/misc/shader-with-conditional-scoping-negative.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_default_precision_frag,
+ "conformance/glsl/misc/shader-with-default-precision.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_default_precision_vert,
+ "conformance/glsl/misc/shader-with-default-precision.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_define_line_continuation_frag,
+ "conformance/glsl/misc/shader-with-define-line-continuation.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_dfdx_no_ext_frag,
+ "conformance/glsl/misc/shader-with-dfdx-no-ext.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_dfdx_frag,
+ "conformance/glsl/misc/shader-with-dfdx.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_do_loop,
+ "conformance/glsl/misc/shader-with-do-loop.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_error_directive,
+ "conformance/glsl/misc/shader-with-error-directive.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_explicit_int_cast_vert,
+ "conformance/glsl/misc/shader-with-explicit-int-cast.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_float_return_value_frag,
+ "conformance/glsl/misc/shader-with-float-return-value.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_for_scoping,
+ "conformance/glsl/misc/shader-with-for-scoping.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_for_loop,
+ "conformance/glsl/misc/shader-with-for-loop.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_frag_depth_frag,
+ "conformance/glsl/misc/shader-with-frag-depth.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_function_recursion_frag,
+ "conformance/glsl/misc/shader-with-function-recursion.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_function_scoped_struct,
+ "conformance/glsl/misc/shader-with-function-scoped-struct.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_functional_scoping,
+ "conformance/glsl/misc/shader-with-functional-scoping.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_comma_assignment,
+ "conformance/glsl/misc/shader-with-comma-assignment.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_comma_conditional_assignment,
+ "conformance/glsl/misc/shader-with-comma-conditional-assignment.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_glcolor_vert,
+ "conformance/glsl/misc/shader-with-glcolor.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_gles_1_frag,
+ "conformance/glsl/misc/shader-with-gles-1.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_gles_symbol_frag,
+ "conformance/glsl/misc/shader-with-gles-symbol.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_glprojectionmatrix_vert,
+ "conformance/glsl/misc/shader-with-glprojectionmatrix.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_implicit_vec3_to_vec4_cast_vert,
+ "conformance/glsl/misc/shader-with-implicit-vec3-to-vec4-cast.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_include_vert,
+ "conformance/glsl/misc/shader-with-include.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_int_return_value_frag,
+ "conformance/glsl/misc/shader-with-int-return-value.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_invalid_identifier_frag,
+ "conformance/glsl/misc/shader-with-invalid-identifier.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_ivec2_return_value_frag,
+ "conformance/glsl/misc/shader-with-ivec2-return-value.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_ivec3_return_value_frag,
+ "conformance/glsl/misc/shader-with-ivec3-return-value.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_ivec4_return_value_frag,
+ "conformance/glsl/misc/shader-with-ivec4-return-value.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_limited_indexing_frag,
+ "conformance/glsl/misc/shader-with-limited-indexing.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_hex_int_constant_macro,
+ "conformance/glsl/misc/shader-with-hex-int-constant-macro.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_long_line,
+ "conformance/glsl/misc/shader-with-long-line.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_non_ascii_error_frag,
+ "conformance/glsl/misc/shader-with-non-ascii-error.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_non_reserved_words,
+ "conformance/glsl/misc/shader-with-non-reserved-words.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_precision_frag,
+ "conformance/glsl/misc/shader-with-precision.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_quoted_error_frag,
+ "conformance/glsl/misc/shader-with-quoted-error.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_reserved_words,
+ "conformance/glsl/misc/shader-with-reserved-words.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_undefined_preprocessor_symbol_frag,
+ "conformance/glsl/misc/shader-with-undefined-preprocessor-symbol.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_uniform_in_loop_condition_vert,
+ "conformance/glsl/misc/shader-with-uniform-in-loop-condition.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_vec2_return_value_frag,
+ "conformance/glsl/misc/shader-with-vec2-return-value.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_vec3_return_value_frag,
+ "conformance/glsl/misc/shader-with-vec3-return-value.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_vec4_return_value_frag,
+ "conformance/glsl/misc/shader-with-vec4-return-value.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_vec4_vec3_vec4_conditional,
+ "conformance/glsl/misc/shader-with-vec4-vec3-vec4-conditional.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_version_100_frag,
+ "conformance/glsl/misc/shader-with-version-100.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_version_100_vert,
+ "conformance/glsl/misc/shader-with-version-100.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_version_120_vert,
+ "conformance/glsl/misc/shader-with-version-120.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_version_130_vert,
+ "conformance/glsl/misc/shader-with-version-130.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_webgl_identifier_vert,
+ "conformance/glsl/misc/shader-with-webgl-identifier.vert.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_while_loop,
+ "conformance/glsl/misc/shader-with-while-loop.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_without_precision_frag,
+ "conformance/glsl/misc/shader-without-precision.frag.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shared,
+ "conformance/glsl/misc/shared.html");
+CONFORMANCE_TEST(conformance_glsl_misc_struct_nesting_exceeds_maximum,
+ "conformance/glsl/misc/struct-nesting-exceeds-maximum.html");
+CONFORMANCE_TEST(conformance_glsl_misc_struct_nesting_under_maximum,
+ "conformance/glsl/misc/struct-nesting-under-maximum.html");
+CONFORMANCE_TEST(conformance_glsl_misc_uniform_location_length_limits,
+ "conformance/glsl/misc/uniform-location-length-limits.html");
+CONFORMANCE_TEST(conformance_glsl_misc_shader_with_short_circuiting_operators,
+ "conformance/glsl/misc/shader-with-short-circuiting-operators.html");
+CONFORMANCE_TEST(conformance_glsl_reserved__webgl_field_vert,
+ "conformance/glsl/reserved/_webgl_field.vert.html");
+CONFORMANCE_TEST(conformance_glsl_reserved__webgl_function_vert,
+ "conformance/glsl/reserved/_webgl_function.vert.html");
+CONFORMANCE_TEST(conformance_glsl_reserved__webgl_struct_vert,
+ "conformance/glsl/reserved/_webgl_struct.vert.html");
+CONFORMANCE_TEST(conformance_glsl_reserved__webgl_variable_vert,
+ "conformance/glsl/reserved/_webgl_variable.vert.html");
+CONFORMANCE_TEST(conformance_glsl_reserved_webgl_field_vert,
+ "conformance/glsl/reserved/webgl_field.vert.html");
+CONFORMANCE_TEST(conformance_glsl_reserved_webgl_function_vert,
+ "conformance/glsl/reserved/webgl_function.vert.html");
+CONFORMANCE_TEST(conformance_glsl_reserved_webgl_struct_vert,
+ "conformance/glsl/reserved/webgl_struct.vert.html");
+CONFORMANCE_TEST(conformance_glsl_reserved_webgl_variable_vert,
+ "conformance/glsl/reserved/webgl_variable.vert.html");
+CONFORMANCE_TEST(conformance_glsl_samplers_glsl_function_texture2d_bias,
+ "conformance/glsl/samplers/glsl-function-texture2d-bias.html");
+CONFORMANCE_TEST(conformance_glsl_samplers_glsl_function_texture2dlod,
+ "conformance/glsl/samplers/glsl-function-texture2dlod.html");
+CONFORMANCE_TEST(conformance_glsl_samplers_glsl_function_texture2dproj,
+ "conformance/glsl/samplers/glsl-function-texture2dproj.html");
+CONFORMANCE_TEST(conformance_glsl_variables_gl_fragcoord,
+ "conformance/glsl/variables/gl-fragcoord.html");
+CONFORMANCE_TEST(conformance_glsl_variables_gl_frontfacing,
+ "conformance/glsl/variables/gl-frontfacing.html");
+CONFORMANCE_TEST(conformance_glsl_variables_gl_pointcoord,
+ "conformance/glsl/variables/gl-pointcoord.html");
+CONFORMANCE_TEST(conformance_ogles_GL_abs_abs_001_to_006,
+ "conformance/ogles/GL/abs/abs_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_acos_acos_001_to_006,
+ "conformance/ogles/GL/acos/acos_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_all_all_001_to_004,
+ "conformance/ogles/GL/all/all_001_to_004.html");
+CONFORMANCE_TEST(conformance_ogles_GL_any_any_001_to_004,
+ "conformance/ogles/GL/any/any_001_to_004.html");
+CONFORMANCE_TEST(conformance_ogles_GL_array_array_001_to_006,
+ "conformance/ogles/GL/array/array_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_asin_asin_001_to_006,
+ "conformance/ogles/GL/asin/asin_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_atan_atan_001_to_008,
+ "conformance/ogles/GL/atan/atan_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_atan_atan_009_to_012,
+ "conformance/ogles/GL/atan/atan_009_to_012.html");
+CONFORMANCE_TEST(conformance_ogles_GL_biConstants_biConstants_001_to_008,
+ "conformance/ogles/GL/biConstants/biConstants_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_biConstants_biConstants_009_to_016,
+ "conformance/ogles/GL/biConstants/biConstants_009_to_016.html");
+CONFORMANCE_TEST(conformance_ogles_GL_biuDepthRange_biuDepthRange_001_to_002,
+ "conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_001_to_008,
+ "conformance/ogles/GL/build/build_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_009_to_016,
+ "conformance/ogles/GL/build/build_009_to_016.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_017_to_024,
+ "conformance/ogles/GL/build/build_017_to_024.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_025_to_032,
+ "conformance/ogles/GL/build/build_025_to_032.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_033_to_040,
+ "conformance/ogles/GL/build/build_033_to_040.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_041_to_048,
+ "conformance/ogles/GL/build/build_041_to_048.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_049_to_056,
+ "conformance/ogles/GL/build/build_049_to_056.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_057_to_064,
+ "conformance/ogles/GL/build/build_057_to_064.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_065_to_072,
+ "conformance/ogles/GL/build/build_065_to_072.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_073_to_080,
+ "conformance/ogles/GL/build/build_073_to_080.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_081_to_088,
+ "conformance/ogles/GL/build/build_081_to_088.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_089_to_096,
+ "conformance/ogles/GL/build/build_089_to_096.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_097_to_104,
+ "conformance/ogles/GL/build/build_097_to_104.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_105_to_112,
+ "conformance/ogles/GL/build/build_105_to_112.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_113_to_120,
+ "conformance/ogles/GL/build/build_113_to_120.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_121_to_128,
+ "conformance/ogles/GL/build/build_121_to_128.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_129_to_136,
+ "conformance/ogles/GL/build/build_129_to_136.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_137_to_144,
+ "conformance/ogles/GL/build/build_137_to_144.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_145_to_152,
+ "conformance/ogles/GL/build/build_145_to_152.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_153_to_160,
+ "conformance/ogles/GL/build/build_153_to_160.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_161_to_168,
+ "conformance/ogles/GL/build/build_161_to_168.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_169_to_176,
+ "conformance/ogles/GL/build/build_169_to_176.html");
+CONFORMANCE_TEST(conformance_ogles_GL_build_build_177_to_178,
+ "conformance/ogles/GL/build/build_177_to_178.html");
+CONFORMANCE_TEST(conformance_ogles_GL_built_in_varying_array_out_of_bounds_built_in_varying_array_out_of_bounds_001_to_001,
+ "conformance/ogles/GL/built_in_varying_array_out_of_bounds/built_in_varying_array_out_of_bounds_001_to_001.html");
+CONFORMANCE_TEST(conformance_ogles_GL_ceil_ceil_001_to_006,
+ "conformance/ogles/GL/ceil/ceil_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_clamp_clamp_001_to_006,
+ "conformance/ogles/GL/clamp/clamp_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_control_flow_control_flow_001_to_008,
+ "conformance/ogles/GL/control_flow/control_flow_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_control_flow_control_flow_009_to_010,
+ "conformance/ogles/GL/control_flow/control_flow_009_to_010.html");
+CONFORMANCE_TEST(conformance_ogles_GL_cos_cos_001_to_006,
+ "conformance/ogles/GL/cos/cos_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_cross_cross_001_to_002,
+ "conformance/ogles/GL/cross/cross_001_to_002.html");
+CONFORMANCE_TEST(conformance_ogles_GL_default_default_001_to_001,
+ "conformance/ogles/GL/default/default_001_to_001.html");
+CONFORMANCE_TEST(conformance_ogles_GL_degrees_degrees_001_to_006,
+ "conformance/ogles/GL/degrees/degrees_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_discard_discard_001_to_002,
+ "conformance/ogles/GL/discard/discard_001_to_002.html");
+CONFORMANCE_TEST(conformance_ogles_GL_distance_distance_001_to_006,
+ "conformance/ogles/GL/distance/distance_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_dot_dot_001_to_006,
+ "conformance/ogles/GL/dot/dot_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_equal_equal_001_to_008,
+ "conformance/ogles/GL/equal/equal_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_equal_equal_009_to_012,
+ "conformance/ogles/GL/equal/equal_009_to_012.html");
+CONFORMANCE_TEST(conformance_ogles_GL_exp_exp_001_to_008,
+ "conformance/ogles/GL/exp/exp_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_exp_exp_009_to_012,
+ "conformance/ogles/GL/exp/exp_009_to_012.html");
+CONFORMANCE_TEST(conformance_ogles_GL_exp2_exp2_001_to_008,
+ "conformance/ogles/GL/exp2/exp2_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_exp2_exp2_009_to_012,
+ "conformance/ogles/GL/exp2/exp2_009_to_012.html");
+CONFORMANCE_TEST(conformance_ogles_GL_faceforward_faceforward_001_to_006,
+ "conformance/ogles/GL/faceforward/faceforward_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_floor_floor_001_to_006,
+ "conformance/ogles/GL/floor/floor_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_fract_fract_001_to_006,
+ "conformance/ogles/GL/fract/fract_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_001_to_008,
+ "conformance/ogles/GL/functions/functions_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_009_to_016,
+ "conformance/ogles/GL/functions/functions_009_to_016.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_017_to_024,
+ "conformance/ogles/GL/functions/functions_017_to_024.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_025_to_032,
+ "conformance/ogles/GL/functions/functions_025_to_032.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_033_to_040,
+ "conformance/ogles/GL/functions/functions_033_to_040.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_041_to_048,
+ "conformance/ogles/GL/functions/functions_041_to_048.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_049_to_056,
+ "conformance/ogles/GL/functions/functions_049_to_056.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_057_to_064,
+ "conformance/ogles/GL/functions/functions_057_to_064.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_065_to_072,
+ "conformance/ogles/GL/functions/functions_065_to_072.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_073_to_080,
+ "conformance/ogles/GL/functions/functions_073_to_080.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_081_to_088,
+ "conformance/ogles/GL/functions/functions_081_to_088.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_089_to_096,
+ "conformance/ogles/GL/functions/functions_089_to_096.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_097_to_104,
+ "conformance/ogles/GL/functions/functions_097_to_104.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_105_to_112,
+ "conformance/ogles/GL/functions/functions_105_to_112.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_113_to_120,
+ "conformance/ogles/GL/functions/functions_113_to_120.html");
+CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_121_to_126,
+ "conformance/ogles/GL/functions/functions_121_to_126.html");
+CONFORMANCE_TEST(conformance_ogles_GL_gl_FragCoord_gl_FragCoord_001_to_003,
+ "conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html");
+CONFORMANCE_TEST(conformance_ogles_GL_gl_FrontFacing_gl_FrontFacing_001_to_001,
+ "conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html");
+CONFORMANCE_TEST(conformance_ogles_GL_greaterThan_greaterThan_001_to_008,
+ "conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_greaterThanEqual_greaterThanEqual_001_to_008,
+ "conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_inversesqrt_inversesqrt_001_to_006,
+ "conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_length_length_001_to_006,
+ "conformance/ogles/GL/length/length_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_lessThan_lessThan_001_to_008,
+ "conformance/ogles/GL/lessThan/lessThan_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_lessThanEqual_lessThanEqual_001_to_008,
+ "conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_log_log_001_to_008,
+ "conformance/ogles/GL/log/log_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_log_log_009_to_012,
+ "conformance/ogles/GL/log/log_009_to_012.html");
+CONFORMANCE_TEST(conformance_ogles_GL_log2_log2_001_to_008,
+ "conformance/ogles/GL/log2/log2_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_log2_log2_009_to_012,
+ "conformance/ogles/GL/log2/log2_009_to_012.html");
+CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_001_to_008,
+ "conformance/ogles/GL/mat/mat_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_009_to_016,
+ "conformance/ogles/GL/mat/mat_009_to_016.html");
+CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_017_to_024,
+ "conformance/ogles/GL/mat/mat_017_to_024.html");
+CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_025_to_032,
+ "conformance/ogles/GL/mat/mat_025_to_032.html");
+CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_033_to_040,
+ "conformance/ogles/GL/mat/mat_033_to_040.html");
+CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_041_to_046,
+ "conformance/ogles/GL/mat/mat_041_to_046.html");
+CONFORMANCE_TEST(conformance_ogles_GL_mat3_mat3_001_to_006,
+ "conformance/ogles/GL/mat3/mat3_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_matrixCompMult_matrixCompMult_001_to_004,
+ "conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html");
+CONFORMANCE_TEST(conformance_ogles_GL_max_max_001_to_006,
+ "conformance/ogles/GL/max/max_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_min_min_001_to_006,
+ "conformance/ogles/GL/min/min_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_mix_mix_001_to_006,
+ "conformance/ogles/GL/mix/mix_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_mod_mod_001_to_008,
+ "conformance/ogles/GL/mod/mod_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_normalize_normalize_001_to_006,
+ "conformance/ogles/GL/normalize/normalize_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_not_not_001_to_004,
+ "conformance/ogles/GL/not/not_001_to_004.html");
+CONFORMANCE_TEST(conformance_ogles_GL_notEqual_notEqual_001_to_008,
+ "conformance/ogles/GL/notEqual/notEqual_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_notEqual_notEqual_009_to_012,
+ "conformance/ogles/GL/notEqual/notEqual_009_to_012.html");
+CONFORMANCE_TEST(conformance_ogles_GL_operators_operators_001_to_008,
+ "conformance/ogles/GL/operators/operators_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_operators_operators_009_to_016,
+ "conformance/ogles/GL/operators/operators_009_to_016.html");
+CONFORMANCE_TEST(conformance_ogles_GL_operators_operators_017_to_024,
+ "conformance/ogles/GL/operators/operators_017_to_024.html");
+CONFORMANCE_TEST(conformance_ogles_GL_operators_operators_025_to_026,
+ "conformance/ogles/GL/operators/operators_025_to_026.html");
+CONFORMANCE_TEST(conformance_ogles_GL_pow_pow_001_to_008,
+ "conformance/ogles/GL/pow/pow_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_pow_pow_009_to_016,
+ "conformance/ogles/GL/pow/pow_009_to_016.html");
+CONFORMANCE_TEST(conformance_ogles_GL_pow_pow_017_to_024,
+ "conformance/ogles/GL/pow/pow_017_to_024.html");
+CONFORMANCE_TEST(conformance_ogles_GL_radians_radians_001_to_006,
+ "conformance/ogles/GL/radians/radians_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_reflect_reflect_001_to_006,
+ "conformance/ogles/GL/reflect/reflect_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_refract_refract_001_to_006,
+ "conformance/ogles/GL/refract/refract_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_sign_sign_001_to_006,
+ "conformance/ogles/GL/sign/sign_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_sin_sin_001_to_006,
+ "conformance/ogles/GL/sin/sin_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_smoothstep_smoothstep_001_to_006,
+ "conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_sqrt_sqrt_001_to_006,
+ "conformance/ogles/GL/sqrt/sqrt_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_step_step_001_to_006,
+ "conformance/ogles/GL/step/step_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_001_to_008,
+ "conformance/ogles/GL/struct/struct_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_009_to_016,
+ "conformance/ogles/GL/struct/struct_009_to_016.html");
+CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_017_to_024,
+ "conformance/ogles/GL/struct/struct_017_to_024.html");
+CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_025_to_032,
+ "conformance/ogles/GL/struct/struct_025_to_032.html");
+CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_033_to_040,
+ "conformance/ogles/GL/struct/struct_033_to_040.html");
+CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_041_to_048,
+ "conformance/ogles/GL/struct/struct_041_to_048.html");
+CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_049_to_056,
+ "conformance/ogles/GL/struct/struct_049_to_056.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_001_to_008,
+ "conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_009_to_016,
+ "conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_017_to_024,
+ "conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_025_to_032,
+ "conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_033_to_040,
+ "conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_041_to_048,
+ "conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_049_to_056,
+ "conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_057_to_064,
+ "conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_065_to_072,
+ "conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_073_to_080,
+ "conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_081_to_088,
+ "conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_089_to_096,
+ "conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_097_to_104,
+ "conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_105_to_112,
+ "conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html");
+CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_113_to_120,
+ "conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html");
+CONFORMANCE_TEST(conformance_ogles_GL_tan_tan_001_to_006,
+ "conformance/ogles/GL/tan/tan_001_to_006.html");
+CONFORMANCE_TEST(conformance_ogles_GL_vec_vec_001_to_008,
+ "conformance/ogles/GL/vec/vec_001_to_008.html");
+CONFORMANCE_TEST(conformance_ogles_GL_vec_vec_009_to_016,
+ "conformance/ogles/GL/vec/vec_009_to_016.html");
+CONFORMANCE_TEST(conformance_ogles_GL_vec_vec_017_to_018,
+ "conformance/ogles/GL/vec/vec_017_to_018.html");
+CONFORMANCE_TEST(conformance_ogles_GL_vec3_vec3_001_to_008,
+ "conformance/ogles/GL/vec3/vec3_001_to_008.html");
+
+#endif // CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_
+
diff --git a/content/browser/gpu/webgl_conformance_tests.cc b/content/browser/gpu/webgl_conformance_tests.cc
new file mode 100644
index 0000000..f9e1010
--- /dev/null
+++ b/content/browser/gpu/webgl_conformance_tests.cc
@@ -0,0 +1,90 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/command_line.h"
+#include "base/file_util.h"
+#include "base/path_service.h"
+#include "base/utf_string_conversions.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_paths.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/shell/shell.h"
+#include "content/test/content_browser_test.h"
+#include "content/test/content_browser_test_utils.h"
+#include "content/test/gpu/gpu_test_config.h"
+#include "content/test/gpu/gpu_test_expectations_parser.h"
+#include "net/base/net_util.h"
+
+namespace content {
+
+class WebGLConformanceTests : public ContentBrowserTest {
+ public:
+ WebGLConformanceTests() {}
+
+ virtual void SetUpCommandLine(CommandLine* command_line) {
+ // Allow privileged WebGL extensions.
+ command_line->AppendSwitch(switches::kEnablePrivilegedWebGLExtensions);
+ }
+
+ virtual void SetUpInProcessBrowserTestFixture() {
+ FilePath webgl_conformance_path;
+ PathService::Get(base::DIR_SOURCE_ROOT, &webgl_conformance_path);
+ webgl_conformance_path = webgl_conformance_path.Append(
+ FILE_PATH_LITERAL("third_party"));
+ webgl_conformance_path = webgl_conformance_path.Append(
+ FILE_PATH_LITERAL("webgl_conformance"));
+ ASSERT_TRUE(file_util::DirectoryExists(webgl_conformance_path))
+ << "Missing conformance tests: " << webgl_conformance_path.value();
+
+ PathService::Get(DIR_TEST_DATA, &test_path_);
+ test_path_ = test_path_.Append(FILE_PATH_LITERAL("gpu"));
+ test_path_ = test_path_.Append(FILE_PATH_LITERAL("webgl_conformance.html"));
+
+ ASSERT_TRUE(bot_config_.LoadCurrentConfig(NULL))
+ << "Fail to load bot configuration";
+ ASSERT_TRUE(bot_config_.IsValid())
+ << "Invalid bot configuration";
+
+ ASSERT_TRUE(test_expectations_.LoadTestExpectations(
+ GPUTestExpectationsParser::kWebGLConformanceTest));
+ }
+
+ void RunTest(const std::string& url) {
+ std::string test_name =
+ testing::UnitTest::GetInstance()->current_test_info()->name();
+ int32 expectation =
+ test_expectations_.GetTestExpectation(test_name, bot_config_);
+ if (expectation != GPUTestExpectationsParser::kGpuTestPass) {
+ LOG(WARNING) << "Test " << test_name << " is bypassed";
+ return;
+ }
+
+ DOMMessageQueue message_queue;
+ NavigateToURL(shell(), net::FilePathToFileURL(test_path_));
+
+ std::string message;
+ NavigateToURL(shell(), GURL("javascript:start('" + url + "');"));
+ ASSERT_TRUE(message_queue.WaitForMessage(&message));
+
+ EXPECT_STREQ("\"SUCCESS\"", message.c_str()) << message;
+ }
+
+ private:
+ FilePath test_path_;
+ GPUTestBotConfig bot_config_;
+ GPUTestExpectationsParser test_expectations_;
+};
+
+#define CONFORMANCE_TEST(name, url) \
+IN_PROC_BROWSER_TEST_F(WebGLConformanceTests, MANUAL_##name) { \
+ RunTest(url); \
+}
+
+// The test declarations are located in webgl_conformance_test_list_autogen.h,
+// because the list is automatically generated by a script.
+// See: generate_webgl_conformance_test_list.py
+#include "webgl_conformance_test_list_autogen.h"
+
+} // namespace content
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index 9136d57..7539771 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -616,6 +616,7 @@
'../skia/skia.gyp:skia',
'../testing/gmock.gyp:gmock',
'../testing/gtest.gyp:gtest',
+ '../third_party/mesa/mesa.gyp:osmesa',
'../ui/ui.gyp:ui',
'../webkit/support/webkit_support.gyp:forms',
'../webkit/support/webkit_support.gyp:glue',
@@ -623,6 +624,9 @@
'include_dirs': [
'..',
],
+ 'includes': [
+ 'browser/gpu/test_support_gpu.gypi',
+ ],
'defines': [
'HAS_OUT_OF_PROC_TEST_RUNNER',
],
@@ -650,6 +654,8 @@
'browser/download/save_package_browsertest.cc',
'browser/fileapi/blob_layout_browsertest.cc',
'browser/fileapi/file_system_browsertest.cc',
+ 'browser/gpu/webgl_conformance_tests.cc',
+ 'browser/gpu/webgl_conformance_test_list_autogen.h',
'browser/in_process_webkit/indexed_db_browsertest.cc',
'browser/in_process_webkit/indexed_db_layout_browsertest.cc',
'browser/media_browsertest.cc',
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc
index f49ce92..f6b9361 100644
--- a/content/public/test/browser_test_utils.cc
+++ b/content/public/test/browser_test_utils.cc
@@ -17,6 +17,7 @@
#include "content/public/browser/browser_context.h"
#include "content/public/browser/dom_operation_notification_details.h"
#include "content/public/browser/notification_types.h"
+#include "content/public/browser/notification_service.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
@@ -569,4 +570,42 @@ TestWebSocketServer::~TestWebSocketServer() {
#endif
}
+DOMMessageQueue::DOMMessageQueue() : waiting_for_message_(false) {
+ registrar_.Add(this, NOTIFICATION_DOM_OPERATION_RESPONSE,
+ NotificationService::AllSources());
+}
+
+DOMMessageQueue::~DOMMessageQueue() {}
+
+void DOMMessageQueue::Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ Details<DomOperationNotificationDetails> dom_op_details(details);
+ Source<RenderViewHost> sender(source);
+ message_queue_.push(dom_op_details->json);
+ if (waiting_for_message_) {
+ waiting_for_message_ = false;
+ message_loop_runner_->Quit();
+ }
+}
+
+void DOMMessageQueue::ClearQueue() {
+ message_queue_ = std::queue<std::string>();
+}
+
+bool DOMMessageQueue::WaitForMessage(std::string* message) {
+ if (message_queue_.empty()) {
+ waiting_for_message_ = true;
+ // This will be quit when a new message comes in.
+ message_loop_runner_ = new MessageLoopRunner;
+ message_loop_runner_->Run();
+ }
+ // The queue should not be empty, unless we were quit because of a timeout.
+ if (message_queue_.empty())
+ return false;
+ if (message)
+ *message = message_queue_.front();
+ return true;
+}
+
} // namespace content
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h
index 83ea128..b807e31 100644
--- a/content/public/test/browser_test_utils.h
+++ b/content/public/test/browser_test_utils.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_PUBLIC_TEST_BROWSER_TEST_UTILS_H_
#define CONTENT_PUBLIC_TEST_BROWSER_TEST_UTILS_H_
+#include <queue>
#include <string>
#include <vector>
@@ -212,6 +213,37 @@ class TestWebSocketServer {
DISALLOW_COPY_AND_ASSIGN(TestWebSocketServer);
};
+// Watches for responses from the DOMAutomationController and keeps them in a
+// queue. Useful for waiting for a message to be received.
+class DOMMessageQueue : public NotificationObserver {
+ public:
+ // Constructs a DOMMessageQueue and begins listening for messages from the
+ // DOMAutomationController. Do not construct this until the browser has
+ // started.
+ DOMMessageQueue();
+ virtual ~DOMMessageQueue();
+
+ // Removes all messages in the message queue.
+ void ClearQueue();
+
+ // Wait for the next message to arrive. |message| will be set to the next
+ // message, if not null. Returns true on success.
+ bool WaitForMessage(std::string* message) WARN_UNUSED_RESULT;
+
+ // Overridden NotificationObserver methods.
+ virtual void Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) OVERRIDE;
+
+ private:
+ NotificationRegistrar registrar_;
+ std::queue<std::string> message_queue_;
+ bool waiting_for_message_;
+ scoped_refptr<MessageLoopRunner> message_loop_runner_;
+
+ DISALLOW_COPY_AND_ASSIGN(DOMMessageQueue);
+};
+
} // namespace content
#endif // CONTENT_PUBLIC_TEST_BROWSER_TEST_UTILS_H_
diff --git a/content/test/data/gpu/webgl_conformance.html b/content/test/data/gpu/webgl_conformance.html
new file mode 100644
index 0000000..445a150
--- /dev/null
+++ b/content/test/data/gpu/webgl_conformance.html
@@ -0,0 +1,99 @@
+<html>
+<head>
+<script type="text/javascript"
+ src="../../../../third_party/webgl_conformance/resources/webgl-test-harness.js">
+</script>
+<script>
+// We parse the test list offline and run the harness multiple times with each
+// test. Therefore, the version and options do not matter for the browsertests.
+// However, we still need to pass in a valid options for the harness to run.
+var CONFORMANCE_TEST_VERSION = "1.0.1 (beta)";
+var OPTIONS = {
+ version: CONFORMANCE_TEST_VERSION
+};
+
+var BASE_URL = "../../../../third_party/webgl_conformance/";
+var gl = null;
+var messages = [];
+var numFailures = 0;
+
+function start(start_url) {
+ // Report function called by each conformance test.
+ function report(type, msg, success) {
+ var reportType = WebGLTestHarnessModule.TestHarness.reportType;
+ switch (type) {
+ case reportType.START_PAGE:
+ // Accept every page loaded.
+ messages = [];
+ numFailures = 0;
+ return true;
+ case reportType.TEST_RESULT:
+ if (!success) {
+ ++numFailures;
+ messages.push("FAILURE: " + msg);
+ }
+ break;
+ case reportType.FINISH_PAGE:
+ if (success === undefined) {
+ ++numFailures;
+ messages.push("TIMEOUT: " +
+ window.webglTestHarness.timeoutDelay + " ms");
+ }
+ case reportType.FINISHED_ALL_TESTS:
+ if (numFailures > 0) {
+ var ext = gl.getExtension("WEBGL_debug_renderer_info");
+ if (ext) {
+ messages.push("GL_VENDOR: " +
+ gl.getParameter(ext.UNMASKED_VENDOR_WEBGL));
+ messages.push("GL_RENDERER: " +
+ gl.getParameter(ext.UNMASKED_RENDERER_WEBGL));
+ }
+ } else {
+ messages.push("SUCCESS");
+ }
+ domAutomationController.setAutomationId(1);
+ domAutomationController.send(messages.join("\n"));
+ break;
+ }
+ }
+
+ function create3DContext() {
+ var canvas = document.createElement("canvas");
+ var context = null;
+ try {
+ context = canvas.getContext("webgl");
+ } catch(e) {
+ }
+ if (!context) {
+ try {
+ context = canvas.getContext("experimental-webgl");
+ } catch(e) {
+ }
+ }
+ return context;
+ }
+
+ // Assert the WebGL context exists.
+ gl = create3DContext();
+ if (!gl) {
+ domAutomationController.setAutomationId(1);
+ domAutomationController.send("FAILURE: unable to fetch WebGL context");
+ return;
+ }
+
+ var iframe = document.getElementById("testframe");
+ var testHarness = new WebGLTestHarnessModule.TestHarness(
+ iframe,
+ BASE_URL + start_url,
+ report,
+ OPTIONS);
+
+ window.webglTestHarness = testHarness;
+ window.webglTestHarness.runTests();
+}
+</script>
+</head>
+<body>
+<iframe id="testframe" scrolling="yes" width="100%" height="100%"></iframe>
+</body>
+</html>
diff --git a/chrome/test/gpu/webgl_conformance_test_expectations.txt b/content/test/data/gpu/webgl_conformance_test_expectations.txt
index b16fe08..b16fe08 100644
--- a/chrome/test/gpu/webgl_conformance_test_expectations.txt
+++ b/content/test/data/gpu/webgl_conformance_test_expectations.txt
diff --git a/content/test/gpu/gpu_test_expectations_parser.cc b/content/test/gpu/gpu_test_expectations_parser.cc
index 8caedc7..756239d 100644
--- a/content/test/gpu/gpu_test_expectations_parser.cc
+++ b/content/test/gpu/gpu_test_expectations_parser.cc
@@ -12,6 +12,7 @@
#include "base/string_split.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
+#include "content/public/common/content_paths.h"
namespace {
@@ -499,11 +500,9 @@ bool GPUTestExpectationsParser::GetExpectationsPath(
bool rt = true;
switch (profile) {
case kWebGLConformanceTest:
- rt = PathService::Get(base::DIR_SOURCE_ROOT, path);
+ rt = PathService::Get(content::DIR_TEST_DATA, path);
if (rt) {
- *path = path->Append(FILE_PATH_LITERAL("chrome"))
- .Append(FILE_PATH_LITERAL("test"))
- .Append(FILE_PATH_LITERAL("gpu"))
+ *path = path->Append(FILE_PATH_LITERAL("gpu"))
.Append(FILE_PATH_LITERAL(
"webgl_conformance_test_expectations.txt"));
rt = file_util::PathExists(*path);