Selaa lähdekoodia

Merge pull request #122 from DaveGamble/more-compiler-flags

Add more compiler flags
Max Bruckner 8 vuotta sitten
vanhempi
commit
bee069b4e7

+ 3 - 0
CMakeLists.txt

@@ -40,6 +40,9 @@ if (ENABLE_CUSTOM_COMPILER_FLAGS)
         -Wconversion
         -Wc++-compat
         -fstack-protector-strong
+        -Wcomma
+        -Wdouble-promotion
+        -Wparentheses
         )
 endif()
 

+ 3 - 3
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 != '\\'))
         {
@@ -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);

+ 9 - 9
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);
             }

+ 7 - 0
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/*")

+ 1 - 1
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);
         }

+ 1 - 1
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]);
         }

+ 2 - 2
tests/unity/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

+ 34 - 1
tests/unity/auto/parseOutput.rb

@@ -65,6 +65,17 @@ class ParseOutput
             @arrayList.push "     <testcase classname=\"" + @testSuite + "\" name=\"" + testName + "\"/>"
         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 "     <testcase classname=\"" + testSuite + "\" name=\"" + testName + "\"/>"
+        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 "     <testcase classname=\"" + @testSuite + "\" name=\"" + testName + "\">"
             @arrayList.push "            <skipped type=\"TEST IGNORED\"> " + reason + " </skipped>"
@@ -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 "     <testcase classname=\"" + @testSuite + "\" name=\"" + testName + "\">"
             @arrayList.push "            <failure type=\"ASSERT FAILED\"> " + reason + " </failure>"
@@ -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

+ 1 - 1
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));