mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-03 23:51:39 +01:00 
			
		
		
		
	
		
			
	
	
		
			123 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			123 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								  Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Permission is hereby granted, free of charge, to any person obtaining a copy
							 | 
						||
| 
								 | 
							
								  of this software and associated documentation files (the "Software"), to deal
							 | 
						||
| 
								 | 
							
								  in the Software without restriction, including without limitation the rights
							 | 
						||
| 
								 | 
							
								  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
							 | 
						||
| 
								 | 
							
								  copies of the Software, and to permit persons to whom the Software is
							 | 
						||
| 
								 | 
							
								  furnished to do so, subject to the following conditions:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  The above copyright notice and this permission notice shall be included in
							 | 
						||
| 
								 | 
							
								  all copies or substantial portions of the Software.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
							 | 
						||
| 
								 | 
							
								  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
							 | 
						||
| 
								 | 
							
								  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
							 | 
						||
| 
								 | 
							
								  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
							 | 
						||
| 
								 | 
							
								  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
							 | 
						||
| 
								 | 
							
								  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
							 | 
						||
| 
								 | 
							
								  THE SOFTWARE.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef CJSON_TESTS_COMMON_H
							 | 
						||
| 
								 | 
							
								#define CJSON_TESTS_COMMON_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "../cJSON.c"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void reset(cJSON *item);
							 | 
						||
| 
								 | 
							
								void reset(cJSON *item) {
							 | 
						||
| 
								 | 
							
								    if ((item != NULL) && (item->child != NULL))
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        cJSON_Delete(item->child);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if ((item->valuestring != NULL) && !(item->type & cJSON_IsReference))
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        global_hooks.deallocate(item->valuestring);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if ((item->string != NULL) && !(item->type & cJSON_StringIsConst))
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        global_hooks.deallocate(item->string);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    memset(item, 0, sizeof(cJSON));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								char* read_file(const char *filename);
							 | 
						||
| 
								 | 
							
								char* read_file(const char *filename) {
							 | 
						||
| 
								 | 
							
								    FILE *file = NULL;
							 | 
						||
| 
								 | 
							
								    long length = 0;
							 | 
						||
| 
								 | 
							
								    char *content = NULL;
							 | 
						||
| 
								 | 
							
								    size_t read_chars = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* open in read binary mode */
							 | 
						||
| 
								 | 
							
								    file = fopen(filename, "rb");
							 | 
						||
| 
								 | 
							
								    if (file == NULL)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        goto cleanup;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* get the length */
							 | 
						||
| 
								 | 
							
								    if (fseek(file, 0, SEEK_END) != 0)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        goto cleanup;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    length = ftell(file);
							 | 
						||
| 
								 | 
							
								    if (length < 0)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        goto cleanup;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (fseek(file, 0, SEEK_SET) != 0)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        goto cleanup;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* allocate content buffer */
							 | 
						||
| 
								 | 
							
								    content = (char*)malloc((size_t)length + sizeof(""));
							 | 
						||
| 
								 | 
							
								    if (content == NULL)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        goto cleanup;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* read the file into memory */
							 | 
						||
| 
								 | 
							
								    read_chars = fread(content, sizeof(char), (size_t)length, file);
							 | 
						||
| 
								 | 
							
								    if ((long)read_chars != length)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        free(content);
							 | 
						||
| 
								 | 
							
								        content = NULL;
							 | 
						||
| 
								 | 
							
								        goto cleanup;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    content[read_chars] = '\0';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								cleanup:
							 | 
						||
| 
								 | 
							
								    if (file != NULL)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        fclose(file);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return content;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* assertion helper macros */
							 | 
						||
| 
								 | 
							
								#define assert_has_type(item, item_type) TEST_ASSERT_BITS_MESSAGE(0xFF, item_type, item->type, "Item doesn't have expected type.")
							 | 
						||
| 
								 | 
							
								#define assert_has_no_reference(item) TEST_ASSERT_BITS_MESSAGE(cJSON_IsReference, 0, item->type, "Item should not have a string as reference.")
							 | 
						||
| 
								 | 
							
								#define assert_has_no_const_string(item) TEST_ASSERT_BITS_MESSAGE(cJSON_StringIsConst, 0, item->type, "Item should not have a const string.")
							 | 
						||
| 
								 | 
							
								#define assert_has_valuestring(item) TEST_ASSERT_NOT_NULL_MESSAGE(item->valuestring, "Valuestring is NULL.")
							 | 
						||
| 
								 | 
							
								#define assert_has_no_valuestring(item) TEST_ASSERT_NULL_MESSAGE(item->valuestring, "Valuestring is not NULL.")
							 | 
						||
| 
								 | 
							
								#define assert_has_string(item) TEST_ASSERT_NOT_NULL_MESSAGE(item->string, "String is NULL")
							 | 
						||
| 
								 | 
							
								#define assert_has_no_string(item) TEST_ASSERT_NULL_MESSAGE(item->string, "String is not NULL.")
							 | 
						||
| 
								 | 
							
								#define assert_not_in_list(item) \
							 | 
						||
| 
								 | 
							
									TEST_ASSERT_NULL_MESSAGE(item->next, "Linked list next pointer is not NULL.");\
							 | 
						||
| 
								 | 
							
									TEST_ASSERT_NULL_MESSAGE(item->prev, "Linked list previous pointer is not NULL.")
							 | 
						||
| 
								 | 
							
								#define assert_has_child(item) TEST_ASSERT_NOT_NULL_MESSAGE(item->child, "Item doesn't have a child.")
							 | 
						||
| 
								 | 
							
								#define assert_has_no_child(item) TEST_ASSERT_NULL_MESSAGE(item->child, "Item has a child.")
							 | 
						||
| 
								 | 
							
								#define assert_is_invalid(item) \
							 | 
						||
| 
								 | 
							
									assert_has_type(item, cJSON_Invalid);\
							 | 
						||
| 
								 | 
							
									assert_not_in_list(item);\
							 | 
						||
| 
								 | 
							
									assert_has_no_child(item);\
							 | 
						||
| 
								 | 
							
									assert_has_no_string(item);\
							 | 
						||
| 
								 | 
							
									assert_has_no_valuestring(item)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |