Skip to content

Commit a240827

Browse files
committed
Added a test for passing an std::string by value.
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent 41b2276 commit a240827

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

tests/Common/Common.Tests.cs

+22
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,28 @@ This is a very long string. This is a very long string. This is a very long stri
777777
}
778778
}
779779

780+
[Ignore("https://github.com/mono/CppSharp/issues/867")]
781+
public void TestStdStringPassedByValue()
782+
{
783+
// when C++ memory is deleted, it's only marked as free but not immediadely freed
784+
// this can hide memory bugs while marshalling
785+
// so let's use a long string to increase the chance of a crash right away
786+
const string t = @"This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string.
787+
This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string.
788+
This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string.
789+
This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string.
790+
This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string.
791+
This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string.";
792+
using (var hasStdString = new HasStdString())
793+
{
794+
Assert.That(hasStdString.TestStdStringPassedByValue(t), Is.EqualTo(t + "_test"));
795+
hasStdString.S = t;
796+
Assert.That(hasStdString.S, Is.EqualTo(t));
797+
Assert.That(hasStdString.StdString, Is.EqualTo(t));
798+
Assert.That(hasStdString.StdString, Is.EqualTo(t));
799+
}
800+
}
801+
780802
public void TestNullStdString()
781803
{
782804
using (var hasStdString = new HasStdString())

tests/Common/Common.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,11 @@ std::string HasStdString::testStdString(const std::string& s)
504504
return s + "_test";
505505
}
506506

507+
std::string HasStdString::testStdStringPassedByValue(std::string s)
508+
{
509+
return s + "_test";
510+
}
511+
507512
std::string& HasStdString::getStdString()
508513
{
509514
return s;

tests/Common/Common.h

+1
Original file line numberDiff line numberDiff line change
@@ -856,6 +856,7 @@ class DLL_API HasStdString
856856
HasStdString();
857857
~HasStdString();
858858
std::string testStdString(const std::string& s);
859+
std::string testStdStringPassedByValue(std::string s);
859860
std::string s;
860861
std::string& getStdString();
861862
};

0 commit comments

Comments
 (0)