From d15d024da1bf3513abbcbe3cad164b70e3babad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 30 Oct 2020 17:23:44 +0100 Subject: [PATCH] ShaderTools: check for PreprocessOnly also in validate*(). --- src/Magnum/ShaderTools/AbstractConverter.cpp | 4 ++ .../Test/AbstractConverterTest.cpp | 44 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/Magnum/ShaderTools/AbstractConverter.cpp b/src/Magnum/ShaderTools/AbstractConverter.cpp index 4458b695b..1beb86acf 100644 --- a/src/Magnum/ShaderTools/AbstractConverter.cpp +++ b/src/Magnum/ShaderTools/AbstractConverter.cpp @@ -162,6 +162,8 @@ void AbstractConverter::doSetDebugInfoLevel(Containers::StringView) { std::pair AbstractConverter::validateData(const Stage stage, const Containers::ArrayView data) { CORRADE_ASSERT(features() & ConverterFeature::ValidateData, "ShaderTools::AbstractConverter::validateData(): feature not supported", {}); + CORRADE_ASSERT(!(_flags & ConverterFlag::PreprocessOnly), + "ShaderTools::AbstractConverter::validateData(): PreprocessOnly is not allowed in combination with validation", {}); /* Cast to a non-void type for more convenience */ std::pair out = doValidateData(stage, Containers::arrayCast(data)); @@ -177,6 +179,8 @@ std::pair AbstractConverter::doValidateData(Stage, Con std::pair AbstractConverter::validateFile(const Stage stage, const Containers::StringView filename) { CORRADE_ASSERT(features() & (ConverterFeature::ValidateFile|ConverterFeature::ValidateData), "ShaderTools::AbstractConverter::validateFile(): feature not supported", {}); + CORRADE_ASSERT(!(_flags & ConverterFlag::PreprocessOnly), + "ShaderTools::AbstractConverter::validateFile(): PreprocessOnly is not allowed in combination with validation", {}); std::pair out; diff --git a/src/Magnum/ShaderTools/Test/AbstractConverterTest.cpp b/src/Magnum/ShaderTools/Test/AbstractConverterTest.cpp index 26de2be6c..6c0833277 100644 --- a/src/Magnum/ShaderTools/Test/AbstractConverterTest.cpp +++ b/src/Magnum/ShaderTools/Test/AbstractConverterTest.cpp @@ -69,6 +69,7 @@ struct AbstractConverterTest: TestSuite::Tester { void validateData(); void validateDataNotSupported(); void validateDataNotImplemented(); + void validateDataPreprocessOnly(); void validateDataCustomStringDeleter(); void validateFile(); @@ -76,6 +77,7 @@ struct AbstractConverterTest: TestSuite::Tester { void validateFileAsDataNotFound(); void validateFileNotSupported(); void validateFileNotImplemented(); + void validateFilePreprocessOnly(); void validateFileCustomStringDeleter(); void convertDataToData(); @@ -207,6 +209,7 @@ AbstractConverterTest::AbstractConverterTest() { &AbstractConverterTest::validateData, &AbstractConverterTest::validateDataNotSupported, &AbstractConverterTest::validateDataNotImplemented, + &AbstractConverterTest::validateDataPreprocessOnly, &AbstractConverterTest::validateDataCustomStringDeleter, &AbstractConverterTest::validateFile, @@ -214,6 +217,7 @@ AbstractConverterTest::AbstractConverterTest() { &AbstractConverterTest::validateFileAsDataNotFound, &AbstractConverterTest::validateFileNotSupported, &AbstractConverterTest::validateFileNotImplemented, + &AbstractConverterTest::validateFilePreprocessOnly, &AbstractConverterTest::validateFileCustomStringDeleter, &AbstractConverterTest::convertDataToData, @@ -712,6 +716,26 @@ void AbstractConverterTest::validateDataNotImplemented() { CORRADE_COMPARE(out.str(), "ShaderTools::AbstractConverter::validateData(): feature advertised but not implemented\n"); } +void AbstractConverterTest::validateDataPreprocessOnly() { + #ifdef CORRADE_NO_ASSERT + CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); + #endif + + struct: AbstractConverter { + ConverterFeatures doFeatures() const override { + return ConverterFeature::ValidateData|ConverterFeature::Preprocess; + } + void doSetInputFormat(Format, Containers::StringView) override {} + void doSetOutputFormat(Format, Containers::StringView) override {} + } converter; + + std::ostringstream out; + Error redirectError{&out}; + converter.setFlags(ConverterFlag::PreprocessOnly); + converter.validateData({}, {}); + CORRADE_COMPARE(out.str(), "ShaderTools::AbstractConverter::validateData(): PreprocessOnly is not allowed in combination with validation\n"); +} + void AbstractConverterTest::validateDataCustomStringDeleter() { #ifdef CORRADE_NO_ASSERT CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); @@ -838,6 +862,26 @@ void AbstractConverterTest::validateFileNotImplemented() { CORRADE_COMPARE(out.str(), "ShaderTools::AbstractConverter::validateFile(): feature advertised but not implemented\n"); } +void AbstractConverterTest::validateFilePreprocessOnly() { + #ifdef CORRADE_NO_ASSERT + CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions"); + #endif + + struct: AbstractConverter { + ConverterFeatures doFeatures() const override { + return ConverterFeature::ValidateFile|ConverterFeature::Preprocess; + } + void doSetInputFormat(Format, Containers::StringView) override {} + void doSetOutputFormat(Format, Containers::StringView) override {} + } converter; + + std::ostringstream out; + Error redirectError{&out}; + converter.setFlags(ConverterFlag::PreprocessOnly); + converter.validateFile({}, {}); + CORRADE_COMPARE(out.str(), "ShaderTools::AbstractConverter::validateFile(): PreprocessOnly is not allowed in combination with validation\n"); +} + void AbstractConverterTest::validateFileCustomStringDeleter() { #ifdef CORRADE_NO_ASSERT CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");