diff options
Diffstat (limited to 'run_unittests.py')
-rwxr-xr-x | run_unittests.py | 210 |
1 files changed, 105 insertions, 105 deletions
diff --git a/run_unittests.py b/run_unittests.py index 62f28b2..11940b3 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -205,7 +205,7 @@ def skipIfNoPkgconfigDep(depname): if not is_ci() and shutil.which('pkg-config') is None: raise unittest.SkipTest('pkg-config not found') if not is_ci() and subprocess.call(['pkg-config', '--exists', depname]) != 0: - raise unittest.SkipTest('pkg-config dependency {} not found.'.format(depname)) + raise unittest.SkipTest(f'pkg-config dependency {depname} not found.') return func(*args, **kwargs) return wrapped return wrapper @@ -230,10 +230,10 @@ def skip_if_not_language(lang): def wrapped(*args, **kwargs): try: env = get_fake_env() - f = getattr(env, 'detect_{}_compiler'.format(lang)) + f = getattr(env, f'detect_{lang}_compiler') f(MachineChoice.HOST) except EnvironmentException: - raise unittest.SkipTest('No {} compiler found.'.format(lang)) + raise unittest.SkipTest(f'No {lang} compiler found.') return func(*args, **kwargs) return wrapped return wrapper @@ -248,7 +248,7 @@ def skip_if_env_set(key): old = None if key in os.environ: if not is_ci(): - raise unittest.SkipTest('Env var {!r} set, skipping'.format(key)) + raise unittest.SkipTest(f'Env var {key!r} set, skipping') old = os.environ.pop(key) try: return func(*args, **kwargs) @@ -271,7 +271,7 @@ def skip_if_not_base_option(feature): key = OptionKey(feature) if key not in cc.base_options: raise unittest.SkipTest( - '{} not available with {}'.format(feature, cc.id)) + f'{feature} not available with {cc.id}') return f(*args, **kwargs) return wrapped return actual @@ -898,11 +898,11 @@ class InternalTests(unittest.TestCase): if '--libs' not in args: return 0, '', '' if args[-1] == 'foo': - return 0, '-L{} -lfoo -L{} -lbar'.format(p2.as_posix(), p1.as_posix()), '' + return 0, f'-L{p2.as_posix()} -lfoo -L{p1.as_posix()} -lbar', '' if args[-1] == 'bar': - return 0, '-L{} -lbar'.format(p2.as_posix()), '' + return 0, f'-L{p2.as_posix()} -lbar', '' if args[-1] == 'internal': - return 0, '-L{} -lpthread -lm -lc -lrt -ldl'.format(p1.as_posix()), '' + return 0, f'-L{p1.as_posix()} -lpthread -lm -lc -lrt -ldl', '' old_call = PkgConfigDependency._call_pkgbin old_check = PkgConfigDependency.check_pkgconfig @@ -923,7 +923,7 @@ class InternalTests(unittest.TestCase): link_args = internal_dep.get_link_args() for link_arg in link_args: for lib in ('pthread', 'm', 'c', 'dl', 'rt'): - self.assertNotIn('lib{}.a'.format(lib), link_arg, msg=link_args) + self.assertNotIn(f'lib{lib}.a', link_arg, msg=link_args) finally: # Test ends PkgConfigDependency._call_pkgbin = old_call @@ -1040,17 +1040,17 @@ class InternalTests(unittest.TestCase): ver_b = Version(b) if op is operator.eq: for o, name in [(op, 'eq'), (operator.ge, 'ge'), (operator.le, 'le')]: - self.assertTrue(o(ver_a, ver_b), '{} {} {}'.format(ver_a, name, ver_b)) + self.assertTrue(o(ver_a, ver_b), f'{ver_a} {name} {ver_b}') if op is operator.lt: for o, name in [(op, 'lt'), (operator.le, 'le'), (operator.ne, 'ne')]: - self.assertTrue(o(ver_a, ver_b), '{} {} {}'.format(ver_a, name, ver_b)) + self.assertTrue(o(ver_a, ver_b), f'{ver_a} {name} {ver_b}') for o, name in [(operator.gt, 'gt'), (operator.ge, 'ge'), (operator.eq, 'eq')]: - self.assertFalse(o(ver_a, ver_b), '{} {} {}'.format(ver_a, name, ver_b)) + self.assertFalse(o(ver_a, ver_b), f'{ver_a} {name} {ver_b}') if op is operator.gt: for o, name in [(op, 'gt'), (operator.ge, 'ge'), (operator.ne, 'ne')]: - self.assertTrue(o(ver_a, ver_b), '{} {} {}'.format(ver_a, name, ver_b)) + self.assertTrue(o(ver_a, ver_b), f'{ver_a} {name} {ver_b}') for o, name in [(operator.lt, 'lt'), (operator.le, 'le'), (operator.eq, 'eq')]: - self.assertFalse(o(ver_a, ver_b), '{} {} {}'.format(ver_a, name, ver_b)) + self.assertFalse(o(ver_a, ver_b), f'{ver_a} {name} {ver_b}') def test_msvc_toolset_version(self): ''' @@ -1073,7 +1073,7 @@ class InternalTests(unittest.TestCase): # See https://devblogs.microsoft.com/cppblog/finding-the-visual-c-compiler-tools-in-visual-studio-2017/ vctools_ver = (Path(os.environ['VCINSTALLDIR']) / 'Auxiliary' / 'Build' / 'Microsoft.VCToolsVersion.default.txt').read_text() self.assertTrue(vctools_ver.startswith(toolset_ver), - msg='{!r} does not start with {!r}'.format(vctools_ver, toolset_ver)) + msg=f'{vctools_ver!r} does not start with {toolset_ver!r}') def test_split_args(self): split_args = mesonbuild.mesonlib.split_args @@ -1290,7 +1290,7 @@ class InternalTests(unittest.TestCase): errors.append((p.resolve(), e)) for f, e in errors: - print('Failed to validate: "{}"'.format(f)) + print(f'Failed to validate: "{f}"') print(str(e)) self.assertFalse(errors) @@ -1545,7 +1545,7 @@ class DataTests(unittest.TestCase): end = len(md) # Extract the content for this section return md[section.end():end] - raise RuntimeError('Could not find "{}" heading'.format(name)) + raise RuntimeError(f'Could not find "{name}" heading') def test_builtin_options_documented(self): ''' @@ -1605,7 +1605,7 @@ class DataTests(unittest.TestCase): elif debug == 'false': debug = False else: - raise RuntimeError('Invalid debug value {!r} in row:\n{}'.format(debug, m.group())) + raise RuntimeError(f'Invalid debug value {debug!r} in row:\n{m.group()}') env.coredata.set_option(OptionKey('buildtype'), buildtype) self.assertEqual(env.coredata.options[OptionKey('buildtype')].value, buildtype) self.assertEqual(env.coredata.options[OptionKey('optimization')].value, opt) @@ -1731,7 +1731,7 @@ class BasePlatformTests(unittest.TestCase): else: # VS doesn't have a stable output when no changes are done # XCode backend is untested with unit tests, help welcome! - self.no_rebuild_stdout = ['UNKNOWN BACKEND {!r}'.format(self.backend.name)] + self.no_rebuild_stdout = [f'UNKNOWN BACKEND {self.backend.name!r}'] self.builddirs = [] self.new_builddir() @@ -1762,7 +1762,7 @@ class BasePlatformTests(unittest.TestCase): def _print_meson_log(self): log = os.path.join(self.logdir, 'meson-log.txt') if not os.path.isfile(log): - print("{!r} doesn't exist".format(log)) + print(f"{log!r} doesn't exist") return with open(log, encoding='utf-8') as f: print(f.read()) @@ -1874,7 +1874,7 @@ class BasePlatformTests(unittest.TestCase): def install(self, *, use_destdir=True, override_envvars=None): if self.backend is not Backend.ninja: - raise unittest.SkipTest('{!r} backend can\'t install files'.format(self.backend.name)) + raise unittest.SkipTest(f'{self.backend.name!r} backend can\'t install files') if use_destdir: destdir = {'DESTDIR': self.installdir} if override_envvars is None: @@ -1909,7 +1909,7 @@ class BasePlatformTests(unittest.TestCase): def get_compdb(self): if self.backend is not Backend.ninja: - raise unittest.SkipTest('Compiler db not available with {} backend'.format(self.backend.name)) + raise unittest.SkipTest(f'Compiler db not available with {self.backend.name} backend') try: with open(os.path.join(self.builddir, 'compile_commands.json')) as ifile: contents = json.load(ifile) @@ -1988,7 +1988,7 @@ class BasePlatformTests(unittest.TestCase): self.assertPathEqual(i[0], i[1]) def assertPathBasenameEqual(self, path, basename): - msg = '{!r} does not end with {!r}'.format(path, basename) + msg = f'{path!r} does not end with {basename!r}' # We cannot use os.path.basename because it returns '' when the path # ends with '/' for some silly reason. This is not how the UNIX utility # `basename` works. @@ -2016,7 +2016,7 @@ class BasePlatformTests(unittest.TestCase): elif self.backend is Backend.xcode: raise unittest.SkipTest('Please help us fix this test on the xcode backend') else: - raise RuntimeError('Invalid backend: {!r}'.format(self.backend.name)) + raise RuntimeError(f'Invalid backend: {self.backend.name!r}') def assertBuildIsNoop(self): ret = self.build() @@ -2035,12 +2035,12 @@ class BasePlatformTests(unittest.TestCase): elif self.backend is Backend.xcode: raise unittest.SkipTest('Please help us fix this test on the xcode backend') else: - raise RuntimeError('Invalid backend: {!r}'.format(self.backend.name)) + raise RuntimeError(f'Invalid backend: {self.backend.name!r}') def assertRebuiltTarget(self, target): ret = self.build() if self.backend is Backend.ninja: - self.assertIn('Linking target {}'.format(target), ret) + self.assertIn(f'Linking target {target}', ret) elif self.backend is Backend.vs: # Ensure that this target was rebuilt linkre = re.compile('Link:\n [^\n]*link[^\n]*' + target, flags=re.IGNORECASE) @@ -2048,7 +2048,7 @@ class BasePlatformTests(unittest.TestCase): elif self.backend is Backend.xcode: raise unittest.SkipTest('Please help us fix this test on the xcode backend') else: - raise RuntimeError('Invalid backend: {!r}'.format(self.backend.name)) + raise RuntimeError(f'Invalid backend: {self.backend.name!r}') @staticmethod def get_target_from_filename(filename): @@ -2075,14 +2075,14 @@ class BasePlatformTests(unittest.TestCase): elif self.backend is Backend.xcode: raise unittest.SkipTest('Please help us fix this test on the xcode backend') else: - raise RuntimeError('Invalid backend: {!r}'.format(self.backend.name)) + raise RuntimeError(f'Invalid backend: {self.backend.name!r}') def assertPathExists(self, path): - m = 'Path {!r} should exist'.format(path) + m = f'Path {path!r} should exist' self.assertTrue(os.path.exists(path), msg=m) def assertPathDoesNotExist(self, path): - m = 'Path {!r} should not exist'.format(path) + m = f'Path {path!r} should not exist' self.assertFalse(os.path.exists(path), msg=m) @@ -2391,7 +2391,7 @@ class AllPlatformTests(BasePlatformTests): https://github.com/mesonbuild/meson/issues/829 ''' if self.backend is not Backend.ninja: - raise unittest.SkipTest('{!r} backend can\'t install files'.format(self.backend.name)) + raise unittest.SkipTest(f'{self.backend.name!r} backend can\'t install files') testdir = os.path.join(self.common_test_dir, '8 install') self.init(testdir) intro = self.introspect('--targets') @@ -2438,7 +2438,7 @@ class AllPlatformTests(BasePlatformTests): TODO Change the format to a list officially in a followup PR ''' if self.backend is not Backend.ninja: - raise unittest.SkipTest('{!r} backend can\'t install files'.format(self.backend.name)) + raise unittest.SkipTest(f'{self.backend.name!r} backend can\'t install files') testdir = os.path.join(self.common_test_dir, '141 custom target multiple outputs') self.init(testdir) intro = self.introspect('--targets') @@ -2471,12 +2471,12 @@ class AllPlatformTests(BasePlatformTests): f.readlines()))) logged = read_logs() for name in logged: - self.assertTrue(name in expected, 'Log contains extra entry {}'.format(name)) + self.assertTrue(name in expected, f'Log contains extra entry {name}') expected[name] += 1 for name, count in expected.items(): - self.assertGreater(count, 0, 'Log is missing entry for {}'.format(name)) - self.assertLess(count, 2, 'Log has multiple entries for {}'.format(name)) + self.assertGreater(count, 0, f'Log is missing entry for {name}') + self.assertLess(count, 2, f'Log has multiple entries for {name}') # Verify that with --dry-run we obtain the same logs but with nothing # actually installed @@ -2788,7 +2788,7 @@ class AllPlatformTests(BasePlatformTests): for lang, evar in langs: # Detect with evar and do sanity checks on that if evar in os.environ: - ecc = getattr(env, 'detect_{}_compiler'.format(lang))(MachineChoice.HOST) + ecc = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST) self.assertTrue(ecc.version) elinker = env.detect_static_linker(ecc) # Pop it so we don't use it for the next detection @@ -2812,11 +2812,11 @@ class AllPlatformTests(BasePlatformTests): self.assertIsInstance(ecc, msvc) self.assertIsInstance(elinker, lib) else: - raise AssertionError('Unknown compiler {!r}'.format(evalue)) + raise AssertionError(f'Unknown compiler {evalue!r}') # Check that we actually used the evalue correctly as the compiler self.assertEqual(ecc.get_exelist(), split_args(evalue)) # Do auto-detection of compiler based on platform, PATH, etc. - cc = getattr(env, 'detect_{}_compiler'.format(lang))(MachineChoice.HOST) + cc = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST) self.assertTrue(cc.version) linker = env.detect_static_linker(cc) # Check compiler type @@ -2876,7 +2876,7 @@ class AllPlatformTests(BasePlatformTests): # Need a new env to re-run environment loading env = get_fake_env(testdir, self.builddir, self.prefix) - wcc = getattr(env, 'detect_{}_compiler'.format(lang))(MachineChoice.HOST) + wcc = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST) wlinker = env.detect_static_linker(wcc) # Pop it so we don't use it for the next detection evalue = os.environ.pop('AR') @@ -2972,9 +2972,9 @@ class AllPlatformTests(BasePlatformTests): value = 'spaces and fun@$&()-=_+{}[]:;>?,./~`' for env_var in ['CPPFLAGS', 'CFLAGS']: env = {} - env[env_var] = '-D{}="{}"'.format(define, value) + env[env_var] = f'-D{define}="{value}"' env['LDFLAGS'] = '-DMESON_FAIL_VALUE=cflags-read' - self.init(testdir, extra_args=['-D{}={}'.format(define, value)], override_envvars=env) + self.init(testdir, extra_args=[f'-D{define}={value}'], override_envvars=env) def test_custom_target_exe_data_deterministic(self): testdir = os.path.join(self.common_test_dir, '110 custom target capture') @@ -3190,7 +3190,7 @@ class AllPlatformTests(BasePlatformTests): path = os.path.join(project_dir, 'subprojects', name) os.makedirs(path) with open(os.path.join(path, 'meson.build'), 'w') as ofile: - ofile.write("project('{}', version: '1.0')".format(name)) + ofile.write(f"project('{name}', version: '1.0')") return path def dist_impl(self, vcs_init, vcs_add_all=None, include_subprojects=True): @@ -3292,7 +3292,7 @@ class AllPlatformTests(BasePlatformTests): self.build() for each in ('prog', 'subdir/liblib1.so', ): rpath = get_rpath(os.path.join(self.builddir, each)) - self.assertTrue(rpath, 'Rpath could not be determined for {}.'.format(each)) + self.assertTrue(rpath, f'Rpath could not be determined for {each}.') if is_dragonflybsd(): # DragonflyBSD will prepend /usr/lib/gccVERSION to the rpath, # so ignore that. @@ -3954,7 +3954,7 @@ class AllPlatformTests(BasePlatformTests): if item['name'] == arg: self.assertEqual(item['value'], 'bar') return - raise Exception('Missing {} value?'.format(arg)) + raise Exception(f'Missing {arg} value?') def test_same_dash_option_twice(self): self._test_same_option_twice('bindir', ['--bindir=foo', '--bindir=bar']) @@ -3974,7 +3974,7 @@ class AllPlatformTests(BasePlatformTests): if item['name'] == arg: self.assertEqual(item['value'], 'bar') return - raise Exception('Missing {} value?'.format(arg)) + raise Exception(f'Missing {arg} value?') def test_same_dash_option_twice_configure(self): self._test_same_option_twice_configure( @@ -4466,7 +4466,7 @@ class AllPlatformTests(BasePlatformTests): @skipIfNoExecutable('clang-format') def test_clang_format(self): if self.backend is not Backend.ninja: - raise unittest.SkipTest('Clang-format is for now only supported on Ninja, not {}'.format(self.backend.name)) + raise unittest.SkipTest(f'Clang-format is for now only supported on Ninja, not {self.backend.name}') testdir = os.path.join(self.unit_test_dir, '54 clang-format') testfile = os.path.join(testdir, 'prog.c') badfile = os.path.join(testdir, 'prog_orig_c') @@ -4494,7 +4494,7 @@ class AllPlatformTests(BasePlatformTests): @skipIfNoExecutable('clang-tidy') def test_clang_tidy(self): if self.backend is not Backend.ninja: - raise unittest.SkipTest('Clang-tidy is for now only supported on Ninja, not {}'.format(self.backend.name)) + raise unittest.SkipTest(f'Clang-tidy is for now only supported on Ninja, not {self.backend.name}') if shutil.which('c++') is None: raise unittest.SkipTest('Clang-tidy breaks when ccache is used and "c++" not in path.') if is_osx(): @@ -4572,7 +4572,7 @@ class AllPlatformTests(BasePlatformTests): if k == i[0]: found = True break - self.assertTrue(found, 'Key "{}" not in expected list'.format(k)) + self.assertTrue(found, f'Key "{k}" not in expected list') root_keylist = [ ('benchmarks', list), @@ -4759,7 +4759,7 @@ class AllPlatformTests(BasePlatformTests): infodir = os.path.join(self.builddir, 'meson-info') self.assertPathExists(infodir) for i in root_keylist: - curr = os.path.join(infodir, 'intro-{}.json'.format(i)) + curr = os.path.join(infodir, f'intro-{i}.json') self.assertPathExists(curr) with open(curr) as fp: res_file[i] = json.load(fp) @@ -4980,7 +4980,7 @@ class AllPlatformTests(BasePlatformTests): def test_alias_target(self): if self.backend is Backend.vs: # FIXME: This unit test is broken with vs backend, needs investigation - raise unittest.SkipTest('Skipping alias_target test with {} backend'.format(self.backend.name)) + raise unittest.SkipTest(f'Skipping alias_target test with {self.backend.name} backend') testdir = os.path.join(self.unit_test_dir, '66 alias target') self.init(testdir) self.build() @@ -5050,24 +5050,24 @@ class AllPlatformTests(BasePlatformTests): def get_exe_name(basename: str) -> str: if is_windows(): - return '{}.exe'.format(basename) + return f'{basename}.exe' else: return basename def get_shared_lib_name(basename: str) -> str: if mesonbuild.environment.detect_msys2_arch(): - return 'lib{}.dll'.format(basename) + return f'lib{basename}.dll' elif is_windows(): - return '{}.dll'.format(basename) + return f'{basename}.dll' elif is_cygwin(): - return 'cyg{}.dll'.format(basename) + return f'cyg{basename}.dll' elif is_osx(): - return 'lib{}.dylib'.format(basename) + return f'lib{basename}.dylib' else: - return 'lib{}.so'.format(basename) + return f'lib{basename}.so' def get_static_lib_name(basename: str) -> str: - return 'lib{}.a'.format(basename) + return f'lib{basename}.a' # Base case (no targets or additional arguments) @@ -5227,7 +5227,7 @@ class AllPlatformTests(BasePlatformTests): help_output = self._run(self.meson_command + ['--help']) help_commands = {c.strip() for c in re.findall(r'usage:(?:.+)?{((?:[a-z]+,*)+?)}', help_output, re.MULTILINE|re.DOTALL)[0].split(',')} - self.assertEqual(md_commands | {'help'}, help_commands, 'Doc file: `{}`'.format(doc_path)) + self.assertEqual(md_commands | {'help'}, help_commands, f'Doc file: `{doc_path}`') ## Validate that each section has proper placeholders @@ -5240,7 +5240,7 @@ class AllPlatformTests(BasePlatformTests): for command in md_commands: m = get_data_pattern(command).search(md, pos=md_command_sections[command][0], endpos=md_command_sections[command][1]) - self.assertIsNotNone(m, 'Command `{}` is missing placeholders for dynamic data. Doc file: `{}`'.format(command, doc_path)) + self.assertIsNotNone(m, f'Command `{command}` is missing placeholders for dynamic data. Doc file: `{doc_path}`') def _check_coverage_files(self, types=('text', 'xml', 'html')): covdir = Path(self.builddir) / 'meson-logs' @@ -5252,7 +5252,7 @@ class AllPlatformTests(BasePlatformTests): if 'html' in types: files.append('coveragereport/index.html') for f in files: - self.assertTrue((covdir / f).is_file(), msg='{} is not a file'.format(f)) + self.assertTrue((covdir / f).is_file(), msg=f'{f} is not a file') def test_coverage(self): if mesonbuild.environment.detect_msys2_arch(): @@ -5607,10 +5607,10 @@ class FailureTests(BasePlatformTests): with open(self.mbuild, 'w') as f: f.write("project('failure test', 'c', 'cpp'") if meson_version: - f.write(", meson_version: '{}'".format(meson_version)) + f.write(f", meson_version: '{meson_version}'") f.write(")\n") for lang in langs: - f.write("add_languages('{}', required : false)\n".format(lang)) + f.write(f"add_languages('{lang}', required : false)\n") f.write(contents) if options is not None: with open(self.moptions, 'w') as f: @@ -5633,10 +5633,10 @@ class FailureTests(BasePlatformTests): with open(self.mbuild, 'w') as f: f.write("project('output test', 'c', 'cpp'") if meson_version: - f.write(", meson_version: '{}'".format(meson_version)) + f.write(f", meson_version: '{meson_version}'") f.write(")\n") for lang in langs: - f.write("add_languages('{}', required : false)\n".format(lang)) + f.write(f"add_languages('{lang}', required : false)\n") f.write(contents) # Run in-process for speed and consistency with assertMesonRaises return self.init(self.srcdir, extra_args=extra_args, inprocess=True) @@ -5705,7 +5705,7 @@ class FailureTests(BasePlatformTests): if shutil.which('gnustep-config'): raise unittest.SkipTest('gnustep-config found') self.assertMesonRaises("dependency('gnustep')", - "(requires a Objc compiler|{})".format(self.dnf), + f"(requires a Objc compiler|{self.dnf})", langs = ['objc']) def test_wx_notfound_dependency(self): @@ -5724,19 +5724,19 @@ class FailureTests(BasePlatformTests): def test_llvm_dependency(self): self.assertMesonRaises("dependency('llvm', modules : 'fail')", - "(required.*fail|{})".format(self.dnf)) + f"(required.*fail|{self.dnf})") def test_boost_notfound_dependency(self): # Can be run even if Boost is found or not self.assertMesonRaises("dependency('boost', modules : 1)", "module.*not a string") self.assertMesonRaises("dependency('boost', modules : 'fail')", - "(fail.*not found|{})".format(self.dnf)) + f"(fail.*not found|{self.dnf})") def test_boost_BOOST_ROOT_dependency(self): # Test BOOST_ROOT; can be run even if Boost is found or not self.assertMesonRaises("dependency('boost')", - "(boost_root.*absolute|{})".format(self.dnf), + f"(boost_root.*absolute|{self.dnf})", override_envvars = {'BOOST_ROOT': 'relative/path'}) def test_dependency_invalid_method(self): @@ -5928,7 +5928,7 @@ class WindowsTests(BasePlatformTests): # Find cmd with an absolute path that's missing the extension cmd_path = prog2.get_path()[:-4] prog = ExternalProgram(cmd_path) - self.assertTrue(prog.found(), msg='{!r} not found'.format(cmd_path)) + self.assertTrue(prog.found(), msg=f'{cmd_path!r} not found') # Finding a script with no extension inside a directory works prog = ExternalProgram(os.path.join(testdir, 'test-script')) self.assertTrue(prog.found(), msg='test-script not found') @@ -5965,7 +5965,7 @@ class WindowsTests(BasePlatformTests): path = os.environ['PATH'] if 'WindowsApps' not in path: username = os.environ['USERNAME'] - appstore_dir = r'C:\Users\{}\AppData\Local\Microsoft\WindowsApps'.format(username) + appstore_dir = fr'C:\Users\{username}\AppData\Local\Microsoft\WindowsApps' path = os.pathsep + appstore_dir path = ExternalProgram._windows_sanitize_path(path) self.assertNotIn('WindowsApps', path) @@ -6052,8 +6052,8 @@ class WindowsTests(BasePlatformTests): def _check_ld(self, name: str, lang: str, expected: str) -> None: if not shutil.which(name): - raise unittest.SkipTest('Could not find {}.'.format(name)) - envvars = [mesonbuild.envconfig.ENV_VAR_PROG_MAP['{}_ld'.format(lang)]] + raise unittest.SkipTest(f'Could not find {name}.') + envvars = [mesonbuild.envconfig.ENV_VAR_PROG_MAP[f'{lang}_ld']] # Also test a deprecated variable if there is one. if f'{lang}_ld' in mesonbuild.envconfig.DEPRECATED_ENV_PROG_MAP: @@ -6064,9 +6064,9 @@ class WindowsTests(BasePlatformTests): with mock.patch.dict(os.environ, {envvar: name}): env = get_fake_env() try: - comp = getattr(env, 'detect_{}_compiler'.format(lang))(MachineChoice.HOST) + comp = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST) except EnvironmentException: - raise unittest.SkipTest('Could not find a compiler for {}'.format(lang)) + raise unittest.SkipTest(f'Could not find a compiler for {lang}') self.assertEqual(comp.linker.id, expected) def test_link_environment_variable_lld_link(self): @@ -6121,7 +6121,7 @@ class WindowsTests(BasePlatformTests): exe = os.path.join(self.builddir, 'cppprog.exe') for f in (dll, exe): pe = pefile.PE(f) - msg = 'PE file: {!r}, compiler: {!r}, linker: {!r}'.format(f, cc_id, ld_id) + msg = f'PE file: {f!r}, compiler: {cc_id!r}, linker: {ld_id!r}' if cc_id == 'clang-cl': # Latest clang-cl tested (7.0) does not write checksums out self.assertFalse(pe.verify_checksum(), msg=msg) @@ -6202,7 +6202,7 @@ class WindowsTests(BasePlatformTests): def test_modules(self): if self.backend is not Backend.ninja: - raise unittest.SkipTest('C++ modules only work with the Ninja backend (not {}).'.format(self.backend.name)) + raise unittest.SkipTest(f'C++ modules only work with the Ninja backend (not {self.backend.name}).') if 'VSCMD_VER' not in os.environ: raise unittest.SkipTest('C++ modules is only supported with Visual Studio.') if version_compare(os.environ['VSCMD_VER'], '<16.9.0'): @@ -6722,7 +6722,7 @@ class LinuxlikeTests(BasePlatformTests): ('intel', 'c++03'), ('intel', 'gnu++03')]) if v != 'none' and not (compiler.get_id(), v) in skiplist: - cmd_std = " -std={} ".format(v) + cmd_std = f" -std={v} " self.assertIn(cmd_std, cmd) try: self.build() @@ -6738,7 +6738,7 @@ class LinuxlikeTests(BasePlatformTests): elif compiler.language == 'cpp': env_flag_name = 'CXXFLAGS' else: - raise NotImplementedError('Language {} not defined.'.format(compiler.language)) + raise NotImplementedError(f'Language {compiler.language} not defined.') env = {} env[env_flag_name] = cmd_std with self.assertRaises((subprocess.CalledProcessError, mesonbuild.mesonlib.EnvironmentException), @@ -7683,7 +7683,7 @@ class LinuxlikeTests(BasePlatformTests): # Test that installed libraries works self.new_builddir() self.prefix = oldprefix - meson_args = ['-Dc_link_args=-L{}'.format(libdir), + meson_args = [f'-Dc_link_args=-L{libdir}', '--fatal-meson-warnings'] testdir = os.path.join(self.unit_test_dir, '68 static link') env = {'PKG_CONFIG_LIBDIR': os.path.join(libdir, 'pkgconfig')} @@ -7695,8 +7695,8 @@ class LinuxlikeTests(BasePlatformTests): if is_sunos(): raise unittest.SkipTest('Solaris currently cannot override the linker.') if not shutil.which(check): - raise unittest.SkipTest('Could not find {}.'.format(check)) - envvars = [mesonbuild.envconfig.ENV_VAR_PROG_MAP['{}_ld'.format(lang)]] + raise unittest.SkipTest(f'Could not find {check}.') + envvars = [mesonbuild.envconfig.ENV_VAR_PROG_MAP[f'{lang}_ld']] # Also test a deprecated variable if there is one. if f'{lang}_ld' in mesonbuild.envconfig.DEPRECATED_ENV_PROG_MAP: @@ -7706,7 +7706,7 @@ class LinuxlikeTests(BasePlatformTests): for envvar in envvars: with mock.patch.dict(os.environ, {envvar: name}): env = get_fake_env() - comp = getattr(env, 'detect_{}_compiler'.format(lang))(MachineChoice.HOST) + comp = getattr(env, f'detect_{lang}_compiler')(MachineChoice.HOST) if isinstance(comp, (mesonbuild.compilers.AppleClangCCompiler, mesonbuild.compilers.AppleClangCPPCompiler, mesonbuild.compilers.AppleClangObjCCompiler, @@ -7714,7 +7714,7 @@ class LinuxlikeTests(BasePlatformTests): raise unittest.SkipTest('AppleClang is currently only supported with ld64') if lang != 'rust' and comp.use_linker_args('bfd') == []: raise unittest.SkipTest( - 'Compiler {} does not support using alternative linkers'.format(comp.id)) + f'Compiler {comp.id} does not support using alternative linkers') self.assertEqual(comp.linker.id, expected) def test_ld_environment_variable_bfd(self): @@ -8023,7 +8023,7 @@ class PythonTests(BasePlatformTests): def test_versions(self): if self.backend is not Backend.ninja: - raise unittest.SkipTest('Skipping python tests with {} backend'.format(self.backend.name)) + raise unittest.SkipTest(f'Skipping python tests with {self.backend.name} backend') testdir = os.path.join(self.src_root, 'test cases', 'unit', '39 python extmodule') @@ -8417,23 +8417,23 @@ class NativeFileTests(BasePlatformTests): values should be a nested dictionary structure of {section: {key: value}} """ - filename = os.path.join(self.builddir, 'generated{}.config'.format(self.current_config)) + filename = os.path.join(self.builddir, f'generated{self.current_config}.config') self.current_config += 1 with open(filename, 'wt') as f: for section, entries in values.items(): - f.write('[{}]\n'.format(section)) + f.write(f'[{section}]\n') for k, v in entries.items(): if isinstance(v, (bool, int, float)): - f.write("{}={}\n".format(k, v)) + f.write(f"{k}={v}\n") elif isinstance(v, list): - f.write("{}=[{}]\n".format(k, ', '.join(["'{}'".format(w) for w in v]))) + f.write("{}=[{}]\n".format(k, ', '.join([f"'{w}'" for w in v]))) else: - f.write("{}='{}'\n".format(k, v)) + f.write(f"{k}='{v}'\n") return filename def helper_create_binary_wrapper(self, binary, dir_=None, extra_args=None, **kwargs): """Creates a wrapper around a binary that overrides specific values.""" - filename = os.path.join(dir_ or self.builddir, 'binary_wrapper{}.py'.format(self.current_wrapper)) + filename = os.path.join(dir_ or self.builddir, f'binary_wrapper{self.current_wrapper}.py') extra_args = extra_args or {} self.current_wrapper += 1 if is_haiku(): @@ -8455,7 +8455,7 @@ class NativeFileTests(BasePlatformTests): f.write(' parser.add_argument("-{0}", "--{0}", action="store_true")\n'.format(name)) f.write(' args, extra_args = parser.parse_known_args()\n') for name, value in chain(extra_args.items(), kwargs.items()): - f.write(' if args.{}:\n'.format(name)) + f.write(f' if args.{name}:\n') f.write(' print("{}", file=sys.{})\n'.format(value, kwargs.get('outfile', 'stdout'))) f.write(' sys.exit(0)\n') f.write(textwrap.dedent(''' @@ -8478,9 +8478,9 @@ class NativeFileTests(BasePlatformTests): # On windows we need yet another level of indirection, as cmd cannot # invoke python files itself, so instead we generate a .bat file, which # invokes our python wrapper - batfile = os.path.join(self.builddir, 'binary_wrapper{}.bat'.format(self.current_wrapper)) + batfile = os.path.join(self.builddir, f'binary_wrapper{self.current_wrapper}.bat') with open(batfile, 'wt') as f: - f.write(r'@{} {} %*'.format(sys.executable, filename)) + f.write(fr'@{sys.executable} {filename} %*') return batfile def helper_for_compiler(self, lang, cb, for_machine = MachineChoice.HOST): @@ -8488,7 +8488,7 @@ class NativeFileTests(BasePlatformTests): with more than one implementation, such as C, C++, ObjC, ObjC++, and D. """ env = get_fake_env() - getter = getattr(env, 'detect_{}_compiler'.format(lang)) + getter = getattr(env, f'detect_{lang}_compiler') getter = functools.partial(getter, for_machine) cc = getter() binary, newid = cb(cc) @@ -8516,7 +8516,7 @@ class NativeFileTests(BasePlatformTests): def filler(): with open(fifo, 'w') as f: f.write('[binaries]\n') - f.write("bash = '{}'\n".format(wrapper)) + f.write(f"bash = '{wrapper}'\n") thread = threading.Thread(target=filler) thread.start() @@ -8540,7 +8540,7 @@ class NativeFileTests(BasePlatformTests): def _simple_test(self, case, binary, entry=None): wrapper = self.helper_create_binary_wrapper(binary, version='12345') config = self.helper_create_native_file({'binaries': {entry or binary: wrapper}}) - self.init(self.testcase, extra_args=['--native-file', config, '-Dcase={}'.format(case)]) + self.init(self.testcase, extra_args=['--native-file', config, f'-Dcase={case}']) def test_find_program(self): self._simple_test('find_program', 'bash') @@ -8569,7 +8569,7 @@ class NativeFileTests(BasePlatformTests): # We not have python2, check for it for v in ['2', '2.7', '-2.7']: - rc = subprocess.call(['pkg-config', '--cflags', 'python{}'.format(v)], + rc = subprocess.call(['pkg-config', '--cflags', f'python{v}'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) if rc == 0: @@ -8693,7 +8693,7 @@ class NativeFileTests(BasePlatformTests): """ wrapper = self.helper_create_binary_wrapper(binary, version=version_str) env = get_fake_env() - getter = getattr(env, 'detect_{}_compiler'.format(lang)) + getter = getattr(env, f'detect_{lang}_compiler') getter = functools.partial(getter, MachineChoice.HOST) env.binaries.host.binaries[lang] = [wrapper] compiler = getter() @@ -9094,13 +9094,13 @@ class CrossFileTests(BasePlatformTests): values should be a nested dictionary structure of {section: {key: value}} """ - filename = os.path.join(self.builddir, 'generated{}.config'.format(self.current_config)) + filename = os.path.join(self.builddir, f'generated{self.current_config}.config') self.current_config += 1 with open(filename, 'wt') as f: for section, entries in values.items(): - f.write('[{}]\n'.format(section)) + f.write(f'[{section}]\n') for k, v in entries.items(): - f.write("{}='{}'\n".format(k, v)) + f.write(f"{k}='{v}'\n") return filename def test_cross_file_dirs(self): @@ -9528,7 +9528,7 @@ class SubprojectsCommandTests(BasePlatformTests): def _create_project(self, path, project_name='dummy'): os.makedirs(str(path), exist_ok=True) with open(str(path / 'meson.build'), 'w') as f: - f.write("project('{}')".format(project_name)) + f.write(f"project('{project_name}')") def _git(self, cmd, workdir): return git(cmd, str(workdir), check=True)[1].strip() @@ -9577,14 +9577,14 @@ class SubprojectsCommandTests(BasePlatformTests): def _git_create_remote_commit(self, name, branch): self._git_remote(['checkout', branch], name) - self._git_remote(['commit', '--allow-empty', '-m', 'initial {} commit'.format(branch)], name) + self._git_remote(['commit', '--allow-empty', '-m', f'initial {branch} commit'], name) def _git_create_remote_branch(self, name, branch): self._git_remote(['checkout', '-b', branch], name) - self._git_remote(['commit', '--allow-empty', '-m', 'initial {} commit'.format(branch)], name) + self._git_remote(['commit', '--allow-empty', '-m', f'initial {branch} commit'], name) def _git_create_remote_tag(self, name, tag): - self._git_remote(['commit', '--allow-empty', '-m', 'tag {} commit'.format(tag)], name) + self._git_remote(['commit', '--allow-empty', '-m', f'tag {tag} commit'], name) self._git_remote(['tag', tag], name) def _wrap_create_git(self, name, revision='master'): |