aar_import creates res/values/empty.xml if it contains no resources.
To do this, add a new tool that is used instead of zipper to get the resources out of the AAR. This tool creates res/values/empty.xml if there are no resources in the AAR.
Also, some general cleaning of the code.
RELNOTES: None
PiperOrigin-RevId: 166768607
diff --git a/tools/android/aar_resources_extractor_test.py b/tools/android/aar_resources_extractor_test.py
new file mode 100644
index 0000000..b59e416
--- /dev/null
+++ b/tools/android/aar_resources_extractor_test.py
@@ -0,0 +1,64 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for aar_resources_extractor."""
+
+import os
+import shutil
+import StringIO
+import unittest
+import zipfile
+
+from tools.android import aar_resources_extractor
+
+
+class AarResourcesExtractorTest(unittest.TestCase):
+ """Unit tests for aar_resources_extractor.py."""
+
+ def setUp(self):
+ os.chdir(os.environ["TEST_TMPDIR"])
+
+ def tearDown(self):
+ shutil.rmtree("out_dir")
+
+ def DirContents(self, d):
+ return [path + "/" + f for (path, _, files) in os.walk(d)
+ for f in files]
+
+ def testNoResources(self):
+ aar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ os.makedirs("out_dir")
+ aar_resources_extractor.ExtractResources(aar, "out_dir")
+ self.assertEqual(["out_dir/res/values/empty.xml"],
+ self.DirContents("out_dir"))
+ with open("out_dir/res/values/empty.xml", "r") as empty_xml:
+ self.assertEqual("<resources/>", empty_xml.read())
+
+ def testContainsResources(self):
+ aar = zipfile.ZipFile(StringIO.StringIO(), "w")
+ aar.writestr("res/values/values.xml", "some values")
+ aar.writestr("res/layouts/layout.xml", "some layout")
+ os.makedirs("out_dir")
+ aar_resources_extractor.ExtractResources(aar, "out_dir")
+ expected_resources = ["out_dir/res/values/values.xml",
+ "out_dir/res/layouts/layout.xml"]
+ self.assertItemsEqual(expected_resources, self.DirContents("out_dir"))
+ with open("out_dir/res/values/values.xml", "r") as values_xml:
+ self.assertEqual("some values", values_xml.read())
+ with open("out_dir/res/layouts/layout.xml", "r") as layout_xml:
+ self.assertEqual("some layout", layout_xml.read())
+
+
+if __name__ == "__main__":
+ unittest.main()