diff --git a/src/libs/utils/smallstring.h b/src/libs/utils/smallstring.h index fedb2846a57..6c815c7ebfb 100644 --- a/src/libs/utils/smallstring.h +++ b/src/libs/utils/smallstring.h @@ -114,6 +114,15 @@ public: { } + template::value>::type + > + SmallString(Type characterPointer) noexcept + : SmallString(characterPointer, std::strlen(characterPointer)) + { + static_assert(!std::is_array::value, "Input type is array and not char pointer!"); + } + SmallString(const QString &qString) : SmallString(SmallString::fromQString(qString)) {} diff --git a/tests/unit/unittest/smallstringtest.cpp b/tests/unit/unittest/smallstringtest.cpp index b0d465e1629..cbdcf1cdac5 100644 --- a/tests/unit/unittest/smallstringtest.cpp +++ b/tests/unit/unittest/smallstringtest.cpp @@ -87,6 +87,14 @@ TEST(SmallString, ShortSmallStringIsReference) ASSERT_TRUE(longText.isReadOnlyReference()); } +TEST(SmallString, SmallStringContructorIsNotReference) +{ + const char *shortCSmallString = "short string"; + auto shortText = SmallString(shortCSmallString); + + ASSERT_TRUE(shortText.isShortString()); +} + TEST(SmallString, ShortSmallStringIsNotReference) { const char *shortCSmallString = "short string"; @@ -95,6 +103,14 @@ TEST(SmallString, ShortSmallStringIsNotReference) ASSERT_FALSE(shortText.isReadOnlyReference()); } +TEST(SmallString, LongSmallStringConstrutorIsAllocated) +{ + const char *longCSmallString = "very very very very very long text"; + auto longText = SmallString(longCSmallString); + + ASSERT_TRUE(longText.hasAllocatedMemory()); +} + TEST(SmallString, MaximumShortSmallString) { SmallString maximumShortText("very very very very short text", 30);