test.py revision 88bb794545936b6915f4ce22fd4404b3cda3bbd7
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') 4977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines args = base_args + rs_files 5077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 5177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines # Execute the command and check the resulting shell return value. 5277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines # All tests that are expected to FAIL have directory names that 5377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines # start with 'F_'. Other tests that are expected to PASS have 5477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines # directory names that start with 'P_'. 5577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines ret = subprocess.call(args, stdout=stdout_file, stderr=stderr_file) 5677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if dirname[0:2] == 'F_': 5777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if ret == 0: 5877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = False 5977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 6077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Command passed on invalid input' 6177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines elif dirname[0:2] == 'P_': 6277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if ret != 0: 6377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = False 6477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 6577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Command failed on valid input' 6677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines else: 6777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = False 6877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 6977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Test Directory name should start with an F or a P' 7077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 7177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stdout_file.flush() 7277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stderr_file.flush() 7377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stdout_file.close() 7477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines stderr_file.close() 7577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 7677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if not CompareFiles('stdout.txt'): 7777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = False 7877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 7977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'stdout is different' 8077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if not CompareFiles('stderr.txt'): 8177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = False 8277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if Options.verbose: 8377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'stderr is different' 8477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 8588bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines if Options.cleanup: 8688bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines os.remove('stdout.txt') 8788bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines os.remove('stderr.txt') 8888bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines shutil.rmtree('tmp/') 8977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 9077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines os.chdir('..') 9177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines return passed 9277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 9377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 9488bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hinesdef Usage(): 9588bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines print ('Usage: %s [OPTION]... [TESTNAME]...' 9688bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 'RenderScript Compiler Test Harness\n' 9788bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 'Runs TESTNAMEs (all tests by default)\n' 9888bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 'Available Options:\n' 9988bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines ' -h, --help Help message\n' 10088bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines ' -n, --no-cleanup Don\'t clean up after running tests\n' 10188bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines ' -v, --verbose Verbose output\n' 10288bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines ) % (sys.argv[0]), 10388bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines return 10488bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 10588bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 10677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesdef main(): 10777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed = 0 10877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines failed = 0 10988bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines files = [] 11077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 11177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines for arg in sys.argv[1:]: 11288bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines if arg in ('-h', '--help'): 11388bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines Usage() 11488bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines return 0 11588bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines elif arg in ('-n', '--no-cleanup'): 11688bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines Options.cleanup = 0 11788bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines elif arg in ('-v', '--verbose'): 11877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines Options.verbose = 1 11977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines else: 12088bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines # Test list to run 12188bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines if os.path.isdir(arg): 12288bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines files.append(arg) 12388bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines else: 12488bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines print >> sys.stderr, 'Invalid test or option: %s' % arg 12588bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines return 1 12688bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines 12788bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines if not files: 12888bb794545936b6915f4ce22fd4404b3cda3bbd7Stephen Hines files = os.listdir('.') 12977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 13077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines for f in files: 13177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if os.path.isdir(f): 13277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines if ExecTest(f): 13377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines passed += 1 13477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines else: 13577b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines failed += 1 13677b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 13777b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Tests Passed: %d\n' % passed, 13877b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines print 'Tests Failed: %d\n' % failed, 13977b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 14077b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines return failed != 0 14177b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 14277b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines 14377b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hinesif __name__ == '__main__': 14477b5baba8349b0741c36f4c0db86660bc0a96991Stephen Hines sys.exit(main()) 145