Improve String test coverage
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/fbef0da8 Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/fbef0da8 Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/fbef0da8 Branch: refs/heads/master Commit: fbef0da8d7298e437cd2d4e934c8e2d9fd32b456 Parents: 31c4232 Author: Nick Wellnhofer <[email protected]> Authored: Sat May 14 19:32:32 2016 +0200 Committer: Nick Wellnhofer <[email protected]> Committed: Sun May 15 17:57:34 2016 +0200 ---------------------------------------------------------------------- runtime/core/Clownfish/Test/TestString.c | 65 ++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/fbef0da8/runtime/core/Clownfish/Test/TestString.c ---------------------------------------------------------------------- diff --git a/runtime/core/Clownfish/Test/TestString.c b/runtime/core/Clownfish/Test/TestString.c index 46b50c8..f57b3a6 100644 --- a/runtime/core/Clownfish/Test/TestString.c +++ b/runtime/core/Clownfish/Test/TestString.c @@ -164,18 +164,20 @@ static void test_Contains_and_Find(TestBatchRunner *runner) { String *string; String *substring = S_get_str("foo"); + String *empty = S_get_str(""); - string = S_get_str(""); - TEST_FALSE(runner, Str_Contains(string, substring), + TEST_FALSE(runner, Str_Contains(empty, substring), "Not contained in empty string"); - TEST_INT_EQ(runner, S_find(string, substring), -1, + TEST_INT_EQ(runner, S_find(empty, substring), -1, "Not found in empty string"); - DECREF(string); string = S_get_str("foo"); TEST_TRUE(runner, Str_Contains(string, substring), - "Contained in complete string"); + "Contains complete string"); TEST_INT_EQ(runner, S_find(string, substring), 0, "Find complete string"); + TEST_TRUE(runner, Str_Contains(string, empty), + "Contains empty string"); + TEST_INT_EQ(runner, S_find(string, empty), 0, "Find empty string"); DECREF(string); string = S_get_str("afoo"); @@ -192,6 +194,7 @@ test_Contains_and_Find(TestBatchRunner *runner) { TEST_INT_EQ(runner, S_find(string, substring), 1, "Find in middle"); DECREF(string); + DECREF(empty); DECREF(substring); } @@ -333,24 +336,33 @@ test_To_I64(TestBatchRunner *runner) { String *string; string = S_get_str("10"); - TEST_TRUE(runner, Str_To_I64(string) == 10, "To_I64"); + TEST_INT_EQ(runner, Str_To_I64(string), 10, "To_I64"); DECREF(string); string = S_get_str("-10"); - TEST_TRUE(runner, Str_To_I64(string) == -10, "To_I64 negative"); + TEST_INT_EQ(runner, Str_To_I64(string), -10, "To_I64 negative"); DECREF(string); string = S_get_str("10."); - TEST_TRUE(runner, Str_To_I64(string) == 10, "To_I64 stops at non-digits"); + TEST_INT_EQ(runner, Str_To_I64(string), 10, "To_I64 stops at non-digits"); + DECREF(string); + + string = S_get_str("10" SMILEY); + TEST_INT_EQ(runner, Str_To_I64(string), 10, "To_I64 stops at non-ASCII"); DECREF(string); string = S_get_str("10A"); - TEST_TRUE(runner, Str_To_I64(string) == 10, + TEST_INT_EQ(runner, Str_To_I64(string), 10, "To_I64 stops at out-of-range digits"); DECREF(string); +} + +static void +test_BaseX_To_I64(TestBatchRunner *runner) { + String *string; string = S_get_str("-JJ"); - TEST_TRUE(runner, Str_BaseX_To_I64(string, 20) == -399, + TEST_INT_EQ(runner, Str_BaseX_To_I64(string, 20), -399, "BaseX_To_I64 base 20"); DECREF(string); } @@ -420,7 +432,7 @@ test_Starts_Ends_With(TestBatchRunner *runner) { TEST_TRUE(runner, Str_Starts_With(suffix, suffix), "Starts_With self returns true"); - TEST_TRUE(runner, Str_Starts_With(prefix, prefix), + TEST_TRUE(runner, Str_Ends_With(prefix, prefix), "Ends_With self returns true"); TEST_TRUE(runner, Str_Starts_With(suffix, empty), @@ -458,6 +470,33 @@ test_Starts_Ends_With(TestBatchRunner *runner) { } static void +test_Starts_Ends_With_Utf8(TestBatchRunner *runner) { + String *str = S_get_str("pre" SMILEY "post"); + + static const char prefix[] = "pre" SMILEY; + static const char postfix[] = SMILEY "post"; + static const size_t prefix_size = sizeof(prefix) - 1; + static const size_t postfix_size = sizeof(postfix) - 1; + TEST_TRUE(runner, Str_Starts_With_Utf8(str, prefix, prefix_size), + "Starts_With_Utf8 returns true"); + TEST_TRUE(runner, Str_Ends_With_Utf8(str, postfix, postfix_size), + "Ends_With_Utf8 returns true"); + TEST_FALSE(runner, Str_Starts_With_Utf8(str, postfix, postfix_size), + "Starts_With_Utf8 returns false"); + TEST_FALSE(runner, Str_Ends_With_Utf8(str, prefix, prefix_size), + "Ends_With_Utf8 returns false"); + + static const char longer[] = "12345678901234567890"; + static const size_t longer_size = sizeof(longer) - 1; + TEST_FALSE(runner, Str_Starts_With_Utf8(str, longer, longer_size), + "Starts_With_Utf8 longer str returns false"); + TEST_FALSE(runner, Str_Ends_With_Utf8(str, longer, longer_size), + "Ends_With_Utf8 longer str returns false"); + + DECREF(str); +} + +static void test_Get_Ptr8(TestBatchRunner *runner) { String *string = S_get_str("Banana"); @@ -703,7 +742,7 @@ test_iterator_substring(TestBatchRunner *runner) { void TestStr_Run_IMP(TestString *self, TestBatchRunner *runner) { - TestBatchRunner_Plan(runner, (TestBatch*)self, 139); + TestBatchRunner_Plan(runner, (TestBatch*)self, 148); test_new(runner); test_Cat(runner); test_Clone(runner); @@ -713,12 +752,14 @@ TestStr_Run_IMP(TestString *self, TestBatchRunner *runner) { test_Trim(runner); test_To_F64(runner); test_To_I64(runner); + test_BaseX_To_I64(runner); test_To_String(runner); test_To_Utf8(runner); test_To_ByteBuf(runner); test_Length(runner); test_Compare_To(runner); test_Starts_Ends_With(runner); + test_Starts_Ends_With_Utf8(runner); test_Get_Ptr8(runner); test_iterator(runner); test_iterator_whitespace(runner);
