123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/usr/bin/env python3
- # -*- Coding: UTF-8 -*-
- # ---------------------------------------------------------------------------
- # Open Asset Import Library (ASSIMP)
- # ---------------------------------------------------------------------------
- #
- # Copyright (c) 2006-2020, ASSIMP Development Team
- #
- # All rights reserved.
- #
- # Redistribution and use of this software in source and binary forms,
- # with or without modification, are permitted provided that the following
- # conditions are met:
- #
- # * Redistributions of source code must retain the above
- # copyright notice, this list of conditions and the
- # following disclaimer.
- #
- # * Redistributions in binary form must reproduce the above
- # copyright notice, this list of conditions and the
- # following disclaimer in the documentation and/or other
- # materials provided with the distribution.
- #
- # * Neither the name of the ASSIMP team, nor the names of its
- # contributors may be used to endorse or promote products
- # derived from this software without specific prior
- # written permission of the ASSIMP Development Team.
- #
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- # ---------------------------------------------------------------------------
- """
- This script runs as part of the Travis CI build on Github and controls
- whether a patch passes the regression test suite.
- Given the failures encountered by the regression suite runner (run.py) in
- ../results/whitelist.csv
- and the current whitelist of failures considered acceptable in
- ./run_regression_suite_failures_whitelisted.csv
- determine PASSED or FAILED.
- """
- import sys
- import os
- RESULTS_FILE = os.path.join('..', 'results', 'run_regression_suite_failures.csv')
- WHITELIST_FILE = os.path.join('whitelist.csv')
- BANNER = """
- *****************************************************************
- Regression suite result checker
- (test/regression/result_checker.py)
- *****************************************************************
- """
- def passed(message):
- print('\n\n**PASSED: {0}.\n'.format(message))
- return 0
- def failed(message):
- print('\n\n**FAILED: {0}. \nFor more information see test/regression/README.\n'
- .format(message))
- return -1
- def read_results_csv(filename):
- parse = lambda line: map(str.strip, line.split(';')[:2])
- try:
- with open(filename, 'rt') as results:
- return dict(parse(line) for line in results.readlines()[1:])
- except IOError:
- print('Failed to read {0}.'.format(filename))
- return None
- def run():
- print(BANNER)
- print('Reading input files.')
-
- result_dict = read_results_csv(RESULTS_FILE)
- whitelist_dict = read_results_csv(WHITELIST_FILE)
- if result_dict is None or whitelist_dict is None:
- return failed('Could not locate input files')
- if not result_dict:
- return passed('No failures encountered')
- print('Failures:\n' + '\n'.join(sorted(result_dict.keys())))
- print('Whitelisted:\n' + '\n'.join(sorted(whitelist_dict.keys())))
- non_whitelisted_failures = set(result_dict.keys()) - set(whitelist_dict.keys())
- print('Failures not whitelisted:\n' + '\n'.join(sorted(non_whitelisted_failures)))
- if not non_whitelisted_failures:
- return passed('All failures are whitelisted and considered acceptable \n' +
- 'due to implementation differences, library shortcomings and bugs \n' +
- 'that have not been fixed for a long time')
- return failed('Encountered new regression failures that are not whitelisted. \n' +
- 'Please carefully review the changes you made and use the gen_db.py script\n' +
- 'to update the regression database for the affected files')
- if __name__ == "__main__":
- sys.exit(run())
- # vim: ai ts=4 sts=4 et sw=4
|