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 mozunit import main 6import unittest 7 8from mozbuild.android_version_code import ( 9 android_version_code_v0, 10 android_version_code_v1, 11) 12 13class TestAndroidVersionCode(unittest.TestCase): 14 def test_android_version_code_v0(self): 15 # From https://treeherder.mozilla.org/#/jobs?repo=mozilla-central&revision=e25de9972a77. 16 buildid = '20150708104620' 17 arm_api9 = 2015070819 18 arm_api11 = 2015070821 19 x86_api9 = 2015070822 20 self.assertEqual(android_version_code_v0(buildid, cpu_arch='armeabi', min_sdk=9, max_sdk=None), arm_api9) 21 self.assertEqual(android_version_code_v0(buildid, cpu_arch='armeabi-v7a', min_sdk=11, max_sdk=None), arm_api11) 22 self.assertEqual(android_version_code_v0(buildid, cpu_arch='x86', min_sdk=9, max_sdk=None), x86_api9) 23 24 def test_android_version_code_v1(self): 25 buildid = '20150825141628' 26 arm_api16 = 0b01111000001000000001001001110001 27 arm64_api21 = 0b01111000001000000001001001110100 28 x86_api9 = 0b01111000001000000001001001110100 29 self.assertEqual(android_version_code_v1(buildid, cpu_arch='armeabi-v7a', min_sdk=16, max_sdk=None), arm_api16) 30 self.assertEqual(android_version_code_v1(buildid, cpu_arch='arm64-v8a', min_sdk=21, max_sdk=None), arm64_api21) 31 self.assertEqual(android_version_code_v1(buildid, cpu_arch='x86', min_sdk=9, max_sdk=None), x86_api9) 32 33 def test_android_version_code_v1_underflow(self): 34 '''Verify that it is an error to ask for v1 codes predating the cutoff.''' 35 buildid = '201508010000' # Earliest possible. 36 arm_api9 = 0b01111000001000000000000000000000 37 self.assertEqual(android_version_code_v1(buildid, cpu_arch='armeabi', min_sdk=9, max_sdk=None), arm_api9) 38 with self.assertRaises(ValueError) as cm: 39 underflow = '201507310000' # Latest possible (valid) underflowing date. 40 android_version_code_v1(underflow, cpu_arch='armeabi', min_sdk=9, max_sdk=None) 41 self.assertTrue('underflow' in cm.exception.message) 42 43 def test_android_version_code_v1_running_low(self): 44 '''Verify there is an informative message if one asks for v1 codes that are close to overflow.''' 45 with self.assertRaises(ValueError) as cm: 46 overflow = '20290801000000' 47 android_version_code_v1(overflow, cpu_arch='armeabi', min_sdk=9, max_sdk=None) 48 self.assertTrue('Running out of low order bits' in cm.exception.message) 49 50 def test_android_version_code_v1_overflow(self): 51 '''Verify that it is an error to ask for v1 codes that actually does overflow.''' 52 with self.assertRaises(ValueError) as cm: 53 overflow = '20310801000000' 54 android_version_code_v1(overflow, cpu_arch='armeabi', min_sdk=9, max_sdk=None) 55 self.assertTrue('overflow' in cm.exception.message) 56 57 def test_android_version_code_v0_relative_v1(self): 58 '''Verify that the first v1 code is greater than the equivalent v0 code.''' 59 buildid = '20150801000000' 60 self.assertGreater(android_version_code_v1(buildid, cpu_arch='armeabi', min_sdk=9, max_sdk=None), 61 android_version_code_v0(buildid, cpu_arch='armeabi', min_sdk=9, max_sdk=None)) 62 63 64if __name__ == '__main__': 65 main() 66