From 1f422b586ac57ca4b409aa5ecc92000a40a06835 Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Wed, 1 Mar 2017 09:23:18 +0100 Subject: [PATCH 1/6] Squashed 'tests/unity/' changes from 1782bab..2988e98 2988e98 Merge pull request #262 from codehearts/patch-2 1732698 Fixed incorrect TEST_PROTECT explanation in readme 3817375 Merge pull request #260 from jeremyhannon/parseUnityFixtureOutputToJUnitFormat 9d5159f Merge pull request #261 from codehearts/patch-1 65ce727 Fixed typo for TEST_PROTECT in readme 4dc04d3 Enhance parseOutput.rb to support Unity fixture output git-subtree-dir: tests/unity git-subtree-split: 2988e980fbc2252fa4290b608517d4ae25cd9a46 --- README.md | 4 ++-- auto/parseOutput.rb | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fef275c..11759c8 100644 --- a/README.md +++ b/README.md @@ -41,13 +41,13 @@ Example: main() { - if (TEST_PROTECT() == 0) + if (TEST_PROTECT()) { MyTest(); } } -If MyTest calls `TEST_ABORT`, program control will immediately return to `TEST_PROTECT` with a non-zero return value. +If MyTest calls `TEST_ABORT`, program control will immediately return to `TEST_PROTECT` with a return value of zero. Unity Assertion Summary diff --git a/auto/parseOutput.rb b/auto/parseOutput.rb index 7ea180f..e8dbf08 100644 --- a/auto/parseOutput.rb +++ b/auto/parseOutput.rb @@ -65,6 +65,17 @@ class ParseOutput @arrayList.push " " end end + +# Test was flagged as having passed so format the output. +# This is using the Unity fixture output and not the original Unity output. + def testPassedUnityFixture(array) + testSuite = array[0].sub("TEST(", "") + testSuite = testSuite.sub(",", "") + testName = array[1].sub(")", "") + if @xmlOut == true + @arrayList.push " " + end + end # Test was flagged as being ingored so format the output def testIgnored(array) @@ -73,6 +84,14 @@ class ParseOutput reason = array[lastItem].chomp testSuiteVerify(array[@className]) printf "%-40s IGNORED\n", testName + + if testName.start_with? "TEST(" + array2 = testName.split(" ") + @testSuite = array2[0].sub("TEST(", "") + @testSuite = @testSuite.sub(",", "") + testName = array2[1].sub(")", "") + end + if @xmlOut == true @arrayList.push " " @arrayList.push " " + reason + " " @@ -87,6 +106,14 @@ class ParseOutput reason = array[lastItem].chomp + " at line: " + array[lastItem - 3] testSuiteVerify(array[@className]) printf "%-40s FAILED\n", testName + + if testName.start_with? "TEST(" + array2 = testName.split(" ") + @testSuite = array2[0].sub("TEST(", "") + @testSuite = @testSuite.sub(",", "") + testName = array2[1].sub(")", "") + end + if @xmlOut == true @arrayList.push " " @arrayList.push " " + reason + " " @@ -138,7 +165,7 @@ class ParseOutput lineSize = lineArray.size # If we were able to split the line then we can look to see if any of our target words # were found. Case is important. - if lineSize >= 4 + if ((lineSize >= 4) || (line.start_with? "TEST(")) # Determine if this test passed if line.include? ":PASS" testPassed(lineArray) @@ -149,6 +176,12 @@ class ParseOutput elsif line.include? ":IGNORE:" testIgnored(lineArray) testIgnore += 1 + elsif line.start_with? "TEST(" + if line.include? " PASS" + lineArray = line.split(" ") + testPassedUnityFixture(lineArray) + testPass += 1 + end # If none of the keywords are found there are no more tests for this suite so clear # the test flag else From b056d7cb74ba9f507c5c8c9d8b93cfac17197c24 Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Wed, 1 Mar 2017 08:36:34 +0100 Subject: [PATCH 2/6] Add -Wcomma compiler flag --- CMakeLists.txt | 1 + cJSON.c | 4 ++-- cJSON_Utils.c | 18 +++++++++--------- tests/parse_array.c | 2 +- tests/parse_object.c | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index de01b79..c9a22ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,7 @@ if (ENABLE_CUSTOM_COMPILER_FLAGS) -Wconversion -Wc++-compat -fstack-protector-strong + -Wcomma ) endif() diff --git a/cJSON.c b/cJSON.c index c6cb466..71dee8d 100644 --- a/cJSON.c +++ b/cJSON.c @@ -68,7 +68,7 @@ static int cJSON_strcasecmp(const unsigned char *s1, const unsigned char *s2) { return 1; } - for(; tolower(*s1) == tolower(*s2); ++s1, ++s2) + for(; tolower(*s1) == tolower(*s2); (void)++s1, ++s2) { if (*s1 == '\0') { @@ -731,7 +731,7 @@ static unsigned char *print_string_ptr(const unsigned char * const input, printb output[0] = '\"'; output_pointer = output + 1; /* copy the string */ - for (input_pointer = input; *input_pointer != '\0'; input_pointer++, output_pointer++) + for (input_pointer = input; *input_pointer != '\0'; (void)input_pointer++, output_pointer++) { if ((*input_pointer > 31) && (*input_pointer != '\"') && (*input_pointer != '\\')) { diff --git a/cJSON_Utils.c b/cJSON_Utils.c index 534f897..8ff1b33 100644 --- a/cJSON_Utils.c +++ b/cJSON_Utils.c @@ -31,7 +31,7 @@ static int cJSONUtils_strcasecmp(const unsigned char *s1, const unsigned char *s { return 1; } - for(; tolower(*s1) == tolower(*s2); ++s1, ++s2) + for(; tolower(*s1) == tolower(*s2); (void)++s1, ++s2) { if(*s1 == 0) { @@ -49,7 +49,7 @@ static int cJSONUtils_Pstrcasecmp(const unsigned char *a, const unsigned char *e { return (a == e) ? 0 : 1; /* both NULL? */ } - for (; *a && *e && (*e != '/'); a++, e++) /* compare until next '/' */ + for (; *a && *e && (*e != '/'); (void)a++, e++) /* compare until next '/' */ { if (*e == '~') { @@ -81,7 +81,7 @@ static int cJSONUtils_Pstrcasecmp(const unsigned char *a, const unsigned char *e static size_t cJSONUtils_PointerEncodedstrlen(const unsigned char *s) { size_t l = 0; - for (; *s; s++, l++) + for (; *s; (void)s++, l++) { if ((*s == '~') || (*s == '/')) { @@ -127,7 +127,7 @@ CJSON_PUBLIC(char *) cJSONUtils_FindPointerFromObjectTo(cJSON *object, cJSON *ta } /* recursively search all children of the object */ - for (obj = object->child; obj; obj = obj->next, c++) + for (obj = object->child; obj; (void)(obj = obj->next), c++) { unsigned char *found = (unsigned char*)cJSONUtils_FindPointerFromObjectTo(obj, target); if (found) @@ -226,7 +226,7 @@ static void cJSONUtils_InplaceDecodePointerString(unsigned char *string) return; } - for (; *string; s2++, string++) + for (; *string; (void)s2++, string++) { *s2 = (*string != '~') ? (*string) @@ -298,7 +298,7 @@ static int cJSONUtils_Compare(cJSON *a, cJSON *b) /* string mismatch. */ return (strcmp(a->valuestring, b->valuestring) != 0) ? -3 : 0; case cJSON_Array: - for (a = a->child, b = b->child; a && b; a = a->next, b = b->next) + for ((void)(a = a->child), b = b->child; a && b; (void)(a = a->next), b = b->next) { int err = cJSONUtils_Compare(a, b); if (err) @@ -589,7 +589,7 @@ static void cJSONUtils_CompareToPatch(cJSON *patches, const unsigned char *path, size_t c = 0; unsigned char *newpath = (unsigned char*)malloc(strlen((const char*)path) + 23); /* Allow space for 64bit int. */ /* generate patches for all array elements that exist in "from" and "to" */ - for (c = 0, from = from->child, to = to->child; from && to; from = from->next, to = to->next, c++) + for ((void)(c = 0), (void)(from = from->child), to = to->child; from && to; (void)(from = from->next), (void)(to = to->next), c++) { /* check if conversion to unsigned long is valid * This should be eliminated at compile time by dead code elimination @@ -603,7 +603,7 @@ static void cJSONUtils_CompareToPatch(cJSON *patches, const unsigned char *path, cJSONUtils_CompareToPatch(patches, newpath, from, to); } /* remove leftover elements from 'from' that are not in 'to' */ - for (; from; from = from->next, c++) + for (; from; (void)(from = from->next), c++) { /* check if conversion to unsigned long is valid * This should be eliminated at compile time by dead code elimination @@ -617,7 +617,7 @@ static void cJSONUtils_CompareToPatch(cJSON *patches, const unsigned char *path, cJSONUtils_GeneratePatch(patches, (const unsigned char*)"remove", path, newpath, 0); } /* add new elements in 'to' that were not in 'from' */ - for (; to; to = to->next, c++) + for (; to; (void)(to = to->next), c++) { cJSONUtils_GeneratePatch(patches, (const unsigned char*)"add", path, (const unsigned char*)"-", to); } diff --git a/tests/parse_array.c b/tests/parse_array.c index 3b6a90f..47dd44f 100644 --- a/tests/parse_array.c +++ b/tests/parse_array.c @@ -124,7 +124,7 @@ static void parse_array_should_parse_arrays_with_multiple_elements(void) i = 0; (i < (sizeof(expected_types)/sizeof(int))) && (node != NULL); - i++, node = node->next) + (void)i++, node = node->next) { TEST_ASSERT_BITS(0xFF, expected_types[i], node->type); } diff --git a/tests/parse_object.c b/tests/parse_object.c index f669938..0f8569c 100644 --- a/tests/parse_object.c +++ b/tests/parse_object.c @@ -134,7 +134,7 @@ static void parse_object_should_parse_objects_with_multiple_elements(void) i = 0; (i < (sizeof(expected_types)/sizeof(int))) && (node != NULL); - i++, node = node->next) + (void)i++, node = node->next) { assert_is_child(node, expected_names[i], expected_types[i]); } From 40e3781e9ba326a89625dd12b46c55c9916dd6ed Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Wed, 1 Mar 2017 08:56:17 +0100 Subject: [PATCH 3/6] CMake: Disable -Werror for Unity --- tests/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3e3e8c7..4767e50 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,6 +1,13 @@ add_library(unity unity/src/unity.c) if(ENABLE_CJSON_TEST) + + # Disable -Werror for Unity + list(FIND custom_compiler_flags "-Werror" werror_found) + if (werror_found) + target_compile_options(unity PRIVATE "-Wno-error") + endif() + #copy test files file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/inputs") file(GLOB test_files "inputs/*") From 3f349a425880131a09ab4839d36dc416291adedb Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Wed, 1 Mar 2017 08:58:11 +0100 Subject: [PATCH 4/6] Add -Wdouble-promotion compiler flag --- CMakeLists.txt | 1 + cJSON.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9a22ff..730ee1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,7 @@ if (ENABLE_CUSTOM_COMPILER_FLAGS) -Wc++-compat -fstack-protector-strong -Wcomma + -Wdouble-promotion ) endif() diff --git a/cJSON.c b/cJSON.c index 71dee8d..392da69 100644 --- a/cJSON.c +++ b/cJSON.c @@ -1914,7 +1914,7 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count) for(i = 0; a && (i < (size_t)count); i++) { - n = cJSON_CreateNumber(numbers[i]); + n = cJSON_CreateNumber((double)numbers[i]); if(!n) { cJSON_Delete(a); From 5cf56fa4fad0e656e3779e4589fb38a6f846c079 Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Wed, 1 Mar 2017 09:05:43 +0100 Subject: [PATCH 5/6] Add -Wparentheses compile option --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 730ee1f..745e52f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,7 @@ if (ENABLE_CUSTOM_COMPILER_FLAGS) -fstack-protector-strong -Wcomma -Wdouble-promotion + -Wparentheses ) endif() From 1e0bd24f2cae585a198e6661def3f9b82e81cf5a Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Wed, 1 Mar 2017 09:12:09 +0100 Subject: [PATCH 6/6] Revert "unity: make it work with -Wconversion" This reverts commit 12acc57967aef0c859e2a0a877b7a1530faad068. --- tests/unity/src/unity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unity/src/unity.c b/tests/unity/src/unity.c index ece0d9b..54a3452 100644 --- a/tests/unity/src/unity.c +++ b/tests/unity/src/unity.c @@ -194,7 +194,7 @@ void UnityPrintNumberHex(const UNITY_UINT number, const char nibbles_to_print) while (nibbles > 0) { nibbles--; - nibble = (int)(number >> (nibbles * 4)) & 0x0F; + nibble = (number >> (nibbles * 4)) & 0x0F; if (nibble <= 9) { UNITY_OUTPUT_CHAR((char)('0' + nibble));