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