| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- # Copyright (c) MetaCommunications, Inc. 2003-2005
- #
- # Distributed under the Boost Software License, Version 1.0.
- # (See accompanying file LICENSE_1_0.txt or copy at
- # http://www.boost.org/LICENSE_1_0.txt)
- import difflib
- import os
- import re
- import shutil
- import string
- import sys
- def scan_for_test_cases():
- return [ os.path.join( "test-cases", x ) for x in os.listdir( "test-cases" ) if x != "CVS" ]
- def clean_dir( dir ):
- if os.path.exists( dir ):
- shutil.rmtree( dir )
- os.makedirs( dir )
- def system( commands ):
- if sys.platform == 'win32':
- f = open( 'tmp.cmd', 'w' )
- f.write( string.join( commands, '\n' ) )
- f.close()
- rc = os.system( 'tmp.cmd' )
- os.unlink( 'tmp.cmd' )
- return rc
- else:
- rc = os.system( '&&'.join( commands ) )
- return rc
- def checked_system( commands, valid_return_codes = [ 0 ] ):
- rc = system( commands )
- if rc not in [ 0 ] + valid_return_codes:
- raise Exception( 'Command sequence "%s" failed with return code %d' % ( commands, rc ) )
- return rc
- def list_recursively( dir ):
- r = []
- for root, dirs, files in os.walk( dir, topdown=False ):
- root = root[ len( dir ) + 1 : ]
- r.extend( [ os.path.join( root, x ) for x in dirs ] )
- r.extend( [ os.path.join( root, x ) for x in files ] )
- return r
- def find_process_jam_log():
- root = "../../../"
-
- for root, dirs, files in os.walk( os.path.join( root, "bin.v2" ), topdown=False ):
- if "process_jam_log.exe" in files:
- return os.path.abspath( os.path.normpath( os.path.join( root, "process_jam_log.exe" ) ) )
- if "process_jam_log" in files:
- return os.path.abspath( os.path.normpath( os.path.join( root, "process_jam_log" ) ) )
- return None
- def process_jam_log( executable, file, locate_root, results_dir ):
- args = []
- args.append( executable )
- # args.append( '--echo' )
- args.append( '--create-directories' )
- args.append( '--v2' )
- args.append( locate_root )
- args.append( '<' )
- args.append( file )
- cmd = " ".join( args )
- print "Running process_jam_log (%s)" % cmd
- checked_system( [ cmd ] )
-
- def read_file( file_path ):
- f = open( file_path )
- try:
- return f.read()
- finally:
- f.close()
- def remove_timestamps( log_lines ):
- return [ re.sub( "timestamp=\"[^\"]+\"", "timestamp=\"\"", x ) for x in log_lines ]
- def determine_locate_root( bjam_log ):
- locate_root = None
- f = open( 'bjam.log' )
- try:
- locate_root_re = re.compile( r'locate-root\s+"(.*)"' )
- for l in f.readlines():
- m = locate_root_re.match( l )
- if m:
- locate_root = m.group(1)
- break
- finally:
- f.close()
- return locate_root
- def read_file( path ):
- f = open( path )
- try:
- return f.read()
- finally:
- f.close()
- def read_file_lines( path ):
- f = open( path )
- try:
- return f.readlines()
- finally:
- f.close()
- def write_file( path, content ):
- f = open( path, 'w' )
- try:
- return f.write( content )
- finally:
- f.close()
- def write_file_lines( path, content ):
- f = open( path, 'w' )
- try:
- return f.writelines( content )
- finally:
- f.close()
-
- def run_test_cases( test_cases ):
- process_jam_log_executable = find_process_jam_log()
- print 'Found process_jam_log: %s' % process_jam_log_executable
- initial_dir = os.getcwd()
- for test_case in test_cases:
- os.chdir( initial_dir )
- print 'Running test case "%s"' % test_case
- os.chdir( test_case )
- if os.path.exists( "expected" ):
- locate_root = determine_locate_root( 'bjam.log' )
- print 'locate_root: %s' % locate_root
-
- actual_results_dir = os.path.join( test_case, "actual" )
- clean_dir( "actual" )
- os.chdir( "actual" )
- root = os.getcwd()
- i = 0
- while 1:
- if i == 0:
- bjam_log_file = 'bjam.log'
- else:
- bjam_log_file = 'bjam.log.%0d' % i
- i += 1
- print 'Looking for %s' % bjam_log_file
- if not os.path.exists( os.path.join( '..', bjam_log_file ) ):
- print ' does not exists'
- break
- print ' found'
- write_file_lines(bjam_log_file.replace( 'bjam', 'bjam_' ),
- [ x.replace( locate_root, root ) for x in read_file_lines( os.path.join( '..', bjam_log_file ) ) ] )
-
- process_jam_log( executable = process_jam_log_executable
- , results_dir = "."
- , locate_root = root
- , file=bjam_log_file.replace( 'bjam', 'bjam_' ) )
-
- actual_content = list_recursively( "." )
- actual_content.sort()
- result_xml = []
- for test_log in [ x for x in actual_content if os.path.splitext( x )[1] == '.xml' ]:
- print 'reading %s' % test_log
- result = [ re.sub( r'timestamp="(.*)"', 'timestamp="xxx"', x ) for x in read_file_lines( test_log ) ]
- result_xml.extend( result )
-
- write_file_lines( 'results.xml', result_xml )
- os.chdir( '..' )
- assert read_file( 'expected/results.xml' ) == read_file( 'actual/results.xml' )
- os.chdir( '..' )
- else:
- raise ' Test case "%s" doesn\'t contain the expected results directory ("expected" )' % ( test_case )
-
- run_test_cases( scan_for_test_cases() )
- # print find_process_jam_log()
|