From de2cb90b3bbf6c44ecf5c58e9ab3fabaecc84392 Mon Sep 17 00:00:00 2001 From: BendedWills Date: Sat, 7 Mar 2026 00:59:59 -0600 Subject: [PATCH] Add tests --- CMakeLists.txt | 16 ++++++++++++---- Minecraft-Community-Edition/IO/InputStream.hpp | 7 +++++++ Minecraft-Community-Edition/IO/OutputStream.hpp | 8 ++++++++ Tests/CMakeLists.txt | 3 +++ Tests/InputStream/CMakeLists.txt | 7 +++++++ Tests/InputStream/Main.cpp | 0 cmake/Vendor.cmake | 16 +++++++++++++++- 7 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 Tests/CMakeLists.txt create mode 100644 Tests/InputStream/CMakeLists.txt create mode 100644 Tests/InputStream/Main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index a780757..f732f58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,10 @@ cmake_minimum_required(VERSION 4.0) project("Minecraft-Community-Edition") +option(MCE_BUILD_TESTS "Set this to ON to build tests" OFF) set(CMAKE_CXX_STANDARD 26) set(MCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft-Community-Edition") + include(cmake/Vendor.cmake) if (WIN32 AND ("${CMAKE_BUILD_TYPE}" MATCHES "Release")) @@ -10,8 +12,14 @@ if (WIN32 AND ("${CMAKE_BUILD_TYPE}" MATCHES "Release")) endif () file(GLOB_RECURSE MCE_SOURCES "${MCE_DIR}/*.cpp" "${MCE_DIR}/*.hpp" "${MCE_DIR}/*.c" "${MCE_DIR}/*.h") -list(FILTER MCE_SOURCES EXCLUDE REGEX "Vendor") -add_executable(${PROJECT_NAME} ${MCE_EXEC_TYPE} ${MCE_SOURCES}) +list(FILTER MCE_SOURCES EXCLUDE REGEX "Main.cpp") +add_library(${PROJECT_NAME}-lib STATIC ${MCE_SOURCES}) +add_executable(${PROJECT_NAME} ${MCE_EXEC_TYPE} "${MCE_DIR}/Main.cpp") -target_include_directories(${PROJECT_NAME} PUBLIC ${MCE_DIR}) -target_link_libraries(${PROJECT_NAME} PRIVATE EASTL SFML::Graphics stdc++exp) \ No newline at end of file +target_include_directories(${PROJECT_NAME}-lib PUBLIC ${MCE_DIR}) +target_link_libraries(${PROJECT_NAME}-lib PUBLIC EASTL SFML::Graphics stdc++exp) +target_link_libraries(${PROJECT_NAME} PRIVATE ${PROJECT_NAME}-lib) + +if (MCE_BUILD_TESTS) + add_subdirectory(Tests) +endif () \ No newline at end of file diff --git a/Minecraft-Community-Edition/IO/InputStream.hpp b/Minecraft-Community-Edition/IO/InputStream.hpp index 123fcf8..13e2bff 100644 --- a/Minecraft-Community-Edition/IO/InputStream.hpp +++ b/Minecraft-Community-Edition/IO/InputStream.hpp @@ -1,8 +1,15 @@ #pragma once +#include + namespace mce { class InputStream { public: virtual ~InputStream() = 0; + + virtual size_t read(void* buffer, size_t size) = 0; + virtual size_t seek(size_t position) = 0; + virtual size_t tell() = 0; + virtual size_t getSize() = 0; }; } \ No newline at end of file diff --git a/Minecraft-Community-Edition/IO/OutputStream.hpp b/Minecraft-Community-Edition/IO/OutputStream.hpp index b14a309..c45f39a 100644 --- a/Minecraft-Community-Edition/IO/OutputStream.hpp +++ b/Minecraft-Community-Edition/IO/OutputStream.hpp @@ -1,8 +1,16 @@ #pragma once +#include + namespace mce { class OutputStream { public: virtual ~OutputStream() = 0; + + virtual void flush() = 0; + virtual size_t write(void* buffer, size_t size) = 0; + virtual size_t seek(size_t position) = 0; + virtual size_t tell() = 0; + virtual size_t getSize() = 0; }; } \ No newline at end of file diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt new file mode 100644 index 0000000..4021fc8 --- /dev/null +++ b/Tests/CMakeLists.txt @@ -0,0 +1,3 @@ +enable_testing() + +add_subdirectory(InputStream) \ No newline at end of file diff --git a/Tests/InputStream/CMakeLists.txt b/Tests/InputStream/CMakeLists.txt new file mode 100644 index 0000000..ce8ab5f --- /dev/null +++ b/Tests/InputStream/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 4.0) +project("InputStream") +include(GoogleTest) + +add_executable(${PROJECT_NAME} Main.cpp) + +target_link_libraries(${PROJECT_NAME} GTest::gtest_main) \ No newline at end of file diff --git a/Tests/InputStream/Main.cpp b/Tests/InputStream/Main.cpp new file mode 100644 index 0000000..e69de29 diff --git a/cmake/Vendor.cmake b/cmake/Vendor.cmake index 31c4fa0..902bd87 100644 --- a/cmake/Vendor.cmake +++ b/cmake/Vendor.cmake @@ -9,8 +9,22 @@ execute_process( COMMAND git config --global url.https://github.com/.insteadOf git@github.com: ) +cmake_policy(SET CMP0135 NEW) # Fix DOWNLOAD_EXTRACT_TIMESTAMP warning +FetchContent_Declare(googletest + URL https://github.com/google/googletest/archive/52eb8108c5bdec04579160ae17225d66034bd723.zip + SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/googletest + BINARY_DIR ${CMAKE_BINARY_DIR}/Vendor/googletest-build + SUBBUILD_DIR ${CMAKE_BINARY_DIR}/Vendor/googletest-subbuild +) FetchContent_Declare(EASTL GIT_REPOSITORY https://github.com/electronicarts/EASTL.git) FetchContent_Declare(SFML GIT_REPOSITORY https://github.com/SFML/SFML.git) set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # EACore uses an old version -FetchContent_MakeAvailable(EASTL SFML) \ No newline at end of file +FetchContent_MakeAvailable(EASTL SFML) + +if (MCE_BUILD_TESTS) + # For Windows: Prevent overriding the parent project's compiler/linker settings + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + + FetchContent_MakeAvailable(googletest) +endif () \ No newline at end of file