From e434833e5cefb00482223049d624301b10450717 Mon Sep 17 00:00:00 2001 From: Nicolas Pena Date: Thu, 31 May 2018 00:18:30 +0000 Subject: Add alphabetical order per file check in api_check.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Iee691870bd890da8e5c8ce9f9f74d15bc213d4a8 Reviewed-on: https://pdfium-review.googlesource.com/32871 Commit-Queue: Nicolás Peña Moreno Reviewed-by: Lei Zhang --- testing/tools/api_check.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/testing/tools/api_check.py b/testing/tools/api_check.py index e88af144c6..2c5cc4fa3e 100755 --- a/testing/tools/api_check.py +++ b/testing/tools/api_check.py @@ -8,7 +8,8 @@ This script gathers a list of functions from public/*.h that contain FPDF_EXPORT. It then gathers a list of functions from fpdfsdk/fpdf_view_c_api_test.c. It then verifies both lists do not contain -duplicates, and they match each other. +duplicates, and they match each other. It also checks that the order in +fpdf_view_c_api_test.c is alphabetical within each section. """ @@ -69,16 +70,29 @@ def _GetFunctionsFromPublicHeaders(src_path): functions.extend(_GetExportsFromHeader(public_path, filename)) return functions +def _CheckSorted(functions, api_test_path): + unsorted_functions = set() + for i in range(len(functions) - 1): + if functions[i] > functions[i+1]: + unsorted_functions.add(functions[i]) + unsorted_functions.add(functions[i+1]) + return unsorted_functions def _GetFunctionsFromTest(api_test_path): chk_regex = re.compile('^ CHK\((.*)\);\n$') + file_regex = re.compile('^ //.*\.h\n$') with open(api_test_path) as f: contents = f.readlines() functions = [] + functions_in_file = [] for line in contents: + if (file_regex.match(line)): + functions.append(functions_in_file) + functions_in_file = [] match = chk_regex.match(line) if match: - functions.append(match.groups()[0]) + functions_in_file.append(match.groups()[0]) + functions.append(functions_in_file) return functions @@ -103,14 +117,23 @@ def main(): api_test_relative_path = os.path.join('fpdfsdk', 'fpdf_view_c_api_test.c') api_test_path = os.path.join(src_path, api_test_relative_path) - test_functions = _GetFunctionsFromTest(api_test_path) - + test_functions_per_section = _GetFunctionsFromTest(api_test_path) result = True + unsorted_functions = set() + for functions in test_functions_per_section: + unsorted_functions |= _CheckSorted(functions, api_test_path) + check = _CheckAndPrintFailures(unsorted_functions, + 'Found CHKs that are not in alphabetical order within each section in %s' + % api_test_path) + result = result and check + duplicate_public_functions = _FindDuplicates(public_functions) check = _CheckAndPrintFailures(duplicate_public_functions, 'Found duplicate functions in public headers') result = result and check + test_functions = [function for functions in test_functions_per_section + for function in functions] duplicate_test_functions = _FindDuplicates(test_functions) check = _CheckAndPrintFailures(duplicate_test_functions, 'Found duplicate functions in API test') @@ -128,7 +151,7 @@ def main(): if not result: print ('Some checks failed. Make sure %s is in sync with the public API ' 'headers.' - % api_test_relative_path); + % api_test_relative_path) return 1 return 0 -- cgit v1.2.3