Summary: This patch allows the use of LIT's ShTest format in the libc++ test suite. ShTests have the suffix '.sh.cpp'. It also introduces a series of other changes. These changes are: - More functionality including parsing test metadata has been moved into LIT. - LibcxxTestFormat now supports multi-part suffixes. - the `CXXCompiler` functionality has been used to shrink the size of LibcxxTestFormat. - The recursive loading of the site config has been turned into `libcxx.test.config.loadSiteConfig` so it can be used with libc++abi. - Temporary files are now created in the build directory of libc++. This follows how it is down in ShTest. - `not.py` was added as a utility executable that mirrors the functionality of LLVM's `not` executable. - The first ShTest test was added under test/libcxx/double_include.sh.cpp Reviewers: jroelofs, danalbert Reviewed By: danalbert Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D7073 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@226844 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from contextlib import contextmanager
 | 
						|
import os
 | 
						|
import tempfile
 | 
						|
 | 
						|
 | 
						|
def cleanFile(filename):
 | 
						|
    try:
 | 
						|
        os.remove(filename)
 | 
						|
    except OSError:
 | 
						|
        pass
 | 
						|
 | 
						|
 | 
						|
@contextmanager
 | 
						|
def guardedTempFilename(suffix='', prefix='', dir=None):
 | 
						|
    # Creates and yeilds a temporary filename within a with statement. The file
 | 
						|
    # is removed upon scope exit.
 | 
						|
    handle, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir)
 | 
						|
    os.close(handle)
 | 
						|
    yield name
 | 
						|
    cleanFile(name)
 | 
						|
 | 
						|
 | 
						|
@contextmanager
 | 
						|
def guardedFilename(name):
 | 
						|
    # yeilds a filename within a with statement. The file is removed upon scope
 | 
						|
    # exit.
 | 
						|
    yield name
 | 
						|
    cleanFile(name)
 | 
						|
 | 
						|
 | 
						|
@contextmanager
 | 
						|
def nullContext(value):
 | 
						|
    # yeilds a variable within a with statement. No action is taken upon scope
 | 
						|
    # exit.
 | 
						|
    yield value
 | 
						|
 | 
						|
 | 
						|
def makeReport(cmd, out, err, rc):
 | 
						|
    report = "Command: %s\n" % cmd
 | 
						|
    report += "Exit Code: %d\n" % rc
 | 
						|
    if out:
 | 
						|
        report += "Standard Output:\n--\n%s--\n" % out
 | 
						|
    if err:
 | 
						|
        report += "Standard Error:\n--\n%s--\n" % err
 | 
						|
    report += '\n'
 | 
						|
    return report
 |