This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a commit to branch feature/674-add-element-type-to-array-list
in repository https://gitbox.apache.org/repos/asf/celix.git
The following commit(s) were added to
refs/heads/feature/674-add-element-type-to-array-list by this push:
new 21051234 #674 Add additional array list ei tests
21051234 is described below
commit 210512347eef75d758386ed1dcd6305ed231e480
Author: Pepijn Noltes <[email protected]>
AuthorDate: Mon Feb 5 23:14:23 2024 +0100
#674 Add additional array list ei tests
---
.../gtest/src/ArrayListErrorInjectionTestSuite.cc | 43 ++++++++++++++++++++++
libs/utils/gtest/src/ArrayListTestSuite.cc | 18 ++++-----
libs/utils/include/celix_array_list.h | 2 +
libs/utils/src/array_list.c | 25 +++----------
4 files changed, 60 insertions(+), 28 deletions(-)
diff --git a/libs/utils/gtest/src/ArrayListErrorInjectionTestSuite.cc
b/libs/utils/gtest/src/ArrayListErrorInjectionTestSuite.cc
index 1d3d3a7d..309d54d0 100644
--- a/libs/utils/gtest/src/ArrayListErrorInjectionTestSuite.cc
+++ b/libs/utils/gtest/src/ArrayListErrorInjectionTestSuite.cc
@@ -20,6 +20,10 @@
#include <gtest/gtest.h>
#include "celix_array_list.h"
+#include "celix_array_list_ei.h"
+#include "celix_err.h"
+#include "celix_utils_ei.h"
+#include "celix_version_ei.h"
#include "malloc_ei.h"
class ArrayListErrorInjectionTestSuite : public ::testing::Test {
@@ -27,6 +31,9 @@ public:
ArrayListErrorInjectionTestSuite() = default;
~ArrayListErrorInjectionTestSuite() noexcept override {
celix_ei_expect_realloc(nullptr, 0, nullptr);
+ celix_ei_expect_calloc(nullptr, 0, nullptr);
+ celix_ei_expect_celix_utils_strdup(nullptr, 0, nullptr);
+ celix_ei_expect_celix_version_copy(nullptr, 0, nullptr);
}
};
@@ -49,3 +56,39 @@ TEST_F(ArrayListErrorInjectionTestSuite, TestAddFunctions) {
celix_arrayList_destroy(list);
}
+
+TEST_F(ArrayListErrorInjectionTestSuite, AddStringAndAddVersionFailureTest) {
+ // Given a string array list
+ celix_autoptr(celix_array_list_t) stringList =
celix_arrayList_createStringArray();
+ // When an error is injected for celix_utils_strdup
+ celix_ei_expect_celix_utils_strdup((void*)celix_arrayList_addString, 0,
nullptr);
+ // Then adding a string should fail
+ EXPECT_EQ(CELIX_ENOMEM, celix_arrayList_addString(stringList, "test"));
+
+ // Given a version array list
+ celix_autoptr(celix_array_list_t) versionList =
celix_arrayList_createVersionArray();
+ // When an error is injected for celix_version_copy
+ celix_ei_expect_celix_version_copy((void*)celix_arrayList_addVersion, 0,
nullptr);
+ // Then adding a version should fail
+ EXPECT_EQ(CELIX_ENOMEM, celix_arrayList_addVersion(versionList, NULL));
+}
+
+TEST_F(ArrayListErrorInjectionTestSuite, CopyArrayListFailureTest) {
+ // Given a string array list with 10 elements (whitebox knowledge)
+ celix_autoptr(celix_array_list_t) stringList =
celix_arrayList_createStringArray();
+ celix_arrayList_addString(stringList, "test1");
+
+ // When an error is injected for calloc
+ celix_ei_expect_calloc((void*)celix_arrayList_copy, 1, nullptr);
+ // Then copying an array list should fail
+ EXPECT_EQ(nullptr, celix_arrayList_copy(stringList));
+ // And a celix_err is expected
+ EXPECT_EQ(1, celix_err_getErrorCount());
+
+ // When an error is injected for celix_utils_strdup
+ celix_ei_expect_celix_utils_strdup((void*)celix_arrayList_addString, 0,
nullptr);
+ // Then copying an array list should fail
+ EXPECT_EQ(nullptr, celix_arrayList_copy(stringList));
+ // And a celix_err is expected
+ EXPECT_EQ(2, celix_err_getErrorCount());
+}
diff --git a/libs/utils/gtest/src/ArrayListTestSuite.cc
b/libs/utils/gtest/src/ArrayListTestSuite.cc
index 18069db7..0bc61c26 100644
--- a/libs/utils/gtest/src/ArrayListTestSuite.cc
+++ b/libs/utils/gtest/src/ArrayListTestSuite.cc
@@ -26,14 +26,14 @@ class ArrayListTestSuite : public ::testing::Test {
public:
};
-TEST_F(ArrayListTestSuite, TestCreateDestroyHashMap) {
+TEST_F(ArrayListTestSuite, CreateDestroyArrayListTest) {
auto* list = celix_arrayList_create();
EXPECT_TRUE(list != nullptr);
EXPECT_EQ(0, celix_arrayList_size(list));
celix_arrayList_destroy(list);
}
-TEST_F(ArrayListTestSuite, TestArrayListWithEquals) {
+TEST_F(ArrayListTestSuite, ArrayListWithEqualsTest) {
celix_array_list_create_options_t opts{};
opts.equalsCallback = [](celix_array_list_entry_t a,
celix_array_list_entry_t b) -> bool {
const char* sa = (char*)a.voidPtrVal;
@@ -109,7 +109,7 @@ void testArrayListForTemplateType(const std::vector<T>&
entries,
celix_arrayList_destroy(list);
}
-TEST_F(ArrayListTestSuite, TestDifferentEntyTypesForArrayList) {
+TEST_F(ArrayListTestSuite, TestDifferentEntyTypesForArrayListTest) {
std::vector<int> intEntries{1, 2, 3, 4, 5};
testArrayListForTemplateType<int>(intEntries,
celix_arrayList_createIntArray,
@@ -224,7 +224,7 @@ TEST_F(ArrayListTestSuite, VersionArrayList) {
EXPECT_EQ(2, celix_arrayList_size(versionList));
}
-TEST_F(ArrayListTestSuite, SortTypedArrayLists) {
+TEST_F(ArrayListTestSuite, SortTypedArrayListsTest) {
// Given a ptr, string, int, long, uint, ulong, float, double, bool, size
and version list
// with unsorted values (including duplicates)
celix_autoptr(celix_array_list_t) ptrList =
celix_arrayList_createPointerArray();
@@ -376,7 +376,7 @@ TEST_F(ArrayListTestSuite, SortTypedArrayLists) {
EXPECT_EQ(0,
celix_version_compareToMajorMinor(celix_arrayList_getVersion(versionList, 4),
3, 2));
}
-TEST_F(ArrayListTestSuite, EqualCheck) {
+TEST_F(ArrayListTestSuite, EqualCheckTest) {
//Given a selection of long list and a double list
celix_autoptr(celix_array_list_t) list1 =
celix_arrayList_createLongArray();
celix_arrayList_addLong(list1, 1L);
@@ -437,7 +437,7 @@ TEST_F(ArrayListTestSuite, CopyArrayTest) {
EXPECT_TRUE(celix_arrayList_equals(versionList, versionListCopy));
}
-TEST_F(ArrayListTestSuite, TestSimpleRemovedCallbacksForArrayList) {
+TEST_F(ArrayListTestSuite, SimpleRemovedCallbacksForArrayListTest) {
celix_array_list_create_options_t opts{};
opts.simpleRemovedCallback = free;
auto* list = celix_arrayList_createWithOptions(&opts);
@@ -449,7 +449,7 @@ TEST_F(ArrayListTestSuite,
TestSimpleRemovedCallbacksForArrayList) {
celix_arrayList_destroy(list); //will call free for every entry
}
-TEST_F(ArrayListTestSuite, TestRemovedCallbacksForArrayList) {
+TEST_F(ArrayListTestSuite, RemovedCallbacksForArrayListTest) {
int count = 0 ;
celix_array_list_create_options_t opts{};
opts.removedCallbackData = &count;
@@ -473,7 +473,7 @@ TEST_F(ArrayListTestSuite,
TestRemovedCallbacksForArrayList) {
}
-TEST_F(ArrayListTestSuite, TestSortForArrayList) {
+TEST_F(ArrayListTestSuite, SortForArrayListTest) {
auto* list = celix_arrayList_create();
celix_arrayList_addInt(list, 3);
celix_arrayList_addInt(list, 2);
@@ -497,7 +497,7 @@ TEST_F(ArrayListTestSuite, TestSortForArrayList) {
celix_arrayList_destroy(list);
}
-TEST_F(ArrayListTestSuite, TestReturnStatusAddFunctions) {
+TEST_F(ArrayListTestSuite, ReturnStatusAddFunctionsTest) {
auto* list = celix_arrayList_create();
ASSERT_TRUE(list != nullptr);
EXPECT_EQ(0, celix_arrayList_size(list));
diff --git a/libs/utils/include/celix_array_list.h
b/libs/utils/include/celix_array_list.h
index 3a0b0ff9..716aa194 100644
--- a/libs/utils/include/celix_array_list.h
+++ b/libs/utils/include/celix_array_list.h
@@ -863,6 +863,8 @@ bool celix_arrayList_equals(const celix_array_list_t*
listA, const celix_array_l
* if the element type is CELIX_ARRAY_LIST_ELEMENT_TYPE_VERSION, the versions
will be copied.
* For all other element types the values will be copied.
*
+ * If a NULL is returned and the original array list is not NULL, a error
message is logged to celix_err.
+ *
* @param[in] list The array list to copy.
* @return A new array list with the same element type and values as the
original array list or NULL if the original
* array list is NULL or out of memory.
diff --git a/libs/utils/src/array_list.c b/libs/utils/src/array_list.c
index 59108cf9..d35f40df 100644
--- a/libs/utils/src/array_list.c
+++ b/libs/utils/src/array_list.c
@@ -61,7 +61,7 @@ static int
celix_arrayList_compareStringEntries(celix_array_list_entry_t a, celi
}
static bool celix_arrayList_stringEquals(celix_array_list_entry_t a,
celix_array_list_entry_t b) {
- return celix_arrayList_compareStringEntries(a, b) == 0;
+ return celix_utils_stringEquals(a.stringVal, b.stringVal);
}
static int celix_arrayList_compareIntEntries(celix_array_list_entry_t a,
celix_array_list_entry_t b) {
@@ -325,13 +325,6 @@ celix_array_list_t* celix_arrayList_createVersionArray() {
return
celix_arrayList_createTypedArray(CELIX_ARRAY_LIST_ELEMENT_TYPE_VERSION);
}
-
-celix_array_list_t* celix_arrayList_createWithEquals(celix_arrayList_equals_fp
equals) {
- celix_array_list_create_options_t opts =
CELIX_EMPTY_ARRAY_LIST_CREATE_OPTIONS;
- opts.equalsCallback = equals;
- return celix_arrayList_createWithOptions(&opts);
-}
-
void celix_arrayList_destroy(celix_array_list_t *list) {
if (list != NULL) {
celix_arrayList_clear(list);
@@ -752,20 +745,14 @@ celix_array_list_t* celix_arrayList_copy(const
celix_array_list_t* list) {
for (int i = 0; i < celix_arrayList_size(list); ++i) {
celix_array_list_entry_t entry = list->elementData[i];
+ celix_status_t status;
if (copy->elementType == CELIX_ARRAY_LIST_ELEMENT_TYPE_STRING) {
- entry.stringVal = celix_utils_strdup(entry.stringVal);
- if (entry.stringVal == NULL) {
- celix_err_push("Failed to copy string entry. Out of memory.");
- return NULL;
- }
+ status = celix_arrayList_addString(copy, entry.stringVal);
} else if (copy->elementType == CELIX_ARRAY_LIST_ELEMENT_TYPE_VERSION)
{
- entry.versionVal = celix_version_copy(entry.versionVal);
- if (entry.versionVal == NULL) {
- celix_err_push("Failed to copy version entry. Out of memory.");
- return NULL;
- }
+ status = celix_arrayList_addVersion(copy, entry.versionVal);
+ } else {
+ status = celix_arrayList_addEntry(copy, entry);
}
- celix_status_t status = celix_arrayList_addEntry(copy, entry);
if (status != CELIX_SUCCESS) {
celix_err_push("Failed to add entry to copy list.");
return NULL;