From c59d460f12e1393e0ddbaaa1c6f5522eb12f8ff9 Mon Sep 17 00:00:00 2001
From: Loek Le Blansch <loek@pipeframe.xyz>
Date: Fri, 29 Nov 2024 16:23:52 +0100
Subject: more utility classes for Audio system

---
 src/test/AudioTest.cpp   |  5 +++-
 src/test/CMakeLists.txt  |  1 +
 src/test/PrivateTest.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 71 insertions(+), 1 deletion(-)
 create mode 100644 src/test/PrivateTest.cpp

(limited to 'src/test')

diff --git a/src/test/AudioTest.cpp b/src/test/AudioTest.cpp
index afd2672..3be5afa 100644
--- a/src/test/AudioTest.cpp
+++ b/src/test/AudioTest.cpp
@@ -1,6 +1,7 @@
 #include <gtest/gtest.h>
 
 #include <crepe/manager/ComponentManager.h>
+#include <crepe/manager/ResourceManager.h>
 #include <crepe/api/AudioSource.h>
 #include <crepe/api/GameObject.h>
 #include <crepe/system/AudioSystem.h>
@@ -13,15 +14,17 @@ class AudioTest : public Test {
 	Mediator mediator;
 public:
 	ComponentManager component_manager{mediator};
+	ResourceManager resource_manager{mediator};
 	AudioSystem system {mediator};
 
 	void SetUp() override {
 		auto & mgr = this->component_manager;
 		GameObject entity = mgr.new_object("name");
-		entity.add_component<AudioSource>("mwe/audio/sfx1.wav");
+		AudioSource & audio_source = entity.add_component<AudioSource>("mwe/audio/sfx1.wav");
 	}
 };
 
 TEST_F(AudioTest, Default) {
+	system.update();
 }
 
diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
index 4174926..8c4b855 100644
--- a/src/test/CMakeLists.txt
+++ b/src/test/CMakeLists.txt
@@ -16,4 +16,5 @@ target_sources(test_main PUBLIC
 	Vector2Test.cpp
 	ScriptEventTest.cpp
 	ScriptSceneTest.cpp
+	PrivateTest.cpp
 )
diff --git a/src/test/PrivateTest.cpp b/src/test/PrivateTest.cpp
new file mode 100644
index 0000000..f0d2b1a
--- /dev/null
+++ b/src/test/PrivateTest.cpp
@@ -0,0 +1,66 @@
+#include <gtest/gtest.h>
+
+#include <crepe/util/Private.h>
+
+using namespace std;
+using namespace crepe;
+using namespace testing;
+
+class PrivateTest : public Test {
+public:
+	static unsigned constructors;
+	static unsigned destructors;
+
+	void SetUp() override {
+		PrivateTest::constructors = 0;
+		PrivateTest::destructors = 0;
+	}
+
+	class TestClass {
+	public:
+		TestClass() { PrivateTest::constructors++; }
+		~TestClass() { PrivateTest::destructors++; }
+	};
+	class Unrelated {};
+};
+unsigned PrivateTest::constructors;
+unsigned PrivateTest::destructors;
+
+TEST_F(PrivateTest, Empty) {
+	{
+		Private foo;
+	}
+
+	EXPECT_EQ(PrivateTest::constructors, 0);
+	EXPECT_EQ(PrivateTest::destructors, 0);
+}
+
+TEST_F(PrivateTest, WithObject) {
+	{
+		Private foo;
+		foo.set<TestClass>();
+
+		EXPECT_EQ(PrivateTest::constructors, 1);
+		EXPECT_EQ(PrivateTest::destructors, 0);
+	}
+
+	EXPECT_EQ(PrivateTest::constructors, 1);
+	EXPECT_EQ(PrivateTest::destructors, 1);
+}
+
+TEST_F(PrivateTest, EmptyException) {
+	Private foo;
+	EXPECT_THROW(foo.get<TestClass>(), std::out_of_range);
+
+	foo.set<TestClass>();
+	EXPECT_NO_THROW(foo.get<TestClass>());
+}
+
+TEST_F(PrivateTest, IncorrectTypeException) {
+	Private foo;
+	foo.set<TestClass>();
+
+	EXPECT_THROW(foo.get<Unrelated>(), std::logic_error);
+	EXPECT_NO_THROW(foo.get<TestClass>());
+}
+
-- 
cgit v1.2.3