| 
									
										
										
										
											2021-03-29 17:14:01 +02:00
										 |  |  | // ArduinoJson - https://arduinojson.org
 | 
					
						
							| 
									
										
										
										
											2025-02-24 15:18:26 +01:00
										 |  |  | // Copyright © 2014-2025, Benoit BLANCHON
 | 
					
						
							| 
									
										
										
										
											2018-05-29 08:31:17 +02:00
										 |  |  | // MIT License
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 11:57:31 +02:00
										 |  |  | #define ARDUINOJSON_SLOT_ID_SIZE 4  // required to reach 65536 elements
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-29 08:31:17 +02:00
										 |  |  | #include <ArduinoJson.h>
 | 
					
						
							|  |  |  | #include <catch.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  | #include "Literals.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 09:35:21 +02:00
										 |  |  | static void check(const JsonArray array, const char* expected_data, | 
					
						
							| 
									
										
										
										
											2018-05-29 08:31:17 +02:00
										 |  |  |                   size_t expected_len) { | 
					
						
							|  |  |  |   std::string expected(expected_data, expected_data + expected_len); | 
					
						
							|  |  |  |   std::string actual; | 
					
						
							|  |  |  |   size_t len = serializeMsgPack(array, actual); | 
					
						
							|  |  |  |   CAPTURE(array); | 
					
						
							|  |  |  |   REQUIRE(len == expected_len); | 
					
						
							|  |  |  |   REQUIRE(actual == expected); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <size_t N> | 
					
						
							| 
									
										
										
										
											2018-07-02 09:35:21 +02:00
										 |  |  | static void check(const JsonArray array, const char (&expected_data)[N]) { | 
					
						
							| 
									
										
										
										
											2018-05-29 08:31:17 +02:00
										 |  |  |   const size_t expected_len = N - 1; | 
					
						
							|  |  |  |   check(array, expected_data, expected_len); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-12 21:36:39 +01:00
										 |  |  | static void check(const JsonArray array, const std::string& expected) { | 
					
						
							|  |  |  |   check(array, expected.data(), expected.length()); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-05-29 08:31:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE("serialize MsgPack array") { | 
					
						
							| 
									
										
										
										
											2023-07-17 18:15:13 +02:00
										 |  |  |   JsonDocument doc; | 
					
						
							| 
									
										
										
										
											2018-07-02 09:35:21 +02:00
										 |  |  |   JsonArray array = doc.to<JsonArray>(); | 
					
						
							| 
									
										
										
										
											2018-05-29 08:31:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   SECTION("empty") { | 
					
						
							|  |  |  |     check(array, "\x90"); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SECTION("fixarray") { | 
					
						
							|  |  |  |     array.add("hello"); | 
					
						
							|  |  |  |     array.add("world"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     check(array, "\x92\xA5hello\xA5world"); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SECTION("array 16") { | 
					
						
							| 
									
										
										
										
											2022-12-24 15:47:48 +01:00
										 |  |  |     for (int i = 0; i < 16; i++) | 
					
						
							|  |  |  |       array.add(i); | 
					
						
							| 
									
										
										
										
											2018-05-29 08:31:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     check(array, | 
					
						
							|  |  |  |           "\xDC\x00\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D" | 
					
						
							|  |  |  |           "\x0E\x0F"); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-12 21:36:39 +01:00
										 |  |  |   SECTION("array 32") { | 
					
						
							|  |  |  |     const char* nil = 0; | 
					
						
							| 
									
										
										
										
											2022-12-24 15:47:48 +01:00
										 |  |  |     for (int i = 0; i < 65536; i++) | 
					
						
							|  |  |  |       array.add(nil); | 
					
						
							| 
									
										
										
										
											2023-06-14 11:57:31 +02:00
										 |  |  |     REQUIRE(array.size() == 65536); | 
					
						
							| 
									
										
										
										
											2018-11-12 21:36:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |     check(array, "\xDD\x00\x01\x00\x00"_s + std::string(65536, '\xc0')); | 
					
						
							| 
									
										
										
										
											2018-11-12 21:36:39 +01:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-05-29 08:31:17 +02:00
										 |  |  | } |