[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master 0e3d61a 21/33: Rework modify_directory() docu
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master 0e3d61a 21/33: Rework modify_directory() documentation; augment unit test |
Date: |
Mon, 3 May 2021 08:15:54 -0400 (EDT) |
branch: master
commit 0e3d61ad8d6f95979f516d76ff8cb7ca3a39275e
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Rework modify_directory() documentation; augment unit test
---
path_utility.cpp | 8 +++-----
path_utility_test.cpp | 14 ++++++++++++--
2 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/path_utility.cpp b/path_utility.cpp
index 151fa35..86fa92b 100644
--- a/path_utility.cpp
+++ b/path_utility.cpp
@@ -77,11 +77,9 @@
/// returns 'true' iff the OS reports that such a directory exists;
/// but the same function call would return 'false' after
/// rm -rf /usr/lib ; touch /usr/lib
-/// Notably, path("/bin/sh/") fails because it hasn't the filename.
-/// [original comment for boost:
-/// Notably, path("/bin/sh/") succeeds, silently discarding the
-/// trailing '/'.
-/// ...end boost comment]
+/// It allows both fs::path("/bin/") and fs::path("/bin"): posix
+/// would say the first must be a dirname, while the second could be
+/// a basename, but fs::path includes both those concepts.
fs::path modify_directory
(fs::path const& original_filepath
diff --git a/path_utility_test.cpp b/path_utility_test.cpp
index beb1d80..787299a 100644
--- a/path_utility_test.cpp
+++ b/path_utility_test.cpp
@@ -89,10 +89,20 @@ void test_modify_directory()
LMI_TEST_EQUAL("sh" , modify_directory("sh" , ""
).string());
LMI_TEST_EQUAL("sh" , modify_directory("/bin/sh", ""
).string());
- // This is forbidden, consistently with the observed behaviour:
+ // A dirname can have a trailing slash, but a basename cannot:
// $ls /bin/sh/
// ls: cannot access '/bin/sh/': Not a directory
- // because "sh/" doesn't have the filename.
+ //
+ // The original boost implementation nevertheless allowed this:
+ // modify_directory("sh/", "/bin/")
+ // even though 'has_leaf()' was asserted for its first argument,
+ // because its path ctor silently discarded the trailing slash.
+ //
+ // Appropriately, std::filesystem doesn't discard a trailing '/':
+ LMI_TEST_EQUAL('/', fs::path("sh/").string().back());
+ // so 'has_filename()' returns false:
+ LMI_TEST(!fs::path("sh/").has_filename());
+ // and the assertion fires as intended:
LMI_TEST_THROW
(modify_directory("sh/", "/bin/")
,std::runtime_error
- [lmi-commits] [lmi] master 1a68606 23/33: Conserve 80-character maximum width, (continued)
- [lmi-commits] [lmi] master 1a68606 23/33: Conserve 80-character maximum width, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master e33e392 22/33: Correct and reformat the modify_directory() documentation, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master fd44389 03/33: Include appropriate headers, and say why they're included, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master fdc0f5a 07/33: Deboostify even more, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 41274a8 14/33: Improve documentation, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master e4d2f31 08/33: Rename a function, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 2038991 15/33: Improve concinnity, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 9235f33 16/33: Avoid implicit conversion to fs::path, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 4ab2c4e 20/33: Further improve modify_directory() documentation, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master b64436f 19/33: Improve modify_directory() documentation and tests, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 0e3d61a 21/33: Rework modify_directory() documentation; augment unit test,
Greg Chicares <=
- [lmi-commits] [lmi] master 40096c3 24/33: Conserve 70-character comment width, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 4473403 29/33: Improve output spacing, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master bc805ad 28/33: Augment path-validation unit test, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 6fd9f69 32/33: Remove the last occurrence of /name.check/, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 0c2d6b4 30/33: Revert "Revert "Trap exceptions from filesystem library"", Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master bfa1255 27/33: Enable some tests that were conditionally suppressed, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 8538df8 31/33: Improve unit tests and their documentation, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 6ddb0fa 25/33: Rework a 'wine' workaround again, Greg Chicares, 2021/05/03
- [lmi-commits] [lmi] master 0296ac4 33/33: Deboostify still more, Greg Chicares, 2021/05/03