tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

manifest_utils_test.py (5096B)


      1 #!/usr/bin/env python3
      2 # Copyright 2020 The Chromium Authors
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import collections
      7 import os
      8 import sys
      9 import unittest
     10 
     11 sys.path.insert(1, os.path.join(os.path.dirname(__file__), '..'))
     12 from util import manifest_utils
     13 
     14 _TEST_MANIFEST = """\
     15 <?xml version="1.0" ?>
     16 <manifest package="test.pkg"
     17    android:versionCode="1234"
     18    android:versionName="1.2.33.4"
     19    tools:ignore="MissingVersion"
     20    xmlns:android="http://schemas.android.com/apk/res/android"
     21    xmlns:tools="http://schemas.android.com/tools">
     22  <!-- Should be one line. -->
     23  <uses-sdk android:minSdkVersion="24"
     24      android:targetSdkVersion="30"/>
     25  <!-- Should have attrs sorted-->
     26  <uses-feature android:required="false" android:version="1"
     27    android:name="android.hardware.vr.headtracking" />
     28  <!-- Should not be wrapped since < 100 chars. -->
     29  <application
     30      android:name="testname">
     31    <activity
     32        {extra_activity_attr}
     33        android:icon="@drawable/ic_devices_48dp"
     34        android:label="label with spaces"
     35        android:name="to be hashed"
     36        android:theme="@style/Theme.Chromium.Activity.TranslucentNoAnimations">
     37      <intent-filter>
     38        {extra_intent_filter_elem}
     39        <action android:name="android.intent.action.SEND"/>
     40        <category android:name="android.intent.category.DEFAULT"/>
     41        <data android:mimeType="text/plain"/>
     42      </intent-filter>
     43    </activity>
     44    <!-- Should be made non-self-closing. -->
     45    <receiver android:exported="false" android:name="\
     46 org.chromium.chrome.browser.announcement.AnnouncementNotificationManager$Rcvr"/>
     47  </application>
     48 </manifest>
     49 """
     50 
     51 _TEST_MANIFEST_NORMALIZED = """\
     52 <?xml version="1.0" ?>
     53 <manifest
     54    xmlns:android="http://schemas.android.com/apk/res/android"
     55    xmlns:tools="http://schemas.android.com/tools"
     56    package="test.pkg"
     57    android:versionCode="OFFSET=4"
     58    android:versionName="#.#.#.#"
     59    tools:ignore="MissingVersion">
     60  <uses-feature android:name="android.hardware.vr.headtracking" \
     61 android:required="false" android:version="1"/>
     62  <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="30"/>
     63  <application android:name="testname">
     64    <activity  # DIFF-ANCHOR: {activity_diff_anchor}
     65        android:name="to be hashed"
     66        {extra_activity_attr}android:icon="@drawable/ic_devices_48dp"
     67        android:label="label with spaces"
     68        android:theme="@style/Theme.Chromium.Activity.TranslucentNoAnimations">
     69      <intent-filter>  # DIFF-ANCHOR: {intent_filter_diff_anchor}
     70        {extra_intent_filter_elem}\
     71 <action android:name="android.intent.action.SEND"/>
     72        <category android:name="android.intent.category.DEFAULT"/>
     73        <data android:mimeType="text/plain"/>
     74      </intent-filter>  # DIFF-ANCHOR: {intent_filter_diff_anchor}
     75    </activity>  # DIFF-ANCHOR: {activity_diff_anchor}
     76    <receiver  # DIFF-ANCHOR: ddab3320
     77        android:name=\
     78 "org.chromium.chrome.browser.announcement.AnnouncementNotificationManager$Rcvr"
     79        android:exported="false">
     80    </receiver>  # DIFF-ANCHOR: ddab3320
     81  </application>
     82 </manifest>
     83 """
     84 
     85 _ACTIVITY_DIFF_ANCHOR = '32b3a641'
     86 _INTENT_FILTER_DIFF_ANCHOR = '4ee601b7'
     87 
     88 
     89 def _CreateTestData(intent_filter_diff_anchor=_INTENT_FILTER_DIFF_ANCHOR,
     90                    extra_activity_attr='',
     91                    extra_intent_filter_elem=''):
     92  if extra_activity_attr:
     93    extra_activity_attr += '\n        '
     94  if extra_intent_filter_elem:
     95    extra_intent_filter_elem += '\n        '
     96  test_manifest = _TEST_MANIFEST.format(
     97      extra_activity_attr=extra_activity_attr,
     98      extra_intent_filter_elem=extra_intent_filter_elem)
     99  expected = _TEST_MANIFEST_NORMALIZED.format(
    100      activity_diff_anchor=_ACTIVITY_DIFF_ANCHOR,
    101      intent_filter_diff_anchor=intent_filter_diff_anchor,
    102      extra_activity_attr=extra_activity_attr,
    103      extra_intent_filter_elem=extra_intent_filter_elem)
    104  return test_manifest, expected
    105 
    106 
    107 class ManifestUtilsTest(unittest.TestCase):
    108  # Enable diff output.
    109  maxDiff = None
    110 
    111  def testNormalizeManifest_golden(self):
    112    test_manifest, expected = _CreateTestData()
    113    actual = manifest_utils.NormalizeManifest(test_manifest, 1230, None)
    114    self.assertMultiLineEqual(expected, actual)
    115 
    116  def testNormalizeManifest_nameUsedForActivity(self):
    117    test_manifest, expected = _CreateTestData(extra_activity_attr='a="b"')
    118    actual = manifest_utils.NormalizeManifest(test_manifest, 1230, None)
    119    # Checks that the DIFF-ANCHOR does not change with the added attribute.
    120    self.assertMultiLineEqual(expected, actual)
    121 
    122  def testNormalizeManifest_nameNotUsedForIntentFilter(self):
    123    test_manifest, expected = _CreateTestData(
    124        extra_intent_filter_elem='<a/>', intent_filter_diff_anchor='5f5c8a70')
    125    actual = manifest_utils.NormalizeManifest(test_manifest, 1230, None)
    126    # Checks that the DIFF-ANCHOR does change with the added element despite
    127    # having a nested element with an android:name set.
    128    self.assertMultiLineEqual(expected, actual)
    129 
    130 
    131 if __name__ == '__main__':
    132  unittest.main()