Filesystem tests: un-confuse write time
Summary: The filesystem test was confused about access versus write / modification time. The spec says: file_time_type last_write_time(const path& p, error_code& ec) noexcept; Returns: The time of last data modification of p, determined as if by the value of the POSIX stat structure member st_mtime obtained as if by POSIX stat(). The signature with argument ec returns file_time_type::min() if an error occurs. The test was looking at st_atime, not st_mtime, when comparing the result from last_write_time. That was probably due to using a pair instead of naming things nicely or using types. I opted to rename things so it's clearer. This used to cause test bot failures. <rdar://problem/40648859> Reviewers: EricWF, mclow.lists, aemerson Subscribers: christof, cfe-commits Differential Revision: https://reviews.llvm.org/D47557 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@333723 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -32,7 +32,9 @@
|
||||
|
||||
using namespace fs;
|
||||
|
||||
std::pair<std::time_t, std::time_t> GetTimes(path const& p) {
|
||||
struct Times { std::time_t access, write; };
|
||||
|
||||
Times GetTimes(path const& p) {
|
||||
using Clock = file_time_type::clock;
|
||||
struct ::stat st;
|
||||
if (::stat(p.c_str(), &st) == -1) {
|
||||
@@ -48,11 +50,11 @@ std::pair<std::time_t, std::time_t> GetTimes(path const& p) {
|
||||
}
|
||||
|
||||
std::time_t LastAccessTime(path const& p) {
|
||||
return GetTimes(p).first;
|
||||
return GetTimes(p).access;
|
||||
}
|
||||
|
||||
std::time_t LastWriteTime(path const& p) {
|
||||
return GetTimes(p).second;
|
||||
return GetTimes(p).write;
|
||||
}
|
||||
|
||||
std::pair<std::time_t, std::time_t> GetSymlinkTimes(path const& p) {
|
||||
@@ -228,11 +230,9 @@ TEST_CASE(get_last_write_time_dynamic_env_test)
|
||||
const path dir = env.create_dir("dir");
|
||||
|
||||
const auto file_times = GetTimes(file);
|
||||
const std::time_t file_access_time = file_times.first;
|
||||
const std::time_t file_write_time = file_times.second;
|
||||
const std::time_t file_write_time = file_times.write;
|
||||
const auto dir_times = GetTimes(dir);
|
||||
const std::time_t dir_access_time = dir_times.first;
|
||||
const std::time_t dir_write_time = dir_times.second;
|
||||
const std::time_t dir_write_time = dir_times.write;
|
||||
|
||||
file_time_type ftime = last_write_time(file);
|
||||
TEST_CHECK(Clock::to_time_t(ftime) == file_write_time);
|
||||
@@ -253,9 +253,8 @@ TEST_CASE(get_last_write_time_dynamic_env_test)
|
||||
|
||||
TEST_CHECK(ftime2 > ftime);
|
||||
TEST_CHECK(dtime2 > dtime);
|
||||
TEST_CHECK(LastAccessTime(file) == file_access_time ||
|
||||
LastAccessTime(file) == Clock::to_time_t(ftime2));
|
||||
TEST_CHECK(LastAccessTime(dir) == dir_access_time);
|
||||
TEST_CHECK(LastWriteTime(file) == Clock::to_time_t(ftime2));
|
||||
TEST_CHECK(LastWriteTime(dir) == Clock::to_time_t(dtime2));
|
||||
}
|
||||
|
||||
|
||||
@@ -301,7 +300,7 @@ TEST_CASE(set_last_write_time_dynamic_env_test)
|
||||
};
|
||||
for (const auto& TC : cases) {
|
||||
const auto old_times = GetTimes(TC.p);
|
||||
file_time_type old_time(Sec(old_times.second));
|
||||
file_time_type old_time(Sec(old_times.write));
|
||||
|
||||
std::error_code ec = GetTestEC();
|
||||
last_write_time(TC.p, TC.new_time, ec);
|
||||
@@ -318,7 +317,7 @@ TEST_CASE(set_last_write_time_dynamic_env_test)
|
||||
TEST_CHECK(got_time <= TC.new_time + Sec(1));
|
||||
TEST_CHECK(got_time >= TC.new_time - Sec(1));
|
||||
}
|
||||
TEST_CHECK(LastAccessTime(TC.p) == old_times.first);
|
||||
TEST_CHECK(LastAccessTime(TC.p) == old_times.access);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -348,10 +347,10 @@ TEST_CASE(last_write_time_symlink_test)
|
||||
file_time_type got_time = last_write_time(sym);
|
||||
std::time_t got_time_t = Clock::to_time_t(got_time);
|
||||
|
||||
TEST_CHECK(got_time_t != old_times.second);
|
||||
TEST_CHECK(got_time_t != old_times.write);
|
||||
TEST_CHECK(got_time_t == new_time_t);
|
||||
TEST_CHECK(LastWriteTime(file) == new_time_t);
|
||||
TEST_CHECK(LastAccessTime(sym) == old_times.first);
|
||||
TEST_CHECK(LastAccessTime(sym) == old_times.access);
|
||||
TEST_CHECK(GetSymlinkTimes(sym) == old_sym_times);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user