framework/shader_test.py: Replace ShaderTest class with function

This replaces the ShaderTest class with a shader_test function that
returns a PlainExecTest instance. The reason to make this transition is
simple, ShaderTest never actually modified any of the methods in
PlainExecTest, it never needed to be a class, making it a function
reduces the amount of code required, vastly reduces the complexity of
the code, and makes testing much simpler.

This also removes the dmesg_test for ShaderTest, since shader_test just
returns a PlainExecTest, there isn't any reason for dmesg to test it
specially.

Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com>
shader_tests_tests.py: Adds some tests for the shader_test module

This adds a couple of tests for the regex searches in
shader_test.shader_test(), and some simple tests for the
add_shader_test* functions.

Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com>
Replace end_config with 'end config' in glsl parser tests

The example glsl parser test doesn't list end_config as acceptable, and
there are only 5 tests using end_config, so it makes sense to just fix
those tests rather than generating slower more complicated regex for
handling end_config.
glsl_parser_test.py: Remove standalone functionality.

This removes the standalone run functionality from glsl_parser_test.
Like shader_test this probably made sense as a development option, but
at this point it's just dead code.
glsl_parser_test.py: Replace GLSLParserTest with function

This is a rough 'port' of the class to a function. It deviates only to
make idiomatic changes and to remove references to self. With a few
exceptions. The class always returned a result when something went
wrong, this function raises an exception. Some of these cases can
probably be better handled, but returning a result seems like the wrong
decision, these should either be handled or excepted.
glsl_parser_test.py: Vastly simplify the way the config is parsed

This reduces the complexity of the code that searches for config section
and writes it into a StringIO. The new code just looks for a comment
followed by [config] to open the section and a comment followed by [end
config] to close it. It naively slurps up everything in between.
Adds some tests for glsl_parser_tests.py