From: Mikko Rasa Date: Wed, 7 Apr 2021 20:48:04 +0000 (+0300) Subject: Make the GLSL compiler test runner able to verify non-error diagnostics X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=7563b92050d7c249c9ce848c1310dbfb993eadb7 Make the GLSL compiler test runner able to verify non-error diagnostics --- diff --git a/tests/glsl/glslcompiler.cpp b/tests/glsl/glslcompiler.cpp index 8d3fe532..01c1fba2 100644 --- a/tests/glsl/glslcompiler.cpp +++ b/tests/glsl/glslcompiler.cpp @@ -17,7 +17,10 @@ protected: Msp::GL::SL::Compiler::Mode compile_mode; std::map spec_values; std::map expected_output; - std::string expected_error; + std::string expected_diagnostic; + bool expect_success; + + TestCase(): expect_success(true) { } }; std::list test_cases; @@ -26,7 +29,7 @@ protected: const TestCase &load_test_case(const std::string &); void verify_output(const std::string &, const std::string &); - void verify_error(const std::string &, const std::string &); + void verify_diagnostic(const std::string &, const std::string &); std::string extract_line(const std::string &, const std::string::const_iterator &); virtual void fail(const std::string &) = 0; }; @@ -98,9 +101,12 @@ const GlslCompilerHelper::TestCase &GlslCompilerHelper::load_test_case(const str } pos = line.find("Expected error:"); + if(pos==string::npos) + pos = line.find("Expected diagnostic:"); if(pos!=string::npos) { - target = &test_case.expected_error; + target = &test_case.expected_diagnostic; + test_case.expect_success = (line[pos+9]!='e'); continue; } @@ -166,7 +172,7 @@ void GlslCompilerHelper::verify_output(const string &output, const string &expec } } -void GlslCompilerHelper::verify_error(const string &output, const string &expected) +void GlslCompilerHelper::verify_diagnostic(const string &output, const string &expected) { auto i = output.begin(); auto j = expected.begin(); @@ -192,7 +198,7 @@ void GlslCompilerHelper::verify_error(const string &output, const string &expect { string out_line = extract_line(output, i); string expect_line = extract_line(expected, j); - fail(format("Incorrect error line:\n%s\nExpected:\n%s", out_line, expect_line)); + fail(format("Incorrect diagnostic line:\n%s\nExpected:\n%s", out_line, expect_line)); } } @@ -202,9 +208,9 @@ void GlslCompilerHelper::verify_error(const string &output, const string &expect ++j; if(i!=output.end()) - fail(format("Extra error line: %s", extract_line(output, i))); + fail(format("Extra diagnostic line: %s", extract_line(output, i))); if(j!=expected.end()) - fail(format("Missing error line: %s", extract_line(expected, j))); + fail(format("Missing diagnostic line: %s", extract_line(expected, j))); } string GlslCompilerHelper::extract_line(const string &text, const string::const_iterator &iter) @@ -238,19 +244,21 @@ void GlslCompilerTest::run_test_case(const TestCase *test_case) } catch(const GL::SL::invalid_shader_source &exc) { - if(!test_case->expected_error.empty()) + if(!test_case->expect_success) { debug("Errors from compile:"); debug(exc.what()); - verify_error(exc.what(), test_case->expected_error); + verify_diagnostic(exc.what(), test_case->expected_diagnostic); return; } throw; } - if(!test_case->expected_error.empty()) + if(!test_case->expect_success) fail("Error expected but none thrown"); + verify_diagnostic(compiler.get_diagnostics(), test_case->expected_diagnostic); + auto stages = compiler.get_stages(); for(auto s: stages) { @@ -277,7 +285,7 @@ GlslCompilerIdempotence::GlslCompilerIdempotence() { load_all_test_cases("glsl"); for(const auto &tc: test_cases) - if(tc.expected_error.empty()) + if(tc.expect_success) add(&GlslCompilerIdempotence::run_test_case, &tc, tc.name); }