• Home
Name
Date
Size
#Lines
LOC

..--

inputs/12-May-2024-507497

json-patch-tests/12-May-2024-902760

unity/12-May-2024-20,47216,143

CMakeLists.txtD12-May-20244.4 KiB120109

cjson_add.cD12-May-202411.2 KiB423275

common.hD12-May-20244.1 KiB12382

compare_tests.cD12-May-20248.4 KiB209145

json_patch_tests.cD12-May-20246.6 KiB244168

minify_tests.cD12-May-20245.3 KiB175122

misc_tests.cD12-May-202425.6 KiB685521

misc_utils_tests.cD12-May-20243.3 KiB8143

old_utils_tests.cD12-May-20247.6 KiB226168

parse_array.cD12-May-20244.9 KiB168122

parse_examples.cD12-May-20247.8 KiB272198

parse_hex4.cD12-May-20243.4 KiB7445

parse_number.cD12-May-20243.8 KiB11175

parse_object.cD12-May-20245.4 KiB177131

parse_string.cD12-May-20244.6 KiB13694

parse_value.cD12-May-20243.2 KiB11375

parse_with_opts.cD12-May-20244.1 KiB11374

print_array.cD12-May-20243.7 KiB10158

print_number.cD12-May-20244.3 KiB12684

print_object.cD12-May-20244.1 KiB10258

print_string.cD12-May-20242.8 KiB7944

print_value.cD12-May-20243.1 KiB10867

readme_examples.cD12-May-20246.7 KiB259195

unity_setup.cD12-May-2024121 42

readme_examples.c

1  /*
2    Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
3  
4    Permission is hereby granted, free of charge, to any person obtaining a copy
5    of this software and associated documentation files (the "Software"), to deal
6    in the Software without restriction, including without limitation the rights
7    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    copies of the Software, and to permit persons to whom the Software is
9    furnished to do so, subject to the following conditions:
10  
11    The above copyright notice and this permission notice shall be included in
12    all copies or substantial portions of the Software.
13  
14    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20    THE SOFTWARE.
21  */
22  
23  #include <stdio.h>
24  #include <stdlib.h>
25  #include <string.h>
26  
27  #include "unity/examples/unity_config.h"
28  #include "unity/src/unity.h"
29  #include "common.h"
30  
31  static const char *json = "{\n\
32  \t\"name\":\t\"Awesome 4K\",\n\
33  \t\"resolutions\":\t[{\n\
34  \t\t\t\"width\":\t1280,\n\
35  \t\t\t\"height\":\t720\n\
36  \t\t}, {\n\
37  \t\t\t\"width\":\t1920,\n\
38  \t\t\t\"height\":\t1080\n\
39  \t\t}, {\n\
40  \t\t\t\"width\":\t3840,\n\
41  \t\t\t\"height\":\t2160\n\
42  \t\t}]\n\
43  }";
44  
create_monitor(void)45  static char* create_monitor(void)
46  {
47      const unsigned int resolution_numbers[3][2] = {
48          {1280, 720},
49          {1920, 1080},
50          {3840, 2160}
51      };
52      char *string = NULL;
53      cJSON *name = NULL;
54      cJSON *resolutions = NULL;
55      cJSON *resolution = NULL;
56      cJSON *width = NULL;
57      cJSON *height = NULL;
58      size_t index = 0;
59  
60      cJSON *monitor = cJSON_CreateObject();
61      if (monitor == NULL)
62      {
63          goto end;
64      }
65  
66      name = cJSON_CreateString("Awesome 4K");
67      if (name == NULL)
68      {
69          goto end;
70      }
71      /* after creation was successful, immediately add it to the monitor,
72       * thereby transfering ownership of the pointer to it */
73      cJSON_AddItemToObject(monitor, "name", name);
74  
75      resolutions = cJSON_CreateArray();
76      if (resolutions == NULL)
77      {
78          goto end;
79      }
80      cJSON_AddItemToObject(monitor, "resolutions", resolutions);
81  
82      for (index = 0; index < (sizeof(resolution_numbers) / (2 * sizeof(int))); ++index)
83      {
84          resolution = cJSON_CreateObject();
85          if (resolution == NULL)
86          {
87              goto end;
88          }
89          cJSON_AddItemToArray(resolutions, resolution);
90  
91          width = cJSON_CreateNumber(resolution_numbers[index][0]);
92          if (width == NULL)
93          {
94              goto end;
95          }
96          cJSON_AddItemToObject(resolution, "width", width);
97  
98          height = cJSON_CreateNumber(resolution_numbers[index][1]);
99          if (height == NULL)
100          {
101              goto end;
102          }
103          cJSON_AddItemToObject(resolution, "height", height);
104      }
105  
106      string = cJSON_Print(monitor);
107      if (string == NULL)
108      {
109          fprintf(stderr, "Failed to print monitor.\n");
110      }
111  
112  end:
113      cJSON_Delete(monitor);
114      return string;
115  }
116  
create_monitor_with_helpers(void)117  static char *create_monitor_with_helpers(void)
118  {
119      const unsigned int resolution_numbers[3][2] = {
120          {1280, 720},
121          {1920, 1080},
122          {3840, 2160}
123      };
124      char *string = NULL;
125      cJSON *resolutions = NULL;
126      size_t index = 0;
127  
128      cJSON *monitor = cJSON_CreateObject();
129  
130      if (cJSON_AddStringToObject(monitor, "name", "Awesome 4K") == NULL)
131      {
132          goto end;
133      }
134  
135      resolutions = cJSON_AddArrayToObject(monitor, "resolutions");
136      if (resolutions == NULL)
137      {
138          goto end;
139      }
140  
141      for (index = 0; index < (sizeof(resolution_numbers) / (2 * sizeof(int))); ++index)
142      {
143          cJSON *resolution = cJSON_CreateObject();
144  
145          if (cJSON_AddNumberToObject(resolution, "width", resolution_numbers[index][0]) == NULL)
146          {
147              goto end;
148          }
149  
150          if(cJSON_AddNumberToObject(resolution, "height", resolution_numbers[index][1]) == NULL)
151          {
152              goto end;
153          }
154  
155          cJSON_AddItemToArray(resolutions, resolution);
156      }
157  
158      string = cJSON_Print(monitor);
159      if (string == NULL) {
160          fprintf(stderr, "Failed to print monitor.\n");
161      }
162  
163  end:
164      cJSON_Delete(monitor);
165      return string;
166  }
167  
168  /* return 1 if the monitor supports full hd, 0 otherwise */
supports_full_hd(const char * const monitor)169  static int supports_full_hd(const char * const monitor)
170  {
171      const cJSON *resolution = NULL;
172      const cJSON *resolutions = NULL;
173      const cJSON *name = NULL;
174      int status = 0;
175      cJSON *monitor_json = cJSON_Parse(monitor);
176      if (monitor_json == NULL)
177      {
178          const char *error_ptr = cJSON_GetErrorPtr();
179          if (error_ptr != NULL)
180          {
181              fprintf(stderr, "Error before: %s\n", error_ptr);
182          }
183          status = 0;
184          goto end;
185      }
186  
187      name = cJSON_GetObjectItemCaseSensitive(monitor_json, "name");
188      if (cJSON_IsString(name) && (name->valuestring != NULL))
189      {
190          printf("Checking monitor \"%s\"\n", name->valuestring);
191      }
192  
193      resolutions = cJSON_GetObjectItemCaseSensitive(monitor_json, "resolutions");
194      cJSON_ArrayForEach(resolution, resolutions)
195      {
196          cJSON *width = cJSON_GetObjectItemCaseSensitive(resolution, "width");
197          cJSON *height = cJSON_GetObjectItemCaseSensitive(resolution, "height");
198  
199          if (!cJSON_IsNumber(width) || !cJSON_IsNumber(height))
200          {
201              status = 0;
202              goto end;
203          }
204  
205          if (compare_double(width->valuedouble, 1920) && compare_double(height->valuedouble, 1080))
206          {
207              status = 1;
208              goto end;
209          }
210      }
211  
212  end:
213      cJSON_Delete(monitor_json);
214      return status;
215  }
216  
create_monitor_should_create_a_monitor(void)217  static void create_monitor_should_create_a_monitor(void)
218  {
219      char *monitor = create_monitor();
220  
221      TEST_ASSERT_EQUAL_STRING(monitor, json);
222  
223      free(monitor);
224  }
225  
create_monitor_with_helpers_should_create_a_monitor(void)226  static void create_monitor_with_helpers_should_create_a_monitor(void)
227  {
228      char *monitor = create_monitor_with_helpers();
229  
230      TEST_ASSERT_EQUAL_STRING(json, monitor);
231  
232      free(monitor);
233  }
234  
supports_full_hd_should_check_for_full_hd_support(void)235  static void supports_full_hd_should_check_for_full_hd_support(void)
236  {
237      static const char *monitor_without_hd = "{\n\
238  \t\t\"name\": \"lame monitor\",\n\
239  \t\t\"resolutions\":\t[{\n\
240  \t\t\t\"width\":\t640,\n\
241  \t\t\t\"height\":\t480\n\
242  \t\t}]\n\
243  }";
244  
245      TEST_ASSERT(supports_full_hd(json));
246      TEST_ASSERT_FALSE(supports_full_hd(monitor_without_hd));
247  }
248  
main(void)249  int CJSON_CDECL main(void)
250  {
251      UNITY_BEGIN();
252  
253      RUN_TEST(create_monitor_should_create_a_monitor);
254      RUN_TEST(create_monitor_with_helpers_should_create_a_monitor);
255      RUN_TEST(supports_full_hd_should_check_for_full_hd_support);
256  
257      return UNITY_END();
258  }
259