aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/OptionalRefTest.cpp24
-rw-r--r--src/test/ResourceManagerTest.cpp36
-rw-r--r--src/test/main.cpp15
3 files changed, 69 insertions, 6 deletions
diff --git a/src/test/OptionalRefTest.cpp b/src/test/OptionalRefTest.cpp
index 65bd816..219ccca 100644
--- a/src/test/OptionalRefTest.cpp
+++ b/src/test/OptionalRefTest.cpp
@@ -9,8 +9,30 @@ using namespace testing;
TEST(OptionalRefTest, Explicit) {
string value = "foo";
OptionalRef<string> ref;
+ EXPECT_FALSE(ref);
+ ASSERT_THROW(ref.get(), runtime_error);
+
+ ref.set(value);
+ EXPECT_TRUE(ref);
+ ASSERT_NO_THROW(ref.get());
+
+ ref.clear();
+ EXPECT_FALSE(ref);
+ ASSERT_THROW(ref.get(), runtime_error);
+}
+
+TEST(OptionalRefTest, Implicit) {
+ string value = "foo";
+ OptionalRef<string> ref = value;
+ EXPECT_TRUE(ref);
+ ASSERT_NO_THROW(ref.get());
- EXPECT_FALSE(bool(ref));
+ ref.clear();
+ EXPECT_FALSE(ref);
ASSERT_THROW(ref.get(), runtime_error);
+
+ ref = value;
+ EXPECT_TRUE(ref);
+ ASSERT_NO_THROW(ref.get());
}
diff --git a/src/test/ResourceManagerTest.cpp b/src/test/ResourceManagerTest.cpp
index 42b6b5d..5d1ae7a 100644
--- a/src/test/ResourceManagerTest.cpp
+++ b/src/test/ResourceManagerTest.cpp
@@ -1,5 +1,7 @@
#include <gtest/gtest.h>
+#include <crepe/util/Log.h>
+#include <crepe/api/Config.h>
#include <crepe/api/ResourceManager.h>
using namespace std;
@@ -8,14 +10,42 @@ using namespace testing;
class ResourceManagerTest : public Test {
public:
- ResourceManager & manager = ResourceManager::get_instance();
+ ResourceManager & resman = ResourceManager::get_instance();
+ Config & cfg = Config::get_instance();
void SetUp() override {
- this->manager.clear();
+ cfg.log.level = Log::Level::TRACE;
+ resman.clear();
}
};
TEST_F(ResourceManagerTest, Main) {
- Sound & sound = this->manager.cache<Sound>("mwe/audio/sfx1.wav");
+ Asset path1 = "mwe/audio/sfx1.wav";
+ Asset path2 = "mwe/audio/sfx1.wav";
+ ASSERT_EQ(path1, path2);
+
+ Sound * ptr1 = nullptr;
+ Sound * ptr2 = nullptr;
+ {
+ Log::logf(Log::Level::DEBUG, "Get first sound (constructor call)");
+ Sound & sound = resman.cache<Sound>(path1);
+ ptr1 = &sound;
+ }
+ {
+ Log::logf(Log::Level::DEBUG, "Get same sound (NO constructor call)");
+ Sound & sound = resman.cache<Sound>(path2);
+ ptr2 = &sound;
+ }
+ EXPECT_EQ(ptr1, ptr2);
+
+ Log::logf(Log::Level::DEBUG, "Clear cache (destructor call)");
+ resman.clear();
+
+ Log::logf(Log::Level::DEBUG, "Get first sound again (constructor call)");
+ Sound & sound = resman.cache<Sound>(path1);
+
+ // NOTE: there is no way (that I know of) to ensure the above statement
+ // allocates the new Sound instance in a different location than the first,
+ // so this test was verified using the above print statements.
}
diff --git a/src/test/main.cpp b/src/test/main.cpp
index 241015d..19a8d6e 100644
--- a/src/test/main.cpp
+++ b/src/test/main.cpp
@@ -5,11 +5,22 @@
using namespace crepe;
using namespace testing;
+class GlobalConfigReset : public EmptyTestEventListener {
+public:
+ Config & cfg = Config::get_instance();
+
+ // This function is called before each test
+ void OnTestStart(const TestInfo &) override {
+ cfg.log.level = Log::Level::WARNING;
+ }
+};
+
int main(int argc, char ** argv) {
InitGoogleTest(&argc, argv);
- auto & cfg = Config::get_instance();
- cfg.log.level = Log::Level::ERROR;
+ UnitTest & ut = *UnitTest::GetInstance();
+ ut.listeners().Append(new GlobalConfigReset);
return RUN_ALL_TESTS();
}
+