Skip to content

Commit 9a67da6

Browse files
committed
More fixes
1 parent 1db27a0 commit 9a67da6

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

modules/yup_core/streams/yup_MemoryOutputStream.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ char* MemoryOutputStream::prepareToWrite (size_t numBytes)
9999
if (blockToUse != nullptr)
100100
{
101101
if (storageNeeded >= blockToUse->getSize())
102-
blockToUse->ensureSize ((storageNeeded + jmin (storageNeeded / 2, (size_t) (1024 * 1024)) + 32) & (size_t) (31));
102+
blockToUse->ensureSize ((storageNeeded + jmin (storageNeeded / 2, (size_t) (1024 * 1024)) + 32) & ~(size_t) 31);
103103

104104
data = static_cast<char*> (blockToUse->getData());
105105
}
@@ -226,4 +226,3 @@ OutputStream& YUP_CALLTYPE operator<< (OutputStream& stream, const MemoryOutputS
226226
}
227227

228228
} // namespace yup
229-

tests/yup_core/yup_String.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
898944
TEST_F (StringTests, FromUTF8)
899945
{
900946
// Test fromUTF8

0 commit comments

Comments
 (0)