Browse Source

ShaderTools: expand verbosity levels, add warnings as errors.

pull/481/head
Vladimír Vondruš 6 years ago
parent
commit
7ee589552f
  1. 9
      src/Magnum/ShaderTools/AbstractConverter.cpp
  2. 16
      src/Magnum/ShaderTools/AbstractConverter.h
  3. 21
      src/Magnum/ShaderTools/Test/AbstractConverterTest.cpp

9
src/Magnum/ShaderTools/AbstractConverter.cpp

@ -84,6 +84,8 @@ ConverterFeatures AbstractConverter::features() const {
} }
void AbstractConverter::setFlags(const ConverterFlags flags) { void AbstractConverter::setFlags(const ConverterFlags flags) {
CORRADE_ASSERT(!(flags & ConverterFlag::Quiet) != !(flags & ConverterFlag::Verbose),
"ShaderTools::AbstractConverter::setFeatures(): can't have both Quiet and Verbose set", );
_flags = flags; _flags = flags;
doSetFlags(flags); doSetFlags(flags);
} }
@ -642,7 +644,9 @@ Debug& operator<<(Debug& debug, const ConverterFlag value) {
switch(value) { switch(value) {
/* LCOV_EXCL_START */ /* LCOV_EXCL_START */
#define _c(v) case ConverterFlag::v: return debug << "::" #v; #define _c(v) case ConverterFlag::v: return debug << "::" #v;
_c(Quiet)
_c(Verbose) _c(Verbose)
_c(WarningAsError)
#undef _c #undef _c
/* LCOV_EXCL_STOP */ /* LCOV_EXCL_STOP */
} }
@ -652,7 +656,10 @@ Debug& operator<<(Debug& debug, const ConverterFlag value) {
Debug& operator<<(Debug& debug, const ConverterFlags value) { Debug& operator<<(Debug& debug, const ConverterFlags value) {
return Containers::enumSetDebugOutput(debug, value, "ShaderTools::ConverterFlags{}", { return Containers::enumSetDebugOutput(debug, value, "ShaderTools::ConverterFlags{}", {
ConverterFlag::Verbose}); ConverterFlag::Quiet,
ConverterFlag::Verbose,
ConverterFlag::WarningAsError
});
} }
Debug& operator<<(Debug& debug, const Format value) { Debug& operator<<(Debug& debug, const Format value) {

16
src/Magnum/ShaderTools/AbstractConverter.h

@ -126,11 +126,25 @@ MAGNUM_SHADERTOOLS_EXPORT Debug& operator<<(Debug& debug, ConverterFeatures valu
@see @ref ConverterFlags, @ref AbstractConverter::setFlags() @see @ref ConverterFlags, @ref AbstractConverter::setFlags()
*/ */
enum class ConverterFlag: UnsignedInt { enum class ConverterFlag: UnsignedInt {
/**
* Suppress warnings, print just errors. By default the converter prints
* both warnings and errors.
* @see @ref ConverterFlag::WarningAsError
*/
Quiet = 1 << 0,
/** /**
* Print verbose diagnostic. By default the converter only prints warnings * Print verbose diagnostic. By default the converter only prints warnings
* and errors. * and errors.
*/ */
Verbose = 1 << 0 Verbose = 1 << 1,
/**
* Treat warnings as error. By default, if a warning occurs,
* validation or conversion succeeds. With this flag set, it fails.
* @see @ref ConverterFlag::Quiet
*/
WarningAsError = 1 << 2
}; };
/** /**

21
src/Magnum/ShaderTools/Test/AbstractConverterTest.cpp

@ -47,6 +47,7 @@ struct AbstractConverterTest: TestSuite::Tester {
void featuresNone(); void featuresNone();
void setFlags(); void setFlags();
void setFlagsBothQuietAndVerbose();
void setFlagsNotImplemented(); void setFlagsNotImplemented();
void setInputOutputFormat(); void setInputOutputFormat();
@ -166,6 +167,7 @@ AbstractConverterTest::AbstractConverterTest() {
addTests({&AbstractConverterTest::featuresNone, addTests({&AbstractConverterTest::featuresNone,
&AbstractConverterTest::setFlags, &AbstractConverterTest::setFlags,
&AbstractConverterTest::setFlagsBothQuietAndVerbose,
&AbstractConverterTest::setFlagsNotImplemented, &AbstractConverterTest::setFlagsNotImplemented,
&AbstractConverterTest::setInputOutputFormat, &AbstractConverterTest::setInputOutputFormat,
@ -326,6 +328,25 @@ void AbstractConverterTest::setFlags() {
CORRADE_COMPARE(converter._flags, ConverterFlag::Verbose); CORRADE_COMPARE(converter._flags, ConverterFlag::Verbose);
} }
void AbstractConverterTest::setFlagsBothQuietAndVerbose() {
#ifdef CORRADE_NO_ASSERT
CORRADE_SKIP("CORRADE_NO_ASSERT defined, can't test assertions");
#endif
struct: AbstractConverter {
ConverterFeatures doFeatures() const override {
return ConverterFeature::ValidateData;
}
void doSetInputFormat(Format, Containers::StringView) override {}
void doSetOutputFormat(Format, Containers::StringView) override {}
} converter;
std::ostringstream out;
Error redirectError{&out};
converter.setFlags(ConverterFlag::Quiet|ConverterFlag::Verbose);
CORRADE_COMPARE(out.str(), "ShaderTools::AbstractConverter::setFlags(): can't have both Quiet and Verbose set\n");
}
void AbstractConverterTest::setFlagsNotImplemented() { void AbstractConverterTest::setFlagsNotImplemented() {
struct: AbstractConverter { struct: AbstractConverter {
ConverterFeatures doFeatures() const override { ConverterFeatures doFeatures() const override {

Loading…
Cancel
Save