Loading tools/aapt2/compile/NinePatch.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -598,6 +598,9 @@ std::unique_ptr<uint8_t[]> NinePatch::serializeBase(size_t* outLen) const { (const int32_t*) verticalStretchRegions.data(), regionColors.data(), buffer.get()); // Convert to file endianness. reinterpret_cast<android::Res_png_9patch*>(buffer.get())->deviceToFile(); *outLen = data.serializedSize(); return buffer; } Loading Loading @@ -661,7 +664,9 @@ std::unique_ptr<uint8_t[]> NinePatch::serializeRoundedRectOutline(size_t* outLen } ::std::ostream& operator<<(::std::ostream& out, const NinePatch& ninePatch) { return out << "padding: " << ninePatch.padding return out << "horizontalStretch:" << util::joiner(ninePatch.horizontalStretchRegions, " ") << " verticalStretch:" << util::joiner(ninePatch.verticalStretchRegions, " ") << " padding: " << ninePatch.padding << ", bounds: " << ninePatch.layoutBounds << ", outline: " << ninePatch.outline << " rad=" << ninePatch.outlineRadius Loading tools/aapt2/compile/NinePatch_test.cpp +36 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,14 @@ static uint8_t* kOutlineRadius5x5[] = { (uint8_t*) WHITE WHITE WHITE WHITE WHITE, }; static uint8_t* kStretchAndPadding5x5[] = { (uint8_t*) WHITE WHITE BLACK WHITE WHITE, (uint8_t*) WHITE RED RED RED WHITE, (uint8_t*) BLACK RED RED RED BLACK, (uint8_t*) WHITE RED RED RED WHITE, (uint8_t*) WHITE WHITE BLACK WHITE WHITE, }; TEST(NinePatchTest, Minimum3x3) { std::string err; EXPECT_EQ(nullptr, NinePatch::create(k2x2, 2, 2, &err)); Loading Loading @@ -319,4 +327,32 @@ TEST(NinePatchTest, OutlineRadius) { EXPECT_EQ(3.4142f, ninePatch->outlineRadius); } ::testing::AssertionResult bigEndianOne(uint8_t* cursor) { if (cursor[0] == 0 && cursor[1] == 0 && cursor[2] == 0 && cursor[3] == 1) { return ::testing::AssertionSuccess(); } return ::testing::AssertionFailure() << "Not BigEndian 1"; } TEST(NinePatchTest, SerializePngEndianness) { std::string err; std::unique_ptr<NinePatch> ninePatch = NinePatch::create(kStretchAndPadding5x5, 5, 5, &err); ASSERT_NE(nullptr, ninePatch); size_t len; std::unique_ptr<uint8_t[]> data = ninePatch->serializeBase(&len); ASSERT_NE(nullptr, data); ASSERT_NE(0u, len); // Skip past wasDeserialized + numXDivs + numYDivs + numColors + xDivsOffset + yDivsOffset // (12 bytes) uint8_t* cursor = data.get() + 12; // Check that padding is big-endian. Expecting value 1. EXPECT_TRUE(bigEndianOne(cursor)); EXPECT_TRUE(bigEndianOne(cursor + 4)); EXPECT_TRUE(bigEndianOne(cursor + 8)); EXPECT_TRUE(bigEndianOne(cursor + 12)); } } // namespace aapt Loading
tools/aapt2/compile/NinePatch.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -598,6 +598,9 @@ std::unique_ptr<uint8_t[]> NinePatch::serializeBase(size_t* outLen) const { (const int32_t*) verticalStretchRegions.data(), regionColors.data(), buffer.get()); // Convert to file endianness. reinterpret_cast<android::Res_png_9patch*>(buffer.get())->deviceToFile(); *outLen = data.serializedSize(); return buffer; } Loading Loading @@ -661,7 +664,9 @@ std::unique_ptr<uint8_t[]> NinePatch::serializeRoundedRectOutline(size_t* outLen } ::std::ostream& operator<<(::std::ostream& out, const NinePatch& ninePatch) { return out << "padding: " << ninePatch.padding return out << "horizontalStretch:" << util::joiner(ninePatch.horizontalStretchRegions, " ") << " verticalStretch:" << util::joiner(ninePatch.verticalStretchRegions, " ") << " padding: " << ninePatch.padding << ", bounds: " << ninePatch.layoutBounds << ", outline: " << ninePatch.outline << " rad=" << ninePatch.outlineRadius Loading
tools/aapt2/compile/NinePatch_test.cpp +36 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,14 @@ static uint8_t* kOutlineRadius5x5[] = { (uint8_t*) WHITE WHITE WHITE WHITE WHITE, }; static uint8_t* kStretchAndPadding5x5[] = { (uint8_t*) WHITE WHITE BLACK WHITE WHITE, (uint8_t*) WHITE RED RED RED WHITE, (uint8_t*) BLACK RED RED RED BLACK, (uint8_t*) WHITE RED RED RED WHITE, (uint8_t*) WHITE WHITE BLACK WHITE WHITE, }; TEST(NinePatchTest, Minimum3x3) { std::string err; EXPECT_EQ(nullptr, NinePatch::create(k2x2, 2, 2, &err)); Loading Loading @@ -319,4 +327,32 @@ TEST(NinePatchTest, OutlineRadius) { EXPECT_EQ(3.4142f, ninePatch->outlineRadius); } ::testing::AssertionResult bigEndianOne(uint8_t* cursor) { if (cursor[0] == 0 && cursor[1] == 0 && cursor[2] == 0 && cursor[3] == 1) { return ::testing::AssertionSuccess(); } return ::testing::AssertionFailure() << "Not BigEndian 1"; } TEST(NinePatchTest, SerializePngEndianness) { std::string err; std::unique_ptr<NinePatch> ninePatch = NinePatch::create(kStretchAndPadding5x5, 5, 5, &err); ASSERT_NE(nullptr, ninePatch); size_t len; std::unique_ptr<uint8_t[]> data = ninePatch->serializeBase(&len); ASSERT_NE(nullptr, data); ASSERT_NE(0u, len); // Skip past wasDeserialized + numXDivs + numYDivs + numColors + xDivsOffset + yDivsOffset // (12 bytes) uint8_t* cursor = data.get() + 12; // Check that padding is big-endian. Expecting value 1. EXPECT_TRUE(bigEndianOne(cursor)); EXPECT_TRUE(bigEndianOne(cursor + 4)); EXPECT_TRUE(bigEndianOne(cursor + 8)); EXPECT_TRUE(bigEndianOne(cursor + 12)); } } // namespace aapt