| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file LICENSE.rst or https://cmake.org/licensing for details. */ | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <string> | |
| #include <utility> | |
| #include <cm/string_view> | |
| #include <cmext/string_view> | |
| #include "cmCMakePath.h" | |
| #include "testCommon.h" | |
| namespace { | |
| void checkResult(bool success) | |
| { | |
| if (!success) { | |
| std::cout << " => failed"; | |
| } | |
| std::cout << std::endl; | |
| } | |
| bool testConstructors() | |
| { | |
| std::cout << "testConstructors()"; | |
| bool result = true; | |
| { | |
| cmCMakePath path; | |
| if (!path.String().empty() || path != cmCMakePath{}) { | |
| result = false; | |
| } | |
| } | |
| { | |
| cmCMakePath path{ "aa/bb" }; | |
| if (path.String() != "aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string s{ "aa/bb" }; | |
| cmCMakePath path{ s }; | |
| if (path.String() != "aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cmCMakePath path{ "aa/bb"_s }; | |
| if (path.String() != "aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2("aa/bb"_s); | |
| if (path1 != path2) { | |
| result = false; | |
| } | |
| if (path1.String() != "aa/bb") { | |
| result = false; | |
| } | |
| if (path1.String() != path2.String()) { | |
| result = false; | |
| } | |
| } | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2{ path1 }; | |
| if (path1 != path2) { | |
| result = false; | |
| } | |
| if (path1.String() != "aa/bb") { | |
| result = false; | |
| } | |
| if (path1.String() != path2.String()) { | |
| result = false; | |
| } | |
| } | |
| checkResult(result); | |
| return result; | |
| } | |
| bool testAssign() | |
| { | |
| std::cout << "testAssign()"; | |
| bool result = true; | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 = path1; | |
| if (path1 != path2) { | |
| result = false; | |
| } | |
| if (path1.String() != "aa/bb") { | |
| result = false; | |
| } | |
| if (path1.String() != path2.String()) { | |
| result = false; | |
| } | |
| } | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 = std::move(path1); | |
| if (path2.String() != "aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 = path1; | |
| if (path2.String() != "aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 = std::move(path1); | |
| if (path2.String() != "aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cm::string_view path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 = path1; | |
| if (path2.String() != "aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| char path1[] = "aa/bb"; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 = path1; | |
| if (path2.String() != "aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Assign(path1); | |
| if (path2.String() != path1) { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Assign(std::move(path1)); | |
| if (path2.String() != "aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cm::string_view path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Assign(path1); | |
| if (path2.String() != path1) { | |
| result = false; | |
| } | |
| } | |
| { | |
| char path1[] = "aa/bb"; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Assign(path1); | |
| if (path2.String() != path1) { | |
| result = false; | |
| } | |
| } | |
| checkResult(result); | |
| return result; | |
| } | |
| bool testConcat() | |
| { | |
| std::cout << "testConcat()"; | |
| bool result = true; | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 += path1; | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 += std::move(path1); | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 += path1; | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 += std::move(path1); | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cm::string_view path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 += path1; | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| char path1[] = "aa/bb"; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 += path1; | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Concat(path1); | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Concat(path1); | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Concat(std::move(path1)); | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cm::string_view path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Concat(path1); | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| char path1[] = "aa/bb"; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Concat(path1); | |
| if (path2.String() != "cc/ddaa/bb") { | |
| result = false; | |
| } | |
| } | |
| checkResult(result); | |
| return result; | |
| } | |
| bool testAppend() | |
| { | |
| std::cout << "testAppend()"; | |
| bool result = true; | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 /= path1; | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 /= std::move(path1); | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 /= path1; | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 /= std::move(path1); | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cm::string_view path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 /= path1; | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| char path1[] = "aa/bb"; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2 /= path1; | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cmCMakePath path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Append(path1); | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Append(path1); | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| std::string path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Append(std::move(path1)); | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| cm::string_view path1{ "aa/bb" }; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Append(path1); | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| { | |
| char path1[] = "aa/bb"; | |
| cmCMakePath path2{ "cc/dd" }; | |
| path2.Append(path1); | |
| if (path2.String() != "cc/dd/aa/bb") { | |
| result = false; | |
| } | |
| } | |
| checkResult(result); | |
| return result; | |
| } | |
| } | |
| int testCMakePath(int /*unused*/, char* /*unused*/[]) | |
| { | |
| return runTests({ testConstructors, testAssign, testConcat, testAppend }, | |
| false); | |
| } |