From 428d74aeb3bec8ff6edfabf70dd88b92cff79d71 Mon Sep 17 00:00:00 2001 From: user Date: Sat, 18 Jul 2026 23:39:36 +0400 Subject: [PATCH] test: add scoped file helper tests and update test build targets --- Makefile | 22 +++++--- tests/helpers/scoped_file.hpp | 27 ++++++++++ tests/helpers/scoped_file_test.cpp | 83 ++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+), 6 deletions(-) create mode 100644 tests/helpers/scoped_file.hpp create mode 100644 tests/helpers/scoped_file_test.cpp diff --git a/Makefile b/Makefile index a511f1a..4ba2ed8 100644 --- a/Makefile +++ b/Makefile @@ -5,27 +5,37 @@ CXXFLAGS := -std=c++17 \ -Wextra \ -Werror \ -Icore/include \ - -Ilogger/include + -Ilogger/include \ + -Itests/helpers LDFLAGS := -lstdc++ BUILD_DIR := build -TEST_BIN := $(BUILD_DIR)/result_test + +RESULT_TEST_BIN := $(BUILD_DIR)/result_test +SCOPED_FILE_TEST_BIN := $(BUILD_DIR)/scoped_file_test RESULT_TEST_SRC := tests/app/core/result_test.cpp +SCOPED_FILE_TEST_SRC := tests/helpers/scoped_file_test.cpp .PHONY: all test clean all: test - -test: $(TEST_BIN) - ./$(TEST_BIN) +test: $(RESULT_TEST_BIN) \ + $(SCOPED_FILE_TEST_BIN) + ./$(RESULT_TEST_BIN) + ./$(SCOPED_FILE_TEST_BIN) -$(TEST_BIN): $(RESULT_TEST_SRC) +$(RESULT_TEST_BIN): $(RESULT_TEST_SRC) + @mkdir -p $(BUILD_DIR) + $(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) + + +$(SCOPED_FILE_TEST_BIN): $(SCOPED_FILE_TEST_SRC) @mkdir -p $(BUILD_DIR) $(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) diff --git a/tests/helpers/scoped_file.hpp b/tests/helpers/scoped_file.hpp new file mode 100644 index 0000000..b1fa85a --- /dev/null +++ b/tests/helpers/scoped_file.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include +#include +#include + +class ScopedFile { +public: + explicit ScopedFile(std::string fileName) : fileName_(std::move(fileName)) {} + + void throwIfExists() const { + if (std::filesystem::exists(fileName_)) { + throw std::runtime_error("Test file already exists: " + fileName_); + } + } + + const std::string &getFileName() const { return fileName_; } + + ~ScopedFile() noexcept(false) { + std::error_code ec; + + std::filesystem::remove(fileName_, ec); + } + +private: + std::string fileName_; +}; diff --git a/tests/helpers/scoped_file_test.cpp b/tests/helpers/scoped_file_test.cpp new file mode 100644 index 0000000..efc1054 --- /dev/null +++ b/tests/helpers/scoped_file_test.cpp @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include + +#include "scoped_file.hpp" + +namespace { + +void testFileRemovedAfterScope() { + const std::string fileName = "scoped_file_test.log"; + + { + ScopedFile file(fileName); + + file.throwIfExists(); + + std::ofstream output(file.getFileName()); + + assert(output.is_open()); + + output << "test"; + + output.close(); + + assert(std::filesystem::exists(fileName)); + } // call ~ScopedFile() + + assert(!std::filesystem::exists(fileName)); +} + +void testThrowIfExists() { + const std::string fileName = "existing_file.log"; + + { + ScopedFile file(fileName); + + if (std::filesystem::exists(fileName)) { + throw std::runtime_error("Test file already exists: " + fileName); + } + + std::ofstream output(file.getFileName()); + + assert(output.is_open()); + + output.close(); + + bool thrown = false; + + try { + file.throwIfExists(); + } catch (const std::runtime_error &) { + thrown = true; + } + + assert(thrown); + } + + assert(!std::filesystem::exists(fileName)); +} + +void testGetFileName() { + ScopedFile file("test.log"); + + file.throwIfExists(); + + assert(file.getFileName() == "test.log"); +} + +void runTests() { + testFileRemovedAfterScope(); + testThrowIfExists(); + testGetFileName(); +} + +} // namespace + +int main() { + runTests(); + + return 0; +}