summaryrefslogtreecommitdiffstats
path: root/Tests/CMakeLib/testString.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2018-12-08 02:08:17 (GMT)
committerBrad King <brad.king@kitware.com>2018-12-12 13:10:15 (GMT)
commita0841b59bdacc1e550e6607d9e44e79ae456cd19 (patch)
tree780f579afba03f7feb663889582889438d775e0a /Tests/CMakeLib/testString.cxx
parent9d5fe8e96a074b6e112d981302c77e31a1bcde00 (diff)
downloadCMake-a0841b59bdacc1e550e6607d9e44e79ae456cd19.zip
CMake-a0841b59bdacc1e550e6607d9e44e79ae456cd19.tar.gz
CMake-a0841b59bdacc1e550e6607d9e44e79ae456cd19.tar.bz2
String: Add support for a ""_s string literal syntax
Create a `static_string_view` type that binds only to the static storage of string literals. Teach `cm::String` to borrow from these implicitly.
Diffstat (limited to 'Tests/CMakeLib/testString.cxx')
-rw-r--r--Tests/CMakeLib/testString.cxx49
1 files changed, 47 insertions, 2 deletions
diff --git a/Tests/CMakeLib/testString.cxx b/Tests/CMakeLib/testString.cxx
index 411a61a..8bdcb15 100644
--- a/Tests/CMakeLib/testString.cxx
+++ b/Tests/CMakeLib/testString.cxx
@@ -3,6 +3,7 @@
#include "cmString.hxx"
+#include "cm_static_string_view.hxx"
#include "cm_string_view.hxx"
#include <cstring>
@@ -254,6 +255,36 @@ static bool testConstructFromN()
return true;
}
+static const auto staticStringView = "abc"_s;
+
+static bool testFromStaticStringView(cm::String str)
+{
+ cm::String const& str_const = str;
+ ASSERT_TRUE(str_const.data() == staticStringView.data());
+ ASSERT_TRUE(str_const.size() == staticStringView.size());
+ ASSERT_TRUE(str.c_str() == staticStringView);
+ cm::String substr = str.substr(1);
+ cm::String const& substr_const = substr;
+ ASSERT_TRUE(substr_const.data() == &staticStringView[1]);
+ ASSERT_TRUE(substr_const.size() == 2);
+ ASSERT_TRUE(substr.c_str() == &staticStringView[1]);
+ return true;
+}
+
+static bool testConstructFromStaticStringView()
+{
+ std::cout << "testConstructFromStaticStringView()\n";
+ return testFromStaticStringView(staticStringView);
+}
+
+static bool testAssignFromStaticStringView()
+{
+ std::cout << "testAssignFromStaticStringView()\n";
+ cm::String str;
+ str = staticStringView;
+ return testFromStaticStringView(str);
+}
+
static bool testConstructCopy()
{
std::cout << "testConstructCopy()\n";
@@ -730,7 +761,7 @@ static bool testMethod_substr_AtEnd(cm::String str)
static bool testMethod_substr_AtEndBorrowed()
{
std::cout << "testMethod_substr_AtEndBorrowed()\n";
- return testMethod_substr_AtEnd(cm::String::borrow("abc"));
+ return testMethod_substr_AtEnd("abc"_s);
}
static bool testMethod_substr_AtEndOwned()
@@ -784,7 +815,7 @@ static bool testMethod_substr_AtStart(cm::String str)
static bool testMethod_substr_AtStartBorrowed()
{
std::cout << "testMethod_substr_AtStartBorrowed()\n";
- return testMethod_substr_AtStart(cm::String::borrow("abc"));
+ return testMethod_substr_AtStart("abc"_s);
}
static bool testMethod_substr_AtStartOwned()
@@ -978,6 +1009,14 @@ static bool testAddition()
ASSERT_TRUE("abcd" == "a" + (cm::String("b") + "c") + "d");
}
{
+ ASSERT_TRUE(cm::String("a"_s) + "b"_s == "ab"_s);
+ ASSERT_TRUE("ab"_s == "a"_s + cm::String("b"_s));
+ ASSERT_TRUE("a"_s + cm::String("b"_s) + "c"_s == "abc"_s);
+ ASSERT_TRUE("abc"_s == "a"_s + cm::String("b"_s) + "c"_s);
+ ASSERT_TRUE("a"_s + (cm::String("b"_s) + "c"_s) + "d"_s == "abcd"_s);
+ ASSERT_TRUE("abcd"_s == "a"_s + (cm::String("b"_s) + "c"_s) + "d"_s);
+ }
+ {
const char* a = "a";
const char* b = "b";
const char* ab = "ab";
@@ -1101,6 +1140,9 @@ int testString(int /*unused*/, char* /*unused*/ [])
if (!testConstructFromN()) {
return 1;
}
+ if (!testConstructFromStaticStringView()) {
+ return 1;
+ }
if (!testConstructCopy()) {
return 1;
}
@@ -1137,6 +1179,9 @@ int testString(int /*unused*/, char* /*unused*/ [])
if (!testAssignFromInitList()) {
return 1;
}
+ if (!testAssignFromStaticStringView()) {
+ return 1;
+ }
if (!testOperatorBool()) {
return 1;
}