mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[coverage] Add database querying script
This commit is contained in:
104
utils/coverage/coverage-query-db
Executable file
104
utils/coverage/coverage-query-db
Executable file
@@ -0,0 +1,104 @@
|
||||
#!/usr/bin/env python
|
||||
# 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 - 2016 Apple Inc. and the Swift project authors
|
||||
# Licensed under Apache License v2.0 with Runtime Library Exception
|
||||
#
|
||||
# See http://swift.org/LICENSE.txt for license information
|
||||
# See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
||||
|
||||
import subprocess
|
||||
import argparse
|
||||
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())
|
||||
Reference in New Issue
Block a user