@@ -895,6 +895,52 @@ TEST_F (StringTests, StringCreationFromData)
895895 EXPECT_TRUE (empty_from_data.isEmpty ());
896896}
897897
898+ TEST_F (StringTests, CreateStringFromDataHandlesEncodings)
899+ {
900+ const String expectedString (CharPointer_UTF8 (" glass \xc2\xbd full" ));
901+ const String emojiExpectedString (CharPointer_UTF8 (" hello JUCE \xf0\x9f\xa7\x83 " ));
902+
903+ {
904+ SCOPED_TRACE (" createStringFromData reads LE UTF-16" );
905+ constexpr char buffer[] = " \xff\xfe\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x20\x00\xbd\x00\x20\x00\x66\x00\x75\x00\x6c\x00\x6c\x00 " ;
906+ const auto actualString = String::createStringFromData (buffer, static_cast <int > (sizeof (buffer)));
907+ EXPECT_EQ (expectedString, actualString);
908+
909+ constexpr char emojiBuffer[] = " \xff\xfe\x68\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00\x20\x00\x4a\x00\x55\x00\x43\x00\x45\x00\x20\x00\x3e\xd8\xc3\xdd " ;
910+ const auto emojiActualString = String::createStringFromData (emojiBuffer, static_cast <int > (sizeof (emojiBuffer)));
911+ EXPECT_EQ (emojiExpectedString, emojiActualString);
912+ }
913+
914+ {
915+ SCOPED_TRACE (" createStringFromData reads BE UTF-16" );
916+ constexpr char buffer[] = " \xfe\xff\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x20\x00\xbd\x00\x20\x00\x66\x00\x75\x00\x6c\x00\x6c " ;
917+ const auto actualString = String::createStringFromData (buffer, static_cast <int > (sizeof (buffer)));
918+ EXPECT_EQ (expectedString, actualString);
919+
920+ constexpr char emojiBuffer[] = " \xfe\xff\x00\x68\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00\x20\x00\x4a\x00\x55\x00\x43\x00\x45\x00\x20\xd8\x3e\xdd\xc3 " ;
921+ const auto emojiActualString = String::createStringFromData (emojiBuffer, static_cast <int > (sizeof (emojiBuffer)));
922+ EXPECT_EQ (emojiExpectedString, emojiActualString);
923+ }
924+
925+ {
926+ SCOPED_TRACE (" createStringFromData reads UTF-8" );
927+ constexpr char buffer[] = " glass \xc2\xbd full" ;
928+ const auto actualString = String::createStringFromData (buffer, static_cast <int > (sizeof (buffer)));
929+ EXPECT_EQ (expectedString, actualString);
930+
931+ constexpr char emojiBuffer[] = " hello JUCE \xf0\x9f\xa7\x83 " ;
932+ const auto emojiActualString = String::createStringFromData (emojiBuffer, static_cast <int > (sizeof (emojiBuffer)));
933+ EXPECT_EQ (emojiExpectedString, emojiActualString);
934+ }
935+
936+ {
937+ SCOPED_TRACE (" createStringFromData reads Windows 1252" );
938+ constexpr char buffer[] = " glass \xBD full" ;
939+ const auto actualString = String::createStringFromData (buffer, static_cast <int > (sizeof (buffer)));
940+ EXPECT_EQ (expectedString, actualString);
941+ }
942+ }
943+
898944TEST_F (StringTests, FromUTF8)
899945{
900946 // Test fromUTF8
0 commit comments