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/.
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 absolute_import
13 from __future__
import print_function
17 search_string
= sys
.argv
[1]
18 expected_count
= int(sys
.argv
[2])
19 error_location
= sys
.argv
[3]
20 replacement
= sys
.argv
[4]
28 match
= re
.findall(search_string
, text
)
34 if count
== expected_count
:
35 print("TEST-PASS | check_source_count.py {0} | {1}"
36 .format(search_string
, expected_count
))
39 print("TEST-UNEXPECTED-FAIL | check_source_count.py {0} | "
40 .format(search_string
),
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
))
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
,
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
))