1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 // UNSUPPORTED: c++03, c++11, c++14
10 // UNSUPPORTED: availability-filesystem-missing
11
12 // <filesystem>
13
14 // class path
15
16 // path& replace_extension(path const& p = path())
17
18 #include <filesystem>
19 #include <cassert>
20 #include <string>
21 #include <type_traits>
22
23 #include "count_new.h"
24 #include "test_iterators.h"
25 namespace fs = std::filesystem;
26
27 struct ReplaceExtensionTestcase {
28 const char* value;
29 const char* expect;
30 const char* extension;
31 };
32
33 const ReplaceExtensionTestcase TestCases[] =
34 {
35 {"", "", ""}
36 , {"foo.cpp", "foo", ""}
37 , {"foo.cpp", "foo.", "."}
38 , {"foo..cpp", "foo..txt", "txt"}
39 , {"", ".txt", "txt"}
40 , {"", ".txt", ".txt"}
41 , {"/foo", "/foo.txt", ".txt"}
42 , {"/foo", "/foo.txt", "txt"}
43 , {"/foo.cpp", "/foo.txt", ".txt"}
44 , {"/foo.cpp", "/foo.txt", "txt"}
45 };
46 const ReplaceExtensionTestcase NoArgCases[] =
47 {
48 {"", "", ""}
49 , {"foo", "foo", ""}
50 , {"foo.cpp", "foo", ""}
51 , {"foo..cpp", "foo.", ""}
52 };
53
main(int,char **)54 int main(int, char**)
55 {
56 using namespace fs;
57 for (auto const & TC : TestCases) {
58 path p(TC.value);
59 assert(p == TC.value);
60 path& Ref = (p.replace_extension(TC.extension));
61 assert(p == TC.expect);
62 assert(&Ref == &p);
63 }
64 for (auto const& TC : NoArgCases) {
65 path p(TC.value);
66 assert(p == TC.value);
67 path& Ref = (p.replace_extension());
68 assert(p == TC.expect);
69 assert(&Ref == &p);
70 }
71
72 return 0;
73 }
74