133 lines
5.0 KiB
Python
Executable File
133 lines
5.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright 2020 The Chromium Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import collections
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
sys.path.insert(1, os.path.join(os.path.dirname(__file__), '..'))
|
|
from util import manifest_utils
|
|
|
|
_TEST_MANIFEST = """\
|
|
<?xml version="1.0" ?>
|
|
<manifest package="test.pkg"
|
|
android:versionCode="1234"
|
|
android:versionName="1.2.33.4"
|
|
tools:ignore="MissingVersion"
|
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
xmlns:tools="http://schemas.android.com/tools">
|
|
<!-- Should be one line. -->
|
|
<uses-sdk android:minSdkVersion="24"
|
|
android:targetSdkVersion="30"/>
|
|
<!-- Should have attrs sorted-->
|
|
<uses-feature android:required="false" android:version="1"
|
|
android:name="android.hardware.vr.headtracking" />
|
|
<!-- Should not be wrapped since < 100 chars. -->
|
|
<application
|
|
android:name="testname">
|
|
<activity
|
|
{extra_activity_attr}
|
|
android:icon="@drawable/ic_devices_48dp"
|
|
android:label="label with spaces"
|
|
android:name="to be hashed"
|
|
android:theme="@style/Theme.Chromium.Activity.TranslucentNoAnimations">
|
|
<intent-filter>
|
|
{extra_intent_filter_elem}
|
|
<action android:name="android.intent.action.SEND"/>
|
|
<category android:name="android.intent.category.DEFAULT"/>
|
|
<data android:mimeType="text/plain"/>
|
|
</intent-filter>
|
|
</activity>
|
|
<!-- Should be made non-self-closing. -->
|
|
<receiver android:exported="false" android:name="\
|
|
org.chromium.chrome.browser.announcement.AnnouncementNotificationManager$Rcvr"/>
|
|
</application>
|
|
</manifest>
|
|
"""
|
|
|
|
_TEST_MANIFEST_NORMALIZED = """\
|
|
<?xml version="1.0" ?>
|
|
<manifest
|
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
xmlns:tools="http://schemas.android.com/tools"
|
|
package="test.pkg"
|
|
android:versionCode="OFFSET=4"
|
|
android:versionName="#.#.#.#"
|
|
tools:ignore="MissingVersion">
|
|
<uses-feature android:name="android.hardware.vr.headtracking" \
|
|
android:required="false" android:version="1"/>
|
|
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="30"/>
|
|
<application android:name="testname">
|
|
<activity # DIFF-ANCHOR: {activity_diff_anchor}
|
|
android:name="to be hashed"
|
|
{extra_activity_attr}android:icon="@drawable/ic_devices_48dp"
|
|
android:label="label with spaces"
|
|
android:theme="@style/Theme.Chromium.Activity.TranslucentNoAnimations">
|
|
<intent-filter> # DIFF-ANCHOR: {intent_filter_diff_anchor}
|
|
{extra_intent_filter_elem}\
|
|
<action android:name="android.intent.action.SEND"/>
|
|
<category android:name="android.intent.category.DEFAULT"/>
|
|
<data android:mimeType="text/plain"/>
|
|
</intent-filter> # DIFF-ANCHOR: {intent_filter_diff_anchor}
|
|
</activity> # DIFF-ANCHOR: {activity_diff_anchor}
|
|
<receiver # DIFF-ANCHOR: ddab3320
|
|
android:name=\
|
|
"org.chromium.chrome.browser.announcement.AnnouncementNotificationManager$Rcvr"
|
|
android:exported="false">
|
|
</receiver> # DIFF-ANCHOR: ddab3320
|
|
</application>
|
|
</manifest>
|
|
"""
|
|
|
|
_ACTIVITY_DIFF_ANCHOR = '32b3a641'
|
|
_INTENT_FILTER_DIFF_ANCHOR = '4ee601b7'
|
|
|
|
|
|
def _CreateTestData(intent_filter_diff_anchor=_INTENT_FILTER_DIFF_ANCHOR,
|
|
extra_activity_attr='',
|
|
extra_intent_filter_elem=''):
|
|
if extra_activity_attr:
|
|
extra_activity_attr += '\n '
|
|
if extra_intent_filter_elem:
|
|
extra_intent_filter_elem += '\n '
|
|
test_manifest = _TEST_MANIFEST.format(
|
|
extra_activity_attr=extra_activity_attr,
|
|
extra_intent_filter_elem=extra_intent_filter_elem)
|
|
expected = _TEST_MANIFEST_NORMALIZED.format(
|
|
activity_diff_anchor=_ACTIVITY_DIFF_ANCHOR,
|
|
intent_filter_diff_anchor=intent_filter_diff_anchor,
|
|
extra_activity_attr=extra_activity_attr,
|
|
extra_intent_filter_elem=extra_intent_filter_elem)
|
|
return test_manifest, expected
|
|
|
|
|
|
class ManifestUtilsTest(unittest.TestCase):
|
|
# Enable diff output.
|
|
maxDiff = None
|
|
|
|
def testNormalizeManifest_golden(self):
|
|
test_manifest, expected = _CreateTestData()
|
|
actual = manifest_utils.NormalizeManifest(test_manifest, 1230, None)
|
|
self.assertMultiLineEqual(expected, actual)
|
|
|
|
def testNormalizeManifest_nameUsedForActivity(self):
|
|
test_manifest, expected = _CreateTestData(extra_activity_attr='a="b"')
|
|
actual = manifest_utils.NormalizeManifest(test_manifest, 1230, None)
|
|
# Checks that the DIFF-ANCHOR does not change with the added attribute.
|
|
self.assertMultiLineEqual(expected, actual)
|
|
|
|
def testNormalizeManifest_nameNotUsedForIntentFilter(self):
|
|
test_manifest, expected = _CreateTestData(
|
|
extra_intent_filter_elem='<a/>', intent_filter_diff_anchor='5f5c8a70')
|
|
actual = manifest_utils.NormalizeManifest(test_manifest, 1230, None)
|
|
# Checks that the DIFF-ANCHOR does change with the added element despite
|
|
# having a nested element with an android:name set.
|
|
self.assertMultiLineEqual(expected, actual)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|