more fixes/tests for empty strings

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@9083 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2006-05-04 04:45:41 +00:00
commit 20339de8b4
6 changed files with 80 additions and 3 deletions

View file

@ -127,3 +127,23 @@ public:
};
%}
%inline %{
std::string empty() {
return std::string();
}
char *c_empty() {
return "";
}
char *c_null() {
return 0;
}
const char *get_null(const char *a) {
return a == 0 ? a : "non-null";
}
%}

View file

@ -118,3 +118,29 @@ if ($gen1->testl(9234567890121111113) ne 9234567890121111114) {
die ("ulonglong");
}
if (li_std_string::empty() ne "") {
die ("empty");
}
if (li_std_string::c_empty() ne "") {
die ("c_empty");
}
if (li_std_string::c_null() ne undef) {
die ("c_empty");
}
if (li_std_string::get_null(li_std_string::c_null()) ne undef) {
die ("c_empty");
}
if (li_std_string::get_null(li_std_string::c_empty()) ne "non-null") {
die ("c_empty");
}
if (li_std_string::get_null(li_std_string::empty()) ne "non-null") {
die ("c_empty");
}

View file

@ -119,3 +119,14 @@ if li_std_string.test_reference_input("hello") != "hello":
s = li_std_string.test_reference_inout("hello")
if s != "hellohello":
raise RuntimeError
if li_std_string.empty() != "":
raise RuntimeError
if li_std_string.c_empty() != "":
raise RuntimeError
if li_std_string.c_null() != None:
raise RuntimeError

View file

@ -111,3 +111,23 @@ s = test_reference_inout("hello")
if (s != "hellohello")
raise RuntimeError
end
if (empty() != "")
raise RuntimeError
end
if (c_empty() != "")
raise RuntimeError
end
if (c_null() != nil)
raise RuntimeError
end
if (get_null(c_null()) != nil)
raise RuntimeError
end

View file

@ -43,8 +43,8 @@ SWIGINTERNINLINE SV *
SWIG_FromCharPtrAndSize(const char* carray, size_t size)
{
SV *obj = sv_newmortal();
if (size && carray) {
if (carray[size - 1] == 0) {
if (carray) {
if (size && (carray[size - 1] == 0)) {
sv_setpv(obj, carray);
} else {
char *tmp = %new_array(size + 1, char);

View file

@ -43,7 +43,7 @@ SWIG_From_dec(String)(const String& s)
if (s.size()) {
return SWIG_FromCharPtrAndSize(s.data(), s.size());
} else {
return SWIG_FromCharPtrAndSize(s.c_str(), 1);
return SWIG_FromCharPtrAndSize(s.c_str(), 0);
}
}
}