1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #!/usr/bin/env python3
- # Copyright 2018 The Meson development team
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- # http://www.apache.org/licenses/LICENSE-2.0
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- '''Renames test case directories using Git from this:
- 1 something
- 3 other
- 3 foo
- 3 bar
- to this:
- 1 something
- 2 other
- 3 foo
- 4 bar
- This directory must be run from source root as it touches run_unittests.py.
- '''
- import typing as T
- import os
- import sys
- import subprocess
- from glob import glob
- def get_entries() -> T.List[T.Tuple[int, str]]:
- entries = []
- for e in glob('*'):
- if not os.path.isdir(e):
- raise SystemExit('Current directory must not contain any files.')
- (number, rest) = e.split(' ', 1)
- try:
- numstr = int(number)
- except ValueError:
- raise SystemExit(f'Dir name {e} does not start with a number.')
- entries.append((numstr, rest))
- entries.sort()
- return entries
- def replace_source(sourcefile: str, replacements: T.List[T.Tuple[str, str]]) -> None:
- with open(sourcefile, encoding='utf-8') as f:
- contents = f.read()
- for old_name, new_name in replacements:
- contents = contents.replace(old_name, new_name)
- with open(sourcefile, 'w', encoding='utf-8') as f:
- f.write(contents)
- def condense(dirname: str) -> None:
- curdir = os.getcwd()
- os.chdir(dirname)
- entries = get_entries()
- replacements = []
- for _i, e in enumerate(entries):
- i = _i + 1
- if e[0] != i:
- old_name = str(e[0]) + ' ' + e[1]
- new_name = str(i) + ' ' + e[1]
- #print('git mv "%s" "%s"' % (old_name, new_name))
- subprocess.check_call(['git', 'mv', old_name, new_name])
- replacements.append((old_name, new_name))
- # update any appearances of old_name in expected stdout in test.json
- json = os.path.join(new_name, 'test.json')
- if os.path.isfile(json):
- replace_source(json, [(old_name, new_name)])
- os.chdir(curdir)
- replace_source('run_unittests.py', replacements)
- replace_source('run_project_tests.py', replacements)
- for f in glob('unittests/*.py'):
- replace_source(f, replacements)
- if __name__ == '__main__':
- if len(sys.argv) != 1:
- raise SystemExit('This script takes no arguments.')
- for d in glob('test cases/*'):
- condense(d)
|