aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/AssetTest.cpp33
-rw-r--r--src/test/AudioTest.cpp26
-rw-r--r--src/test/CMakeLists.txt4
-rw-r--r--src/test/OptionalRefTest.cpp38
-rw-r--r--src/test/ParticleTest.cpp2
-rw-r--r--src/test/ResourceManagerTest.cpp52
-rw-r--r--src/test/main.cpp15
7 files changed, 167 insertions, 3 deletions
diff --git a/src/test/AssetTest.cpp b/src/test/AssetTest.cpp
new file mode 100644
index 0000000..563a253
--- /dev/null
+++ b/src/test/AssetTest.cpp
@@ -0,0 +1,33 @@
+#include <gtest/gtest.h>
+
+#include <crepe/api/Asset.h>
+#include <crepe/api/Config.h>
+
+using namespace std;
+using namespace crepe;
+using namespace testing;
+
+class AssetTest : public Test {
+public:
+ Config & cfg = Config::get_instance();
+ void SetUp() override {
+ this->cfg.asset.root_pattern = ".crepe-root";
+ }
+};
+
+TEST_F(AssetTest, Existant) {
+ ASSERT_NO_THROW(Asset{"asset/texture/img.png"});
+}
+
+TEST_F(AssetTest, Nonexistant) {
+ ASSERT_ANY_THROW(Asset{"asset/nonexistant"});
+}
+
+TEST_F(AssetTest, Rootless) {
+ cfg.asset.root_pattern.clear();
+
+ string arbitrary = "\\/this is / /../passed through as-is";
+ Asset asset{arbitrary};
+ ASSERT_EQ(arbitrary, asset.get_path());
+}
+
diff --git a/src/test/AudioTest.cpp b/src/test/AudioTest.cpp
new file mode 100644
index 0000000..e181de9
--- /dev/null
+++ b/src/test/AudioTest.cpp
@@ -0,0 +1,26 @@
+#include <gtest/gtest.h>
+
+#include <crepe/ComponentManager.h>
+#include <crepe/api/AudioSource.h>
+#include <crepe/api/GameObject.h>
+#include <crepe/system/AudioSystem.h>
+
+using namespace std;
+using namespace crepe;
+using namespace testing;
+
+class AudioTest : public Test {
+public:
+ ComponentManager component_manager{};
+ AudioSystem system {component_manager};
+
+ void SetUp() override {
+ auto & mgr = this->component_manager;
+ GameObject entity = mgr.new_object("name");
+ entity.add_component<AudioSource>("mwe/audio/sfx1.wav");
+ }
+};
+
+TEST_F(AudioTest, Default) {
+}
+
diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
index 49c8151..437c296 100644
--- a/src/test/CMakeLists.txt
+++ b/src/test/CMakeLists.txt
@@ -3,5 +3,9 @@ target_sources(test_main PUBLIC
PhysicsTest.cpp
ScriptTest.cpp
ParticleTest.cpp
+ AudioTest.cpp
+ AssetTest.cpp
+ ResourceManagerTest.cpp
+ OptionalRefTest.cpp
)
diff --git a/src/test/OptionalRefTest.cpp b/src/test/OptionalRefTest.cpp
new file mode 100644
index 0000000..219ccca
--- /dev/null
+++ b/src/test/OptionalRefTest.cpp
@@ -0,0 +1,38 @@
+#include <gtest/gtest.h>
+
+#include <crepe/util/OptionalRef.h>
+
+using namespace std;
+using namespace crepe;
+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());
+
+ 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/ParticleTest.cpp b/src/test/ParticleTest.cpp
index 4e655a9..cfbbc0e 100644
--- a/src/test/ParticleTest.cpp
+++ b/src/test/ParticleTest.cpp
@@ -29,7 +29,7 @@ public:
Color color(0, 0, 0, 0);
Sprite test_sprite = game_object.add_component<Sprite>(
- make_shared<Texture>("../asset/texture/img.png"), color,
+ make_shared<Texture>("asset/texture/img.png"), color,
FlipSettings{true, true});
game_object.add_component<ParticleEmitter>(ParticleEmitter::Data{
diff --git a/src/test/ResourceManagerTest.cpp b/src/test/ResourceManagerTest.cpp
new file mode 100644
index 0000000..3fc9ebd
--- /dev/null
+++ b/src/test/ResourceManagerTest.cpp
@@ -0,0 +1,52 @@
+#include <gtest/gtest.h>
+
+#include <crepe/util/Log.h>
+#include <crepe/api/Config.h>
+#include <crepe/api/ResourceManager.h>
+
+using namespace std;
+using namespace crepe;
+using namespace testing;
+
+class ResourceManagerTest : public Test {
+public:
+ ResourceManager & resman = ResourceManager::get_instance();
+ Config & cfg = Config::get_instance();
+
+ void SetUp() override {
+ resman.clear();
+ }
+};
+
+TEST_F(ResourceManagerTest, Main) {
+ // NOTE: there is no way (that I know of) to ensure the last cache call
+ // allocates the new Sound instance in a different location than the first,
+ // so this test should be verified manually using these print statements and
+ // debug trace messages.
+ cfg.log.level = Log::Level::TRACE;
+
+ 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);
+}
+
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();
}
+