|
1 #!/usr/bin/env python |
|
2 # This Source Code Form is subject to the terms of the Mozilla Public |
|
3 # License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
5 |
|
6 |
|
7 # Usage: check_source_count.py SEARCH_TERM COUNT ERROR_LOCATION REPLACEMENT [FILES...] |
|
8 # Checks that FILES contains exactly COUNT matches of SEARCH_TERM. If it does |
|
9 # not, an error message is printed, quoting ERROR_LOCATION, which should |
|
10 # probably be the filename and line number of the erroneous call to |
|
11 # check_source_count.py. |
|
12 from __future__ import print_function |
|
13 import sys |
|
14 import os |
|
15 import re |
|
16 |
|
17 search_string = sys.argv[1] |
|
18 expected_count = int(sys.argv[2]) |
|
19 error_location = sys.argv[3] |
|
20 replacement = sys.argv[4] |
|
21 files = sys.argv[5:] |
|
22 |
|
23 details = {} |
|
24 |
|
25 count = 0 |
|
26 for f in files: |
|
27 text = file(f).read() |
|
28 match = re.findall(search_string, text) |
|
29 if match: |
|
30 num = len(match) |
|
31 count += num |
|
32 details[f] = num |
|
33 |
|
34 if count == expected_count: |
|
35 print("TEST-PASS | check_source_count.py {0} | {1}" |
|
36 .format(search_string, expected_count)) |
|
37 |
|
38 else: |
|
39 print("TEST-UNEXPECTED-FAIL | check_source_count.py {0} | " |
|
40 .format(search_string), |
|
41 end='') |
|
42 if count < expected_count: |
|
43 print("There are fewer occurrences of /{0}/ than expected. " |
|
44 "This may mean that you have removed some, but forgotten to " |
|
45 "account for it {1}.".format(search_string, error_location)) |
|
46 else: |
|
47 print("There are more occurrences of /{0}/ than expected. We're trying " |
|
48 "to prevent an increase in the number of {1}'s, using {2} if " |
|
49 "possible. If it is unavoidable, you should update the expected " |
|
50 "count {3}.".format(search_string, search_string, replacement, |
|
51 error_location)) |
|
52 |
|
53 print("Expected: {0}; found: {1}".format(expected_count, count)) |
|
54 for k in sorted(details): |
|
55 print("Found {0} occurences in {1}".format(details[k],k)) |
|
56 sys.exit(-1) |
|
57 |