From 1ac90416805bf839f9c8d8a34b526061a151271b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 24 Nov 2012 15:34:07 +0100 Subject: [PATCH] ResourceManager: stateless test. It now doesn't reuse manager instance among test cases, making it more failproof. --- src/Test/ResourceManagerTest.cpp | 85 ++++++++++++++++++++------------ src/Test/ResourceManagerTest.h | 21 +------- 2 files changed, 55 insertions(+), 51 deletions(-) diff --git a/src/Test/ResourceManagerTest.cpp b/src/Test/ResourceManagerTest.cpp index bf99d364f..57e7490aa 100644 --- a/src/Test/ResourceManagerTest.cpp +++ b/src/Test/ResourceManagerTest.cpp @@ -26,94 +26,115 @@ CORRADE_TEST_MAIN(Magnum::Test::ResourceManagerTest) namespace Magnum { namespace Test { +class Data { + public: + static std::size_t count; + + inline Data() { ++count; } + inline ~Data() { --count; } +}; + +typedef Magnum::ResourceManager ResourceManager; + size_t Data::count = 0; ResourceManagerTest::ResourceManagerTest() { - rm = new ResourceManager; - addTests(&ResourceManagerTest::state, + &ResourceManagerTest::residentPolicy, &ResourceManagerTest::referenceCountedPolicy, - &ResourceManagerTest::manualPolicy, - &ResourceManagerTest::destroy); + &ResourceManagerTest::manualPolicy); } void ResourceManagerTest::state() { + ResourceManager rm; + ResourceKey questionKey("the-question"); - rm->set(questionKey, new int32_t(10), ResourceDataState::Mutable, ResourcePolicy::Resident); - Resource theQuestion = rm->get(questionKey); + rm.set(questionKey, new int32_t(10), ResourceDataState::Mutable, ResourcePolicy::Resident); + Resource theQuestion = rm.get(questionKey); CORRADE_VERIFY(theQuestion.state() == ResourceState::Mutable); CORRADE_COMPARE(*theQuestion, 10); /* Check that hash function is working properly */ ResourceKey answerKey("the-answer"); - rm->set(answerKey, new int32_t(42), ResourceDataState::Final, ResourcePolicy::Resident); - Resource theAnswer = rm->get(answerKey); + rm.set(answerKey, new int32_t(42), ResourceDataState::Final, ResourcePolicy::Resident); + Resource theAnswer = rm.get(answerKey); CORRADE_VERIFY(theAnswer.state() == ResourceState::Final); CORRADE_COMPARE(*theAnswer, 42); - CORRADE_COMPARE(rm->count(), 2); + CORRADE_COMPARE(rm.count(), 2); /* Cannot change already final resource */ stringstream out; Error::setOutput(&out); - rm->set(answerKey, new int32_t(43), ResourceDataState::Mutable, ResourcePolicy::Resident); + rm.set(answerKey, new int32_t(43), ResourceDataState::Mutable, ResourcePolicy::Resident); CORRADE_COMPARE(*theAnswer, 42); CORRADE_COMPARE(out.str(), "ResourceManager: cannot change already final resource\n"); /* Check non-final resource changes */ - rm->set(questionKey, new int32_t(20), ResourceDataState::Final, ResourcePolicy::Resident); + rm.set(questionKey, new int32_t(20), ResourceDataState::Final, ResourcePolicy::Resident); CORRADE_VERIFY(theQuestion.state() == ResourceState::Final); CORRADE_COMPARE(*theQuestion, 20); } +void ResourceManagerTest::residentPolicy() { + ResourceManager* rm = new ResourceManager; + + rm->set("blah", new Data(), ResourceDataState::Mutable, ResourcePolicy::Resident); + CORRADE_COMPARE(Data::count, 1); + + rm->free(); + CORRADE_COMPARE(Data::count, 1); + + delete rm; + CORRADE_COMPARE(Data::count, 0); +} + void ResourceManagerTest::referenceCountedPolicy() { + ResourceManager rm; + ResourceKey dataRefCountKey("dataRefCount"); /* Reference counted resources must be requested first */ { - rm->set(dataRefCountKey, new Data(), ResourceDataState::Final, ResourcePolicy::ReferenceCounted); - CORRADE_COMPARE(rm->count(), 0); - Resource data = rm->get(dataRefCountKey); + rm.set(dataRefCountKey, new Data(), ResourceDataState::Final, ResourcePolicy::ReferenceCounted); + CORRADE_COMPARE(rm.count(), 0); + Resource data = rm.get(dataRefCountKey); CORRADE_VERIFY(data.state() == ResourceState::NotLoaded); CORRADE_COMPARE(Data::count, 0); } { - Resource data = rm->get(dataRefCountKey); - CORRADE_COMPARE(rm->count(), 1); + Resource data = rm.get(dataRefCountKey); + CORRADE_COMPARE(rm.count(), 1); CORRADE_VERIFY(data.state() == ResourceState::NotLoaded); - rm->set(dataRefCountKey, new Data(), ResourceDataState::Final, ResourcePolicy::ReferenceCounted); + rm.set(dataRefCountKey, new Data(), ResourceDataState::Final, ResourcePolicy::ReferenceCounted); CORRADE_VERIFY(data.state() == ResourceState::Final); CORRADE_COMPARE(Data::count, 1); } - CORRADE_COMPARE(rm->count(), 0); + CORRADE_COMPARE(rm.count(), 0); CORRADE_COMPARE(Data::count, 0); } void ResourceManagerTest::manualPolicy() { + ResourceManager rm; + ResourceKey dataKey("data"); /* Manual free */ { - rm->set(dataKey, new Data(), ResourceDataState::Mutable, ResourcePolicy::Manual); - Resource data = rm->get(dataKey); - rm->free(); + rm.set(dataKey, new Data(), ResourceDataState::Mutable, ResourcePolicy::Manual); + Resource data = rm.get(dataKey); + rm.free(); } - CORRADE_COMPARE(rm->count(), 1); + CORRADE_COMPARE(rm.count(), 1); CORRADE_COMPARE(Data::count, 1); - rm->free(); - CORRADE_COMPARE(rm->count(), 0); + rm.free(); + CORRADE_COMPARE(rm.count(), 0); CORRADE_COMPARE(Data::count, 0); - rm->set(dataKey, new Data(), ResourceDataState::Mutable, ResourcePolicy::Manual); - CORRADE_COMPARE(rm->count(), 1); + rm.set(dataKey, new Data(), ResourceDataState::Mutable, ResourcePolicy::Manual); + CORRADE_COMPARE(rm.count(), 1); CORRADE_COMPARE(Data::count, 1); } -void ResourceManagerTest::destroy() { - delete rm; - rm = nullptr; - CORRADE_COMPARE(Data::count, 0); -} - }} diff --git a/src/Test/ResourceManagerTest.h b/src/Test/ResourceManagerTest.h index ef7c1826a..b6f387498 100644 --- a/src/Test/ResourceManagerTest.h +++ b/src/Test/ResourceManagerTest.h @@ -17,33 +17,16 @@ #include -namespace Magnum { - -template class ResourceManager; - -namespace Test { - -class Data { - public: - static std::size_t count; - - inline Data() { ++count; } - inline ~Data() { --count; } -}; - -typedef Magnum::ResourceManager ResourceManager; +namespace Magnum { namespace Test { class ResourceManagerTest: public Corrade::TestSuite::Tester { public: ResourceManagerTest(); void state(); + void residentPolicy(); void referenceCountedPolicy(); void manualPolicy(); - void destroy(); - - private: - ResourceManager* rm; }; }}