| 
									
										
										
										
											2021-03-29 17:14:01 +02:00
										 |  |  | // ArduinoJson - https://arduinojson.org
 | 
					
						
							| 
									
										
										
										
											2024-01-03 08:47:06 +01:00
										 |  |  | // Copyright © 2014-2024, Benoit BLANCHON
 | 
					
						
							| 
									
										
										
										
											2015-08-10 17:22:22 +02:00
										 |  |  | // MIT License
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <ArduinoJson.h>
 | 
					
						
							| 
									
										
										
										
											2016-02-14 16:18:13 +01:00
										 |  |  | #include <stdint.h>
 | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | #include <catch.hpp>
 | 
					
						
							| 
									
										
										
										
											2016-02-14 16:18:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  | #include "Literals.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  | namespace my { | 
					
						
							| 
									
										
										
										
											2023-02-14 10:04:48 +01:00
										 |  |  | using ArduinoJson::detail::isinf; | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  | }  // namespace my
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-04 09:09:57 +02:00
										 |  |  | enum MY_ENUM { ONE = 1, TWO = 2 }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | TEST_CASE("JsonVariant::as()") { | 
					
						
							| 
									
										
										
										
											2019-12-24 16:41:00 +01:00
										 |  |  |   static const char* null = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-17 18:15:13 +02:00
										 |  |  |   JsonDocument doc; | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |   JsonVariant variant = doc.to<JsonVariant>(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("not set") { | 
					
						
							|  |  |  |     REQUIRE(false == variant.as<bool>()); | 
					
						
							|  |  |  |     REQUIRE(0 == variant.as<int>()); | 
					
						
							|  |  |  |     REQUIRE(0.0f == variant.as<float>()); | 
					
						
							| 
									
										
										
										
											2021-03-08 09:58:09 +01:00
										 |  |  |     REQUIRE(0 == variant.as<const char*>()); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE("null" == variant.as<std::string>()); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(4.2)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(4.2); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<bool>()); | 
					
						
							|  |  |  |     REQUIRE(0 == variant.as<const char*>()); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "4.2"); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 4L); | 
					
						
							|  |  |  |     REQUIRE(variant.as<unsigned>() == 4U); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(0.0)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(0.0); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == false); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 0L); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(false)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(false); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(false == variant.as<bool>()); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 0.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 0L); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "false"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(true)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(true); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>()); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<double>() == 1.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 1L); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "true"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-30 09:17:28 +02:00
										 |  |  |   SECTION("set(42)") { | 
					
						
							|  |  |  |     variant.set(42); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 42.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<int>() == 42); | 
					
						
							|  |  |  |     REQUIRE(variant.as<unsigned int>() == 42U);  // issue #1601
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "42"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							| 
									
										
										
										
											2021-06-30 09:17:28 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(42L)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(42L); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 42.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "42"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(-42L)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(-42L); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<double>() == -42.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "-42"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-14 11:42:53 +02:00
										 |  |  |   SECTION("set(42UL)") { | 
					
						
							|  |  |  |     variant.set(42UL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 42.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "42"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2021-04-14 11:42:53 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(0L)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(0L); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == false); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 0.0); | 
					
						
							| 
									
										
										
										
											2021-04-14 11:42:53 +02:00
										 |  |  |     REQUIRE(variant.as<std::string>() == "0"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2021-04-14 11:42:53 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SECTION("set(0UL)") { | 
					
						
							|  |  |  |     variant.set(0UL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<bool>() == false); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 0.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "0"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(null)") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set(null); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == false); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 0.0); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long>() == 0L); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "null"); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(\"42\")") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set("42"); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<long>() == 42L); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>() == "42"); | 
					
						
							| 
									
										
										
										
											2022-02-17 10:47:42 +01:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isLinked() == true); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(\"hello\")") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set("hello"); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     REQUIRE(variant.as<long>() == 0L); | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |     REQUIRE(variant.as<const char*>() == "hello"_s); | 
					
						
							|  |  |  |     REQUIRE(variant.as<const char*>() == "hello"_s); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "hello"_s); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>() == "hello"); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 17:27:32 +01:00
										 |  |  |   SECTION("set(std::string(\"4.2\"))") { | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |     variant.set("4.2"_s); | 
					
						
							| 
									
										
										
										
											2018-11-09 17:27:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2018-11-09 17:27:32 +01:00
										 |  |  |     REQUIRE(variant.as<long>() == 4L); | 
					
						
							|  |  |  |     REQUIRE(variant.as<double>() == 4.2); | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |     REQUIRE(variant.as<const char*>() == "4.2"_s); | 
					
						
							|  |  |  |     REQUIRE(variant.as<std::string>() == "4.2"_s); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>() == "4.2"); | 
					
						
							| 
									
										
										
										
											2022-02-17 10:47:42 +01:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isLinked() == false); | 
					
						
							| 
									
										
										
										
											2018-11-09 17:27:32 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("set(\"true\")") { | 
					
						
							| 
									
										
										
										
											2018-08-21 17:56:16 +02:00
										 |  |  |     variant.set("true"); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     REQUIRE(variant.as<int>() == 0); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>() == "true"); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SECTION("set(-1e300)") { | 
					
						
							|  |  |  |     variant.set(-1e300); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     REQUIRE(variant.as<double>() == -1e300); | 
					
						
							|  |  |  |     REQUIRE(variant.as<float>() < 0); | 
					
						
							|  |  |  |     REQUIRE(my::isinf(variant.as<float>())); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SECTION("set(1e300)") { | 
					
						
							|  |  |  |     variant.set(1e300); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     REQUIRE(variant.as<double>() == 1e300); | 
					
						
							|  |  |  |     REQUIRE(variant.as<float>() > 0); | 
					
						
							|  |  |  |     REQUIRE(my::isinf(variant.as<float>())); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |   SECTION("set(1e-300)") { | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     variant.set(1e-300); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     REQUIRE(variant.as<bool>() == true); | 
					
						
							| 
									
										
										
										
											2019-03-06 15:31:37 +01:00
										 |  |  |     REQUIRE(variant.as<double>() == 1e-300); | 
					
						
							|  |  |  |     REQUIRE(variant.as<float>() == 0); | 
					
						
							| 
									
										
										
										
											2021-10-24 09:58:13 +02:00
										 |  |  |     REQUIRE(variant.as<JsonString>().isNull()); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-06 18:33:48 +02:00
										 |  |  |   SECTION("set(serialized(\"hello\"))") { | 
					
						
							|  |  |  |     variant.set(serialized("hello")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<MsgPackBinary>().data() == nullptr); | 
					
						
							|  |  |  |     REQUIRE(variant.as<MsgPackExtension>().data() == nullptr); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("to<JsonObject>()") { | 
					
						
							|  |  |  |     JsonObject obj = variant.to<JsonObject>(); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |     obj["key"] = "value"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     SECTION("as<bool>()") { | 
					
						
							|  |  |  |       REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     SECTION("as<std::string>()") { | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |       REQUIRE(variant.as<std::string>() == "{\"key\":\"value\"}"_s); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     SECTION("ObjectAsJsonObject") { | 
					
						
							|  |  |  |       JsonObject o = variant.as<JsonObject>(); | 
					
						
							|  |  |  |       REQUIRE(o.size() == 1); | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |       REQUIRE(o["key"] == "value"_s); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("to<JsonArray>()") { | 
					
						
							|  |  |  |     JsonArray arr = variant.to<JsonArray>(); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |     arr.add(4); | 
					
						
							|  |  |  |     arr.add(2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-28 13:05:07 +02:00
										 |  |  |     SECTION("as<bool>()") { | 
					
						
							|  |  |  |       REQUIRE(variant.as<bool>() == true); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     SECTION("as<std::string>()") { | 
					
						
							| 
									
										
										
										
											2024-06-07 09:35:45 +02:00
										 |  |  |       REQUIRE(variant.as<std::string>() == "[4,2]"_s); | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     SECTION("as<JsonArray>()") { | 
					
						
							|  |  |  |       JsonArray a = variant.as<JsonArray>(); | 
					
						
							|  |  |  |       REQUIRE(a.size() == 2); | 
					
						
							|  |  |  |       REQUIRE(a[0] == 4); | 
					
						
							|  |  |  |       REQUIRE(a[1] == 2); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-02 16:54:05 +02:00
										 |  |  | #if ARDUINOJSON_USE_LONG_LONG
 | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |   SECTION("Smallest int64 negative") { | 
					
						
							|  |  |  |     variant.set("-9223372036854775808"); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long long>() == -9223372036854775807 - 1); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-01 19:24:06 +02:00
										 |  |  |   SECTION("Biggest int64 positive") { | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  |     variant.set("9223372036854775807"); | 
					
						
							|  |  |  |     REQUIRE(variant.as<long long>() == 9223372036854775807); | 
					
						
							| 
									
										
										
										
											2017-04-18 18:22:24 +02:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-09-11 16:05:56 +02:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2018-10-12 12:00:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-04 09:09:57 +02:00
										 |  |  |   SECTION("as<enum>()") { | 
					
						
							|  |  |  |     variant.set(1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     REQUIRE(variant.as<MY_ENUM>() == ONE); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-07-17 17:22:58 +02:00
										 |  |  | } |