<commit_before>#  $Id$
#
#  Copyright (c) 2003-2010 <NAME> and Rational Discovery LLC
#
#   @@ All Rights Reserved @@
#  This file is part of the RDKit.
#  The contents are covered by the terms of the BSD license
#  which is included in the file license.txt, found at the root
#  of the RDKit source tree.
#
from rdkit import RDConfig
import os,sys,time
if sys.version_info[0]>2 or sys.version_info[1]>4:
  import subprocess
else:
  subprocess=None

TEST_FAILED=-1
TEST_PASSED=0

def RunTest(exeName,args,extras):
  if exeName=="python":
    exeName=RDConfig.pythonExe
  args = args.split(' ')  

  startDir = os.getcwd()
  if extras.has_key('dir'):
    os.chdir(extras['dir'])
  expectedReturn = extras.get('returns',0)
  if not subprocess:
    raise NotImplementedError,'cannot run tests if the subprocess module is not available.'
  else:
    try:
      retVal = subprocess.call([exeName]+list(args))
    except OSError:
      print >>sys.stderr,"Could not find executable: %s."%exeName
      return TEST_FAILED
  if extras.has_key('dir'):
    os.chdir(startDir)
  if retVal!=expectedReturn:
    return TEST_FAILED
  else:
    return TEST_PASSED

def RunScript(script,doLongTests,verbose):
  # support python 2.7 style -f argument for failfast
  if sys.argv[-1] == '-f':
    # setting environment allows this setting to recursively pass to all child
    # processes
    os.environ['PYTHON_TEST_FAILFAST'] = '1'
  if len(sys.argv)==3 and sys.argv[1]=='--testDir':
    os.chdir(sys.argv[2])
  # -------------------------------------------------------
  # this is pretty funny.  Whatever directory we started python in
  # will be in the search path, and if we've changed to another
  # directory, that'll be there too.  HOWEVER... the starting
  # directory will be searched first (at least in python2.2), so we
  # need to make sure that '.' is at the front of the search path
  if sys.path[0] != '.':
    sys.path = ['.']+sys.path
  script = script.split('.py')[0]
  mod = __import__(script)
  try:
    tests = mod.tests
  except AttributeError:
    return [],0
    
  longTests = []
  if doLongTests:
    try:
      longTests = mod.longTests
    except AttributeError:
      pass

  failed = []
  for i, entry in enumerate(tests):
    try:
      exeName,args,extras  = entry
    except ValueError:
      print 'bad entry:',entry
      sys.exit(-1)
    try:
      res = RunTest(exeName,args,extras)
    except:
      import traceback
      traceback.print_exc()
      res = TEST_FAILED
      failed.append((exeName,args,extras))
    if res != TEST_PASSED:
      # check failfast setting
      if os.environ.get('PYTHON_TEST_FAILFAST', '') == '1':<commit_msg>clean up a bug that was preventing python test failures from showing up<commit_after>#  $Id$
#
#  Copyright (c) 2003-2010 <NAME> and Rational Discovery LLC
#
#   @@ All Rights Reserved @@
#  This file is part of the RDKit.
#  The contents are covered by the terms of the BSD license
#  which is included in the file license.txt, found at the root
#  of the RDKit source tree.
#
from rdkit import RDConfig
import os,sys,time
if sys.version_info[0]>2 or sys.version_info[1]>4:
  import subprocess
else:
  subprocess=None

TEST_FAILED=-1
TEST_PASSED=0

def RunTest(exeName,args,extras):
  if exeName=="python":
    exeName=RDConfig.pythonExe
  args = args.split(' ')  

  startDir = os.getcwd()
  if extras.has_key('dir'):
    os.chdir(extras['dir'])
  expectedReturn = extras.get('returns',0)
  if not subprocess:
    raise NotImplementedError,'cannot run tests if the subprocess module is not available.'
  else:
    try:
      retVal = subprocess.call([exeName]+list(args))
    except OSError:
      print >>sys.stderr,"Could not find executable: %s."%exeName
      return TEST_FAILED
  if extras.has_key('dir'):
    os.chdir(startDir)
  if retVal!=expectedReturn:
    return TEST_FAILED
  else:
    return TEST_PASSED

def RunScript(script,doLongTests,verbose):
  # support python 2.7 style -f argument for failfast
  if sys.argv[-1] == '-f':
    # setting environment allows this setting to recursively pass to all child
    # processes
    os.environ['PYTHON_TEST_FAILFAST'] = '1'
  if len(sys.argv)==3 and sys.argv[1]=='--testDir':
    os.chdir(sys.argv[2])
  # -------------------------------------------------------
  # this is pretty funny.  Whatever directory we started python in
  # will be in the search path, and if we've changed to another
  # directory, that'll be there too.  HOWEVER... the starting
  # directory will be searched first (at least in python2.2), so we
  # need to make sure that '.' is at the front of the search path
  if sys.path[0] != '.':
    sys.path = ['.']+sys.path
  script = script.split('.py')[0]
  mod = __import__(script)
  try:
    tests = mod.tests
  except AttributeError:
    return [],0
    
  longTests = []
  if doLongTests:
    try:
      longTests = mod.longTests
    except AttributeError:
      pass

  failed = []
  for i, entry in enumerate(tests):
    try:
      exeName,args,extras  = entry
    except ValueError:
      print 'bad entry:',entry
      sys.exit(-1)
    try:
      res = RunTest(exeName,args,extras)
    except:
      import traceback
      traceback.print_exc()
      res = TEST_FAILED
    if res != TEST_PASSED:
      failed.append((exeName,args,extras))
      # check failfast setting
      if os.environ.get('PYTHON_TEST_FAILFAST', '') == '1':
{'fraction_non_alphanumeric': 0.13122676579925652, 'fraction_numerical': 0.010780669144981412, 'mean_word_length': 2.9537105069801615, 'pattern_counts': {'":': 2, '<': 5, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2928619', 'n_tokens_mistral': 1797, 'n_tokens_neox': 1728, 'n_words': 529}