mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	Fixed regression in UTF16 decoding (fixes #1173)
This commit is contained in:
		| @@ -21,6 +21,9 @@ TEST_CASE("Valid JSON strings value") { | ||||
|       {"'\\u00E4'", "\xc3\xa4"},                 // ä | ||||
|       {"'\\u3042'", "\xe3\x81\x82"},             // あ | ||||
|       {"'\\ud83d\\udda4'", "\xf0\x9f\x96\xa4"},  // 🖤 | ||||
|       {"'\\uF053'", "\xef\x81\x93"},             // issue #1173 | ||||
|       {"'\\uF015'", "\xef\x80\x95"},             // issue #1173 | ||||
|       {"'\\uF054'", "\xef\x81\x94"},             // issue #1173 | ||||
|   }; | ||||
|   const size_t testCount = sizeof(testCases) / sizeof(testCases[0]); | ||||
|  | ||||
|   | ||||
| @@ -11,6 +11,7 @@ add_executable(MiscTests | ||||
| 	TypeTraits.cpp | ||||
| 	unsigned_char.cpp | ||||
| 	Utf8.cpp | ||||
| 	Utf16.cpp | ||||
| 	version.cpp | ||||
| ) | ||||
|  | ||||
|   | ||||
							
								
								
									
										68
									
								
								extras/tests/Misc/Utf16.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								extras/tests/Misc/Utf16.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| // ArduinoJson - arduinojson.org | ||||
| // Copyright Benoit Blanchon 2014-2020 | ||||
| // MIT License | ||||
|  | ||||
| #include <ArduinoJson/Json/Utf16.hpp> | ||||
| #include <catch.hpp> | ||||
|  | ||||
| using namespace ARDUINOJSON_NAMESPACE; | ||||
|  | ||||
| static void testUtf16Codepoint(uint16_t codeunit, uint32_t expectedCodepoint) { | ||||
|   Utf16::Codepoint cp; | ||||
|   REQUIRE(cp.append(codeunit) == true); | ||||
|   REQUIRE(cp.value() == expectedCodepoint); | ||||
| } | ||||
|  | ||||
| static void testUtf16Codepoint(uint16_t codeunit1, uint16_t codeunit2, | ||||
|                                uint32_t expectedCodepoint) { | ||||
|   Utf16::Codepoint cp; | ||||
|   REQUIRE(cp.append(codeunit1) == false); | ||||
|   REQUIRE(cp.append(codeunit2) == true); | ||||
|   REQUIRE(cp.value() == expectedCodepoint); | ||||
| } | ||||
|  | ||||
| TEST_CASE("Utf16::Codepoint()") { | ||||
|   SECTION("U+0000") { | ||||
|     testUtf16Codepoint(0x0000, 0x000000); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+0001") { | ||||
|     testUtf16Codepoint(0x0001, 0x000001); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+D7FF") { | ||||
|     testUtf16Codepoint(0xD7FF, 0x00D7FF); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+E000") { | ||||
|     testUtf16Codepoint(0xE000, 0x00E000); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+FFFF") { | ||||
|     testUtf16Codepoint(0xFFFF, 0x00FFFF); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+010000") { | ||||
|     testUtf16Codepoint(0xD800, 0xDC00, 0x010000); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+010001") { | ||||
|     testUtf16Codepoint(0xD800, 0xDC01, 0x010001); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+0103FF") { | ||||
|     testUtf16Codepoint(0xD800, 0xDFFF, 0x0103FF); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+010400") { | ||||
|     testUtf16Codepoint(0xD801, 0xDC00, 0x010400); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+010400") { | ||||
|     testUtf16Codepoint(0xDBFF, 0xDC00, 0x10FC00); | ||||
|   } | ||||
|  | ||||
|   SECTION("U+10FFFF") { | ||||
|     testUtf16Codepoint(0xDBFF, 0xDFFF, 0x10FFFF); | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user