diff options
author | Adam Lesinski <adamlesinski@google.com> | 2016-07-08 15:00:32 -0700 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2016-07-13 17:45:28 -0700 |
commit | d0f116b619feede0cfdb647157ce5ab4d50a1c46 (patch) | |
tree | 5b2a8663602ba2b267890ff85d3cf5618ac922b5 /tools/aapt2/StringPool_test.cpp | |
parent | aaac91f4a00a9968ef107ea143e6f2f669f762f1 (diff) |
AAPT2: Remove usage of u16string
For legacy reasons, we kept around the use of UTF-16 internally
in AAPT2. We don't need this and this CL removes all instances of
std::u16string and StringPiece16. The only places still needed
are when interacting with the ResTable APIs that only operate in
UTF16.
Change-Id: I492475b84bb9014fa13bf992cff447ee7a5fe588
Diffstat (limited to 'tools/aapt2/StringPool_test.cpp')
-rw-r--r-- | tools/aapt2/StringPool_test.cpp | 133 |
1 files changed, 73 insertions, 60 deletions
diff --git a/tools/aapt2/StringPool_test.cpp b/tools/aapt2/StringPool_test.cpp index 562d80ed8cdb..1367af72e4c1 100644 --- a/tools/aapt2/StringPool_test.cpp +++ b/tools/aapt2/StringPool_test.cpp @@ -15,9 +15,9 @@ */ #include "StringPool.h" +#include "test/Test.h" #include "util/Util.h" -#include <gtest/gtest.h> #include <string> namespace aapt { @@ -25,37 +25,37 @@ namespace aapt { TEST(StringPoolTest, InsertOneString) { StringPool pool; - StringPool::Ref ref = pool.makeRef(u"wut"); - EXPECT_EQ(*ref, u"wut"); + StringPool::Ref ref = pool.makeRef("wut"); + EXPECT_EQ(*ref, "wut"); } TEST(StringPoolTest, InsertTwoUniqueStrings) { StringPool pool; - StringPool::Ref ref = pool.makeRef(u"wut"); - StringPool::Ref ref2 = pool.makeRef(u"hey"); + StringPool::Ref ref = pool.makeRef("wut"); + StringPool::Ref ref2 = pool.makeRef("hey"); - EXPECT_EQ(*ref, u"wut"); - EXPECT_EQ(*ref2, u"hey"); + EXPECT_EQ(*ref, "wut"); + EXPECT_EQ(*ref2, "hey"); } TEST(StringPoolTest, DoNotInsertNewDuplicateString) { StringPool pool; - StringPool::Ref ref = pool.makeRef(u"wut"); - StringPool::Ref ref2 = pool.makeRef(u"wut"); + StringPool::Ref ref = pool.makeRef("wut"); + StringPool::Ref ref2 = pool.makeRef("wut"); - EXPECT_EQ(*ref, u"wut"); - EXPECT_EQ(*ref2, u"wut"); + EXPECT_EQ(*ref, "wut"); + EXPECT_EQ(*ref2, "wut"); EXPECT_EQ(1u, pool.size()); } TEST(StringPoolTest, MaintainInsertionOrderIndex) { StringPool pool; - StringPool::Ref ref = pool.makeRef(u"z"); - StringPool::Ref ref2 = pool.makeRef(u"a"); - StringPool::Ref ref3 = pool.makeRef(u"m"); + StringPool::Ref ref = pool.makeRef("z"); + StringPool::Ref ref2 = pool.makeRef("a"); + StringPool::Ref ref3 = pool.makeRef("m"); EXPECT_EQ(0u, ref.getIndex()); EXPECT_EQ(1u, ref2.getIndex()); @@ -65,39 +65,39 @@ TEST(StringPoolTest, MaintainInsertionOrderIndex) { TEST(StringPoolTest, PruneStringsWithNoReferences) { StringPool pool; - StringPool::Ref refA = pool.makeRef(u"foo"); + StringPool::Ref refA = pool.makeRef("foo"); { - StringPool::Ref ref = pool.makeRef(u"wut"); - EXPECT_EQ(*ref, u"wut"); + StringPool::Ref ref = pool.makeRef("wut"); + EXPECT_EQ(*ref, "wut"); EXPECT_EQ(2u, pool.size()); } - StringPool::Ref refB = pool.makeRef(u"bar"); + StringPool::Ref refB = pool.makeRef("bar"); EXPECT_EQ(3u, pool.size()); pool.prune(); EXPECT_EQ(2u, pool.size()); StringPool::const_iterator iter = begin(pool); - EXPECT_EQ((*iter)->value, u"foo"); + EXPECT_EQ((*iter)->value, "foo"); EXPECT_LT((*iter)->index, 2u); ++iter; - EXPECT_EQ((*iter)->value, u"bar"); + EXPECT_EQ((*iter)->value, "bar"); EXPECT_LT((*iter)->index, 2u); } TEST(StringPoolTest, SortAndMaintainIndexesInReferences) { StringPool pool; - StringPool::Ref ref = pool.makeRef(u"z"); - StringPool::StyleRef ref2 = pool.makeRef(StyleString{ {u"a"} }); - StringPool::Ref ref3 = pool.makeRef(u"m"); + StringPool::Ref ref = pool.makeRef("z"); + StringPool::StyleRef ref2 = pool.makeRef(StyleString{ {"a"} }); + StringPool::Ref ref3 = pool.makeRef("m"); - EXPECT_EQ(*ref, u"z"); + EXPECT_EQ(*ref, "z"); EXPECT_EQ(0u, ref.getIndex()); - EXPECT_EQ(*(ref2->str), u"a"); + EXPECT_EQ(*(ref2->str), "a"); EXPECT_EQ(1u, ref2.getIndex()); - EXPECT_EQ(*ref3, u"m"); + EXPECT_EQ(*ref3, "m"); EXPECT_EQ(2u, ref3.getIndex()); pool.sort([](const StringPool::Entry& a, const StringPool::Entry& b) -> bool { @@ -105,30 +105,30 @@ TEST(StringPoolTest, SortAndMaintainIndexesInReferences) { }); - EXPECT_EQ(*ref, u"z"); + EXPECT_EQ(*ref, "z"); EXPECT_EQ(2u, ref.getIndex()); - EXPECT_EQ(*(ref2->str), u"a"); + EXPECT_EQ(*(ref2->str), "a"); EXPECT_EQ(0u, ref2.getIndex()); - EXPECT_EQ(*ref3, u"m"); + EXPECT_EQ(*ref3, "m"); EXPECT_EQ(1u, ref3.getIndex()); } TEST(StringPoolTest, SortAndStillDedupe) { StringPool pool; - StringPool::Ref ref = pool.makeRef(u"z"); - StringPool::Ref ref2 = pool.makeRef(u"a"); - StringPool::Ref ref3 = pool.makeRef(u"m"); + StringPool::Ref ref = pool.makeRef("z"); + StringPool::Ref ref2 = pool.makeRef("a"); + StringPool::Ref ref3 = pool.makeRef("m"); pool.sort([](const StringPool::Entry& a, const StringPool::Entry& b) -> bool { return a.value < b.value; }); - StringPool::Ref ref4 = pool.makeRef(u"z"); - StringPool::Ref ref5 = pool.makeRef(u"a"); - StringPool::Ref ref6 = pool.makeRef(u"m"); + StringPool::Ref ref4 = pool.makeRef("z"); + StringPool::Ref ref5 = pool.makeRef("a"); + StringPool::Ref ref6 = pool.makeRef("m"); EXPECT_EQ(ref4.getIndex(), ref.getIndex()); EXPECT_EQ(ref5.getIndex(), ref2.getIndex()); @@ -139,20 +139,20 @@ TEST(StringPoolTest, AddStyles) { StringPool pool; StyleString str { - { u"android" }, + { "android" }, { - Span{ { u"b" }, 2, 6 } + Span{ { "b" }, 2, 6 } } }; StringPool::StyleRef ref = pool.makeRef(str); EXPECT_EQ(0u, ref.getIndex()); - EXPECT_EQ(std::u16string(u"android"), *(ref->str)); + EXPECT_EQ(std::string("android"), *(ref->str)); ASSERT_EQ(1u, ref->spans.size()); const StringPool::Span& span = ref->spans.front(); - EXPECT_EQ(*(span.name), u"b"); + EXPECT_EQ(*(span.name), "b"); EXPECT_EQ(2u, span.firstChar); EXPECT_EQ(6u, span.lastChar); } @@ -160,9 +160,9 @@ TEST(StringPoolTest, AddStyles) { TEST(StringPoolTest, DoNotDedupeStyleWithSameStringAsNonStyle) { StringPool pool; - StringPool::Ref ref = pool.makeRef(u"android"); + StringPool::Ref ref = pool.makeRef("android"); - StyleString str { { u"android" } }; + StyleString str { { "android" } }; StringPool::StyleRef styleRef = pool.makeRef(str); EXPECT_NE(ref.getIndex(), styleRef.getIndex()); @@ -184,7 +184,7 @@ TEST(StringPoolTest, FlattenOddCharactersUtf16) { using namespace android; // For NO_ERROR on Windows. StringPool pool; - pool.makeRef(u"\u093f"); + pool.makeRef("\u093f"); BigBuffer buffer(1024); StringPool::flattenUtf16(&buffer, pool); @@ -198,20 +198,20 @@ TEST(StringPoolTest, FlattenOddCharactersUtf16) { EXPECT_EQ(0u, str[1]); } -constexpr const char16_t* sLongString = u"バッテリーを長持ちさせるため、バッテリーセーバーは端末のパフォーマンスを抑え、バイブレーション、位置情報サービス、大半のバックグラウンドデータを制限します。メール、SMSや、同期を使 用するその他のアプリは、起動しても更新されないことがあります。バッテリーセーバーは端末の充電中は自動的にOFFになります。"; +constexpr const char* sLongString = "バッテリーを長持ちさせるため、バッテリーセーバーは端末のパフォーマンスを抑え、バイブレーション、位置情報サービス、大半のバックグラウンドデータを制限します。メール、SMSや、同期を使 用するその他のアプリは、起動しても更新されないことがあります。バッテリーセーバーは端末の充電中は自動的にOFFになります。"; -TEST(StringPoolTest, FlattenUtf8) { +TEST(StringPoolTest, Flatten) { using namespace android; // For NO_ERROR on Windows. StringPool pool; - StringPool::Ref ref1 = pool.makeRef(u"hello"); - StringPool::Ref ref2 = pool.makeRef(u"goodbye"); + StringPool::Ref ref1 = pool.makeRef("hello"); + StringPool::Ref ref2 = pool.makeRef("goodbye"); StringPool::Ref ref3 = pool.makeRef(sLongString); - StringPool::Ref ref4 = pool.makeRef(u""); + StringPool::Ref ref4 = pool.makeRef(""); StringPool::StyleRef ref5 = pool.makeRef(StyleString{ - { u"style" }, - { Span{ { u"b" }, 0, 1 }, Span{ { u"i" }, 2, 3 } } + { "style" }, + { Span{ { "b" }, 0, 1 }, Span{ { "i" }, 2, 3 } } }); EXPECT_EQ(0u, ref1.getIndex()); @@ -220,30 +220,43 @@ TEST(StringPoolTest, FlattenUtf8) { EXPECT_EQ(3u, ref4.getIndex()); EXPECT_EQ(4u, ref5.getIndex()); - BigBuffer buffer(1024); - StringPool::flattenUtf8(&buffer, pool); + BigBuffer buffers[2] = { BigBuffer(1024), BigBuffer(1024) }; + StringPool::flattenUtf8(&buffers[0], pool); + StringPool::flattenUtf16(&buffers[1], pool); + + // Test both UTF-8 and UTF-16 buffers. + for (const BigBuffer& buffer : buffers) { + std::unique_ptr<uint8_t[]> data = util::copy(buffer); - std::unique_ptr<uint8_t[]> data = util::copy(buffer); - { ResStringPool test; ASSERT_EQ(test.setTo(data.get(), buffer.size()), NO_ERROR); - EXPECT_EQ(util::getString(test, 0), u"hello"); - EXPECT_EQ(util::getString(test, 1), u"goodbye"); - EXPECT_EQ(util::getString(test, 2), sLongString); + EXPECT_EQ(std::string("hello"), util::getString(test, 0)); + EXPECT_EQ(StringPiece16(u"hello"), util::getString16(test, 0)); + + EXPECT_EQ(std::string("goodbye"), util::getString(test, 1)); + EXPECT_EQ(StringPiece16(u"goodbye"), util::getString16(test, 1)); + + EXPECT_EQ(StringPiece(sLongString), util::getString(test, 2)); + EXPECT_EQ(util::utf8ToUtf16(sLongString), util::getString16(test, 2).toString()); + size_t len; - EXPECT_NE(nullptr, test.stringAt(3, &len)); - EXPECT_EQ(util::getString(test, 4), u"style"); + EXPECT_TRUE(test.stringAt(3, &len) != nullptr || test.string8At(3, &len) != nullptr); + + EXPECT_EQ(std::string("style"), util::getString(test, 4)); + EXPECT_EQ(StringPiece16(u"style"), util::getString16(test, 4)); const ResStringPool_span* span = test.styleAt(4); ASSERT_NE(nullptr, span); - EXPECT_EQ(util::getString(test, span->name.index), u"b"); + EXPECT_EQ(std::string("b"), util::getString(test, span->name.index)); + EXPECT_EQ(StringPiece16(u"b"), util::getString16(test, span->name.index)); EXPECT_EQ(0u, span->firstChar); EXPECT_EQ(1u, span->lastChar); span++; ASSERT_NE(ResStringPool_span::END, span->name.index); - EXPECT_EQ(util::getString(test, span->name.index), u"i"); + EXPECT_EQ(std::string("i"), util::getString(test, span->name.index)); + EXPECT_EQ(StringPiece16(u"i"), util::getString16(test, span->name.index)); EXPECT_EQ(2u, span->firstChar); EXPECT_EQ(3u, span->lastChar); span++; |