On Tue, Feb 5, 2013 at 1:03 PM, Daniel Dunbar <[email protected]> wrote: > Author: ddunbar > Date: Tue Feb 5 15:03:25 2013 > New Revision: 174440 > > URL: http://llvm.org/viewvc/llvm-project?rev=174440&view=rev > Log: > [tests] Add support for REQUIRES and XFAIL lines in libc++ tests. > > - We parse up to the first non-empty non-comment (C++ style) line, otherwise > the format and semantics match what is used for LLVM/Clang tests.
Any particular reason for the difference? > - For now, the only interesting thing to test against is a user supplied > target_triple test parameter. > > Modified: > libcxx/trunk/test/lit.cfg > > Modified: libcxx/trunk/test/lit.cfg > URL: > http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/lit.cfg?rev=174440&r1=174439&r2=174440&view=diff > ============================================================================== > --- libcxx/trunk/test/lit.cfg (original) > +++ libcxx/trunk/test/lit.cfg Tue Feb 5 15:03:25 2013 > @@ -11,6 +11,26 @@ import subprocess > import errno > import time > > +# FIXME: For now, this is cribbed from lit.TestRunner, to avoid introducing a > +# dependency there. What we more ideally would like to do is lift the "xfail" > +# and "requires" handling to be a core lit framework feature. > +def isExpectedFail(test, xfails): > + # Check if any of the xfails match an available feature or the target. > + for item in xfails: > + # If this is the wildcard, it always fails. > + if item == '*': > + return True > + > + # If this is an exact match for one of the features, it fails. > + if item in test.config.available_features: > + return True > + > + # If this is a part of the target triple, it fails. > + if item in test.suite.config.target_triple: > + return True > + > + return False > + > class LibcxxTestFormat(lit.formats.FileBasedTest): > """ > Custom test format handler for use with the test format use by libc++. > @@ -55,6 +75,52 @@ class LibcxxTestFormat(lit.formats.FileB > time.sleep(0.1) > > def _execute(self, test, lit_config): > + # Extract test metadata from the test file. > + xfails = [] > + requires = [] > + with open(test.getSourcePath()) as f: > + for ln in f: > + if 'XFAIL:' in ln: > + items = ln[ln.index('XFAIL:') + 6:].split(',') > + xfails.extend([s.strip() for s in items]) > + elif 'REQUIRES:' in ln: > + items = ln[ln.index('REQUIRES:') + 9:].split(',') > + requires.extend([s.strip() for s in items]) > + elif not ln.startswith("//") and ln.strip(): > + # Stop at the first non-empty line that is not a C++ > + # comment. > + break > + > + # Check that we have the required features. > + # > + # FIXME: For now, this is cribbed from lit.TestRunner, to avoid > + # introducing a dependency there. What we more ideally would like to > do > + # is lift the "xfail" and "requires" handling to be a core lit > framework > + # feature. > + missing_required_features = [f for f in requires > + if f not in > test.config.available_features] > + if missing_required_features: > + return (lit.Test.UNSUPPORTED, > + "Test requires the following features: %s" % ( > + ', '.join(missing_required_features),)) > + > + # Determine if this test is an expected failure. > + isXFail = isExpectedFail(test, xfails) > + > + # Evaluate the test. > + result, report = self._evaluate_test(test, lit_config) > + > + # Convert the test result based on whether this is an expected > failure. > + if isXFail: > + if result != lit.Test.FAIL: > + report += "\n\nTest was expected to FAIL, but did not.\n" > + result = lit.Test.XPASS > + else: > + result = lit.Test.XFAIL > + > + return result, report > + > + def _evaluate_test(self, test, lit_config): > name = test.path_in_suite[-1] > source_path = test.getSourcePath() > source_dir = os.path.dirname(source_path) > @@ -210,4 +276,5 @@ config.test_format = LibcxxTestFormat( > ld_flags = ['-nodefaultlibs'] + library_paths + ['-lc++'] + libraries, > exec_env = exec_env) > > -config.target_triple = None > +config.target_triple = lit.params.get( > + 'target_triple', 'unknown-unknown-unknown') > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
