blob: bce4a3dbee1949c97387a20243190142c9c8f6b2 [file] [log] [blame]
ajmichael69ef6252017-08-29 00:41:40 +02001# Copyright 2017 The Bazel Authors. All rights reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15"""Tests for aar_resources_extractor."""
16
Googler246ee562017-12-19 11:04:21 -080017import io
ajmichael69ef6252017-08-29 00:41:40 +020018import os
19import shutil
ajmichael69ef6252017-08-29 00:41:40 +020020import unittest
21import zipfile
22
23from tools.android import aar_resources_extractor
24
25
Laszlo Csomorc60bfdf2017-09-27 07:38:03 -040026def _HostPath(path):
27 return os.path.normpath(path)
28
29
ajmichael69ef6252017-08-29 00:41:40 +020030class AarResourcesExtractorTest(unittest.TestCase):
31 """Unit tests for aar_resources_extractor.py."""
32
Googler246ee562017-12-19 11:04:21 -080033 # Python 2 alias
34 if not hasattr(unittest.TestCase, "assertCountEqual"):
35
36 def assertCountEqual(self, *args):
37 return self.assertItemsEqual(*args)
38
ajmichael69ef6252017-08-29 00:41:40 +020039 def setUp(self):
40 os.chdir(os.environ["TEST_TMPDIR"])
41
42 def tearDown(self):
43 shutil.rmtree("out_dir")
44
45 def DirContents(self, d):
Laszlo Csomorc60bfdf2017-09-27 07:38:03 -040046 return [
47 _HostPath(path + "/" + f)
48 for (path, _, files) in os.walk(d) for f in files
49 ]
ajmichael69ef6252017-08-29 00:41:40 +020050
51 def testNoResources(self):
Googler246ee562017-12-19 11:04:21 -080052 aar = zipfile.ZipFile(io.BytesIO(), "w")
ajmichael56567bb2018-01-18 12:03:18 -080053 aar.writestr("res/", "")
ajmichael69ef6252017-08-29 00:41:40 +020054 os.makedirs("out_dir")
55 aar_resources_extractor.ExtractResources(aar, "out_dir")
Laszlo Csomorc60bfdf2017-09-27 07:38:03 -040056 self.assertEqual([_HostPath("out_dir/res/values/empty.xml")],
ajmichael69ef6252017-08-29 00:41:40 +020057 self.DirContents("out_dir"))
58 with open("out_dir/res/values/empty.xml", "r") as empty_xml:
59 self.assertEqual("<resources/>", empty_xml.read())
60
61 def testContainsResources(self):
Googler246ee562017-12-19 11:04:21 -080062 aar = zipfile.ZipFile(io.BytesIO(), "w")
ajmichael69ef6252017-08-29 00:41:40 +020063 aar.writestr("res/values/values.xml", "some values")
64 aar.writestr("res/layouts/layout.xml", "some layout")
ajmichael19044cf2018-01-16 14:18:01 -080065 aar.writestr("assets/a", "some asset")
ajmichael69ef6252017-08-29 00:41:40 +020066 os.makedirs("out_dir")
67 aar_resources_extractor.ExtractResources(aar, "out_dir")
Laszlo Csomorc60bfdf2017-09-27 07:38:03 -040068 expected_resources = [
69 _HostPath("out_dir/res/values/values.xml"),
70 _HostPath("out_dir/res/layouts/layout.xml")
71 ]
Googler246ee562017-12-19 11:04:21 -080072 self.assertCountEqual(expected_resources, self.DirContents("out_dir"))
ajmichael69ef6252017-08-29 00:41:40 +020073 with open("out_dir/res/values/values.xml", "r") as values_xml:
74 self.assertEqual("some values", values_xml.read())
75 with open("out_dir/res/layouts/layout.xml", "r") as layout_xml:
76 self.assertEqual("some layout", layout_xml.read())
77
ajmichael19044cf2018-01-16 14:18:01 -080078 def testNoAssets(self):
79 aar = zipfile.ZipFile(io.BytesIO(), "w")
ajmichael56567bb2018-01-18 12:03:18 -080080 aar.writestr("assets/", "")
ajmichael19044cf2018-01-16 14:18:01 -080081 os.makedirs("out_dir")
82 aar_resources_extractor.ExtractAssets(aar, "out_dir")
83 expected_assets = [
84 _HostPath("out_dir/assets/empty_asset_generated_by_bazel~")
85 ]
86 self.assertEqual(expected_assets, self.DirContents("out_dir"))
87 self.assertEqual(
88 os.stat("out_dir/assets/empty_asset_generated_by_bazel~").st_size, 0)
89
90 def testContainsAssets(self):
91 aar = zipfile.ZipFile(io.BytesIO(), "w")
92 aar.writestr("res/values/values.xml", "some values")
93 aar.writestr("assets/a", "some asset")
94 aar.writestr("assets/b", "some other asset")
95 os.makedirs("out_dir")
96 aar_resources_extractor.ExtractAssets(aar, "out_dir")
97 expected_resources = [
98 _HostPath("out_dir/assets/a"),
99 _HostPath("out_dir/assets/b")
100 ]
101 self.assertCountEqual(expected_resources, self.DirContents("out_dir"))
102 with open("out_dir/assets/a", "r") as values_xml:
103 self.assertEqual("some asset", values_xml.read())
104 with open("out_dir/assets/b", "r") as layout_xml:
105 self.assertEqual("some other asset", layout_xml.read())
106
ajmichael69ef6252017-08-29 00:41:40 +0200107
108if __name__ == "__main__":
109 unittest.main()