| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | /****************************************************************************
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Copyright (C) 2016 The Qt Company Ltd. | 
					
						
							|  |  |  | ** Contact: https://www.qt.io/licensing/
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator. | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Commercial License Usage | 
					
						
							|  |  |  | ** Licensees holding valid commercial Qt licenses may use this file in | 
					
						
							|  |  |  | ** accordance with the commercial license agreement provided with the | 
					
						
							|  |  |  | ** Software or, alternatively, in accordance with the terms contained in | 
					
						
							|  |  |  | ** a written agreement between you and The Qt Company. For licensing terms | 
					
						
							|  |  |  | ** and conditions see https://www.qt.io/terms-conditions. For further
 | 
					
						
							|  |  |  | ** information use the contact form at https://www.qt.io/contact-us.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** GNU General Public License Usage | 
					
						
							|  |  |  | ** Alternatively, this file may be used under the terms of the GNU | 
					
						
							|  |  |  | ** General Public License version 3 as published by the Free Software | 
					
						
							|  |  |  | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT | 
					
						
							|  |  |  | ** included in the packaging of this file. Please review the following | 
					
						
							|  |  |  | ** information to ensure the GNU General Public License requirements will | 
					
						
							|  |  |  | ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ****************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-15 17:41:41 +02:00
										 |  |  | #include "googletest.h"
 | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <QString>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <utils/smallstring.h>
 | 
					
						
							| 
									
										
										
										
											2016-08-08 16:27:07 +02:00
										 |  |  | #include <utils/smallstringio.h>
 | 
					
						
							|  |  |  | #include <utils/smallstringvector.h>
 | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | using namespace ::testing; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using Utils::SmallString; | 
					
						
							|  |  |  | using Utils::SmallStringLiteral; | 
					
						
							|  |  |  | using Utils::SmallStringView; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, BasicStringEqual) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString("text"), Eq(SmallString("text"))); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, BasicSmallStringUnequal) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString("text"), Ne(SmallString("other text"))); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, NullSmallStringIsEqualToEmptySmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString(), Eq(SmallString(""))); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ShortSmallStringLiteralIsShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     constexpr SmallStringLiteral shortText("short string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if __cpp_constexpr >= 201304
 | 
					
						
							|  |  |  |     ASSERT_TRUE(shortText.isShortString()); | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2016-02-22 11:58:34 +01:00
										 |  |  |     ASSERT_TRUE(shortText.isReadOnlyReference()); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ShortSmallStringIsShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString shortText("short string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if __cpp_constexpr >= 201304
 | 
					
						
							|  |  |  |     ASSERT_TRUE(shortText.isShortString()); | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2016-02-22 11:58:34 +01:00
										 |  |  |     ASSERT_TRUE(shortText.isReadOnlyReference()); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-01 17:19:50 +02:00
										 |  |  | TEST(SmallString, CreateFromCStringIterators) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     char sourceText[] = "this is very very very very very much text"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SmallString text(sourceText, &sourceText[sizeof(sourceText) - 1]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("this is very very very very very much text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CreateFromQByteArrayIterators) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QByteArray sourceText = "this is very very very very very much text"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SmallString text(sourceText.begin(), sourceText.end()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("this is very very very very very much text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CreateFromSmallStringIterators) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString sourceText = "this is very very very very very much text"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SmallString text(sourceText.begin(), sourceText.end()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("this is very very very very very much text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-30 11:24:46 +01:00
										 |  |  | TEST(SmallString, CreateFromStringView) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallStringView sourceText = "this is very very very very very much text"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SmallString text(sourceText); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("this is very very very very very much text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | TEST(SmallString, ShortSmallStringIsReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString longText("very very very very very long text"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-22 11:58:34 +01:00
										 |  |  |     ASSERT_TRUE(longText.isReadOnlyReference()); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-07 15:06:28 +01:00
										 |  |  | TEST(SmallString, SmallStringContructorIsNotReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const char *shortCSmallString = "short string"; | 
					
						
							|  |  |  |     auto shortText = SmallString(shortCSmallString); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(shortText.isShortString()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | TEST(SmallString, ShortSmallStringIsNotReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const char *shortCSmallString = "short string"; | 
					
						
							|  |  |  |     auto shortText = SmallString::fromUtf8(shortCSmallString); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-22 11:58:34 +01:00
										 |  |  |     ASSERT_FALSE(shortText.isReadOnlyReference()); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-07 15:06:28 +01:00
										 |  |  | TEST(SmallString, LongSmallStringConstrutorIsAllocated) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const char *longCSmallString = "very very very very very long text"; | 
					
						
							|  |  |  |     auto longText = SmallString(longCSmallString); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(longText.hasAllocatedMemory()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | TEST(SmallString, MaximumShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString maximumShortText("very very very very short text", 30); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(maximumShortText.constData(), StrEq("very very very very short text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, LongConstExpressionSmallStringIsReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString longText("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-22 11:58:34 +01:00
										 |  |  |     ASSERT_TRUE(longText.isReadOnlyReference()); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CloneShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString shortText("short string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto clonedText = shortText.clone(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(clonedText, Eq("short string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CloneLongSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString longText = SmallString::fromUtf8("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto clonedText = longText.clone(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(clonedText, Eq("very very very very very very very very very very very long string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ClonedLongSmallStringDataPointerIsDifferent) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString longText = SmallString::fromUtf8("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto clonedText = longText.clone(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(clonedText.data(), Ne(longText.data())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CopyShortConstExpressionSmallStringIsShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString shortText("short string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto shortTextCopy = shortText; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if __cpp_constexpr >= 201304
 | 
					
						
							|  |  |  |     ASSERT_TRUE(shortTextCopy.isShortString()); | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2016-02-22 11:58:34 +01:00
										 |  |  |     ASSERT_TRUE(shortTextCopy.isReadOnlyReference()); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CopyLongConstExpressionSmallStringIsLongSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString longText("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto longTextCopy = longText; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_FALSE(longTextCopy.isShortString()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SmallStringFromCharacterArrayIsReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const char longCString[] = "very very very very very very very very very very very long string"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SmallString longString(longCString); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-22 11:58:34 +01:00
										 |  |  |     ASSERT_TRUE(longString.isReadOnlyReference()); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SmallStringFromCharacterPointerIsNotReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const char *longCString = "very very very very very very very very very very very long string"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SmallString longString = SmallString::fromUtf8(longCString); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-22 11:58:34 +01:00
										 |  |  |     ASSERT_FALSE(longString.isReadOnlyReference()); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CopyStringFromReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString longText("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  |     SmallString longTextCopy; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     longTextCopy = longText; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-22 11:58:34 +01:00
										 |  |  |     ASSERT_TRUE(longTextCopy.isReadOnlyReference()); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SmallStringLiteralShortSmallStringDataAccess) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallStringLiteral literalText("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(literalText.data(), StrEq("very very very very very very very very very very very long string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SmallStringLiteralLongSmallStringDataAccess) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallStringLiteral literalText("short string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(literalText.data(), StrEq("short string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReferenceDataAccess) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString literalText("short string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(literalText.constData(), StrEq("short string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ShortDataAccess) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const char *shortCString = "short string"; | 
					
						
							|  |  |  |     auto shortText = SmallString::fromUtf8(shortCString); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(shortText.constData(), StrEq("short string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, LongDataAccess) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const char *longCString = "very very very very very very very very very very very long string"; | 
					
						
							|  |  |  |     auto longText = SmallString::fromUtf8(longCString); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(longText.constData(), StrEq(longCString)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, LongSmallStringHasShortSmallStringSizeZero) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     auto longText = SmallString::fromUtf8("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(longText.shortStringSize(), 0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, BeginIsEqualEndForEmptySmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.begin(), Eq(text.end())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, BeginIsNotEqualEndForNonEmptySmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("x"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.begin(), Ne(text.end())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, BeginPlusOneIsEqualEndForSmallStringWidthSizeOne) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("x"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 16:32:00 +02:00
										 |  |  |     auto beginPlusOne = text.begin() + std::size_t(1); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(beginPlusOne, Eq(text.end())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, RBeginIsEqualREndForEmptySmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.rbegin(), Eq(text.rend())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, RBeginIsNotEqualREndForNonEmptySmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("x"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.rbegin(), Ne(text.rend())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, RBeginPlusOneIsEqualREndForSmallStringWidthSizeOne) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("x"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto beginPlusOne = text.rbegin() + 1l; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(beginPlusOne, Eq(text.rend())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-16 15:53:03 +01:00
										 |  |  | TEST(SmallString, ConstRBeginIsEqualREndForEmptySmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const SmallString text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.rbegin(), Eq(text.rend())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ConstRBeginIsNotEqualREndForNonEmptySmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const SmallString text("x"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.rbegin(), Ne(text.rend())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ConstRBeginPlusOneIsEqualREndForSmallStringWidthSizeOne) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const SmallString text("x"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto beginPlusOne = text.rbegin() + 1l; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(beginPlusOne, Eq(text.rend())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-01 17:21:07 +02:00
										 |  |  | TEST(SmallString, ConstructorStandardString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     std::string stdStringText = "short string"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto text = SmallString(stdStringText); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("short string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | TEST(SmallString, ToQString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("short string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto qStringText = text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(qStringText, QStringLiteral("short string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, FromQString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QString qStringText = QStringLiteral("short string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto text = SmallString::fromQString(qStringText); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("short string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, FromQByteArray) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QByteArray qByteArray = QByteArrayLiteral("short string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto text = SmallString::fromQByteArray(qByteArray); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("short string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, MidOneParameter) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto midString = text.mid(5); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(midString, Eq(SmallString("text"))); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, MidTwoParameter) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some text and more"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto midString = text.mid(5, 4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(midString, Eq(SmallString("text"))); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SizeOfEmptyStringl) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString emptyString; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto size = emptyString.size(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(size, 0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SizeShortSmallStringLiteral) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallStringLiteral shortText("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto size = shortText.size(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(size, 4); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SizeLongSmallStringLiteral) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     auto longText = SmallStringLiteral("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto size = longText.size(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(size, 66); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SizeReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString shortText("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto size = shortText.size(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(size, 4); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SizeShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString shortText("text", 4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto size = shortText.size(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(size, 4); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SizeLongSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     auto longText = SmallString::fromUtf8("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto size = longText.size(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(size, 66); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CapacityReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString shortText("very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto capacity = shortText.capacity(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(capacity, 0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CapacityShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString shortText("text", 4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto capacity = shortText.capacity(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(capacity, 30); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, CapacityLongSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     auto longText = SmallString::fromUtf8("very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto capacity = longText.capacity(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(capacity, 66); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, FitsNotInCapacityBecauseNullSmallStringIsAShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_FALSE(text.fitsNotInCapacity(30)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, FitsNotInCapacityBecauseItIsReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.fitsNotInCapacity(1)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, FitsInShortSmallStringCapacity) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text", 4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_FALSE(text.fitsNotInCapacity(30)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, FitsInNotShortSmallStringCapacity) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text", 4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.fitsNotInCapacity(31)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, FitsInLongSmallStringCapacity) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text = SmallString::fromUtf8("very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_FALSE(text.fitsNotInCapacity(33)) << text.capacity(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, FitsNotInLongSmallStringCapacity) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text = SmallString::fromUtf8("very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.fitsNotInCapacity(65)) << text.capacity(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, AppendNullSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.append(SmallString()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, AppendEmptySmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.append(SmallString("")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, AppendShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some "); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.append(SmallString("text")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("some text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-30 16:21:25 +01:00
										 |  |  | TEST(SmallString, AppendLongSmallStringToShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some "); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.append(SmallString("very very very very very long string")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("some very very very very very long string")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | TEST(SmallString, AppendLongSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString longText("some very very very very very very very very very very very long string"); | 
					
						
							|  |  |  |     longText.append(SmallString(" text")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(longText, SmallString("some very very very very very very very very very very very long string text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ToByteArray) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.toQByteArray(), QByteArrayLiteral("some text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, Contains) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.contains(SmallString("text"))); | 
					
						
							|  |  |  |     ASSERT_TRUE(text.contains("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(text.contains('x')); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, NotContains) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_FALSE(text.contains(SmallString("textTwo"))); | 
					
						
							|  |  |  |     ASSERT_FALSE(text.contains("foo")); | 
					
						
							|  |  |  |     ASSERT_FALSE(text.contains('q')); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, EqualSmallStringOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString() == SmallString("")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString() == SmallString("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") == SmallString("text")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") == SmallString("text2")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, EqualCStringArrayOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString() == ""); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString() == "text"); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") == "text"); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") == "text2"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, EqualCStringPointerOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") == SmallString("text").data()); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") == SmallString("text2").data()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, EqualSmallStringViewOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") == SmallStringView("text")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") == SmallStringView("text2")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, EqualSmallStringViewsOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallStringView("text") == SmallStringView("text")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallStringView("text") == SmallStringView("text2")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, UnequalOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") != SmallString("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") != SmallString("text2")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, UnequalCStringArrayOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") != "text"); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") != "text2"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, UnequalCStringPointerOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") != SmallString("text").data()); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") != SmallString("text2").data()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, UnequalSmallStringViewArrayOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") != SmallStringView("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") != SmallStringView("text2")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, UnequalSmallStringViewsArrayOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallStringView("text") != SmallStringView("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallStringView("text") != SmallStringView("text2")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SmallerOperator) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString() < SmallString("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("some") < SmallString("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") < SmallString("texta")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("texta") < SmallString("text")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") < SmallString("some")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") < SmallString("text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-30 11:24:46 +01:00
										 |  |  | TEST(SmallString, SmallerOperatorWithStringViewRight) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString() < SmallStringView("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("some") < SmallStringView("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text") < SmallStringView("texta")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("texta") < SmallStringView("text")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") < SmallStringView("some")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text") < SmallStringView("text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, SmallerOperatorWithStringViewLeft) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallStringView("") < SmallString("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallStringView("some") < SmallString("text")); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallStringView("text") < SmallString("texta")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallStringView("texta") < SmallString("text")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallStringView("text") < SmallString("some")); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallStringView("text") < SmallString("text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | TEST(SmallString, IsEmpty) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("text").isEmpty()); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("").isEmpty()); | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString().isEmpty()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, HasContent) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_TRUE(SmallString("text").hasContent()); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString("").hasContent()); | 
					
						
							|  |  |  |     ASSERT_FALSE(SmallString().hasContent()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, Clear) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.isEmpty()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceWithEqualSizedText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("here is some text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "much"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("here is much text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceWithEqualSizedTextOnEmptyText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "much"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceWithShorterText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("here is some text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "any"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("here is any text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceWithShorterTextOnEmptyText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "any"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceWithLongerText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("here is some text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "much more"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("here is much more text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceWithLongerTextOnEmptyText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "much more"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceShortSmallStringWithLongerText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text = SmallString::fromUtf8("here is some text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "much more"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("here is much more text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceLongSmallStringWithLongerText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text = SmallString::fromUtf8("some very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "much more"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, Eq(SmallString("much more very very very very very very very very very very very long string"))); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, MultipleReplaceSmallStringWithLongerText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text = SmallString("here is some text with some longer text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "much more"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("here is much more text with much more longer text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, MultipleReplaceSmallStringWithShorterText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text = SmallString("here is some text with some longer text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("some", "a"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("here is a text with a longer text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, DontReplaceReplacedText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("here is some foo text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace("foo", "foofoo"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("here is some foofoo text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, StartsWith) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("$column"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.startsWith("$column")); | 
					
						
							|  |  |  |     ASSERT_TRUE(text.startsWith("$col")); | 
					
						
							|  |  |  |     ASSERT_FALSE(text.startsWith("col")); | 
					
						
							|  |  |  |     ASSERT_TRUE(text.startsWith('$')); | 
					
						
							|  |  |  |     ASSERT_FALSE(text.startsWith('@')); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, EndsWith) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("/my/path"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.endsWith("/my/path")); | 
					
						
							|  |  |  |     ASSERT_TRUE(text.endsWith("path")); | 
					
						
							|  |  |  |     ASSERT_FALSE(text.endsWith("paths")); | 
					
						
							|  |  |  |     ASSERT_TRUE(text.endsWith('h')); | 
					
						
							|  |  |  |     ASSERT_FALSE(text.endsWith('x')); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, EndsWithSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("/my/path"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.endsWith(SmallString("path"))); | 
					
						
							|  |  |  |     ASSERT_TRUE(text.endsWith('h')); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-05 12:39:59 +01:00
										 |  |  | TEST(SmallString, ReserveSmallerThanShortStringCapacity) | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-05 12:39:59 +01:00
										 |  |  |     ASSERT_THAT(text.capacity(), AnyOf(30, 4)); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-05 12:39:59 +01:00
										 |  |  | TEST(SmallString, ReserveSmallerThanReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(35); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.capacity(), 71); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReserveBiggerThanShortStringCapacity) | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(10); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-05 12:39:59 +01:00
										 |  |  |     ASSERT_THAT(text.capacity(), AnyOf(30, 10)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReserveBiggerThanReference) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(35); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.capacity(), 71); | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-05 12:39:59 +01:00
										 |  |  | TEST(SmallString, ReserveMuchBiggerThanShortStringCapacity) | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(100); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.capacity(), 100); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-30 16:21:25 +01:00
										 |  |  | TEST(SmallString, TextIsCopiedAfterReserveFromShortToLongString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(100); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, "text"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, TextIsCopiedAfterReserveReferenceToLongString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("some very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(100); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, "some very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 16:05:41 +01:00
										 |  |  | TEST(SmallString, ReserveSmallerThanShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text = SmallString::fromUtf8("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(10); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.capacity(), 30); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReserveBiggerThanShortSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text = SmallString::fromUtf8("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(100); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.capacity(), 100); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReserveBiggerThanLongSmallString) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text = SmallString::fromUtf8("some very very very very very very very very very very very long string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.reserve(100); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.capacity(), 100); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, OptimalHeapCacheLineForSize) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(64), 64); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(65), 128); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(127), 128); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(128), 128); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(129), 192); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(191), 192); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(193), 256); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(255), 256); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(257), 384); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(257), 384); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(383), 384); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(385), 512); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(4095), 4096); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(4096), 4096); | 
					
						
							|  |  |  |     ASSERT_THAT(SmallString::optimalHeapCapacity(4097), 6144); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, OptimalCapacityForSize) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text.optimalCapacity(0), 0); | 
					
						
							|  |  |  |     ASSERT_THAT(text.optimalCapacity(30), 30); | 
					
						
							|  |  |  |     ASSERT_THAT(text.optimalCapacity(31), 63); | 
					
						
							|  |  |  |     ASSERT_THAT(text.optimalCapacity(63), 63); | 
					
						
							|  |  |  |     ASSERT_THAT(text.optimalCapacity(64), 127); | 
					
						
							|  |  |  |     ASSERT_THAT(text.optimalCapacity(128), 191); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, DataStreamData) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString inputText("foo"); | 
					
						
							|  |  |  |     QByteArray byteArray; | 
					
						
							|  |  |  |     QDataStream out(&byteArray, QIODevice::ReadWrite); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     out << inputText; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(byteArray.endsWith("foo")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReadDataStreamSize) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString outputText("foo"); | 
					
						
							|  |  |  |     QByteArray byteArray; | 
					
						
							|  |  |  |     quint32 size; | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QDataStream out(&byteArray, QIODevice::WriteOnly); | 
					
						
							|  |  |  |         out << outputText; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     QDataStream in(&byteArray, QIODevice::ReadOnly); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     in >> size; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(size, 3); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReadDataStreamData) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString outputText("foo"); | 
					
						
							|  |  |  |     QByteArray byteArray; | 
					
						
							|  |  |  |     SmallString outputString; | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QDataStream out(&byteArray, QIODevice::WriteOnly); | 
					
						
							|  |  |  |         out << outputText; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     QDataStream in(&byteArray, QIODevice::ReadOnly); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     in >> outputString; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(outputString, SmallString("foo")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ShortSmallStringCopyConstuctor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto copy = text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(copy, text); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, LongSmallStringCopyConstuctor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("this is a very very very very long text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto copy = text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(copy, text); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ShortSmallStringMoveConstuctor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto copy = std::move(text); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.isEmpty()); | 
					
						
							|  |  |  |     ASSERT_THAT(copy, SmallString("text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, LongSmallStringMoveConstuctor) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("this is a very very very very long text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto copy = std::move(text); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_TRUE(text.isEmpty()); | 
					
						
							|  |  |  |     ASSERT_THAT(copy, SmallString("this is a very very very very long text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ShortSmallStringCopyAssignment) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  |     SmallString copy("more text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     copy = text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(copy, text); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, LongSmallStringCopyAssignment) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("this is a very very very very long text"); | 
					
						
							|  |  |  |     SmallString copy("more text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     copy = text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(copy, text); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, LongSmallStringCopySelfAssignment) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("this is a very very very very long text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text = text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("this is a very very very very long text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ShortSmallStringMoveAssignment) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("text"); | 
					
						
							|  |  |  |     SmallString copy("more text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     copy = std::move(text); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("more text")); | 
					
						
							|  |  |  |     ASSERT_THAT(copy, SmallString("text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, LongSmallStringMoveAssignment) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("this is a very very very very long text"); | 
					
						
							|  |  |  |     SmallString copy("more text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     copy = std::move(text); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("more text")); | 
					
						
							|  |  |  |     ASSERT_THAT(copy, SmallString("this is a very very very very long text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceByPositionShorterWithLongerText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("this is a very very very very long text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace(8, 1, "some"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("this is some very very very very long text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceByPositionLongerWithShortText) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("this is some very very very very long text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace(8, 4, "a"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("this is a very very very very long text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST(SmallString, ReplaceByPositionEqualSizedTexts) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString text("this is very very very very very long text"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     text.replace(33, 4, "much"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(text, SmallString("this is very very very very very much text")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-28 13:57:33 +01:00
										 |  |  | TEST(SmallString, CompareTextWithDifferentLineEndings) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     SmallString unixText("some \ntext"); | 
					
						
							|  |  |  |     SmallString windowsText("some \n\rtext"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     auto convertedText = windowsText.toCarriageReturnsStripped(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ASSERT_THAT(unixText, convertedText); | 
					
						
							|  |  |  | } |