diff --git a/tests/angle_tests/BlendMinMaxTest.cpp b/tests/angle_tests/BlendMinMaxTest.cpp
index 9b14fa8..9f737f9 100644
--- a/tests/angle_tests/BlendMinMaxTest.cpp
+++ b/tests/angle_tests/BlendMinMaxTest.cpp
@@ -136,19 +136,19 @@
     GLuint mColorRenderbuffer;
 };
 
-TEST_F(BlendMinMaxTest, rgba8)
+TEST_F(BlendMinMaxTest, RGBA8)
 {
     SetUpFramebuffer(GL_RGBA8);
     runTest();
 }
 
-TEST_F(BlendMinMaxTest, rgba32f)
+TEST_F(BlendMinMaxTest, RGBA32f)
 {
     SetUpFramebuffer(GL_RGBA32F);
     runTest();
 }
 
-TEST_F(BlendMinMaxTest, rgba16f)
+TEST_F(BlendMinMaxTest, RGBA16F)
 {
     SetUpFramebuffer(GL_RGBA16F);
     runTest();
diff --git a/tests/angle_tests/BlitFramebufferANGLETest.cpp b/tests/angle_tests/BlitFramebufferANGLETest.cpp
index 65302c9..b8e9cc5 100644
--- a/tests/angle_tests/BlitFramebufferANGLETest.cpp
+++ b/tests/angle_tests/BlitFramebufferANGLETest.cpp
@@ -302,7 +302,7 @@
 };
 
 // Draw to user-created framebuffer, blit whole-buffer color to original framebuffer.
-TEST_F(BlitFramebufferANGLETest, blit_color_to_default)
+TEST_F(BlitFramebufferANGLETest, BlitColorToDefault)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -329,7 +329,7 @@
 }
 
 // Draw to system framebuffer, blit whole-buffer color to user-created framebuffer.
-TEST_F(BlitFramebufferANGLETest, reverse_color_blit)
+TEST_F(BlitFramebufferANGLETest, ReverseColorBlit)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mOriginalFBO);
 
@@ -356,7 +356,7 @@
 }
 
 // blit from user-created FBO to system framebuffer, with the scissor test enabled.
-TEST_F(BlitFramebufferANGLETest, scissored_blit)
+TEST_F(BlitFramebufferANGLETest, ScissoredBlit)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -391,7 +391,7 @@
 }
 
 // blit from system FBO to user-created framebuffer, with the scissor test enabled.
-TEST_F(BlitFramebufferANGLETest, reverse_scissored_blit)
+TEST_F(BlitFramebufferANGLETest, ReverseScissoredBlit)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mOriginalFBO);
 
@@ -426,7 +426,7 @@
 }
 
 // blit from user-created FBO to system framebuffer, using region larger than buffer.
-TEST_F(BlitFramebufferANGLETest, oversized_blit)
+TEST_F(BlitFramebufferANGLETest, OversizedBlit)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -456,7 +456,7 @@
 }
 
 // blit from system FBO to user-created framebuffer, using region larger than buffer.
-TEST_F(BlitFramebufferANGLETest, reverse_oversized_blit)
+TEST_F(BlitFramebufferANGLETest, ReverseOversizedBlit)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mOriginalFBO);
 
@@ -485,7 +485,7 @@
 }
 
 // blit from user-created FBO to system framebuffer, with depth buffer.
-TEST_F(BlitFramebufferANGLETest, blit_with_depth)
+TEST_F(BlitFramebufferANGLETest, BlitWithDepth)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -522,7 +522,7 @@
 }
 
 // blit from system FBO to user-created framebuffer, with depth buffer.
-TEST_F(BlitFramebufferANGLETest, reverse_blit_with_depth)
+TEST_F(BlitFramebufferANGLETest, ReverseBlitWithDepth)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mOriginalFBO);
 
@@ -559,7 +559,7 @@
 }
 
 // blit from one region of the system fbo to another-- this should fail.
-TEST_F(BlitFramebufferANGLETest, blit_same_buffer_original)
+TEST_F(BlitFramebufferANGLETest, BlitSameBufferOriginal)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mOriginalFBO);
 
@@ -575,7 +575,7 @@
 }
 
 // blit from one region of the system fbo to another.
-TEST_F(BlitFramebufferANGLETest, blit_same_buffer_user)
+TEST_F(BlitFramebufferANGLETest, BlitSameBufferUser)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -590,7 +590,7 @@
     EXPECT_GL_ERROR(GL_INVALID_OPERATION);
 }
 
-TEST_F(BlitFramebufferANGLETest, blit_partial_color)
+TEST_F(BlitFramebufferANGLETest, BlitPartialColor)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -619,7 +619,7 @@
     EXPECT_PIXEL_EQ(    getWindowWidth() / 4, 3 * getWindowHeight() / 4, 255,   0,   0, 255);
 }
 
-TEST_F(BlitFramebufferANGLETest, blit_different_sizes)
+TEST_F(BlitFramebufferANGLETest, BlitDifferentSizes)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -647,7 +647,7 @@
     EXPECT_GL_NO_ERROR();
 }
 
-TEST_F(BlitFramebufferANGLETest, blit_with_missing_attachments)
+TEST_F(BlitFramebufferANGLETest, BlitWithMissingAttachments)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mColorOnlyFBO);
 
@@ -685,7 +685,7 @@
     EXPECT_PIXEL_EQ(    getWindowWidth() / 4, 3 * getWindowHeight() / 4,   0,   0, 255, 255);
 }
 
-TEST_F(BlitFramebufferANGLETest, blit_stencil)
+TEST_F(BlitFramebufferANGLETest, BlitStencil)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -727,7 +727,7 @@
 }
 
 // make sure that attempting to blit a partial depth buffer issues an error
-TEST_F(BlitFramebufferANGLETest, blit_partial_depth_stencil)
+TEST_F(BlitFramebufferANGLETest, BlitPartialDepthStencil)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -746,7 +746,7 @@
 }
 
 // Test blit with MRT framebuffers
-TEST_F(BlitFramebufferANGLETest, blit_mrt)
+TEST_F(BlitFramebufferANGLETest, BlitMRT)
 {
     if (!extensionEnabled("GL_EXT_draw_buffers"))
     {
@@ -794,7 +794,7 @@
 }
 
 // Make sure that attempts to stretch in a blit call issue an error
-TEST_F(BlitFramebufferANGLETest, error_stretching)
+TEST_F(BlitFramebufferANGLETest, ErrorStretching)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -813,7 +813,7 @@
 }
 
 // Make sure that attempts to flip in a blit call issue an error
-TEST_F(BlitFramebufferANGLETest, error_flipping)
+TEST_F(BlitFramebufferANGLETest, ErrorFlipping)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
@@ -831,7 +831,7 @@
     EXPECT_GL_ERROR(GL_INVALID_OPERATION);
 }
 
-TEST_F(BlitFramebufferANGLETest, errors)
+TEST_F(BlitFramebufferANGLETest, Errors)
 {
     glBindFramebuffer(GL_FRAMEBUFFER, mUserFBO);
 
diff --git a/tests/angle_tests/ClearTest.cpp b/tests/angle_tests/ClearTest.cpp
index 2f0f153..7da3337 100644
--- a/tests/angle_tests/ClearTest.cpp
+++ b/tests/angle_tests/ClearTest.cpp
@@ -56,7 +56,7 @@
     GLuint mProgram;
 };
 
-TEST_F(ClearTest, clear_issue)
+TEST_F(ClearTest, ClearIssue)
 {
     EXPECT_GL_NO_ERROR();
 
diff --git a/tests/angle_tests/CompressedTextureTest.cpp b/tests/angle_tests/CompressedTextureTest.cpp
index c59c2ee..b7868bd 100644
--- a/tests/angle_tests/CompressedTextureTest.cpp
+++ b/tests/angle_tests/CompressedTextureTest.cpp
@@ -66,7 +66,7 @@
     GLint mTextureUniformLocation;
 };
 
-TEST_F(CompressedTextureTest, compressed_tex_image)
+TEST_F(CompressedTextureTest, CompressedTexImage)
 {
     if (getClientVersion() < 3 && !extensionEnabled("GL_EXT_texture_compression_dxt1"))
     {
@@ -106,7 +106,7 @@
     EXPECT_GL_NO_ERROR();
 }
 
-TEST_F(CompressedTextureTest, compressed_tex_storage)
+TEST_F(CompressedTextureTest, CompressedTexStorage)
 {
     if (getClientVersion() < 3 && !extensionEnabled("GL_EXT_texture_compression_dxt1"))
     {
diff --git a/tests/angle_tests/FramebufferFormatsTest.cpp b/tests/angle_tests/FramebufferFormatsTest.cpp
index 19ddd8c..bffd4d1 100644
--- a/tests/angle_tests/FramebufferFormatsTest.cpp
+++ b/tests/angle_tests/FramebufferFormatsTest.cpp
@@ -71,27 +71,27 @@
     }
 };
 
-TEST_F(FramebufferFormatsTest, rgba4)
+TEST_F(FramebufferFormatsTest, RGBA4)
 {
     testTextureFormat(GL_RGBA4, 4, 4, 4, 4);
 }
 
-TEST_F(FramebufferFormatsTest, rgb565)
+TEST_F(FramebufferFormatsTest, RGB565)
 {
     testTextureFormat(GL_RGB565, 5, 6, 5, 0);
 }
 
-TEST_F(FramebufferFormatsTest, rgb8)
+TEST_F(FramebufferFormatsTest, RGB8)
 {
     testTextureFormat(GL_RGB8_OES, 8, 8, 8, 0);
 }
 
-TEST_F(FramebufferFormatsTest, bgra8)
+TEST_F(FramebufferFormatsTest, BGRA8)
 {
     testTextureFormat(GL_BGRA8_EXT, 8, 8, 8, 8);
 }
 
-TEST_F(FramebufferFormatsTest, rgba8)
+TEST_F(FramebufferFormatsTest, RGBA8)
 {
     testTextureFormat(GL_RGBA8_OES, 8, 8, 8, 8);
 }
diff --git a/tests/angle_tests/GLSLTest.cpp b/tests/angle_tests/GLSLTest.cpp
index 7f4983e..ea04478 100644
--- a/tests/angle_tests/GLSLTest.cpp
+++ b/tests/angle_tests/GLSLTest.cpp
@@ -30,7 +30,7 @@
     std::string mSimpleVSSource;
 };
 
-TEST_F(GLSLTest, nameless_scoped_structs)
+TEST_F(GLSLTest, NamelessScopedStructs)
 {
     const std::string fragmentShaderSource = SHADER_SOURCE
     (
@@ -51,7 +51,7 @@
     GLuint program = compileProgram(mSimpleVSSource, fragmentShaderSource);
     EXPECT_NE(0u, program);
 }
-TEST_F(GLSLTest, scoped_structs_order_bug)
+TEST_F(GLSLTest, ScopedStructsOrderBug)
 {
     const std::string fragmentShaderSource = SHADER_SOURCE
     (
@@ -83,7 +83,7 @@
     EXPECT_NE(0u, program);
 }
 
-TEST_F(GLSLTest, scoped_structs_bug)
+TEST_F(GLSLTest, ScopedStructsBug)
 {
     const std::string fragmentShaderSource = SHADER_SOURCE
     (
@@ -115,7 +115,7 @@
     EXPECT_NE(0u, program);
 }
 
-TEST_F(GLSLTest, dx_position_bug)
+TEST_F(GLSLTest, DxPositionBug)
 {
     const std::string &vertexShaderSource = SHADER_SOURCE
     (
diff --git a/tests/angle_tests/IncompleteTextureTest.cpp b/tests/angle_tests/IncompleteTextureTest.cpp
index 7499ef9..12ab673 100644
--- a/tests/angle_tests/IncompleteTextureTest.cpp
+++ b/tests/angle_tests/IncompleteTextureTest.cpp
@@ -76,7 +76,7 @@
     GLint mTextureUniformLocation;
 };
 
-TEST_F(IncompleteTextureTest, incomplete_texture_2d)
+TEST_F(IncompleteTextureTest, IncompleteTexture2D)
 {
     GLuint tex;
     glGenTextures(1, &tex);
@@ -110,7 +110,7 @@
     glDeleteTextures(1, &tex);
 }
 
-TEST_F(IncompleteTextureTest, update_texture)
+TEST_F(IncompleteTextureTest, UpdateTexture)
 {
     GLuint tex;
     glGenTextures(1, &tex);
diff --git a/tests/angle_tests/IndexedPointsTest.cpp b/tests/angle_tests/IndexedPointsTest.cpp
index 3989482..cf88ed0 100644
--- a/tests/angle_tests/IndexedPointsTest.cpp
+++ b/tests/angle_tests/IndexedPointsTest.cpp
@@ -125,51 +125,51 @@
 
 typedef IndexedPointsTest<GLubyte, GL_UNSIGNED_BYTE> IndexedPointsTestUByte;
 
-TEST_F(IndexedPointsTestUByte, unsigned_byte_offset_0)
+TEST_F(IndexedPointsTestUByte, UnsignedByteOffset0)
 {
     runTest(0);
 }
 
-TEST_F(IndexedPointsTestUByte, unsigned_byte_offset_1)
+TEST_F(IndexedPointsTestUByte, UnsignedByteOffset1)
 {
     runTest(1);
 }
 
-TEST_F(IndexedPointsTestUByte, unsigned_byte_offset_2)
+TEST_F(IndexedPointsTestUByte, UnsignedByteOffset2)
 {
     runTest(2);
 }
 
-TEST_F(IndexedPointsTestUByte, unsigned_byte_offset_3)
+TEST_F(IndexedPointsTestUByte, UnsignedByteOffset3)
 {
     runTest(3);
 }
 
 typedef IndexedPointsTest<GLushort, GL_UNSIGNED_SHORT> IndexedPointsTestUShort;
 
-TEST_F(IndexedPointsTestUShort, unsigned_short_offset_0)
+TEST_F(IndexedPointsTestUShort, UnsignedShortOffset0)
 {
     runTest(0);
 }
 
-TEST_F(IndexedPointsTestUShort, unsigned_short_offset_1)
+TEST_F(IndexedPointsTestUShort, UnsignedShortOffset1)
 {
     runTest(1);
 }
 
-TEST_F(IndexedPointsTestUShort, unsigned_short_offset_2)
+TEST_F(IndexedPointsTestUShort, UnsignedShortOffset2)
 {
     runTest(2);
 }
 
-TEST_F(IndexedPointsTestUShort, unsigned_short_offset_3)
+TEST_F(IndexedPointsTestUShort, UnsignedShortOffset3)
 {
     runTest(3);
 }
 
 typedef IndexedPointsTest<GLuint, GL_UNSIGNED_INT> IndexedPointsTestUInt;
 
-TEST_F(IndexedPointsTestUInt, unsigned_int_offset_0)
+TEST_F(IndexedPointsTestUInt, UnsignedIntOffset0)
 {
     if (getClientVersion() < 3 && !extensionEnabled("GL_OES_element_index_uint"))
     {
@@ -179,7 +179,7 @@
     runTest(0);
 }
 
-TEST_F(IndexedPointsTestUInt, unsigned_int_offset_1)
+TEST_F(IndexedPointsTestUInt, UnsignedIntOffset1)
 {
     if (getClientVersion() < 3 && !extensionEnabled("GL_OES_element_index_uint"))
     {
@@ -189,7 +189,7 @@
     runTest(1);
 }
 
-TEST_F(IndexedPointsTestUInt, unsigned_int_offset_2)
+TEST_F(IndexedPointsTestUInt, UnsignedIntOffset2)
 {
     if (getClientVersion() < 3 && !extensionEnabled("GL_OES_element_index_uint"))
     {
@@ -199,7 +199,7 @@
     runTest(2);
 }
 
-TEST_F(IndexedPointsTestUInt, unsigned_int_offset_3)
+TEST_F(IndexedPointsTestUInt, UnsignedIntOffset3)
 {
     if (getClientVersion() < 3 && !extensionEnabled("GL_OES_element_index_uint"))
     {
diff --git a/tests/angle_tests/LineLoopTest.cpp b/tests/angle_tests/LineLoopTest.cpp
index 17fc53e..4dd76a9 100644
--- a/tests/angle_tests/LineLoopTest.cpp
+++ b/tests/angle_tests/LineLoopTest.cpp
@@ -126,19 +126,19 @@
     GLint mColorLocation;
 };
 
-TEST_F(LineLoopTest, line_loop_ubyte_indices)
+TEST_F(LineLoopTest, LineLoopUByteIndices)
 {
     static const GLubyte indices[] = { 0, 7, 6, 9, 8, 0 };
     runTest(GL_UNSIGNED_BYTE, 0, indices + 1);
 }
 
-TEST_F(LineLoopTest, line_loop_ushort_indices)
+TEST_F(LineLoopTest, LineLoopUShortIndices)
 {
     static const GLushort indices[] = { 0, 7, 6, 9, 8, 0 };
     runTest(GL_UNSIGNED_SHORT, 0, indices + 1);
 }
 
-TEST_F(LineLoopTest, line_loop_uint_indices)
+TEST_F(LineLoopTest, LineLoopUIntIndices)
 {
     if (!extensionEnabled("GL_OES_element_index_uint"))
     {
@@ -149,7 +149,7 @@
     runTest(GL_UNSIGNED_INT, 0, indices + 1);
 }
 
-TEST_F(LineLoopTest, line_loop_ubyte_index_buffer)
+TEST_F(LineLoopTest, LineLoopUByteIndexBuffer)
 {
     static const GLubyte indices[] = { 0, 7, 6, 9, 8, 0 };
 
@@ -163,7 +163,7 @@
     glDeleteBuffers(1, &buf);
 }
 
-TEST_F(LineLoopTest, line_loop_ushort_index_buffer)
+TEST_F(LineLoopTest, LineLoopUShortIndexBuffer)
 {
     static const GLushort indices[] = { 0, 7, 6, 9, 8, 0 };
 
@@ -177,7 +177,7 @@
     glDeleteBuffers(1, &buf);
 }
 
-TEST_F(LineLoopTest, line_loop_uint_index_buffer)
+TEST_F(LineLoopTest, LineLoopUIntIndexBuffer)
 {
     if (!extensionEnabled("GL_OES_element_index_uint"))
     {
diff --git a/tests/angle_tests/MaxTextureSizeTest.cpp b/tests/angle_tests/MaxTextureSizeTest.cpp
index 84fc281..4dabce2 100644
--- a/tests/angle_tests/MaxTextureSizeTest.cpp
+++ b/tests/angle_tests/MaxTextureSizeTest.cpp
@@ -86,7 +86,7 @@
     GLint mMaxRenderbufferSize;
 };
 
-TEST_F(MaxTextureSizeTest, specification_tex_image)
+TEST_F(MaxTextureSizeTest, SpecificationTexImage)
 {
     GLuint tex;
     glGenTextures(1, &tex);
@@ -141,7 +141,7 @@
     }
 }
 
-TEST_F(MaxTextureSizeTest, specification_tex_storage)
+TEST_F(MaxTextureSizeTest, SpecificationTexStorage)
 {
     if (getClientVersion() < 3 && (!extensionEnabled("GL_EXT_texture_storage") || !extensionEnabled("GL_OES_rgb8_rgba8")))
     {
@@ -211,7 +211,7 @@
     }
 }
 
-TEST_F(MaxTextureSizeTest, render_to_texture)
+TEST_F(MaxTextureSizeTest, RenderToTexture)
 {
     GLuint fbo = 0;
     GLuint textureId = 0;
diff --git a/tests/angle_tests/OcclusionQueriesTest.cpp b/tests/angle_tests/OcclusionQueriesTest.cpp
index 137bcd2..d56a139 100644
--- a/tests/angle_tests/OcclusionQueriesTest.cpp
+++ b/tests/angle_tests/OcclusionQueriesTest.cpp
@@ -55,7 +55,7 @@
     GLuint mProgram;
 };
 
-TEST_F(OcclusionQueriesTest, is_occuluded)
+TEST_F(OcclusionQueriesTest, IsOccluded)
 {
     glDepthMask(GL_TRUE);
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
@@ -95,7 +95,7 @@
     EXPECT_EQ(result, GL_FALSE);
 }
 
-TEST_F(OcclusionQueriesTest, is_not_occuluded)
+TEST_F(OcclusionQueriesTest, IsNotOccluded)
 {
     glDepthMask(GL_TRUE);
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
@@ -122,7 +122,7 @@
     EXPECT_EQ(result, GL_TRUE);
 }
 
-TEST_F(OcclusionQueriesTest, errors)
+TEST_F(OcclusionQueriesTest, Errors)
 {
     glDepthMask(GL_TRUE);
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
diff --git a/tests/angle_tests/PBOExtensionTest.cpp b/tests/angle_tests/PBOExtensionTest.cpp
index 73eae71..a6547e8 100755
--- a/tests/angle_tests/PBOExtensionTest.cpp
+++ b/tests/angle_tests/PBOExtensionTest.cpp
@@ -73,7 +73,7 @@
     GLuint mPositionVBO;
 };
 
-TEST_F(PBOExtensionTest, pbo_with_other_target)
+TEST_F(PBOExtensionTest, PBOWithOtherTarget)
 {
     if (extensionEnabled("NV_pixel_buffer_object"))
     {
@@ -101,7 +101,7 @@
     EXPECT_GL_NO_ERROR();
 }
 
-TEST_F(PBOExtensionTest, pbo_with_existing_data)
+TEST_F(PBOExtensionTest, PBOWithExistingData)
 {
     if (extensionEnabled("NV_pixel_buffer_object"))
     {
diff --git a/tests/angle_tests/ProgramBinaryTest.cpp b/tests/angle_tests/ProgramBinaryTest.cpp
index 28158ca..de2d99d 100644
--- a/tests/angle_tests/ProgramBinaryTest.cpp
+++ b/tests/angle_tests/ProgramBinaryTest.cpp
@@ -62,7 +62,7 @@
 
 // This tests the assumption that float attribs of different size
 // should not internally cause a vertex shader recompile (for conversion).
-TEST_F(ProgramBinaryTest, float_dynamic_shader_size)
+TEST_F(ProgramBinaryTest, FloatDynamicShaderSize)
 {
     glUseProgram(mProgram);
     glBindBuffer(GL_ARRAY_BUFFER, mBuffer);
diff --git a/tests/angle_tests/ReadPixelsTest.cpp b/tests/angle_tests/ReadPixelsTest.cpp
index 70efe99..93b22c5 100644
--- a/tests/angle_tests/ReadPixelsTest.cpp
+++ b/tests/angle_tests/ReadPixelsTest.cpp
@@ -84,7 +84,7 @@
     GLuint mPositionVBO;
 };
 
-TEST_F(ReadPixelsTest, out_of_bounds)
+TEST_F(ReadPixelsTest, OutOfBounds)
 {
     glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
     glClear(GL_COLOR_BUFFER_BIT);
@@ -117,7 +117,7 @@
     }
 }
 
-TEST_F(ReadPixelsTest, pbo_with_other_target)
+TEST_F(ReadPixelsTest, PBOWithOtherTarget)
 {
     glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
     glClear(GL_COLOR_BUFFER_BIT);
@@ -142,7 +142,7 @@
     EXPECT_GL_NO_ERROR();
 }
 
-TEST_F(ReadPixelsTest, pbo_with_existing_data)
+TEST_F(ReadPixelsTest, PBOWithExistingData)
 {
     // Clear backbuffer to red
     glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
@@ -180,7 +180,7 @@
     EXPECT_GL_NO_ERROR();
 }
 
-TEST_F(ReadPixelsTest, pbo_and_sub_data)
+TEST_F(ReadPixelsTest, PBOAndSubData)
 {
     glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
     glClear(GL_COLOR_BUFFER_BIT);
@@ -208,7 +208,7 @@
     EXPECT_GL_NO_ERROR();
 }
 
-TEST_F(ReadPixelsTest, pbo_and_sub_data_offset)
+TEST_F(ReadPixelsTest, PBOAndSubDataOffset)
 {
     glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
     glClear(GL_COLOR_BUFFER_BIT);
@@ -241,7 +241,7 @@
     EXPECT_GL_NO_ERROR();
 }
 
-TEST_F(ReadPixelsTest, draw_with_pbo)
+TEST_F(ReadPixelsTest, DrawWithPBO)
 {
     unsigned char data[4] = { 1, 2, 3, 4 };
 
diff --git a/tests/angle_tests/SRGBTextureTest.cpp b/tests/angle_tests/SRGBTextureTest.cpp
index 090b2c2..b00d5ae 100644
--- a/tests/angle_tests/SRGBTextureTest.cpp
+++ b/tests/angle_tests/SRGBTextureTest.cpp
@@ -24,7 +24,7 @@
     }
 };
 
-TEST_F(SRGBTextureTest, srgb_validation)
+TEST_F(SRGBTextureTest, SRGBValidation)
 {
     bool supported = extensionEnabled("GL_EXT_sRGB") || getClientVersion() == 3;
 
@@ -52,7 +52,7 @@
     glDeleteTextures(1, &tex);
 }
 
-TEST_F(SRGBTextureTest, srgba_validation)
+TEST_F(SRGBTextureTest, SRGBAValidation)
 {
     bool supported = extensionEnabled("GL_EXT_sRGB") || getClientVersion() == 3;
 
@@ -87,7 +87,7 @@
     glDeleteTextures(1, &tex);
 }
 
-TEST_F(SRGBTextureTest, srgba_renderbuffer)
+TEST_F(SRGBTextureTest, SRGBARenderbuffer)
 {
     bool supported = extensionEnabled("GL_EXT_sRGB") || getClientVersion() == 3;
 
diff --git a/tests/angle_tests/SwizzleTest.cpp b/tests/angle_tests/SwizzleTest.cpp
index 8fdd9f2..8192f68 100644
--- a/tests/angle_tests/SwizzleTest.cpp
+++ b/tests/angle_tests/SwizzleTest.cpp
@@ -181,77 +181,77 @@
     std::vector<swizzlePermutation> mPermutations;
 };
 
-TEST_F(SwizzleTest, rgba8_2d)
+TEST_F(SwizzleTest, RGBA8_2D)
 {
     GLubyte data[] = { 1, 64, 128, 200 };
     init2DTexture(GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, rgb8_2d)
+TEST_F(SwizzleTest, RGB8_2D)
 {
     GLubyte data[] = { 77, 66, 55 };
     init2DTexture(GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, rg8_2d)
+TEST_F(SwizzleTest, RG8_2D)
 {
     GLubyte data[] = { 11, 99 };
     init2DTexture(GL_RG8, GL_RG, GL_UNSIGNED_BYTE, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, r8_2d)
+TEST_F(SwizzleTest, R8_2D)
 {
     GLubyte data[] = { 2 };
     init2DTexture<GLubyte>(GL_R8, GL_RED, GL_UNSIGNED_BYTE, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, rgba32f_2d)
+TEST_F(SwizzleTest, RGBA32F_2D)
 {
     GLfloat data[] = { 0.25f, 0.5f, 0.75f, 0.8f };
     init2DTexture(GL_RGBA32F, GL_RGBA, GL_FLOAT, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, rgb32f_2d)
+TEST_F(SwizzleTest, RGB32F_2D)
 {
     GLfloat data[] = { 0.1f, 0.2f, 0.3f };
     init2DTexture(GL_RGB32F, GL_RGB, GL_FLOAT, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, rg32f_2d)
+TEST_F(SwizzleTest, RG32F_2D)
 {
     GLfloat data[] = { 0.9f, 0.1f  };
     init2DTexture(GL_RG32F, GL_RG, GL_FLOAT, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, r32f_2d)
+TEST_F(SwizzleTest, R32F_2D)
 {
     GLfloat data[] = { 0.5f };
     init2DTexture(GL_R32F, GL_RED, GL_FLOAT, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, d32f_2d)
+TEST_F(SwizzleTest, D32F_2D)
 {
     GLfloat data[] = { 0.5f };
     init2DTexture(GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, d16_2d)
+TEST_F(SwizzleTest, D16_2D)
 {
     GLushort data[] = { 0xFF };
     init2DTexture(GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, data);
     runTest2D();
 }
 
-TEST_F(SwizzleTest, d24_2d)
+TEST_F(SwizzleTest, D24_2D)
 {
     GLuint data[] = { 0xFFFF };
     init2DTexture(GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, data);
@@ -260,7 +260,7 @@
 
 #include "media/pixel.inl"
 
-TEST_F(SwizzleTest, compressed_dxt_2d)
+TEST_F(SwizzleTest, CompressedDXT_2D)
 {
     init2DCompressedTexture(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height, pixel_0_size, pixel_0_data);
     runTest2D();
diff --git a/tests/angle_tests/TextureTest.cpp b/tests/angle_tests/TextureTest.cpp
index 0fb046c..8d16b36 100644
--- a/tests/angle_tests/TextureTest.cpp
+++ b/tests/angle_tests/TextureTest.cpp
@@ -96,7 +96,7 @@
     GLint mTexture2DUniformLocation;
 };
 
-TEST_F(TextureTest, negative_api_subimage)
+TEST_F(TextureTest, NegativeAPISubImage)
 {
     glBindTexture(GL_TEXTURE_2D, mTexture2D);
     EXPECT_GL_ERROR(GL_NO_ERROR);
@@ -106,7 +106,7 @@
     EXPECT_GL_ERROR(GL_INVALID_VALUE);
 }
 
-TEST_F(TextureTest, zero_sized_uploads)
+TEST_F(TextureTest, ZeroSizedUploads)
 {
     glBindTexture(GL_TEXTURE_2D, mTexture2D);
     EXPECT_GL_ERROR(GL_NO_ERROR);
@@ -129,7 +129,7 @@
 }
 
 // Test drawing with two texture types, to trigger an ANGLE bug in validation
-TEST_F(TextureTest, cube_map_bug)
+TEST_F(TextureTest, CubeMapBug)
 {
     glActiveTexture(GL_TEXTURE0);
     glBindTexture(GL_TEXTURE_2D, mTexture2D);
diff --git a/tests/angle_tests/UnpackAlignmentTest.cpp b/tests/angle_tests/UnpackAlignmentTest.cpp
index 69c8269..5cf754c 100644
--- a/tests/angle_tests/UnpackAlignmentTest.cpp
+++ b/tests/angle_tests/UnpackAlignmentTest.cpp
@@ -133,7 +133,7 @@
     GLuint mProgram;
 };
 
-TEST_F(UnpackAlignmentTest, default_alignment)
+TEST_F(UnpackAlignmentTest, DefaultAlignment)
 {
     GLint defaultAlignment;
     glGetIntegerv(GL_UNPACK_ALIGNMENT, &defaultAlignment);
@@ -141,165 +141,165 @@
 }
 
 
-TEST_F(UnpackAlignmentTest, alignment_1_rgba_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment1RGBAUByte)
 {
     testAlignment(1, 7 * 4, GL_RGBA, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_1_rgb_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment1RGBUByte)
 {
     testAlignment(1, 7 * 3, GL_RGB, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_1_rgba_ushort4444)
+TEST_F(UnpackAlignmentTest, Alignment1RGBAUShort4444)
 {
     testAlignment(1, 7 * 2, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_1_rgba_ushort5551)
+TEST_F(UnpackAlignmentTest, Alignment1RGBAUShort5551)
 {
     testAlignment(1, 7 * 2, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_1_rgb_ushort565)
+TEST_F(UnpackAlignmentTest, Alignment1RGBAUShort565)
 {
     testAlignment(1, 7 * 2, GL_RGB, GL_UNSIGNED_SHORT_5_6_5);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_1_la_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment1LAUByte)
 {
     testAlignment(1, 7 * 2, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_1_l_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment1LUByte)
 {
     testAlignment(1, 7, GL_LUMINANCE, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_1_a_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment1AUByte)
 {
     testAlignment(1, 7, GL_ALPHA, GL_UNSIGNED_BYTE);
 }
 
 
-TEST_F(UnpackAlignmentTest, alignment_2_rgba_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment2RGBAUByte)
 {
     testAlignment(2, 7 * 4, GL_RGBA, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_2_rgb_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment2RGBUByte)
 {
     testAlignment(2, 7 * 3 + 1, GL_RGB, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_2_rgba_ushort4444)
+TEST_F(UnpackAlignmentTest, Alignment2RGBAUShort4444)
 {
     testAlignment(2, 7 * 2, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_2_rgba_ushort5551)
+TEST_F(UnpackAlignmentTest, Alignment2RGBAUShort5551)
 {
     testAlignment(2, 7 * 2, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_2_rgb_ushort565)
+TEST_F(UnpackAlignmentTest, Alignment2RGBAUShort565)
 {
     testAlignment(2, 7 * 2, GL_RGB, GL_UNSIGNED_SHORT_5_6_5);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_2_la_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment2LAUByte)
 {
     testAlignment(2, 7 * 2, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_2_l_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment2LAByte)
 {
     testAlignment(2, 7 + 1, GL_LUMINANCE, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_2_a_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment2AUByte)
 {
     testAlignment(2, 7 + 1, GL_ALPHA, GL_UNSIGNED_BYTE);
 }
 
 
-TEST_F(UnpackAlignmentTest, alignment_4_rgba_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment4RGBAUByte)
 {
     testAlignment(4, 7 * 4, GL_RGBA, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_4_rgb_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment4RGBUByte)
 {
     testAlignment(4, 7 * 3 + 3, GL_RGB, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_4_rgba_ushort4444)
+TEST_F(UnpackAlignmentTest, Alignment4RGBAUShort4444)
 {
     testAlignment(4, 7 * 2 + 2, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_4_rgba_ushort5551)
+TEST_F(UnpackAlignmentTest, Alignment4RGBAUShort5551)
 {
     testAlignment(4, 7 * 2 + 2, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_4_rgb_ushort565)
+TEST_F(UnpackAlignmentTest, Alignment4RGBAUShort565)
 {
     testAlignment(4, 7 * 2 + 2, GL_RGB, GL_UNSIGNED_SHORT_5_6_5);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_4_la_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment4LAUByte)
 {
     testAlignment(4, 7 * 2 + 2, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_4_l_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment4LUByte)
 {
     testAlignment(4, 7 + 1, GL_LUMINANCE, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_4_a_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment4AUByte)
 {
     testAlignment(4, 7 + 1, GL_ALPHA, GL_UNSIGNED_BYTE);
 }
 
 
-TEST_F(UnpackAlignmentTest, alignment_8_rgba_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment8RGBAUByte)
 {
     testAlignment(8, 7 * 4 + 4, GL_RGBA, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_8_rgb_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment8RGBUByte)
 {
     testAlignment(8, 7 * 3 + 3, GL_RGB, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_8_rgba_ushort4444)
+TEST_F(UnpackAlignmentTest, Alignment8RGBAUShort4444)
 {
     testAlignment(8, 7 * 2 + 2, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_8_rgba_ushort5551)
+TEST_F(UnpackAlignmentTest, Alignment8RGBAUShort5551)
 {
     testAlignment(8, 7 * 2 + 2, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_8_rgb_ushort565)
+TEST_F(UnpackAlignmentTest, Alignment8RGBAUShort565)
 {
     testAlignment(8, 7 * 2 + 2, GL_RGB, GL_UNSIGNED_SHORT_5_6_5);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_8_la_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment8LAUByte)
 {
     testAlignment(8, 7 * 2 + 2, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_8_l_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment8LUByte)
 {
     testAlignment(8, 7 + 1, GL_LUMINANCE, GL_UNSIGNED_BYTE);
 }
 
-TEST_F(UnpackAlignmentTest, alignment_8_a_ubyte)
+TEST_F(UnpackAlignmentTest, Alignment8AUByte)
 {
     testAlignment(8, 7 + 1, GL_ALPHA, GL_UNSIGNED_BYTE);
 }
diff --git a/tests/angle_tests/VertexAttributeTest.cpp b/tests/angle_tests/VertexAttributeTest.cpp
index 0adc403..d8acd22 100644
--- a/tests/angle_tests/VertexAttributeTest.cpp
+++ b/tests/angle_tests/VertexAttributeTest.cpp
@@ -118,7 +118,7 @@
     GLint mExpectedAttrib;
 };
 
-TEST_F(VertexAttributeTest, unsigned_byte_unormalized)
+TEST_F(VertexAttributeTest, UnsignedByteUnnormalized)
 {
     GLubyte inputData[mVertexCount] = { 0, 1, 2, 3, 4, 5, 6, 7, 125, 126, 127, 128, 129, 250, 251, 252, 253, 254, 255 };
     GLfloat expectedData[mVertexCount];
@@ -131,7 +131,7 @@
     runTest(data);
 }
 
-TEST_F(VertexAttributeTest, unsigned_byte_normalized)
+TEST_F(VertexAttributeTest, UnsignedByteNormalized)
 {
     GLubyte inputData[mVertexCount] = { 0, 1, 2, 3, 4, 5, 6, 7, 125, 126, 127, 128, 129, 250, 251, 252, 253, 254, 255 };
     GLfloat expectedData[mVertexCount];
@@ -144,7 +144,7 @@
     runTest(data);
 }
 
-TEST_F(VertexAttributeTest, byte_unnormalized)
+TEST_F(VertexAttributeTest, ByteUnnormalized)
 {
     GLbyte inputData[mVertexCount] = { 0, 1, 2, 3, 4, -1, -2, -3, -4, 125, 126, 127, -128, -127, -126 };
     GLfloat expectedData[mVertexCount];
@@ -157,7 +157,7 @@
     runTest(data);
 }
 
-TEST_F(VertexAttributeTest, byte_normalized)
+TEST_F(VertexAttributeTest, ByteNormalized)
 {
     GLbyte inputData[mVertexCount] = { 0, 1, 2, 3, 4, -1, -2, -3, -4, 125, 126, 127, -128, -127, -126 };
     GLfloat expectedData[mVertexCount];
@@ -170,7 +170,7 @@
     runTest(data);
 }
 
-TEST_F(VertexAttributeTest, unsigned_short_unormalized)
+TEST_F(VertexAttributeTest, UnsignedShortUnnormalized)
 {
     GLushort inputData[mVertexCount] = { 0, 1, 2, 3, 254, 255, 256, 32766, 32767, 32768, 65533, 65534, 65535 };
     GLfloat expectedData[mVertexCount];
@@ -183,7 +183,7 @@
     runTest(data);
 }
 
-TEST_F(VertexAttributeTest, unsigned_short_normalized)
+TEST_F(VertexAttributeTest, UnsignedShortNormalized)
 {
     GLushort inputData[mVertexCount] = { 0, 1, 2, 3, 254, 255, 256, 32766, 32767, 32768, 65533, 65534, 65535 };
     GLfloat expectedData[mVertexCount];
@@ -196,7 +196,7 @@
     runTest(data);
 }
 
-TEST_F(VertexAttributeTest, short_unnormalized)
+TEST_F(VertexAttributeTest, ShortUnnormalized)
 {
     GLshort inputData[mVertexCount] = {  0, 1, 2, 3, -1, -2, -3, -4, 32766, 32767, -32768, -32767, -32766 };
     GLfloat expectedData[mVertexCount];
@@ -209,7 +209,7 @@
     runTest(data);
 }
 
-TEST_F(VertexAttributeTest, short_normalized)
+TEST_F(VertexAttributeTest, ShortNormalized)
 {
     GLshort inputData[mVertexCount] = {  0, 1, 2, 3, -1, -2, -3, -4, 32766, 32767, -32768, -32767, -32766 };
     GLfloat expectedData[mVertexCount];
