diff options
author | reduz <reduzio@gmail.com> | 2014-02-28 14:53:01 -0200 |
---|---|---|
committer | reduz <reduzio@gmail.com> | 2014-02-28 14:53:01 -0200 |
commit | 219818075f0fd1cc052f104f7617bd1701620553 (patch) | |
tree | c5913da92cbdcd3a8394cb165a5ef3b0d622aca8 | |
parent | b657d2df901fc88aa232962ff3281ece14a72abe (diff) | |
parent | 61789718733ea30c6b6844b1804920289dda3919 (diff) |
Merge pull request #147 from vinzenz/string-improvements
begins_with string version fix
-rw-r--r-- | bin/tests/test_string.cpp | 31 | ||||
-rw-r--r-- | core/ustring.cpp | 8 |
2 files changed, 36 insertions, 3 deletions
diff --git a/bin/tests/test_string.cpp b/bin/tests/test_string.cpp index 78fb9a9ddb..66238b066d 100644 --- a/bin/tests/test_string.cpp +++ b/bin/tests/test_string.cpp @@ -479,6 +479,36 @@ bool test_26() { return captures.size(); }; +struct test_27_data { + char const * data; + char const * begin; + bool expected; +}; + +bool test_27() { + + OS::get_singleton()->print("\n\nTest 26: begins_with\n"); + test_27_data tc[] = { + {"res://foobar", "res://", true}, + {"res", "res://", false}, + {"abc", "abc", true} + }; + size_t count = sizeof(tc) / sizeof(tc[0]); + bool state = true; + for (size_t i = 0;state && i < count; ++i) { + String s = tc[i].data; + state = s.begins_with(tc[i].begin) == tc[i].expected; + if (state) { + String sb = tc[i].begin; + state = s.begins_with(sb) == tc[i].expected; + } + if (!state) { + OS::get_singleton()->print("\n\t Failure on:\n\t\tstring: ", tc[i].data, "\n\t\tbegin: ", tc[i].begin, "\n\t\texpected: ", tc[i].expected ? "true" : "false", "\n"); + } + }; + return state; +}; + typedef bool (*TestFunc)(void); TestFunc test_funcs[] = { @@ -509,6 +539,7 @@ TestFunc test_funcs[] = { test_24, test_25, test_26, + test_27, 0 }; diff --git a/core/ustring.cpp b/core/ustring.cpp index b0f06c6ab6..2384ce5bd6 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -2491,19 +2491,21 @@ bool String::begins_with(const String& p_string) const { const CharType *src=&p_string[0]; const CharType *str=&operator[](0); - for (int i=0;i<l;i++) { + int i = 0; + for (;i<l;i++) { if (src[i]!=str[i]) return false; } - return true; + // only if i == l the p_string matches the beginning + return i == l; } bool String::begins_with(const char* p_string) const { int l=length(); - if (l==0) + if (l==0||!p_string) return false; const CharType *str=&operator[](0); |