Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7be7934 authored by Winson's avatar Winson
Browse files

Hold data pointer reference to AAPT2 test file

To try and solve test flakiness, hold the unique_ptr in the method scope to make sure it's cleaned up after we assert on it.

Bug: 123079798

Test: gonna merge and check for failures, since it passes locally

Change-Id: Id348d1112832cbb82f605a84ef675c25a7488b11
parent 3b943e77
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -53,7 +53,11 @@ TEST_F(ConvertTest, RemoveRawXmlStrings) {
  // Load the binary xml tree
  android::ResXMLTree tree;
  std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_convert_apk, &diag);
  AssertLoadXml(apk.get(), "res/xml/test.xml", &tree);

  std::unique_ptr<io::IData> data = OpenFileAsData(apk.get(), "res/xml/test.xml");
  ASSERT_THAT(data, Ne(nullptr));

  AssertLoadXml(apk.get(), data.get(), &tree);

  // Check that the raw string index has not been assigned
  EXPECT_THAT(tree.getAttributeValueStringID(0), Eq(-1));
@@ -87,7 +91,11 @@ TEST_F(ConvertTest, KeepRawXmlStrings) {
  // Load the binary xml tree
  android::ResXMLTree tree;
  std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_convert_apk, &diag);
  AssertLoadXml(apk.get(), "res/xml/test.xml", &tree);

  std::unique_ptr<io::IData> data = OpenFileAsData(apk.get(), "res/xml/test.xml");
  ASSERT_THAT(data, Ne(nullptr));

  AssertLoadXml(apk.get(), data.get(), &tree);

  // Check that the raw string index has been set to the correct string pool entry
  int32_t raw_index = tree.getAttributeValueStringID(0);
+10 −2
Original line number Diff line number Diff line
@@ -43,7 +43,11 @@ TEST_F(LinkTest, RemoveRawXmlStrings) {
  // Load the binary xml tree
  android::ResXMLTree tree;
  std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag);
  AssertLoadXml(apk.get(), "res/xml/test.xml", &tree);

  std::unique_ptr<io::IData> data = OpenFileAsData(apk.get(), "res/xml/test.xml");
  ASSERT_THAT(data, Ne(nullptr));

  AssertLoadXml(apk.get(), data.get(), &tree);

  // Check that the raw string index has not been assigned
  EXPECT_THAT(tree.getAttributeValueStringID(0), Eq(-1));
@@ -67,7 +71,11 @@ TEST_F(LinkTest, KeepRawXmlStrings) {
  // Load the binary xml tree
  android::ResXMLTree tree;
  std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag);
  AssertLoadXml(apk.get(), "res/xml/test.xml", &tree);

  std::unique_ptr<io::IData> data = OpenFileAsData(apk.get(), "res/xml/test.xml");
  ASSERT_THAT(data, Ne(nullptr));

  AssertLoadXml(apk.get(), data.get(), &tree);

  // Check that the raw string index has been set to the correct string pool entry
  int32_t raw_index = tree.getAttributeValueStringID(0);
+9 −7
Original line number Diff line number Diff line
@@ -133,16 +133,18 @@ std::string CommandTestFixture::GetDefaultManifest() {
  return manifest_file;
}

void CommandTestFixture::AssertLoadXml(LoadedApk *apk, const android::StringPiece &xml_path,
std::unique_ptr<io::IData> CommandTestFixture::OpenFileAsData(LoadedApk* apk,
                                                              const android::StringPiece& path) {
  return apk
      ->GetFileCollection()
      ->FindFile(path)
      ->OpenAsData();
}

void CommandTestFixture::AssertLoadXml(LoadedApk* apk, const io::IData* data,
                                       android::ResXMLTree *out_tree) {
  ASSERT_THAT(apk, Ne(nullptr));

  io::IFile* file = apk->GetFileCollection()->FindFile(xml_path);
  ASSERT_THAT(file, Ne(nullptr));

  std::unique_ptr<io::IData> data = file->OpenAsData();
  ASSERT_THAT(data, Ne(nullptr));

  out_tree->setTo(data->data(), data->size());
  ASSERT_THAT(out_tree->getError(), Eq(android::OK));
  while (out_tree->next() != android::ResXMLTree::START_TAG) {
+5 −1
Original line number Diff line number Diff line
@@ -83,8 +83,12 @@ class CommandTestFixture : public TestDirectoryFixture {
  // Creates a minimal android manifest within the test directory and returns the file path.
  std::string GetDefaultManifest();

  // Returns pointer to data inside APK files
  std::unique_ptr<io::IData> OpenFileAsData(LoadedApk* apk,
                                            const android::StringPiece& path);

  // Asserts that loading the tree from the specified file in the apk succeeds.
  void AssertLoadXml(LoadedApk* apk, const android::StringPiece& xml_path,
  void AssertLoadXml(LoadedApk* apk, const io::IData* data,
                     android::ResXMLTree* out_tree);

 private: