From 5619702d31f7de8bb190edd61dbcbfb443849e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Sun, 11 Apr 2021 00:48:16 +0200 Subject: [PATCH 1/2] Extract TemporaryDirectory test helper from yulPhaser's tests into a more general location --- test/CMakeLists.txt | 3 + test/TemporaryDirectory.cpp | 65 ++++++++++++++++++++ test/TemporaryDirectory.h | 52 ++++++++++++++++ test/TemporaryDirectoryTest.cpp | 95 ++++++++++++++++++++++++++++++ test/yulPhaser/AlgorithmRunner.cpp | 2 + test/yulPhaser/Common.cpp | 2 + test/yulPhaser/Phaser.cpp | 2 + test/yulPhaser/TestHelpers.cpp | 39 ------------ test/yulPhaser/TestHelpers.h | 25 -------- test/yulPhaser/TestHelpersTest.cpp | 61 ------------------- 10 files changed, 221 insertions(+), 125 deletions(-) create mode 100644 test/TemporaryDirectory.cpp create mode 100644 test/TemporaryDirectory.h create mode 100644 test/TemporaryDirectoryTest.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 931e35492..9a7fdc8bd 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -11,6 +11,9 @@ set(sources InteractiveTests.h Metadata.cpp Metadata.h + TemporaryDirectory.cpp + TemporaryDirectory.h + TemporaryDirectoryTest.cpp TestCase.cpp TestCase.h TestCaseReader.cpp diff --git a/test/TemporaryDirectory.cpp b/test/TemporaryDirectory.cpp new file mode 100644 index 000000000..9bd447cf8 --- /dev/null +++ b/test/TemporaryDirectory.cpp @@ -0,0 +1,65 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ +// SPDX-License-Identifier: GPL-3.0 + +#include + +#include + +#include +#include +#include + +using namespace std; +using namespace solidity; +using namespace solidity::test; + +namespace fs = boost::filesystem; + +TemporaryDirectory::TemporaryDirectory(std::string const& _prefix): + m_path((fs::temp_directory_path() / fs::unique_path(_prefix + "%%%%-%%%%-%%%%-%%%%")).string()) +{ + // Prefix should just be a file name and not contain anything that would make us step out of /tmp. + assert(fs::path(_prefix) == fs::path(_prefix).stem()); + + fs::create_directory(m_path); +} + +TemporaryDirectory::~TemporaryDirectory() +{ + // A few paranoid sanity checks just to be extra sure we're not deleting someone's homework. + assert(m_path.find(fs::temp_directory_path().string()) == 0); + assert(fs::path(m_path) != fs::temp_directory_path()); + assert(fs::path(m_path) != fs::path(m_path).root_path()); + assert(!fs::path(m_path).empty()); + + boost::system::error_code errorCode; + uintmax_t numRemoved = fs::remove_all(m_path, errorCode); + if (errorCode.value() != boost::system::errc::success) + { + cerr << "Failed to completely remove temporary directory '" << m_path << "'. "; + cerr << "Only " << numRemoved << " files were actually removed." << endl; + cerr << "Reason: " << errorCode.message() << endl; + } +} + +string TemporaryDirectory::memberPath(string const& _relativePath) const +{ + assert(fs::path(_relativePath).is_relative()); + + return (fs::path(m_path) / _relativePath).string(); +} diff --git a/test/TemporaryDirectory.h b/test/TemporaryDirectory.h new file mode 100644 index 000000000..23b26736d --- /dev/null +++ b/test/TemporaryDirectory.h @@ -0,0 +1,52 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ +// SPDX-License-Identifier: GPL-3.0 +/** + * Utility for creating temporary directories for use in tests. + */ + +#pragma once + +#include + +namespace solidity::test +{ + +/** + * An object that creates a unique temporary directory and automatically deletes it and its + * content upon being destroyed. + * + * The directory is guaranteed to be newly created and empty. Directory names are generated + * randomly. If a directory with the same name already exists (very unlikely but possible) the + * object won't reuse it and will fail with an exception instead. + */ +class TemporaryDirectory +{ +public: + TemporaryDirectory(std::string const& _prefix = "solidity-test-"); + ~TemporaryDirectory(); + + std::string const& path() const { return m_path; } + + /// Converts a path relative to the directory held by the object into an absolute one. + std::string memberPath(std::string const& _relativePath) const; + +private: + std::string m_path; +}; + +} diff --git a/test/TemporaryDirectoryTest.cpp b/test/TemporaryDirectoryTest.cpp new file mode 100644 index 000000000..577d97161 --- /dev/null +++ b/test/TemporaryDirectoryTest.cpp @@ -0,0 +1,95 @@ +/* + This file is part of solidity. + + solidity is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + solidity is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with solidity. If not, see . +*/ +// SPDX-License-Identifier: GPL-3.0 + +#include + +#include +#include + +#include + +using namespace std; +using namespace boost::test_tools; + +namespace fs = boost::filesystem; + +namespace solidity::test +{ + +BOOST_AUTO_TEST_SUITE(TemporaryDirectoryTest) + +BOOST_AUTO_TEST_CASE(TemporaryDirectory_should_create_and_delete_a_unique_and_empty_directory) +{ + fs::path dirPath; + { + TemporaryDirectory tempDir("temporary-directory-test-"); + dirPath = tempDir.path(); + + BOOST_TEST(dirPath.stem().string().find("temporary-directory-test-") == 0); + BOOST_TEST(fs::equivalent(dirPath.parent_path(), fs::temp_directory_path())); + BOOST_TEST(fs::is_directory(dirPath)); + BOOST_TEST(fs::is_empty(dirPath)); + } + BOOST_TEST(!fs::exists(dirPath)); +} + +BOOST_AUTO_TEST_CASE(TemporaryDirectory_should_delete_its_directory_even_if_not_empty) +{ + fs::path dirPath; + { + TemporaryDirectory tempDir("temporary-directory-test-"); + dirPath = tempDir.path(); + + BOOST_TEST(fs::is_directory(dirPath)); + + { + ofstream tmpFile((dirPath / "test-file.txt").string()); + tmpFile << "Delete me!" << endl; + } + assert(fs::is_regular_file(dirPath / "test-file.txt")); + } + BOOST_TEST(!fs::exists(dirPath / "test-file.txt")); +} + +BOOST_AUTO_TEST_CASE(TemporaryDirectory_memberPath_should_construct_paths_relative_to_the_temporary_directory) +{ + TemporaryDirectory tempDir("temporary-directory-test-"); + + BOOST_TEST(fs::equivalent(tempDir.memberPath(""), tempDir.path())); + BOOST_TEST(fs::equivalent(tempDir.memberPath("."), tempDir.path() / fs::path("."))); + BOOST_TEST(fs::equivalent(tempDir.memberPath(".."), tempDir.path() / fs::path(".."))); + + // NOTE: fs::equivalent() only works with paths that actually exist + { + ofstream file; + file.open(tempDir.memberPath("file.txt"), ios::out); + } + BOOST_TEST(fs::equivalent(tempDir.memberPath("file.txt"), tempDir.path() / fs::path("file.txt"))); + + { + fs::create_directories(tempDir.memberPath("a/b/")); + + ofstream file; + file.open(tempDir.memberPath("a/b/file.txt"), ios::out); + } + BOOST_TEST(fs::equivalent(tempDir.memberPath("a/b/file.txt"), tempDir.path() / fs::path("a") / fs::path("b") / fs::path("file.txt"))); +} + +BOOST_AUTO_TEST_SUITE_END() + +} diff --git a/test/yulPhaser/AlgorithmRunner.cpp b/test/yulPhaser/AlgorithmRunner.cpp index cb8f7633e..2379ddec4 100644 --- a/test/yulPhaser/AlgorithmRunner.cpp +++ b/test/yulPhaser/AlgorithmRunner.cpp @@ -16,6 +16,7 @@ */ // SPDX-License-Identifier: GPL-3.0 +#include #include #include @@ -37,6 +38,7 @@ using namespace std; using namespace boost::unit_test::framework; using namespace boost::test_tools; using namespace solidity::langutil; +using namespace solidity::test; using namespace solidity::util; using namespace solidity::yul; diff --git a/test/yulPhaser/Common.cpp b/test/yulPhaser/Common.cpp index 417b9ce3c..1535abc4e 100644 --- a/test/yulPhaser/Common.cpp +++ b/test/yulPhaser/Common.cpp @@ -16,6 +16,7 @@ */ // SPDX-License-Identifier: GPL-3.0 +#include #include #include @@ -31,6 +32,7 @@ using namespace std; using namespace boost::test_tools; +using namespace solidity::test; using namespace solidity::util; namespace solidity::phaser::test diff --git a/test/yulPhaser/Phaser.cpp b/test/yulPhaser/Phaser.cpp index 013f3a9e0..26799dd49 100644 --- a/test/yulPhaser/Phaser.cpp +++ b/test/yulPhaser/Phaser.cpp @@ -16,6 +16,7 @@ */ // SPDX-License-Identifier: GPL-3.0 +#include #include #include @@ -31,6 +32,7 @@ #include using namespace std; +using namespace solidity::test; using namespace solidity::util; using namespace solidity::langutil; using namespace solidity::yul; diff --git a/test/yulPhaser/TestHelpers.cpp b/test/yulPhaser/TestHelpers.cpp index 348973a48..1df5c4e54 100644 --- a/test/yulPhaser/TestHelpers.cpp +++ b/test/yulPhaser/TestHelpers.cpp @@ -20,10 +20,7 @@ #include -#include - #include -#include using namespace std; using namespace solidity; @@ -31,8 +28,6 @@ using namespace solidity::yul; using namespace solidity::phaser; using namespace solidity::phaser::test; -namespace fs = boost::filesystem; - function phaser::test::wholeChromosomeReplacement(Chromosome _newChromosome) { return [_newChromosome = move(_newChromosome)](Chromosome const&) { return _newChromosome; }; @@ -82,40 +77,6 @@ size_t phaser::test::countDifferences(Chromosome const& _chromosome1, Chromosome )); } -TemporaryDirectory::TemporaryDirectory(std::string const& _prefix): - m_path((fs::temp_directory_path() / fs::unique_path(_prefix + "%%%%-%%%%-%%%%-%%%%")).string()) -{ - // Prefix should just be a file name and not contain anything that would make us step out of /tmp. - assert(fs::path(_prefix) == fs::path(_prefix).stem()); - - fs::create_directory(m_path); -} - -TemporaryDirectory::~TemporaryDirectory() -{ - // A few paranoid sanity checks just to be extra sure we're not deleting someone's homework. - assert(m_path.find(fs::temp_directory_path().string()) == 0); - assert(fs::path(m_path) != fs::temp_directory_path()); - assert(fs::path(m_path) != fs::path(m_path).root_path()); - assert(!fs::path(m_path).empty()); - - boost::system::error_code errorCode; - uintmax_t numRemoved = fs::remove_all(m_path, errorCode); - if (errorCode.value() != boost::system::errc::success) - { - cerr << "Failed to completely remove temporary directory '" << m_path << "'. "; - cerr << "Only " << numRemoved << " files were actually removed." << endl; - cerr << "Reason: " << errorCode.message() << endl; - } -} - -string TemporaryDirectory::memberPath(string const& _relativePath) const -{ - assert(fs::path(_relativePath).is_relative()); - - return (fs::path(m_path) / _relativePath).string(); -} - string phaser::test::stripWhitespace(string const& input) { regex whitespaceRegex("\\s+"); diff --git a/test/yulPhaser/TestHelpers.h b/test/yulPhaser/TestHelpers.h index 12748a6a1..31a5907f3 100644 --- a/test/yulPhaser/TestHelpers.h +++ b/test/yulPhaser/TestHelpers.h @@ -107,31 +107,6 @@ size_t countDifferences(Chromosome const& _chromosome1, Chromosome const& _chrom /// integers. std::map enumerateOptmisationSteps(); -// FILESYSTEM UTILITIES - -/** - * An object that creates a unique temporary directory and automatically deletes it and its - * content upon being destroyed. - * - * The directory is guaranteed to be newly created and empty. Directory names are generated - * randomly. If a directory with the same name already exists (very unlikely but possible) the - * object won't reuse it and will fail with an exception instead. - */ -class TemporaryDirectory -{ -public: - TemporaryDirectory(std::string const& _prefix = "yul-phaser-test-"); - ~TemporaryDirectory(); - - std::string const& path() const { return m_path; } - - /// Converts a path relative to the directory held by the object into an absolute one. - std::string memberPath(std::string const& _relativePath) const; - -private: - std::string m_path; -}; - // STRING UTILITIES /// Returns the input string with all the whitespace characters (spaces, line endings, etc.) removed. diff --git a/test/yulPhaser/TestHelpersTest.cpp b/test/yulPhaser/TestHelpersTest.cpp index b90d65f5e..89b98ecad 100644 --- a/test/yulPhaser/TestHelpersTest.cpp +++ b/test/yulPhaser/TestHelpersTest.cpp @@ -20,18 +20,14 @@ #include -#include #include -#include #include using namespace std; using namespace solidity::yul; using namespace boost::test_tools; -namespace fs = boost::filesystem; - namespace solidity::phaser::test { @@ -119,63 +115,6 @@ BOOST_AUTO_TEST_CASE(enumerateOptimisationSteps_should_assing_indices_to_all_ava } } -BOOST_AUTO_TEST_CASE(TemporaryDirectory_should_create_and_delete_a_unique_and_empty_directory) -{ - fs::path dirPath; - { - TemporaryDirectory tempDir("temporary-directory-test-"); - dirPath = tempDir.path(); - - BOOST_TEST(dirPath.stem().string().find("temporary-directory-test-") == 0); - BOOST_TEST(fs::equivalent(dirPath.parent_path(), fs::temp_directory_path())); - BOOST_TEST(fs::is_directory(dirPath)); - BOOST_TEST(fs::is_empty(dirPath)); - } - BOOST_TEST(!fs::exists(dirPath)); -} - -BOOST_AUTO_TEST_CASE(TemporaryDirectory_should_delete_its_directory_even_if_not_empty) -{ - fs::path dirPath; - { - TemporaryDirectory tempDir("temporary-directory-test-"); - dirPath = tempDir.path(); - - BOOST_TEST(fs::is_directory(dirPath)); - - { - ofstream tmpFile((dirPath / "test-file.txt").string()); - tmpFile << "Delete me!" << endl; - } - assert(fs::is_regular_file(dirPath / "test-file.txt")); - } - BOOST_TEST(!fs::exists(dirPath / "test-file.txt")); -} - -BOOST_AUTO_TEST_CASE(TemporaryDirectory_memberPath_should_construct_paths_relative_to_the_temporary_directory) -{ - TemporaryDirectory tempDir("temporary-directory-test-"); - - BOOST_TEST(fs::equivalent(tempDir.memberPath(""), tempDir.path())); - BOOST_TEST(fs::equivalent(tempDir.memberPath("."), tempDir.path() / fs::path("."))); - BOOST_TEST(fs::equivalent(tempDir.memberPath(".."), tempDir.path() / fs::path(".."))); - - // NOTE: fs::equivalent() only works with paths that actually exist - { - ofstream file; - file.open(tempDir.memberPath("file.txt"), ios::out); - } - BOOST_TEST(fs::equivalent(tempDir.memberPath("file.txt"), tempDir.path() / fs::path("file.txt"))); - - { - fs::create_directories(tempDir.memberPath("a/b/")); - - ofstream file; - file.open(tempDir.memberPath("a/b/file.txt"), ios::out); - } - BOOST_TEST(fs::equivalent(tempDir.memberPath("a/b/file.txt"), tempDir.path() / fs::path("a") / fs::path("b") / fs::path("file.txt"))); -} - BOOST_AUTO_TEST_CASE(stripWhitespace_should_remove_all_whitespace_characters_from_a_string) { BOOST_TEST(stripWhitespace("") == ""); From cdebbb0dbbea3341d107a29b1086a3bff659cbfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Fri, 16 Apr 2021 20:45:19 +0200 Subject: [PATCH 2/2] TemporaryDirectory: Expose boost::filesystem::path in class interface --- test/TemporaryDirectory.cpp | 17 +++++------------ test/TemporaryDirectory.h | 9 ++++----- test/TemporaryDirectoryTest.cpp | 24 ------------------------ test/yulPhaser/AlgorithmRunner.cpp | 2 +- test/yulPhaser/Common.cpp | 4 ++-- test/yulPhaser/Phaser.cpp | 16 ++++++++-------- 6 files changed, 20 insertions(+), 52 deletions(-) diff --git a/test/TemporaryDirectory.cpp b/test/TemporaryDirectory.cpp index 9bd447cf8..8d03c657e 100644 --- a/test/TemporaryDirectory.cpp +++ b/test/TemporaryDirectory.cpp @@ -31,7 +31,7 @@ using namespace solidity::test; namespace fs = boost::filesystem; TemporaryDirectory::TemporaryDirectory(std::string const& _prefix): - m_path((fs::temp_directory_path() / fs::unique_path(_prefix + "%%%%-%%%%-%%%%-%%%%")).string()) + m_path(fs::temp_directory_path() / fs::unique_path(_prefix + "%%%%-%%%%-%%%%-%%%%")) { // Prefix should just be a file name and not contain anything that would make us step out of /tmp. assert(fs::path(_prefix) == fs::path(_prefix).stem()); @@ -42,10 +42,10 @@ TemporaryDirectory::TemporaryDirectory(std::string const& _prefix): TemporaryDirectory::~TemporaryDirectory() { // A few paranoid sanity checks just to be extra sure we're not deleting someone's homework. - assert(m_path.find(fs::temp_directory_path().string()) == 0); - assert(fs::path(m_path) != fs::temp_directory_path()); - assert(fs::path(m_path) != fs::path(m_path).root_path()); - assert(!fs::path(m_path).empty()); + assert(m_path.string().find(fs::temp_directory_path().string()) == 0); + assert(m_path != fs::temp_directory_path()); + assert(m_path != m_path.root_path()); + assert(!m_path.empty()); boost::system::error_code errorCode; uintmax_t numRemoved = fs::remove_all(m_path, errorCode); @@ -56,10 +56,3 @@ TemporaryDirectory::~TemporaryDirectory() cerr << "Reason: " << errorCode.message() << endl; } } - -string TemporaryDirectory::memberPath(string const& _relativePath) const -{ - assert(fs::path(_relativePath).is_relative()); - - return (fs::path(m_path) / _relativePath).string(); -} diff --git a/test/TemporaryDirectory.h b/test/TemporaryDirectory.h index 23b26736d..1b894fa6e 100644 --- a/test/TemporaryDirectory.h +++ b/test/TemporaryDirectory.h @@ -21,6 +21,8 @@ #pragma once +#include + #include namespace solidity::test @@ -40,13 +42,10 @@ public: TemporaryDirectory(std::string const& _prefix = "solidity-test-"); ~TemporaryDirectory(); - std::string const& path() const { return m_path; } - - /// Converts a path relative to the directory held by the object into an absolute one. - std::string memberPath(std::string const& _relativePath) const; + boost::filesystem::path const& path() const { return m_path; } private: - std::string m_path; + boost::filesystem::path m_path; }; } diff --git a/test/TemporaryDirectoryTest.cpp b/test/TemporaryDirectoryTest.cpp index 577d97161..7ecf9ce96 100644 --- a/test/TemporaryDirectoryTest.cpp +++ b/test/TemporaryDirectoryTest.cpp @@ -66,30 +66,6 @@ BOOST_AUTO_TEST_CASE(TemporaryDirectory_should_delete_its_directory_even_if_not_ BOOST_TEST(!fs::exists(dirPath / "test-file.txt")); } -BOOST_AUTO_TEST_CASE(TemporaryDirectory_memberPath_should_construct_paths_relative_to_the_temporary_directory) -{ - TemporaryDirectory tempDir("temporary-directory-test-"); - - BOOST_TEST(fs::equivalent(tempDir.memberPath(""), tempDir.path())); - BOOST_TEST(fs::equivalent(tempDir.memberPath("."), tempDir.path() / fs::path("."))); - BOOST_TEST(fs::equivalent(tempDir.memberPath(".."), tempDir.path() / fs::path(".."))); - - // NOTE: fs::equivalent() only works with paths that actually exist - { - ofstream file; - file.open(tempDir.memberPath("file.txt"), ios::out); - } - BOOST_TEST(fs::equivalent(tempDir.memberPath("file.txt"), tempDir.path() / fs::path("file.txt"))); - - { - fs::create_directories(tempDir.memberPath("a/b/")); - - ofstream file; - file.open(tempDir.memberPath("a/b/file.txt"), ios::out); - } - BOOST_TEST(fs::equivalent(tempDir.memberPath("a/b/file.txt"), tempDir.path() / fs::path("a") / fs::path("b") / fs::path("file.txt"))); -} - BOOST_AUTO_TEST_SUITE_END() } diff --git a/test/yulPhaser/AlgorithmRunner.cpp b/test/yulPhaser/AlgorithmRunner.cpp index 2379ddec4..c0c1aabd2 100644 --- a/test/yulPhaser/AlgorithmRunner.cpp +++ b/test/yulPhaser/AlgorithmRunner.cpp @@ -120,7 +120,7 @@ public: protected: TemporaryDirectory m_tempDir; - string const m_autosavePath = m_tempDir.memberPath("population-autosave.txt"); + string const m_autosavePath = (m_tempDir.path() / "population-autosave.txt").string(); RandomisingAlgorithm m_algorithm; }; diff --git a/test/yulPhaser/Common.cpp b/test/yulPhaser/Common.cpp index 1535abc4e..058386022 100644 --- a/test/yulPhaser/Common.cpp +++ b/test/yulPhaser/Common.cpp @@ -75,11 +75,11 @@ BOOST_AUTO_TEST_SUITE(CommonTest) BOOST_FIXTURE_TEST_CASE(readLinesFromFile_should_return_all_lines_from_a_text_file_as_strings_without_newlines, ReadLinesFromFileFixture) { { - ofstream tmpFile(m_tempDir.memberPath("test-file.txt")); + ofstream tmpFile((m_tempDir.path() / "test-file.txt").string()); tmpFile << endl << "Line 1" << endl << endl << endl << "Line 2" << endl << "#" << endl << endl; } - vector lines = readLinesFromFile(m_tempDir.memberPath("test-file.txt")); + vector lines = readLinesFromFile((m_tempDir.path() / "test-file.txt").string()); BOOST_TEST((lines == vector{"", "Line 1", "", "", "Line 2", "#", ""})); } diff --git a/test/yulPhaser/Phaser.cpp b/test/yulPhaser/Phaser.cpp index 26799dd49..d5d5dac59 100644 --- a/test/yulPhaser/Phaser.cpp +++ b/test/yulPhaser/Phaser.cpp @@ -328,11 +328,11 @@ BOOST_FIXTURE_TEST_CASE(build_should_respect_population_from_file_option, Poulat TemporaryDirectory tempDir; for (auto const& [fileName, chromosomes]: fileContent) { - ofstream tmpFile(tempDir.memberPath(fileName)); + ofstream tmpFile((tempDir.path() / fileName).string()); for (auto const& chromosome: chromosomes) tmpFile << chromosome << endl; - m_options.populationFromFile.push_back(tempDir.memberPath(fileName)); + m_options.populationFromFile.push_back((tempDir.path() / fileName).string()); } BOOST_TEST( @@ -361,13 +361,13 @@ BOOST_FIXTURE_TEST_CASE(build_should_combine_populations_from_all_sources, Poula { TemporaryDirectory tempDir; { - ofstream tmpFile(tempDir.memberPath("population.txt")); + ofstream tmpFile((tempDir.path() / "population.txt").string()); tmpFile << "axc" << endl << "fcL" << endl; } m_options.population = {"axc", "fcL"}; m_options.randomPopulation = {2}; - m_options.populationFromFile = {tempDir.memberPath("population.txt")}; + m_options.populationFromFile = {(tempDir.path() / "population.txt").string()}; m_options.minChromosomeLength = 3; m_options.maxChromosomeLength = 3; @@ -419,9 +419,9 @@ BOOST_AUTO_TEST_CASE(build_should_load_programs_from_files) vector sources{"{}", "{{}}", "{{{}}}"}; ProgramFactory::Options options{ /* inputFiles = */ { - tempDir.memberPath("program1.yul"), - tempDir.memberPath("program2.yul"), - tempDir.memberPath("program3.yul"), + (tempDir.path() / "program1.yul").string(), + (tempDir.path() / "program2.yul").string(), + (tempDir.path() / "program3.yul").string(), }, /* prefix = */ "", }; @@ -446,7 +446,7 @@ BOOST_AUTO_TEST_CASE(build_should_apply_prefix) { TemporaryDirectory tempDir; ProgramFactory::Options options{ - /* inputFiles = */ {tempDir.memberPath("program1.yul")}, + /* inputFiles = */ {(tempDir.path() / "program1.yul").string()}, /* prefix = */ "f", };