mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The `__future__` we relied on is now, where the 3 specific things are all included [since Python 3.0](https://docs.python.org/3/library/__future__.html): * absolute_import * print_function * unicode_literals * division These import statements are no-ops and are no longer necessary.
106 lines
3.3 KiB
Python
Executable File
106 lines
3.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# utils/coverage/coverage-query-db - Find covering tests using coverage
|
|
# database
|
|
#
|
|
# This source file is part of the Swift.org open source project
|
|
#
|
|
# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
# Licensed under Apache License v2.0 with Runtime Library Exception
|
|
#
|
|
# See https://swift.org/LICENSE.txt for license information
|
|
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
|
|
import argparse
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def covering_func(args):
|
|
return subprocess.call([
|
|
'sqlite3', args.coverage_db,
|
|
"select distinct test_string.string "
|
|
"from strings as function_string, strings as src_string, "
|
|
" coverage, strings as test_string "
|
|
"where src_string.string = '{0}' and "
|
|
" function_string.string like '%{1}%' and "
|
|
" src_string.id = coverage.src and "
|
|
" test_string.id = coverage.test and "
|
|
" function_string.id = coverage.function;".format(
|
|
args.src_file,
|
|
args.function_str
|
|
)
|
|
])
|
|
|
|
|
|
def covering_line(args):
|
|
return subprocess.call([
|
|
'sqlite3', args.coverage_db,
|
|
"select distinct test_string.string "
|
|
"from strings as src_string, coverage, "
|
|
" strings as test_string "
|
|
"where src_string.string = '{0}' and "
|
|
" istart < {1} and {1} < iend and "
|
|
" src_string.id = coverage.src and "
|
|
" test_string.id = coverage.test;".format(
|
|
args.src_file,
|
|
args.line_number
|
|
)
|
|
])
|
|
|
|
|
|
def parse_arguments():
|
|
parser = argparse.ArgumentParser(
|
|
'Find covering tests using coverage database')
|
|
|
|
subparsers = parser.add_subparsers()
|
|
|
|
covering_func_parser = subparsers.add_parser(
|
|
'covering_func',
|
|
help='Find tests that cover any part of a given function'
|
|
)
|
|
covering_func_parser.add_argument(
|
|
'--coverage-db',
|
|
help='coverage database to query (e.g. coverage.db)',
|
|
required=True)
|
|
covering_func_parser.add_argument(
|
|
'--src-file',
|
|
help='src file name containing the specified function '
|
|
'(e.g. DocComment.cpp)',
|
|
required=True)
|
|
covering_func_parser.add_argument(
|
|
'--function-str',
|
|
help='find tests that cover any part of a function containing this '
|
|
'string in its signature',
|
|
required=True)
|
|
covering_func_parser.set_defaults(which='covering_func')
|
|
|
|
covering_line_parser = subparsers.add_parser(
|
|
'covering_line',
|
|
help='Find tests that cover a given line'
|
|
)
|
|
covering_line_parser.add_argument(
|
|
'--coverage-db',
|
|
help='coverage database to query (e.g. coverage.db)',
|
|
required=True)
|
|
covering_line_parser.add_argument(
|
|
'--src-file',
|
|
help='src file name containing the specified line number '
|
|
'(e.g. DocComment.cpp)',
|
|
required=True)
|
|
covering_line_parser.add_argument(
|
|
'--line-number',
|
|
help='find tests that cover this line number',
|
|
required=True)
|
|
covering_line_parser.set_defaults(which='covering_line')
|
|
|
|
return parser.parse_args()
|
|
|
|
|
|
def main():
|
|
args = parse_arguments()
|
|
return globals()[args.which](args)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|