diff --git a/Makefile b/Makefile index ea34003..cbbd7e9 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,30 @@ +export ROOT_DIR := $(CURDIR) + +export BUILD_DIR := $(ROOT_DIR)/build + +export CC := gcc + +export CXXFLAGS := \ + -std=c++17 \ + -Wall \ + -Wextra \ + -Werror + +export LDLIBS := -lstdc++ + .PHONY: all logger app tests clean - all: logger app tests - logger: $(MAKE) -C logger - app: logger $(MAKE) -C app - -tests: logger +tests: $(MAKE) -C tests - clean: $(MAKE) -C logger clean $(MAKE) -C app clean diff --git a/logger/Makefile b/logger/Makefile index 282ca34..05a8a57 100644 --- a/logger/Makefile +++ b/logger/Makefile @@ -1,41 +1,24 @@ -ROOT_DIR := $(abspath ..) +CXXFLAGS += \ + -I$(ROOT_DIR)/core/include \ + -Iinclude -CC := gcc - -CXXFLAGS := -std=c++17 \ - -Wall \ - -Wextra \ - -Werror \ - -fPIC \ - -I$(ROOT_DIR)/core/include \ - -Iinclude - -LDFLAGS := -lstdc++ - -BUILD_DIR := $(ROOT_DIR)/build +LDFLAGS := \ + -shared \ + -Wl,--no-undefined TARGET := $(BUILD_DIR)/liblogger.so -SRC := src/logger.cpp \ - src/time_utils.cpp - +SRC := \ + src/logger.cpp \ + src/time_utils.cpp .PHONY: all clean - all: $(TARGET) - $(TARGET): $(SRC) @mkdir -p $(BUILD_DIR) - - $(CC) \ - $(CXXFLAGS) \ - -shared \ - $^ \ - -o $@ \ - $(LDFLAGS) - + $(CC) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS) clean: rm -f $(TARGET) diff --git a/tests/Makefile b/tests/Makefile index e34455f..588f045 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,62 +1,13 @@ ROOT_DIR := $(abspath ..) -CXX := gcc - -CXXFLAGS := -std=c++17 \ - -Wall \ - -Wextra \ - -Werror \ - -I$(ROOT_DIR)/core/include \ - -I$(ROOT_DIR)/logger/include \ - -Ihelpers - -LDFLAGS := -lstdc++ - -BUILD_DIR := $(ROOT_DIR)/build - - -RESULT_TEST_BIN := $(BUILD_DIR)/result_test -LOGGER_TEST_BIN := $(BUILD_DIR)/logger_test -SCOPED_FILE_TEST_BIN := $(BUILD_DIR)/scoped_file_test - - -RESULT_TEST_SRC := core/result_test.cpp -LOGGER_TEST_SRC := core/logger_test.cpp -SCOPED_FILE_TEST_SRC := helpers/scoped_file_test.cpp - - -LOGGER_SRC := $(ROOT_DIR)/logger/src/logger.cpp \ - $(ROOT_DIR)/logger/src/time_utils.cpp - - -.PHONY: all test clean - - -all: test - - -test: $(RESULT_TEST_BIN) \ - $(LOGGER_TEST_BIN) \ - $(SCOPED_FILE_TEST_BIN) - $(RESULT_TEST_BIN) - $(LOGGER_TEST_BIN) - $(SCOPED_FILE_TEST_BIN) - - -$(RESULT_TEST_BIN): $(RESULT_TEST_SRC) - @mkdir -p $(BUILD_DIR) - $(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) - - -$(LOGGER_TEST_BIN): $(LOGGER_TEST_SRC) $(LOGGER_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) +.PHONY: all clean +all: + $(MAKE) -C app + $(MAKE) -C core + $(MAKE) -C logger clean: - rm -rf $(BUILD_DIR) + $(MAKE) -C app clean + $(MAKE) -C core clean + $(MAKE) -C logger clean diff --git a/tests/core/Makefile b/tests/core/Makefile new file mode 100644 index 0000000..049be40 --- /dev/null +++ b/tests/core/Makefile @@ -0,0 +1,18 @@ +CXXFLAGS += \ + -I$(ROOT_DIR)/core/include + +TARGET := $(BUILD_DIR)/result_test + +SRC := result_test.cpp + +.PHONY: all clean + +all: $(TARGET) + $(TARGET) + +$(TARGET): $(SRC) + @mkdir -p $(BUILD_DIR) + $(CC) $(CXXFLAGS) $^ -o $@ $(LDLIBS) + +clean: + rm -f $(TARGET) diff --git a/tests/core/logger_test.cpp b/tests/core/logger_test.cpp deleted file mode 100644 index da86ad5..0000000 --- a/tests/core/logger_test.cpp +++ /dev/null @@ -1,123 +0,0 @@ -#include -#include -#include - -#include "logger.hpp" - -namespace { - -using namespace logger; - -void testLoggerCreation() { - Logger logger("test.log", LogLevel::info()); - - assert(logger.getFileName() == "test.log"); - assert(logger.getLogLevel() == LogLevel::info()); -} - -void testWithLogLevel() { - Logger logger("test.log", LogLevel::info()); - - auto debugLogger = logger.withLogLevel(LogLevel::debug()); - - // Исходный объект не изменился - assert(logger.getLogLevel() == LogLevel::info()); - - // Новый объект получил новый уровень - assert(debugLogger.getLogLevel() == LogLevel::debug()); - - // Имя файла сохранилось - assert(debugLogger.getFileName() == "test.log"); -} - -void testWithFileName() { - Logger logger("old.log", LogLevel::info()); - - auto newLogger = logger.withFileName("new.log"); - - // Исходный объект не изменился - assert(logger.getFileName() == "old.log"); - - // Новый объект получил новый файл - assert(newLogger.getFileName() == "new.log"); - - // Уровень сохранился - assert(newLogger.getLogLevel() == LogLevel::info()); -} - -void testWriteLogSuccess() { - const std::string fileName = "logger_test.log"; - - Logger logger(fileName, LogLevel::info()); - - auto result = logger.writeMessage(LogLevel::info(), "Application started"); - - assert(result.isSuccess()); - assert(result.getValue()); - - std::ifstream file(fileName); - - assert(file.is_open()); - - std::string content; - std::getline(file, content); - - assert(content.find("Application started") != std::string::npos); - - file.close(); - - std::remove(fileName.c_str()); -} - -void testWriteLogFailure() { - Logger logger("/invalid/path/logger.log", LogLevel::info()); - - auto result = logger.writeMessage(LogLevel::info(), "message"); - - assert(result.isFailure()); - assert(!result.getError().empty()); -} - -void testMultipleWrites() { - const std::string fileName = "multiple.log"; - - Logger logger(fileName, LogLevel::info()); - - assert(logger.writeMessage(LogLevel::info(), "first").isSuccess()); - - assert(logger.writeMessage(LogLevel::error(), "second").isSuccess()); - - std::ifstream file(fileName); - - assert(file.is_open()); - - std::string line1; - std::string line2; - - std::getline(file, line1); - std::getline(file, line2); - - assert(line1.find("first") != std::string::npos); - assert(line2.find("second") != std::string::npos); - - file.close(); - - std::remove(fileName.c_str()); -} - -void runTests() { - testLoggerCreation(); - testWithLogLevel(); - testWithFileName(); - testWriteLogSuccess(); - testWriteLogFailure(); - testMultipleWrites(); -} - -} // namespace - -int main() { - runTests(); - - return 0; -} diff --git a/tests/logger/Makefile b/tests/logger/Makefile new file mode 100644 index 0000000..a27568b --- /dev/null +++ b/tests/logger/Makefile @@ -0,0 +1,27 @@ +CXXFLAGS += \ + -I$(ROOT_DIR)/core/include \ + -I$(ROOT_DIR)/logger/include \ + -Ihelpers + +TARGET := $(BUILD_DIR)/logger_test + +SRC := \ + $(ROOT_DIR)/logger/src/logger.cpp \ + $(ROOT_DIR)/logger/src/time_utils.cpp \ + logger_test.cpp + +.PHONY: all clean helpers + +all: helpers $(TARGET) + $(TARGET) + +helpers: + $(MAKE) -C helpers + +$(TARGET): $(SRC) + @mkdir -p $(BUILD_DIR) + $(CC) $(CXXFLAGS) $^ -o $@ $(LDLIBS) + +clean: + rm -f $(TARGET) + $(MAKE) -C helpers clean diff --git a/tests/logger/helpers/Makefile b/tests/logger/helpers/Makefile new file mode 100644 index 0000000..ee82583 --- /dev/null +++ b/tests/logger/helpers/Makefile @@ -0,0 +1,15 @@ +TARGET := $(BUILD_DIR)/scoped_file_test + +SRC := scoped_file_test.cpp + +.PHONY: all clean + +all: $(TARGET) + $(TARGET) + +$(TARGET): $(SRC) + @mkdir -p $(BUILD_DIR) + $(CC) $(CXXFLAGS) $^ -o $@ $(LDLIBS) + +clean: + rm -f $(TARGET) diff --git a/tests/helpers/scoped_file.hpp b/tests/logger/helpers/scoped_file.hpp similarity index 88% rename from tests/helpers/scoped_file.hpp rename to tests/logger/helpers/scoped_file.hpp index fc1c30d..d8a9418 100644 --- a/tests/helpers/scoped_file.hpp +++ b/tests/logger/helpers/scoped_file.hpp @@ -4,7 +4,7 @@ #include #include -namespace helpers { +namespace logger::tests::helpers { class ScopedFile { public: @@ -28,4 +28,4 @@ private: std::string fileName_; }; -} // namespace helpers +} // namespace logger::tests::helpers diff --git a/tests/helpers/scoped_file_test.cpp b/tests/logger/helpers/scoped_file_test.cpp similarity index 97% rename from tests/helpers/scoped_file_test.cpp rename to tests/logger/helpers/scoped_file_test.cpp index b28546f..4aa4d39 100644 --- a/tests/helpers/scoped_file_test.cpp +++ b/tests/logger/helpers/scoped_file_test.cpp @@ -8,7 +8,7 @@ namespace { -using namespace helpers; +using namespace logger::tests::helpers; void testFileRemovedAfterScope() { const std::string fileName = "scoped_file_test.log";