aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt47
-rw-r--r--test/container.test.cpp41
-rw-r--r--test/lib/CMakeLists.txt3
-rw-r--r--test/lib/gtest/CMakeLists.txt9
4 files changed, 100 insertions, 0 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000..c1fb283
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,47 @@
+cmake_minimum_required(VERSION 3.2.0)
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+project(test CXX)
+
+add_subdirectory(lib)
+
+enable_testing()
+
+add_executable(
+ ${PROJECT_NAME}
+ container.test.cpp
+)
+
+target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
+
+target_compile_options(
+ ${PROJECT_NAME}
+ PRIVATE
+ -Wall -Wextra -Wpedantic -Wshadow
+ -Wold-style-cast -Wcast-align -Wno-unused
+ -Wconversion -Wcast-qual -Wctor-dtor-privacy
+ -Wdisabled-optimization -Wformat=2 -Winit-self
+ -Wmissing-declarations -Wmissing-include-dirs
+ -Woverloaded-virtual -Wredundant-decls
+ -Wsign-conversion -Wsign-promo
+ -Wstrict-overflow=5 -Wswitch-default
+ -Wundef -Werror
+ -pedantic -fsanitize=address -fno-exceptions
+)
+
+target_link_options(${PROJECT_NAME} PRIVATE -fsanitize=address)
+
+target_link_libraries(
+ ${PROJECT_NAME}
+ PRIVATE
+ yacppdic
+ gtest_main
+)
+
+include(GoogleTest)
+
+gtest_discover_tests(${PROJECT_NAME})
+
diff --git a/test/container.test.cpp b/test/container.test.cpp
new file mode 100644
index 0000000..54290ea
--- /dev/null
+++ b/test/container.test.cpp
@@ -0,0 +1,41 @@
+#include "yacppdic/container.hpp"
+#include "yacppdic/auto_wirable.hpp"
+#include "gtest/gtest.h"
+
+#include <string_view>
+
+TEST(ContainerTest, BindAndGet)
+{
+ auto container = yacppdic::Container();
+
+ class IObject
+ {
+ public:
+ virtual ~IObject() = default;
+
+ virtual void destroy() = 0;
+
+ virtual std::string_view name() = 0;
+ };
+
+ class Object : public IObject, public yacppdic::AutoWirable<IObject, Object>
+ {
+ public:
+ void destroy() {}
+
+ std::string_view name()
+ {
+ return "A object";
+ }
+ };
+
+ container.bind<IObject>().to<Object>();
+
+ auto object = container.get<IObject>();
+
+ EXPECT_EQ(object->name(), "A object");
+
+ auto object_two = container.get<IObject>();
+
+ EXPECT_NE(object, object_two);
+}
diff --git a/test/lib/CMakeLists.txt b/test/lib/CMakeLists.txt
new file mode 100644
index 0000000..7bf8282
--- /dev/null
+++ b/test/lib/CMakeLists.txt
@@ -0,0 +1,3 @@
+include(FetchContent)
+
+add_subdirectory(gtest)
diff --git a/test/lib/gtest/CMakeLists.txt b/test/lib/gtest/CMakeLists.txt
new file mode 100644
index 0000000..6582343
--- /dev/null
+++ b/test/lib/gtest/CMakeLists.txt
@@ -0,0 +1,9 @@
+message(STATUS "Fetching gtest...")
+
+FetchContent_Declare(
+ gtest
+ GIT_REPOSITORY "https://github.com/google/googletest"
+ GIT_TAG release-1.11.0
+)
+
+FetchContent_MakeAvailable(gtest)