diff --git a/src/Magnum/Resource.cpp b/src/Magnum/Resource.cpp index 98563c2d0..446d9ac9c 100644 --- a/src/Magnum/Resource.cpp +++ b/src/Magnum/Resource.cpp @@ -48,6 +48,10 @@ Debug& operator<<(Debug& debug, const ResourceState value) { return debug << "(" << Debug::nospace << reinterpret_cast(UnsignedByte(value)) << Debug::nospace << ")"; } + +Debug& operator<<(Debug& debug, const ResourceKey& value) { + return debug << "ResourceKey(0x" << Debug::nospace << static_cast&>(value) << Debug::nospace << ")"; +} #endif } diff --git a/src/Magnum/Resource.h b/src/Magnum/Resource.h index 2af10328d..bc9bf6983 100644 --- a/src/Magnum/Resource.h +++ b/src/Magnum/Resource.h @@ -101,9 +101,7 @@ class ResourceKey: public Utility::MurmurHash2::Digest { }; /** @debugoperator{ResourceKey} */ -inline Debug& operator<<(Debug& debug, const ResourceKey& value) { - return debug << static_cast&>(value); -} +MAGNUM_EXPORT Debug& operator<<(Debug& debug, const ResourceKey& value); namespace Implementation { template class ResourceManagerData; diff --git a/src/Magnum/Test/ResourceManagerTest.cpp b/src/Magnum/Test/ResourceManagerTest.cpp index 357843eef..d82353dfb 100644 --- a/src/Magnum/Test/ResourceManagerTest.cpp +++ b/src/Magnum/Test/ResourceManagerTest.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include "Magnum/AbstractResourceLoader.h" #include "Magnum/ResourceManager.h" @@ -57,6 +58,7 @@ struct ResourceManagerTest: TestSuite::Tester { void loaderSetNullptr(); void debugResourceState(); + void debugResourceKey(); }; struct Data { @@ -91,7 +93,8 @@ ResourceManagerTest::ResourceManagerTest() { &ResourceManagerTest::loader, &ResourceManagerTest::loaderSetNullptr, - &ResourceManagerTest::debugResourceState}); + &ResourceManagerTest::debugResourceState, + &ResourceManagerTest::debugResourceKey}); } void ResourceManagerTest::constructResource() { @@ -283,7 +286,7 @@ void ResourceManagerTest::basic() { int a = 43; /* Done this way to prevent a memory leak on assert (yes, the code is bad) */ rm.set(answerKey, &a, ResourceDataState::Mutable, ResourcePolicy::Resident); CORRADE_COMPARE(*theAnswer, 42); - CORRADE_COMPARE(out.str(), "ResourceManager::set(): cannot change already final resource " + answerKey.hexString() + '\n'); + CORRADE_COMPARE(out.str(), Utility::formatString("ResourceManager::set(): cannot change already final resource ResourceKey(0x{})\n", answerKey.hexString())); /* But non-final can be changed */ rm.set(questionKey, 20, ResourceDataState::Final, ResourcePolicy::Resident); @@ -503,6 +506,13 @@ void ResourceManagerTest::debugResourceState() { CORRADE_COMPARE(out.str(), "ResourceState::Loading ResourceState(0xbe)\n"); } +void ResourceManagerTest::debugResourceKey() { + std::ostringstream out; + ResourceKey hello = "hello"; + Debug{&out} << hello; + CORRADE_COMPARE(out.str(), Utility::formatString("ResourceKey(0x{})\n", hello.hexString())); +} + }}} CORRADE_TEST_MAIN(Magnum::Test::ResourceManagerTest)