[cfe-commits] [libcxx] r113925 - /libcxx/trunk/test/lit.cfg
Daniel Dunbar
daniel at zuster.org
Tue Sep 14 20:57:05 PDT 2010
Author: ddunbar
Date: Tue Sep 14 22:57:04 2010
New Revision: 113925
URL: http://llvm.org/viewvc/llvm-project?rev=113925&view=rev
Log:
tests: Sketch a lit config for running libc++ tests; currently expects libc++ to have been installed.
Added:
libcxx/trunk/test/lit.cfg
Added: libcxx/trunk/test/lit.cfg
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/lit.cfg?rev=113925&view=auto
==============================================================================
--- libcxx/trunk/test/lit.cfg (added)
+++ libcxx/trunk/test/lit.cfg Tue Sep 14 22:57:04 2010
@@ -0,0 +1,122 @@
+# -*- Python -*-
+
+# Configuration file for the 'lit' test runner.
+
+import os
+import platform
+import tempfile
+import signal
+import subprocess
+
+class LibcxxTestFormat(lit.formats.FileBasedTest):
+ """
+ Custom test format handler for use with the test format use by libc++.
+
+ Tests fall into two categories:
+ FOO.pass.cpp - Executable test which should compile, run, and exit with
+ code 0.
+ FOO.fail.cpp - Negative test case which is expected to fail compilation.
+ """
+
+ def __init__(self, cxx_under_test, options): self.cxx_under_test =
+ cxx_under_test self.options = list(options)
+
+ def execute_command(self, command):
+ p = subprocess.Popen(command, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out,err = p.communicate()
+ exitCode = p.wait()
+
+ # Detect Ctrl-C in subprocess.
+ if exitCode == -signal.SIGINT:
+ raise KeyboardInterrupt
+
+ return out, err, exitCode
+
+ def execute(self, test, lit_config):
+ name = test.path_in_suite[-1]
+ source_path = test.getSourcePath()
+
+ # Check what kind of test this is.
+ assert name.endswith('.pass.cpp') or name.endswith('.fail.cpp')
+ expected_compile_fail = name.endswith('.fail.cpp')
+
+ # If this is a compile (failure) test, build it and check for failure.
+ if expected_compile_fail:
+ cmd = [self.cxx_under_test, '-c',
+ '-o', '/dev/null', source_path] + self.options
+ out, err, exitCode = self.execute_command(cmd)
+ if exitCode == 1:
+ return lit.Test.PASS, ""
+ else:
+ report = """Command: %s\n""" % ' '.join(["'%s'" % a
+ for a in cmd])
+ report += """Exit Code: %d\n""" % exitCode
+ if out:
+ report += """Standard Output:\n--\n%s--""" % out
+ if err:
+ report += """Standard Error:\n--\n%s--""" % err
+ report += "\n\nExpected compilation to fail!"
+ return Test.FAIL, report
+ else:
+ exec_file = tempfile.NamedTemporaryFile(suffix="exe", delete=False)
+ exec_path = exec_file.name
+ exec_file.close()
+
+ try:
+ cmd = [self.cxx_under_test, '-o', exec_path,
+ source_path] + self.options
+ out, err, exitCode = self.execute_command(cmd)
+ if exitCode != 0:
+ exec_file.close()
+ report = """Command: %s\n""" % ' '.join(["'%s'" % a
+ for a in cmd])
+ report += """Exit Code: %d\n""" % exitCode
+ if out:
+ report += """Standard Output:\n--\n%s--""" % out
+ if err:
+ report += """Standard Error:\n--\n%s--""" % err
+ report += "\n\nCompilation failed unexpectedly!"
+ return lit.Test.FAIL, report
+
+ cmd = [exec_path]
+ out, err, exitCode = self.execute_command(cmd)
+ if exitCode != 0:
+ exec_path.close()
+ report = """Command: %s\n""" % ' '.join(["'%s'" % a
+ for a in cmd])
+ report += """Exit Code: %d\n""" % exitCode
+ if out:
+ report += """Standard Output:\n--\n%s--""" % out
+ if err:
+ report += """Standard Error:\n--\n%s--""" % err
+ report += "\n\nCompiled test failed unexpectedly!"
+ return lit.Test.FAIL, report
+ finally:
+ try:
+ os.remove(exec_path)
+ except:
+ pass
+ return lit.Test.PASS, ""
+
+# name: The name of this test suite.
+config.name = 'libc++'
+
+# suffixes: A list of file extensions to treat as test files.
+config.suffixes = ['.cpp']
+
+# test_source_root: The root path where tests are located.
+config.test_source_root = os.path.dirname(__file__)
+
+# FIXME: Would be nice to Use -stdlib=libc++ option with Clang's that accept it.
+cxx_under_test = lit.params.get('cxx_under_test', None)
+if cxx_under_test is None:
+ lit.fatal('must specify user parameter cxx_under_test '
+ '(e.g., --param=cxx_under_test=clang++)')
+config.test_format = LibcxxTestFormat(cxx_under_test,
+ ['-nostdinc++',
+ '-I/usr/include/c++/v1',
+ '-nodefaultlibs', '-lc++',
+ '-lSystem'])
+
+config.target_triple = None
More information about the cfe-commits
mailing list