]> git.tdb.fi Git - libs/gl.git/commitdiff
Make the GLSL compiler test runner able to verify non-error diagnostics
authorMikko Rasa <tdb@tdb.fi>
Wed, 7 Apr 2021 20:48:04 +0000 (23:48 +0300)
committerMikko Rasa <tdb@tdb.fi>
Wed, 7 Apr 2021 20:50:26 +0000 (23:50 +0300)
tests/glsl/glslcompiler.cpp

index 8d3fe532c2eb818a6e0123c8505e0a0545064c8f..01c1fba28e2e4fe90d0f2268a485538fd671f258 100644 (file)
@@ -17,7 +17,10 @@ protected:
                Msp::GL::SL::Compiler::Mode compile_mode;
                std::map<std::string, int> spec_values;
                std::map<Msp::GL::SL::Stage::Type, std::string> expected_output;
-               std::string expected_error;
+               std::string expected_diagnostic;
+               bool expect_success;
+
+               TestCase(): expect_success(true) { }
        };
 
        std::list<TestCase> 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);
 }