X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=tests%2Fglsl%2Fglslcompiler.cpp;h=01c1fba28e2e4fe90d0f2268a485538fd671f258;hb=594f5277e988a5a7b3b4ae381993da68ed733733;hp=371df6cc48f0fd1d738681627b4b7399e996c2ba;hpb=fb5f83c2e3f8f8a6a6444a33bec15e9477a487d1;p=libs%2Fgl.git diff --git a/tests/glsl/glslcompiler.cpp b/tests/glsl/glslcompiler.cpp index 371df6cc..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) @@ -228,7 +234,7 @@ GlslCompilerTest::GlslCompilerTest() void GlslCompilerTest::run_test_case(const TestCase *test_case) { - GL::SL::Compiler compiler(GL::SL::Features::all()); + GL::SL::Compiler compiler(GL::SL::Features::latest()); try { compiler.set_source(test_case->source, ""); @@ -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,19 +285,19 @@ 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); } void GlslCompilerIdempotence::run_test_case(const TestCase *test_case) { - GL::SL::Compiler compiler(GL::SL::Features::all()); + GL::SL::Compiler compiler(GL::SL::Features::latest()); compiler.set_source(test_case->source, ""); if(test_case->compile_mode==GL::SL::Compiler::PROGRAM) compiler.specialize(test_case->spec_values); compiler.compile(test_case->compile_mode); - GL::SL::Compiler compiler2(GL::SL::Features::all()); + GL::SL::Compiler compiler2(GL::SL::Features::latest()); compiler2.set_source(compiler.get_combined_glsl(), ""); compiler2.compile(test_case->compile_mode);