mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
# This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
# License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
						|
 | 
						|
 | 
						|
# Usage: check_source_count.py SEARCH_TERM COUNT ERROR_LOCATION REPLACEMENT [FILES...]
 | 
						|
#   Checks that FILES contains exactly COUNT matches of SEARCH_TERM. If it does
 | 
						|
#   not, an error message is printed, quoting ERROR_LOCATION, which should
 | 
						|
#   probably be the filename and line number of the erroneous call to
 | 
						|
#   check_source_count.py.
 | 
						|
import re
 | 
						|
import sys
 | 
						|
 | 
						|
search_string = sys.argv[1]
 | 
						|
expected_count = int(sys.argv[2])
 | 
						|
error_location = sys.argv[3]
 | 
						|
replacement = sys.argv[4]
 | 
						|
files = sys.argv[5:]
 | 
						|
 | 
						|
details = {}
 | 
						|
 | 
						|
count = 0
 | 
						|
for f in files:
 | 
						|
    text = file(f).read()
 | 
						|
    match = re.findall(search_string, text)
 | 
						|
    if match:
 | 
						|
        num = len(match)
 | 
						|
        count += num
 | 
						|
        details[f] = num
 | 
						|
 | 
						|
if count == expected_count:
 | 
						|
    print(
 | 
						|
        "TEST-PASS | check_source_count.py {0} | {1}".format(
 | 
						|
            search_string, expected_count
 | 
						|
        )
 | 
						|
    )
 | 
						|
 | 
						|
else:
 | 
						|
    print(
 | 
						|
        "TEST-UNEXPECTED-FAIL | check_source_count.py {0} | ".format(search_string),
 | 
						|
        end="",
 | 
						|
    )
 | 
						|
    if count < expected_count:
 | 
						|
        print(
 | 
						|
            "There are fewer occurrences of /{0}/ than expected. "
 | 
						|
            "This may mean that you have removed some, but forgotten to "
 | 
						|
            "account for it {1}.".format(search_string, error_location)
 | 
						|
        )
 | 
						|
    else:
 | 
						|
        print(
 | 
						|
            "There are more occurrences of /{0}/ than expected. We're trying "
 | 
						|
            "to prevent an increase in the number of {1}'s, using {2} if "
 | 
						|
            "possible. If it is unavoidable, you should update the expected "
 | 
						|
            "count {3}.".format(
 | 
						|
                search_string, search_string, replacement, error_location
 | 
						|
            )
 | 
						|
        )
 | 
						|
 | 
						|
    print("Expected: {0}; found: {1}".format(expected_count, count))
 | 
						|
    for k in sorted(details):
 | 
						|
        print("Found {0} occurences in {1}".format(details[k], k))
 | 
						|
    sys.exit(-1)
 |