-
Notifications
You must be signed in to change notification settings - Fork 273
/
Copy pathcount_tests.py
executable file
·80 lines (68 loc) · 2.65 KB
/
count_tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python3
#
# Count number of unit tests.
#
import argparse
import os
import sys
class argument_separator_countert:
def __init__(self):
self.bracket_depth = 0
self.separators = 0
def read_text(self, text):
previous_character = None
in_quotes = False
for character in text:
if in_quotes:
if character == '"' and previous_character != "\\":
in_quotes = False
else:
if character == '"':
in_quotes = True
elif character == '(' or character == '<':
self.bracket_depth += 1
elif character == ')' or character == '(':
self.bracket_depth -= 1
elif character == ',' and self.bracket_depth == 1:
self.separators += 1
previous_character = character
def tests_in_file(file_path):
file_test_count = 0
template_counter = None
with open(file_path, "rt") as file:
for line in file:
if template_counter is None:
if line.startswith("TEST_CASE"):
file_test_count += 1
if line.startswith("SCENARIO"):
file_test_count += 1
if line.startswith("TEMPLATE_TEST_CASE"):
template_counter = argument_separator_countert()
template_counter.read_text(line)
else:
template_counter.read_text(line)
if template_counter is not None and template_counter.bracket_depth == 0:
file_test_count += (template_counter.separators - 1)
template_counter = None
return file_test_count
def count_tests_in_directory(directory_path, exclude_files):
test_count = 0
for root, sub_directories, files in os.walk("."):
# Excluded from count as built into separate binary.
if root.endswith("libcprover-cpp"):
continue
for file_name in files:
if any(file_name == excluded_file for excluded_file in exclude_files):
continue
_, extension = os.path.splitext(file_name)
if extension == ".cpp":
test_count += tests_in_file(os.path.join(root, file_name))
return test_count
def main():
argument_parser = argparse.ArgumentParser()
argument_parser.add_argument("--exclude-files", dest="exclude_files", nargs=1, default=[""])
arguments = argument_parser.parse_args()
excluded_files = arguments.exclude_files[0].split()
print(count_tests_in_directory(".", exclude_files=excluded_files))
if __name__ == "__main__":
main()