1# This Source Code Form is subject to the terms of the Mozilla Public 2# License, v. 2.0. If a copy of the MPL was not distributed with this 3# file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5from __future__ import absolute_import, print_function 6 7from mozunit import main 8import unittest 9 10from mozbuild.android_version_code import ( 11 android_version_code_v0, 12 android_version_code_v1, 13) 14 15 16class TestAndroidVersionCode(unittest.TestCase): 17 def test_android_version_code_v0(self): 18 # From https://treeherder.mozilla.org/#/jobs?repo=mozilla-central&revision=e25de9972a77. 19 buildid = "20150708104620" 20 arm_api9 = 2015070819 21 arm_api11 = 2015070821 22 x86_api9 = 2015070822 23 self.assertEqual( 24 android_version_code_v0( 25 buildid, cpu_arch="armeabi", min_sdk=9, max_sdk=None 26 ), 27 arm_api9, 28 ) 29 self.assertEqual( 30 android_version_code_v0( 31 buildid, cpu_arch="armeabi-v7a", min_sdk=11, max_sdk=None 32 ), 33 arm_api11, 34 ) 35 self.assertEqual( 36 android_version_code_v0(buildid, cpu_arch="x86", min_sdk=9, max_sdk=None), 37 x86_api9, 38 ) 39 40 def test_android_version_code_v1(self): 41 buildid = "20150825141628" 42 arm_api16 = 0b01111000001000000001001001110001 43 arm64_api21 = 0b01111000001000000001001001110100 44 x86_api9 = 0b01111000001000000001001001110100 45 self.assertEqual( 46 android_version_code_v1( 47 buildid, cpu_arch="armeabi-v7a", min_sdk=16, max_sdk=None 48 ), 49 arm_api16, 50 ) 51 self.assertEqual( 52 android_version_code_v1( 53 buildid, cpu_arch="arm64-v8a", min_sdk=21, max_sdk=None 54 ), 55 arm64_api21, 56 ) 57 self.assertEqual( 58 android_version_code_v1(buildid, cpu_arch="x86", min_sdk=9, max_sdk=None), 59 x86_api9, 60 ) 61 62 def test_android_version_code_v1_underflow(self): 63 """Verify that it is an error to ask for v1 codes predating the cutoff.""" 64 buildid = "201508010000" # Earliest possible. 65 arm_api9 = 0b01111000001000000000000000000000 66 self.assertEqual( 67 android_version_code_v1( 68 buildid, cpu_arch="armeabi", min_sdk=9, max_sdk=None 69 ), 70 arm_api9, 71 ) 72 with self.assertRaises(ValueError) as cm: 73 underflow = "201507310000" # Latest possible (valid) underflowing date. 74 android_version_code_v1( 75 underflow, cpu_arch="armeabi", min_sdk=9, max_sdk=None 76 ) 77 self.assertTrue("underflow" in cm.exception.message) 78 79 def test_android_version_code_v1_running_low(self): 80 """Verify there is an informative message if one asks for v1 81 codes that are close to overflow.""" 82 with self.assertRaises(ValueError) as cm: 83 overflow = "20290801000000" 84 android_version_code_v1( 85 overflow, cpu_arch="armeabi", min_sdk=9, max_sdk=None 86 ) 87 self.assertTrue("Running out of low order bits" in cm.exception.message) 88 89 def test_android_version_code_v1_overflow(self): 90 """Verify that it is an error to ask for v1 codes that actually does overflow.""" 91 with self.assertRaises(ValueError) as cm: 92 overflow = "20310801000000" 93 android_version_code_v1( 94 overflow, cpu_arch="armeabi", min_sdk=9, max_sdk=None 95 ) 96 self.assertTrue("overflow" in cm.exception.message) 97 98 def test_android_version_code_v0_relative_v1(self): 99 """Verify that the first v1 code is greater than the equivalent v0 code.""" 100 buildid = "20150801000000" 101 self.assertGreater( 102 android_version_code_v1( 103 buildid, cpu_arch="armeabi", min_sdk=9, max_sdk=None 104 ), 105 android_version_code_v0( 106 buildid, cpu_arch="armeabi", min_sdk=9, max_sdk=None 107 ), 108 ) 109 110 111if __name__ == "__main__": 112 main() 113