66#include < fstream> // std::ofstream, std::ifstream
77#include < string> // std::string
88
9- TEST (IO_atomic_directory_replace , creates_when_original_absent) {
9+ TEST (IO_atomic_directory_swap , creates_when_original_absent) {
1010 const sourcemeta::core::TemporaryDirectory workspace{
1111 std::filesystem::path{BUILD_DIRECTORY}, " .test-atomic-" };
1212 const auto original{workspace.path () / " original" };
@@ -17,7 +17,7 @@ TEST(IO_atomic_directory_replace, creates_when_original_absent) {
1717
1818 EXPECT_FALSE (std::filesystem::exists (original));
1919
20- sourcemeta::core::atomic_directory_replace (original, replacement);
20+ sourcemeta::core::atomic_directory_swap (original, replacement);
2121
2222 EXPECT_TRUE (std::filesystem::exists (original));
2323 EXPECT_TRUE (std::filesystem::is_directory (original));
@@ -29,7 +29,7 @@ TEST(IO_atomic_directory_replace, creates_when_original_absent) {
2929 EXPECT_EQ (content, " hello" );
3030}
3131
32- TEST (IO_atomic_directory_replace, replaces_existing_directory ) {
32+ TEST (IO_atomic_directory_swap, swaps_existing_directories ) {
3333 const sourcemeta::core::TemporaryDirectory workspace{
3434 std::filesystem::path{BUILD_DIRECTORY}, " .test-atomic-" };
3535 const auto original{workspace.path () / " original" };
@@ -41,47 +41,63 @@ TEST(IO_atomic_directory_replace, replaces_existing_directory) {
4141 std::filesystem::create_directory (replacement);
4242 std::ofstream{replacement / " new.txt" } << " new" ;
4343
44- sourcemeta::core::atomic_directory_replace (original, replacement);
44+ sourcemeta::core::atomic_directory_swap (original, replacement);
4545
4646 EXPECT_TRUE (std::filesystem::exists (original));
4747 EXPECT_FALSE (std::filesystem::exists (original / " old.txt" ));
4848 EXPECT_TRUE (std::filesystem::exists (original / " new.txt" ));
4949
50- std::ifstream stream{original / " new.txt" };
51- std::string content;
52- std::getline (stream, content);
53- EXPECT_EQ (content, " new" );
50+ std::ifstream new_stream{original / " new.txt" };
51+ std::string new_content;
52+ std::getline (new_stream, new_content);
53+ EXPECT_EQ (new_content, " new" );
54+
55+ EXPECT_TRUE (std::filesystem::exists (replacement));
56+ EXPECT_FALSE (std::filesystem::exists (replacement / " new.txt" ));
57+ EXPECT_TRUE (std::filesystem::exists (replacement / " old.txt" ));
58+
59+ std::ifstream old_stream{replacement / " old.txt" };
60+ std::string old_content;
61+ std::getline (old_stream, old_content);
62+ EXPECT_EQ (old_content, " old" );
5463}
5564
56- TEST (IO_atomic_directory_replace, replacement_is_consumed ) {
65+ TEST (IO_atomic_directory_swap, old_directory_preserved_at_replacement_path ) {
5766 const sourcemeta::core::TemporaryDirectory workspace{
5867 std::filesystem::path{BUILD_DIRECTORY}, " .test-atomic-" };
5968 const auto original{workspace.path () / " original" };
6069 const auto replacement{workspace.path () / " replacement" };
6170
6271 std::filesystem::create_directory (original);
72+ std::ofstream{original / " a.txt" } << " aaa" ;
73+ std::ofstream{original / " b.txt" } << " bbb" ;
74+
6375 std::filesystem::create_directory (replacement);
6476 std::ofstream{replacement / " file.txt" } << " data" ;
6577
66- sourcemeta::core::atomic_directory_replace (original, replacement);
78+ sourcemeta::core::atomic_directory_swap (original, replacement);
6779
68- EXPECT_FALSE (std::filesystem::exists (replacement));
80+ EXPECT_TRUE (std::filesystem::is_directory (replacement));
81+ EXPECT_TRUE (std::filesystem::exists (replacement / " a.txt" ));
82+ EXPECT_TRUE (std::filesystem::exists (replacement / " b.txt" ));
83+ EXPECT_FALSE (std::filesystem::exists (replacement / " file.txt" ));
6984}
7085
71- TEST (IO_atomic_directory_replace , preserves_nested_structure) {
86+ TEST (IO_atomic_directory_swap , preserves_nested_structure) {
7287 const sourcemeta::core::TemporaryDirectory workspace{
7388 std::filesystem::path{BUILD_DIRECTORY}, " .test-atomic-" };
7489 const auto original{workspace.path () / " original" };
7590 const auto replacement{workspace.path () / " replacement" };
7691
7792 std::filesystem::create_directory (original);
93+ std::ofstream{original / " orig.txt" } << " orig" ;
7894
7995 std::filesystem::create_directories (replacement / " a" / " b" );
8096 std::ofstream{replacement / " root.txt" } << " root" ;
8197 std::ofstream{replacement / " a" / " mid.txt" } << " mid" ;
8298 std::ofstream{replacement / " a" / " b" / " deep.txt" } << " deep" ;
8399
84- sourcemeta::core::atomic_directory_replace (original, replacement);
100+ sourcemeta::core::atomic_directory_swap (original, replacement);
85101
86102 EXPECT_TRUE (std::filesystem::exists (original / " root.txt" ));
87103 EXPECT_TRUE (std::filesystem::exists (original / " a" / " mid.txt" ));
@@ -91,9 +107,12 @@ TEST(IO_atomic_directory_replace, preserves_nested_structure) {
91107 std::string content;
92108 std::getline (stream, content);
93109 EXPECT_EQ (content, " deep" );
110+
111+ EXPECT_TRUE (std::filesystem::exists (replacement / " orig.txt" ));
112+ EXPECT_FALSE (std::filesystem::exists (replacement / " root.txt" ));
94113}
95114
96- TEST (IO_atomic_directory_replace, no_leftover_backup ) {
115+ TEST (IO_atomic_directory_swap, no_leftover_temporary ) {
97116 const sourcemeta::core::TemporaryDirectory workspace{
98117 std::filesystem::path{BUILD_DIRECTORY}, " .test-atomic-" };
99118 const auto original{workspace.path () / " original" };
@@ -105,12 +124,12 @@ TEST(IO_atomic_directory_replace, no_leftover_backup) {
105124 std::filesystem::create_directory (replacement);
106125 std::ofstream{replacement / " new.txt" } << " new" ;
107126
108- sourcemeta::core::atomic_directory_replace (original, replacement);
127+ sourcemeta::core::atomic_directory_swap (original, replacement);
109128
110129 for (const auto &entry :
111130 std::filesystem::directory_iterator{workspace.path ()}) {
112131 const auto filename{entry.path ().filename ().string ()};
113- EXPECT_FALSE (filename.starts_with (" .backup -" ))
114- << " leftover backup directory found: " << filename;
132+ EXPECT_FALSE (filename.starts_with (" .swap -" ))
133+ << " leftover temporary directory found: " << filename;
115134 }
116135}
0 commit comments