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