175 строки
6.5 KiB
Python
175 строки
6.5 KiB
Python
# Copyright 2019 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import os
|
|
import unittest
|
|
|
|
import mock
|
|
import version
|
|
|
|
|
|
def _ReplaceArgs(args, *replacements):
|
|
new_args = args[:]
|
|
for flag, val in replacements:
|
|
flag_index = args.index(flag)
|
|
new_args[flag_index + 1] = val
|
|
return new_args
|
|
|
|
|
|
class _VersionTest(unittest.TestCase):
|
|
"""Unittests for the version module.
|
|
"""
|
|
|
|
_CHROME_VERSION_FILE = os.path.join(
|
|
os.path.dirname(__file__), os.pardir, os.pardir, 'chrome', 'VERSION')
|
|
|
|
_SCRIPT = os.path.join(os.path.dirname(__file__), 'version.py')
|
|
|
|
_EXAMPLE_VERSION = {
|
|
'MAJOR': '74',
|
|
'MINOR': '0',
|
|
'BUILD': '3720',
|
|
'PATCH': '0',
|
|
}
|
|
|
|
_EXAMPLE_TEMPLATE = (
|
|
'full = "@MAJOR@.@MINOR@.@BUILD@.@PATCH@" '
|
|
'major = "@MAJOR@" minor = "@MINOR@" '
|
|
'build = "@BUILD@" patch = "@PATCH@" version_id = @VERSION_ID@ ')
|
|
|
|
_ANDROID_CHROME_VARS = [
|
|
'chrome_version_code',
|
|
'chrome_modern_version_code',
|
|
'monochrome_version_code',
|
|
'trichrome_version_code',
|
|
'webview_stable_version_code',
|
|
'webview_beta_version_code',
|
|
'webview_dev_version_code',
|
|
]
|
|
|
|
_EXAMPLE_ANDROID_TEMPLATE = (
|
|
_EXAMPLE_TEMPLATE + ''.join(
|
|
['%s = "@%s@" ' % (el, el.upper()) for el in _ANDROID_CHROME_VARS]))
|
|
|
|
_EXAMPLE_ARGS = [
|
|
'-f',
|
|
_CHROME_VERSION_FILE,
|
|
'-t',
|
|
_EXAMPLE_TEMPLATE,
|
|
]
|
|
|
|
_EXAMPLE_ANDROID_ARGS = _ReplaceArgs(_EXAMPLE_ARGS,
|
|
['-t', _EXAMPLE_ANDROID_TEMPLATE]) + [
|
|
'-a',
|
|
'arm',
|
|
'--os',
|
|
'android',
|
|
]
|
|
|
|
@staticmethod
|
|
def _RunBuildOutput(new_version_values={},
|
|
get_new_args=lambda old_args: old_args):
|
|
"""Parameterized helper method for running the main testable method in
|
|
version.py.
|
|
|
|
Keyword arguments:
|
|
new_version_values -- dict used to update _EXAMPLE_VERSION
|
|
get_new_args -- lambda for updating _EXAMPLE_ANDROID_ARGS
|
|
"""
|
|
|
|
with mock.patch('version.FetchValuesFromFile') as \
|
|
fetch_values_from_file_mock:
|
|
|
|
fetch_values_from_file_mock.side_effect = (lambda values, file :
|
|
values.update(
|
|
dict(_VersionTest._EXAMPLE_VERSION, **new_version_values)))
|
|
|
|
new_args = get_new_args(_VersionTest._EXAMPLE_ARGS)
|
|
return version.BuildOutput(new_args)
|
|
|
|
def testFetchValuesFromFile(self):
|
|
"""It returns a dict in correct format - { <str>: <str> }, to verify
|
|
assumption of other tests that mock this function
|
|
"""
|
|
result = {}
|
|
version.FetchValuesFromFile(result, self._CHROME_VERSION_FILE)
|
|
|
|
for key, val in result.iteritems():
|
|
self.assertIsInstance(key, str)
|
|
self.assertIsInstance(val, str)
|
|
|
|
def testBuildOutputAndroid(self):
|
|
"""Assert it gives includes assignments of expected variables"""
|
|
output = self._RunBuildOutput(
|
|
get_new_args=lambda args: self._EXAMPLE_ANDROID_ARGS)
|
|
contents = output['contents']
|
|
|
|
self.assertRegexpMatches(contents, r'\bchrome_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents,
|
|
r'\bchrome_modern_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents, r'\bmonochrome_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents, r'\btrichrome_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents,
|
|
r'\bwebview_stable_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents, r'\bwebview_beta_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents, r'\bwebview_dev_version_code = "\d+"\s')
|
|
|
|
def testBuildOutputAndroidArchVariantsArm64(self):
|
|
"""Assert 64-bit-specific version codes"""
|
|
new_template = (
|
|
self._EXAMPLE_ANDROID_TEMPLATE +
|
|
"monochrome_64_32_version_code = \"@MONOCHROME_64_32_VERSION_CODE@\" "
|
|
"monochrome_64_version_code = \"@MONOCHROME_64_VERSION_CODE@\" "
|
|
"trichrome_64_32_version_code = \"@TRICHROME_64_32_VERSION_CODE@\" "
|
|
"trichrome_64_version_code = \"@TRICHROME_64_VERSION_CODE@\" ")
|
|
args_with_template = _ReplaceArgs(self._EXAMPLE_ANDROID_ARGS,
|
|
['-t', new_template])
|
|
new_args = _ReplaceArgs(args_with_template, ['-a', 'arm64'])
|
|
output = self._RunBuildOutput(get_new_args=lambda args: new_args)
|
|
contents = output['contents']
|
|
|
|
self.assertRegexpMatches(contents,
|
|
r'\bmonochrome_64_32_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents,
|
|
r'\bmonochrome_64_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents,
|
|
r'\btrichrome_64_32_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents,
|
|
r'\btrichrome_64_version_code = "\d+"\s')
|
|
|
|
def testBuildOutputAndroidArchVariantsX64(self):
|
|
"""Assert 64-bit-specific version codes"""
|
|
new_template = (
|
|
self._EXAMPLE_ANDROID_TEMPLATE +
|
|
"monochrome_64_32_version_code = \"@MONOCHROME_64_32_VERSION_CODE@\" "
|
|
"monochrome_64_version_code = \"@MONOCHROME_64_VERSION_CODE@\" "
|
|
"trichrome_64_32_version_code = \"@TRICHROME_64_32_VERSION_CODE@\" "
|
|
"trichrome_64_version_code = \"@TRICHROME_64_VERSION_CODE@\" ")
|
|
args_with_template = _ReplaceArgs(self._EXAMPLE_ANDROID_ARGS,
|
|
['-t', new_template])
|
|
new_args = _ReplaceArgs(args_with_template, ['-a', 'x64'])
|
|
output = self._RunBuildOutput(get_new_args=lambda args: new_args)
|
|
contents = output['contents']
|
|
|
|
self.assertRegexpMatches(contents,
|
|
r'\bmonochrome_64_32_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents,
|
|
r'\bmonochrome_64_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents,
|
|
r'\btrichrome_64_32_version_code = "\d+"\s')
|
|
self.assertRegexpMatches(contents,
|
|
r'\btrichrome_64_version_code = "\d+"\s')
|
|
|
|
def testBuildOutputAndroidChromeArchInput(self):
|
|
"""Assert it raises an exception when using an invalid architecture input"""
|
|
new_args = _ReplaceArgs(self._EXAMPLE_ANDROID_ARGS, ['-a', 'foobar'])
|
|
with self.assertRaises(SystemExit) as cm:
|
|
self._RunBuildOutput(get_new_args=lambda args: new_args)
|
|
|
|
self.assertEqual(cm.exception.code, 2)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|