test.py revision 8dd522d2a6b96c79117bdc5d6b58d336846e4346
177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines#!/usr/bin/python2.4 277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines# 377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines# Copyright 2010 Google Inc. All Rights Reserved. 477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines"""RenderScript Compiler Test. 677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 777b5baba8349b0741c36f4c0db86660bc0a96991Stephen HinesRuns subdirectories of tests for the RenderScript compiler. 877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines""" 977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 1077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesimport filecmp 1177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesimport glob 1277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesimport os 1377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesimport shutil 1477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesimport subprocess 1577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesimport sys 1677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 1777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines__author__ = 'Android' 1877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 1977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 2077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesclass Options(object): 2177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines def __init__(self): 2288bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines return 2377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines verbose = 0 2488bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines cleanup = 1 2577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 2677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 2777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesdef CompareFiles(filename): 2877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines actual = filename 2977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines expect = filename + '.expect' 3077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines return filecmp.cmp(actual, expect, False) 3177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 3277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 3377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesdef ExecTest(dirname): 3477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines """Executes an llvm-rs-cc test from dirname.""" 3577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = True 3677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 3777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose != 0: 3877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Testing %s' % dirname 3977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 4077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines os.chdir(dirname) 4177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stdout_file = open('stdout.txt', 'w') 4277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stderr_file = open('stderr.txt', 'w') 4377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 4477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines cmd_string = ('../../../../../out/host/linux-x86/bin/llvm-rs-cc ' 4577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines '-o tmp/ -p tmp/ ' 4677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines '-I ../../../../../frameworks/base/libs/rs/scriptc/') 4777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines base_args = cmd_string.split() 4877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines rs_files = glob.glob('*.rs') 498dd522d2a6b96c79117bdc5d6b58d336846e4346Stephen Hines rs_files.sort() 5077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines args = base_args + rs_files 5177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 52e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines if Options.verbose > 1: 53e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines print 'Executing:', 54e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines for arg in args: 55e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines print arg, 56e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines print 57e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines 5877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines # Execute the command and check the resulting shell return value. 5977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines # All tests that are expected to FAIL have directory names that 6077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines # start with 'F_'. Other tests that are expected to PASS have 6177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines # directory names that start with 'P_'. 6277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines ret = subprocess.call(args, stdout=stdout_file, stderr=stderr_file) 6377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if dirname[0:2] == 'F_': 6477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if ret == 0: 6577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = False 6677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 6777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Command passed on invalid input' 6877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines elif dirname[0:2] == 'P_': 6977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if ret != 0: 7077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = False 7177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 7277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Command failed on valid input' 7377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines else: 74e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines passed = (ret == 0) 7577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 7677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Test Directory name should start with an F or a P' 7777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 7877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stdout_file.flush() 7977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stderr_file.flush() 8077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stdout_file.close() 8177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stderr_file.close() 8277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 8377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if not CompareFiles('stdout.txt'): 8477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = False 8577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 8677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'stdout is different' 8777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if not CompareFiles('stderr.txt'): 8877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = False 8977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 9077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'stderr is different' 9177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 9288bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines if Options.cleanup: 9388bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines os.remove('stdout.txt') 9488bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines os.remove('stderr.txt') 9588bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines shutil.rmtree('tmp/') 9677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 9777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines os.chdir('..') 9877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines return passed 9977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 10077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 10188bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hinesdef Usage(): 10288bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines print ('Usage: %s [OPTION]... [TESTNAME]...' 10388bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 'RenderScript Compiler Test Harness\n' 10488bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 'Runs TESTNAMEs (all tests by default)\n' 10588bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 'Available Options:\n' 10688bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines ' -h, --help Help message\n' 10788bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines ' -n, --no-cleanup Don\'t clean up after running tests\n' 10888bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines ' -v, --verbose Verbose output\n' 10988bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines ) % (sys.argv[0]), 11088bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines return 11188bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 11288bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 11377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesdef main(): 11477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = 0 11577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines failed = 0 11688bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines files = [] 117e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines failed_tests = [] 11877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 11977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines for arg in sys.argv[1:]: 12088bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines if arg in ('-h', '--help'): 12188bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines Usage() 12288bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines return 0 12388bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines elif arg in ('-n', '--no-cleanup'): 12488bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines Options.cleanup = 0 12588bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines elif arg in ('-v', '--verbose'): 126e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines Options.verbose += 1 12777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines else: 12888bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines # Test list to run 12988bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines if os.path.isdir(arg): 13088bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines files.append(arg) 13188bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines else: 13288bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines print >> sys.stderr, 'Invalid test or option: %s' % arg 13388bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines return 1 13488bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 13588bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines if not files: 136e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines tmp_files = os.listdir('.') 137e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines # Only run tests that are known to PASS or FAIL 138e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines # Disabled tests can be marked D_ and invoked explicitly 139e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines for f in tmp_files: 140e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines if os.path.isdir(f) and (f[0:2] == 'F_' or f[0:2] == 'P_'): 141e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines files.append(f) 14277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 14377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines for f in files: 14477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if os.path.isdir(f): 14577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if ExecTest(f): 14677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed += 1 14777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines else: 14877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines failed += 1 149e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines failed_tests.append(f) 15077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 15177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Tests Passed: %d\n' % passed, 15277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Tests Failed: %d\n' % failed, 153e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines if failed: 154e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines print 'Failures:', 155e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines for t in failed_tests: 156e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines print t, 15777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 15877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines return failed != 0 15977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 16077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 16177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesif __name__ == '__main__': 16277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines sys.exit(main()) 163