1b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbarfrom __future__ import absolute_import 200a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbarimport os 37805cdcab55fe796919c870c1b64c66aa2faa04cNAKAMURA Takumiimport sys 400a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 5b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbarimport lit.Test 6b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbarimport lit.TestRunner 7b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbarimport lit.Util 800a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 97805cdcab55fe796919c870c1b64c66aa2faa04cNAKAMURA TakumikIsWindows = sys.platform in ['win32', 'cygwin'] 101ca8559de5cdcb2b68673d8bf815b7ef2fd93643Daniel Dunbar 1100a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbarclass GoogleTest(object): 1200a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar def __init__(self, test_sub_dir, test_suffix): 13fb4d9816e79af3562e277631878b1a632bbcd8e1NAKAMURA Takumi self.test_sub_dir = os.path.normcase(str(test_sub_dir)).split(';') 1400a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar self.test_suffix = str(test_suffix) 1500a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 161ca8559de5cdcb2b68673d8bf815b7ef2fd93643Daniel Dunbar # On Windows, assume tests will also end in '.exe'. 171ca8559de5cdcb2b68673d8bf815b7ef2fd93643Daniel Dunbar if kIsWindows: 181ca8559de5cdcb2b68673d8bf815b7ef2fd93643Daniel Dunbar self.test_suffix += '.exe' 191ca8559de5cdcb2b68673d8bf815b7ef2fd93643Daniel Dunbar 208d280fb50a1c35a4b598bf722038b7f0d71e90d0Jeffrey Yasskin def getGTestTests(self, path, litConfig, localConfig): 2100a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar """getGTestTests(path) - [name] 228d280fb50a1c35a4b598bf722038b7f0d71e90d0Jeffrey Yasskin 238d280fb50a1c35a4b598bf722038b7f0d71e90d0Jeffrey Yasskin Return the tests available in gtest executable. 248d280fb50a1c35a4b598bf722038b7f0d71e90d0Jeffrey Yasskin 258d280fb50a1c35a4b598bf722038b7f0d71e90d0Jeffrey Yasskin Args: 268d280fb50a1c35a4b598bf722038b7f0d71e90d0Jeffrey Yasskin path: String path to a gtest executable 278d280fb50a1c35a4b598bf722038b7f0d71e90d0Jeffrey Yasskin litConfig: LitConfig instance 288d280fb50a1c35a4b598bf722038b7f0d71e90d0Jeffrey Yasskin localConfig: TestingConfig instance""" 2900a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 3099ea6898e18ec1496907a90efedf5b21a2040ea0Daniel Dunbar try: 31b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar lines = lit.Util.capture([path, '--gtest_list_tests'], 32b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar env=localConfig.environment) 3318fac3c0d22dbdc9b7939042e2e20f443f700761Michael J. Spencer if kIsWindows: 3418fac3c0d22dbdc9b7939042e2e20f443f700761Michael J. Spencer lines = lines.replace('\r', '') 3518fac3c0d22dbdc9b7939042e2e20f443f700761Michael J. Spencer lines = lines.split('\n') 3699ea6898e18ec1496907a90efedf5b21a2040ea0Daniel Dunbar except: 3799ea6898e18ec1496907a90efedf5b21a2040ea0Daniel Dunbar litConfig.error("unable to discover google-tests in %r" % path) 3899ea6898e18ec1496907a90efedf5b21a2040ea0Daniel Dunbar raise StopIteration 3999ea6898e18ec1496907a90efedf5b21a2040ea0Daniel Dunbar 4000a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar nested_tests = [] 4100a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar for ln in lines: 4200a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar if not ln.strip(): 4300a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar continue 4400a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 4500a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar prefix = '' 4600a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar index = 0 4700a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar while ln[index*2:index*2+2] == ' ': 4800a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar index += 1 4900a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar while len(nested_tests) > index: 5000a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar nested_tests.pop() 51c8417d7165e156739cd768713db0113383ede07eMichael J. Spencer 5200a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar ln = ln[index*2:] 5300a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar if ln.endswith('.'): 5400a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar nested_tests.append(ln) 5500a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar else: 5600a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar yield ''.join(nested_tests) + ln 5700a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 58d5ae2c3a75ccc70290fb19e9424418e9f3b5c17bGalina Kistanova # Note: path_in_suite should not include the executable name. 59f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov def getTestsInExecutable(self, testSuite, path_in_suite, execpath, 60f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov litConfig, localConfig): 61f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov if not execpath.endswith(self.test_suffix): 62f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov return 63f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov (dirname, basename) = os.path.split(execpath) 64f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov # Discover the tests in this executable. 65f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov for testname in self.getGTestTests(execpath, litConfig, localConfig): 66d5ae2c3a75ccc70290fb19e9424418e9f3b5c17bGalina Kistanova testPath = path_in_suite + (basename, testname) 67b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar yield lit.Test.Test(testSuite, testPath, localConfig) 68d5ae2c3a75ccc70290fb19e9424418e9f3b5c17bGalina Kistanova 6900a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar def getTestsInDirectory(self, testSuite, path_in_suite, 7000a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar litConfig, localConfig): 7100a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar source_path = testSuite.getSourcePath(path_in_suite) 7200a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar for filename in os.listdir(source_path): 73f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov filepath = os.path.join(source_path, filename) 74f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov if os.path.isdir(filepath): 75f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov # Iterate over executables in a directory. 76280423558dc9004ed686f474b0508ac7a298108aNAKAMURA Takumi if not os.path.normcase(filename) in self.test_sub_dir: 77280423558dc9004ed686f474b0508ac7a298108aNAKAMURA Takumi continue 78d5ae2c3a75ccc70290fb19e9424418e9f3b5c17bGalina Kistanova dirpath_in_suite = path_in_suite + (filename, ) 79f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov for subfilename in os.listdir(filepath): 8000a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar execpath = os.path.join(filepath, subfilename) 81f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov for test in self.getTestsInExecutable( 82d5ae2c3a75ccc70290fb19e9424418e9f3b5c17bGalina Kistanova testSuite, dirpath_in_suite, execpath, 83f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov litConfig, localConfig): 84f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov yield test 85f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov elif ('.' in self.test_sub_dir): 86f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov for test in self.getTestsInExecutable( 87c1a0806ff53bef0abc805a4062cd42b05ef8088bAlexey Samsonov testSuite, path_in_suite, filepath, 88f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov litConfig, localConfig): 89f68cd7543de05dc39e7de6f62ea9380973f38dbeAlexey Samsonov yield test 9000a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 9100a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar def execute(self, test, litConfig): 9200a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar testPath,testName = os.path.split(test.getSourcePath()) 93d1ba06bf131a9d217426529d2e28af1f2eeed47aJeffrey Yasskin while not os.path.exists(testPath): 94d1ba06bf131a9d217426529d2e28af1f2eeed47aJeffrey Yasskin # Handle GTest parametrized and typed tests, whose name includes 95d1ba06bf131a9d217426529d2e28af1f2eeed47aJeffrey Yasskin # some '/'s. 966bccb4c2373532b972ecf84e8428f800e5e9995fJeffrey Yasskin testPath, namePrefix = os.path.split(testPath) 976bccb4c2373532b972ecf84e8428f800e5e9995fJeffrey Yasskin testName = os.path.join(namePrefix, testName) 9800a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 9900a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar cmd = [testPath, '--gtest_filter=' + testName] 100355471741b00fbdb0085c6a24b1fdce0c78e84f3Jeffrey Yasskin if litConfig.useValgrind: 10132989deb9641cf3878686b5634311a7a125f8f02Jeffrey Yasskin cmd = litConfig.valgrindArgs + cmd 102355471741b00fbdb0085c6a24b1fdce0c78e84f3Jeffrey Yasskin 1038f4aab8c2fe095ce1286fc1bd0bdd9157ed00398NAKAMURA Takumi if litConfig.noExecute: 10467578407995766682d237bf184916a30e763e8d4NAKAMURA Takumi return lit.Test.PASS, '' 1058f4aab8c2fe095ce1286fc1bd0bdd9157ed00398NAKAMURA Takumi 106b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar out, err, exitCode = lit.TestRunner.executeCommand( 1078d280fb50a1c35a4b598bf722038b7f0d71e90d0Jeffrey Yasskin cmd, env=test.config.environment) 108c8417d7165e156739cd768713db0113383ede07eMichael J. Spencer 10900a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar if not exitCode: 110b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar return lit.Test.PASS,'' 11100a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 112b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar return lit.Test.FAIL, out + err 11300a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 11400a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar### 11500a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 11600a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbarclass FileBasedTest(object): 11700a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar def getTestsInDirectory(self, testSuite, path_in_suite, 11800a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar litConfig, localConfig): 11900a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar source_path = testSuite.getSourcePath(path_in_suite) 12000a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar for filename in os.listdir(source_path): 121f104f5b17acdc613f76f733cd1c7ea1e4370ab07Daniel Dunbar # Ignore dot files and excluded tests. 122f104f5b17acdc613f76f733cd1c7ea1e4370ab07Daniel Dunbar if (filename.startswith('.') or 123f104f5b17acdc613f76f733cd1c7ea1e4370ab07Daniel Dunbar filename in localConfig.excludes): 124cacaa5bff2d1d57d9e547aa084f67a7bcee44003Daniel Dunbar continue 125cacaa5bff2d1d57d9e547aa084f67a7bcee44003Daniel Dunbar 12600a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar filepath = os.path.join(source_path, filename) 12700a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar if not os.path.isdir(filepath): 12800a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar base,ext = os.path.splitext(filename) 12900a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar if ext in localConfig.suffixes: 130b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar yield lit.Test.Test(testSuite, path_in_suite + (filename,), 131b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar localConfig) 13200a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 13300a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbarclass ShTest(FileBasedTest): 134ee504b8cd78f5d54e4ae6ed2cfff88a9e8226771Daniel Dunbar def __init__(self, execute_external = False): 13500a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar self.execute_external = execute_external 13600a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 13700a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar def execute(self, test, litConfig): 138b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar return lit.TestRunner.executeShTest(test, litConfig, 139b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar self.execute_external) 14000a42449ecd9aa243d844ffd1e473fd88fe1a2b1Daniel Dunbar 1417c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar### 1427c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 1437c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbarimport re 1447c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbarimport tempfile 1457c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 1462cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbarclass OneCommandPerFileTest: 1477c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar # FIXME: Refactor into generic test for running some command on a directory 1487c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar # of inputs. 1497c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 1502cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar def __init__(self, command, dir, recursive=False, 1512cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar pattern=".*", useTempInput=False): 1522cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar if isinstance(command, str): 1532cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar self.command = [command] 1542cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar else: 1552cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar self.command = list(command) 1562381379d1d2a3a4ac447e82906bc989369865ad4Daniel Dunbar if dir is not None: 1572381379d1d2a3a4ac447e82906bc989369865ad4Daniel Dunbar dir = str(dir) 1582381379d1d2a3a4ac447e82906bc989369865ad4Daniel Dunbar self.dir = dir 1597c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar self.recursive = bool(recursive) 1607c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar self.pattern = re.compile(pattern) 1612cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar self.useTempInput = useTempInput 1627c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 1637c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar def getTestsInDirectory(self, testSuite, path_in_suite, 1647c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar litConfig, localConfig): 1652381379d1d2a3a4ac447e82906bc989369865ad4Daniel Dunbar dir = self.dir 1662381379d1d2a3a4ac447e82906bc989369865ad4Daniel Dunbar if dir is None: 1672381379d1d2a3a4ac447e82906bc989369865ad4Daniel Dunbar dir = testSuite.getSourcePath(path_in_suite) 1682381379d1d2a3a4ac447e82906bc989369865ad4Daniel Dunbar 1692381379d1d2a3a4ac447e82906bc989369865ad4Daniel Dunbar for dirname,subdirs,filenames in os.walk(dir): 1707c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar if not self.recursive: 1717c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar subdirs[:] = [] 1727c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 173a7193e40e2fa00a1fbb296416d711cc4e3f2a3c0Daniel Dunbar subdirs[:] = [d for d in subdirs 174a7193e40e2fa00a1fbb296416d711cc4e3f2a3c0Daniel Dunbar if (d != '.svn' and 175a7193e40e2fa00a1fbb296416d711cc4e3f2a3c0Daniel Dunbar d not in localConfig.excludes)] 176048bac35df3896d0258312e861e7e876e0cdaff9Daniel Dunbar 1777c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar for filename in filenames: 178cacaa5bff2d1d57d9e547aa084f67a7bcee44003Daniel Dunbar if (filename.startswith('.') or 179cacaa5bff2d1d57d9e547aa084f67a7bcee44003Daniel Dunbar not self.pattern.match(filename) or 1807c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar filename in localConfig.excludes): 1817c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar continue 1827c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 1837c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar path = os.path.join(dirname,filename) 1842381379d1d2a3a4ac447e82906bc989369865ad4Daniel Dunbar suffix = path[len(dir):] 1857c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar if suffix.startswith(os.sep): 1867c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar suffix = suffix[1:] 187b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar test = lit.Test.Test( 188b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar testSuite, path_in_suite + tuple(suffix.split(os.sep)), 189b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar localConfig) 1907c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar # FIXME: Hack? 1917c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar test.source_path = path 1927c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar yield test 1937c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 1942cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar def createTempInput(self, tmp, test): 1952cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar abstract 1962cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar 1977c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar def execute(self, test, litConfig): 198048bac35df3896d0258312e861e7e876e0cdaff9Daniel Dunbar if test.config.unsupported: 199b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar return (lit.Test.UNSUPPORTED, 'Test is unsupported') 200048bac35df3896d0258312e861e7e876e0cdaff9Daniel Dunbar 2012cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar cmd = list(self.command) 2022cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar 2032cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar # If using temp input, create a temporary file and hand it to the 2042cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar # subclass. 2052cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar if self.useTempInput: 2062cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar tmp = tempfile.NamedTemporaryFile(suffix='.cpp') 2072cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar self.createTempInput(tmp, test) 2082cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar tmp.flush() 2092cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar cmd.append(tmp.name) 210473a09d80a8d3ecb37ac0d01289c79f7cc4fc645Daniel Dunbar elif hasattr(test, 'source_path'): 2112cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar cmd.append(test.source_path) 212473a09d80a8d3ecb37ac0d01289c79f7cc4fc645Daniel Dunbar else: 213473a09d80a8d3ecb37ac0d01289c79f7cc4fc645Daniel Dunbar cmd.append(test.getSourcePath()) 2147c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 215b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar out, err, exitCode = lit.TestRunner.executeCommand(cmd) 2167c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 2177c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar diags = out + err 2187c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar if not exitCode and not diags.strip(): 219b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar return lit.Test.PASS,'' 2207c748661ce1e8898479106bc808cce9b55110f5cDaniel Dunbar 2212cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar # Try to include some useful information. 2222cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar report = """Command: %s\n""" % ' '.join(["'%s'" % a 2232cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar for a in cmd]) 2242cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar if self.useTempInput: 2252cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar report += """Temporary File: %s\n""" % tmp.name 2262cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar report += "--\n%s--\n""" % open(tmp.name).read() 2272cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar report += """Output:\n--\n%s--""" % diags 2282cb097d5cddfc9ac7d9f4973f9f8a3d2c9feea72Daniel Dunbar 229b35a1733607b07f36c3617932b67debb375a15c5Daniel Dunbar return lit.Test.FAIL, report 230