From 514c439413970d4edec275542ca79e0ac2b75461 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sun, 9 Jun 2024 22:37:34 +0200 Subject: [PATCH] Changed std::tmpnam (deprecated) to a custom random name generator in cli tests --- tests/test_cli_handler.cc | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/tests/test_cli_handler.cc b/tests/test_cli_handler.cc index d47ac55c..98a3b739 100644 --- a/tests/test_cli_handler.cc +++ b/tests/test_cli_handler.cc @@ -22,6 +22,7 @@ #include "doctest/doctest.h" +#include #include #include @@ -32,6 +33,36 @@ std::shared_ptr make_sstream_logger(std::ostream &ostr) "clanguml-logger", std::move(oss_sink)); } +std::string create_temp_file() +{ +#ifdef _WIN32 + const std::string result = std::tmpnam(nullptr); +#else + std::string result = std::filesystem::temp_directory_path(); + + if (result.empty()) { + result = "/tmp"; + } + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution<> distrib('A', 'Z'); + + const size_t filename_length = 10; + + do { + result += "/clanguml_test_"; + for (size_t i = 0; i < filename_length; ++i) { + char random_char = static_cast(distrib(gen)); + result += random_char; + } + } while (std::filesystem::exists(result)); + +#endif + + return result; +} + TEST_CASE("Test cli handler print_version") { using clanguml::cli::cli_flow_t; @@ -190,7 +221,7 @@ TEST_CASE("Test cli handler properly adds new diagram configs from template") std::vector argv{"clang-uml", "--init"}; // Generate temporary file path - std::string config_file{std::tmpnam(nullptr)}; + const std::string config_file{create_temp_file()}; std::ostringstream ostr; cli_handler cli{ostr, make_sstream_logger(ostr)}; @@ -270,7 +301,7 @@ TEST_CASE("Test cli handler properly reports error when adding config from " std::vector argv{"clang-uml", "--init"}; // Generate temporary file path - std::string config_file{std::tmpnam(nullptr)}; + std::string config_file{create_temp_file()}; std::ostringstream ostr; cli_handler cli{ostr, make_sstream_logger(ostr)}; @@ -368,7 +399,7 @@ TEST_CASE("Test cli handler properly initializes new config file") std::vector argv{"clang-uml", "--init"}; // Generate temporary file path - std::string config_file{std::tmpnam(nullptr)}; + std::string config_file{create_temp_file()}; std::ostringstream ostr; cli_handler cli{ostr, make_sstream_logger(ostr)}; @@ -438,7 +469,7 @@ TEST_CASE("Test cli handler properly adds new diagram configs") std::vector argv{"clang-uml", "--init"}; // Generate temporary file path - std::string config_file{std::tmpnam(nullptr)}; + std::string config_file{create_temp_file()}; std::ostringstream ostr; cli_handler cli{ostr, make_sstream_logger(ostr)};