#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

""" Test runner for IDL Generator changes """

import subprocess
import sys

def TestIDL(testname, args):
  print '\nRunning unit tests for %s.' % testname
  try:
    args = [sys.executable, testname] + args
    subprocess.check_call(args)
    return 0
  except subprocess.CalledProcessError as err:
    print 'Failed with %s.' % str(err)
    return 1

def main(args):
  errors = 0
  errors += TestIDL('idl_lexer.py', ['--test'])
  assert errors == 0
  errors += TestIDL('idl_parser.py', ['--test'])
  assert errors == 0
  errors += TestIDL('idl_c_header.py', [])
  assert errors == 0
  errors += TestIDL('idl_c_proto.py', ['--wnone', '--test'])
  assert errors == 0
  errors += TestIDL('idl_gen_pnacl.py', ['--wnone', '--test'])
  assert errors == 0
  errors += TestIDL('idl_namespace.py', [])
  assert errors == 0
  errors += TestIDL('idl_node.py', [])
  assert errors == 0

  if errors:
    print '\nFailed tests.'
  return errors


if __name__ == '__main__':
  sys.exit(main(sys.argv[1:]))

