mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-26 15:26:11 +01:00
StringRef conversions to/ from std::string
This commit is contained in:
parent
1aab791d67
commit
c659e0fd3d
@ -60,8 +60,7 @@ namespace Catch {
|
|||||||
|
|
||||||
StringRef::StringRef( String const& other ) noexcept
|
StringRef::StringRef( String const& other ) noexcept
|
||||||
: m_start( other.c_str() ),
|
: m_start( other.c_str() ),
|
||||||
m_size( other.size() ),
|
m_size( other.size() )
|
||||||
m_data( nullptr )
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
StringRef::StringRef( String&& str ) noexcept
|
StringRef::StringRef( String&& str ) noexcept
|
||||||
@ -71,6 +70,10 @@ namespace Catch {
|
|||||||
{
|
{
|
||||||
str.m_data = StringData::getEmpty();
|
str.m_data = StringData::getEmpty();
|
||||||
}
|
}
|
||||||
|
StringRef::StringRef( std::string const& stdString ) noexcept
|
||||||
|
: m_start( stdString.c_str() ),
|
||||||
|
m_size( stdString.size() )
|
||||||
|
{}
|
||||||
|
|
||||||
StringRef::~StringRef() noexcept {
|
StringRef::~StringRef() noexcept {
|
||||||
if( isOwned() )
|
if( isOwned() )
|
||||||
@ -81,6 +84,9 @@ namespace Catch {
|
|||||||
swap( other );
|
swap( other );
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
StringRef::operator std::string() const {
|
||||||
|
return std::string( m_start, m_size );
|
||||||
|
}
|
||||||
|
|
||||||
void StringRef::swap( StringRef& other ) noexcept {
|
void StringRef::swap( StringRef& other ) noexcept {
|
||||||
std::swap( m_start, other.m_start );
|
std::swap( m_start, other.m_start );
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#define CATCH_STRINGREF_H_INCLUDED
|
#define CATCH_STRINGREF_H_INCLUDED
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
@ -43,9 +44,11 @@ namespace Catch {
|
|||||||
StringRef( char const* rawChars, size_type size ) noexcept;
|
StringRef( char const* rawChars, size_type size ) noexcept;
|
||||||
StringRef( String const& other ) noexcept;
|
StringRef( String const& other ) noexcept;
|
||||||
StringRef( String&& other ) noexcept;
|
StringRef( String&& other ) noexcept;
|
||||||
|
StringRef( std::string const& stdString ) noexcept;
|
||||||
~StringRef() noexcept;
|
~StringRef() noexcept;
|
||||||
|
|
||||||
auto operator = ( StringRef other ) noexcept -> StringRef&;
|
auto operator = ( StringRef other ) noexcept -> StringRef&;
|
||||||
|
operator std::string() const;
|
||||||
|
|
||||||
void swap( StringRef& other ) noexcept;
|
void swap( StringRef& other ) noexcept;
|
||||||
|
|
||||||
|
@ -150,4 +150,46 @@ TEST_CASE( "StringRef", "[Strings]" ) {
|
|||||||
REQUIRE( data( copied ) == originalPointer );
|
REQUIRE( data( copied ) == originalPointer );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION( "from std::string" ) {
|
||||||
|
std::string stdStr = "a standard string";
|
||||||
|
|
||||||
|
SECTION( "implicitly constructed" ) {
|
||||||
|
StringRef sr = stdStr;
|
||||||
|
REQUIRE( sr == "a standard string" );
|
||||||
|
REQUIRE( sr.size() == stdStr.size() );
|
||||||
|
}
|
||||||
|
SECTION( "explicitly constructed" ) {
|
||||||
|
StringRef sr( stdStr );
|
||||||
|
REQUIRE( sr == "a standard string" );
|
||||||
|
REQUIRE( sr.size() == stdStr.size() );
|
||||||
|
}
|
||||||
|
SECTION( "assigned" ) {
|
||||||
|
StringRef sr;
|
||||||
|
sr = stdStr;
|
||||||
|
REQUIRE( sr == "a standard string" );
|
||||||
|
REQUIRE( sr.size() == stdStr.size() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION( "to std::string" ) {
|
||||||
|
StringRef sr = "a stringref";
|
||||||
|
|
||||||
|
SECTION( "implicitly constructed" ) {
|
||||||
|
std::string stdStr = sr;
|
||||||
|
REQUIRE( stdStr == "a stringref" );
|
||||||
|
REQUIRE( stdStr.size() == sr.size() );
|
||||||
|
}
|
||||||
|
SECTION( "explicitly constructed" ) {
|
||||||
|
std::string stdStr( sr );
|
||||||
|
REQUIRE( stdStr == "a stringref" );
|
||||||
|
REQUIRE( stdStr.size() == sr.size() );
|
||||||
|
}
|
||||||
|
SECTION( "assigned" ) {
|
||||||
|
std::string stdStr;
|
||||||
|
stdStr = sr;
|
||||||
|
REQUIRE( stdStr == "a stringref" );
|
||||||
|
REQUIRE( stdStr.size() == sr.size() );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user