Merge "Propagate max_sdk_version to manifest_fixer"

This commit is contained in:
William Loh
2022-07-14 00:20:35 +00:00
committed by Gerrit Code Review
9 changed files with 136 additions and 0 deletions

View File

@@ -39,6 +39,8 @@ def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('--minSdkVersion', default='', dest='min_sdk_version',
help='specify minSdkVersion used by the build system')
parser.add_argument('--replaceMaxSdkVersionPlaceholder', default='', dest='max_sdk_version',
help='specify maxSdkVersion used by the build system')
parser.add_argument('--targetSdkVersion', default='', dest='target_sdk_version',
help='specify targetSdkVersion used by the build system')
parser.add_argument('--raise-min-sdk-version', dest='raise_min_sdk_version', action='store_true',
@@ -342,6 +344,24 @@ def set_test_only_flag_to_true(doc):
attr.value = 'true'
application.setAttributeNode(attr)
def set_max_sdk_version(doc, max_sdk_version):
"""Replace the maxSdkVersion attribute value for permission and
uses-permission tags if the value was originally set to 'current'.
Used for cts test cases where the maxSdkVersion should equal to
Build.SDK_INT.
Args:
doc: The XML document. May be modified by this function.
max_sdk_version: The requested maxSdkVersion attribute.
"""
manifest = parse_manifest(doc)
for tag in ['permission', 'uses-permission']:
children = get_children_with_tag(manifest, tag)
for child in children:
max_attr = child.getAttributeNodeNS(android_ns, 'maxSdkVersion')
if max_attr and max_attr.value == 'current':
max_attr.value = max_sdk_version
def main():
"""Program entry point."""
try:
@@ -354,6 +374,9 @@ def main():
if args.raise_min_sdk_version:
raise_min_sdk_version(doc, args.min_sdk_version, args.target_sdk_version, args.library)
if args.max_sdk_version:
set_max_sdk_version(doc, args.max_sdk_version)
if args.uses_libraries:
add_uses_libraries(doc, args.uses_libraries, True)

View File

@@ -571,5 +571,77 @@ class AddTestOnlyApplicationTest(unittest.TestCase):
output = self.run_test(manifest_input)
self.assert_xml_equal(output, manifest_input)
class SetMaxSdkVersionTest(unittest.TestCase):
"""Unit tests for set_max_sdk_version function."""
def assert_xml_equal(self, output, expected):
self.assertEqual(ET.canonicalize(output), ET.canonicalize(expected))
def run_test(self, input_manifest, max_sdk_version):
doc = minidom.parseString(input_manifest)
manifest_fixer.set_max_sdk_version(doc, max_sdk_version)
output = io.StringIO()
manifest_fixer.write_xml(output, doc)
return output.getvalue()
manifest_tmpl = (
'<?xml version="1.0" encoding="utf-8"?>\n'
'<manifest xmlns:android="http://schemas.android.com/apk/res/android">\n'
'%s'
'</manifest>\n')
def permission(self, max=None):
if max is None:
return ' <permission/>'
return ' <permission android:maxSdkVersion="%s"/>\n' % max
def uses_permission(self, max=None):
if max is None:
return ' <uses-permission/>'
return ' <uses-permission android:maxSdkVersion="%s"/>\n' % max
def test_permission_no_max_sdk_version(self):
"""Tests if permission has no maxSdkVersion attribute"""
manifest_input = self.manifest_tmpl % self.permission()
expected = self.manifest_tmpl % self.permission()
output = self.run_test(manifest_input, '9000')
self.assert_xml_equal(output, expected)
def test_permission_max_sdk_version_changed(self):
"""Tests if permission maxSdkVersion attribute is set to current"""
manifest_input = self.manifest_tmpl % self.permission('current')
expected = self.manifest_tmpl % self.permission(9000)
output = self.run_test(manifest_input, '9000')
self.assert_xml_equal(output, expected)
def test_permission_max_sdk_version_not_changed(self):
"""Tests if permission maxSdkVersion attribute is not set to current"""
manifest_input = self.manifest_tmpl % self.permission(30)
expected = self.manifest_tmpl % self.permission(30)
output = self.run_test(manifest_input, '9000')
self.assert_xml_equal(output, expected)
def test_uses_permission_no_max_sdk_version(self):
"""Tests if uses-permission has no maxSdkVersion attribute"""
manifest_input = self.manifest_tmpl % self.uses_permission()
expected = self.manifest_tmpl % self.uses_permission()
output = self.run_test(manifest_input, '9000')
self.assert_xml_equal(output, expected)
def test_uses_permission_max_sdk_version_changed(self):
"""Tests if uses-permission maxSdkVersion attribute is set to current"""
manifest_input = self.manifest_tmpl % self.uses_permission('current')
expected = self.manifest_tmpl % self.uses_permission(9000)
output = self.run_test(manifest_input, '9000')
self.assert_xml_equal(output, expected)
def test_uses_permission_max_sdk_version_not_changed(self):
"""Tests if uses-permission maxSdkVersion attribute is not set to current"""
manifest_input = self.manifest_tmpl % self.uses_permission(30)
expected = self.manifest_tmpl % self.uses_permission(30)
output = self.run_test(manifest_input, '9000')
self.assert_xml_equal(output, expected)
if __name__ == '__main__':
unittest.main(verbosity=2)