7 class GoogleTest(object):
8 def __init__(self
, test_sub_dir
, test_suffix
):
9 self
.test_sub_dir
= str(test_sub_dir
)
10 self
.test_suffix
= str(test_suffix
)
12 def getGTestTests(self
, path
):
13 """getGTestTests(path) - [name]
15 Return the tests available in gtest executable."""
17 lines
= Util
.capture([path
, '--gtest_list_tests']).split('\n')
25 while ln
[index
*2:index
*2+2] == ' ':
27 while len(nested_tests
) > index
:
32 nested_tests
.append(ln
)
34 yield ''.join(nested_tests
) + ln
36 def getTestsInDirectory(self
, testSuite
, path_in_suite
,
37 litConfig
, localConfig
):
38 source_path
= testSuite
.getSourcePath(path_in_suite
)
39 for filename
in os
.listdir(source_path
):
40 # Check for the one subdirectory (build directory) tests will be in.
41 if filename
!= self
.test_sub_dir
:
44 filepath
= os
.path
.join(source_path
, filename
)
45 for subfilename
in os
.listdir(filepath
):
46 if subfilename
.endswith(self
.test_suffix
):
47 execpath
= os
.path
.join(filepath
, subfilename
)
49 # Discover the tests in this executable.
50 for name
in self
.getGTestTests(execpath
):
51 testPath
= path_in_suite
+ (filename
, subfilename
, name
)
52 yield Test
.Test(testSuite
, testPath
, localConfig
)
54 def execute(self
, test
, litConfig
):
55 testPath
,testName
= os
.path
.split(test
.getSourcePath())
57 cmd
= [testPath
, '--gtest_filter=' + testName
]
58 out
, err
, exitCode
= TestRunner
.executeCommand(cmd
)
63 return Test
.FAIL
, out
+ err
67 class FileBasedTest(object):
68 def getTestsInDirectory(self
, testSuite
, path_in_suite
,
69 litConfig
, localConfig
):
70 source_path
= testSuite
.getSourcePath(path_in_suite
)
71 for filename
in os
.listdir(source_path
):
72 filepath
= os
.path
.join(source_path
, filename
)
73 if not os
.path
.isdir(filepath
):
74 base
,ext
= os
.path
.splitext(filename
)
75 if ext
in localConfig
.suffixes
:
76 yield Test
.Test(testSuite
, path_in_suite
+ (filename
,),
79 class ShTest(FileBasedTest
):
80 def __init__(self
, execute_external
= False, require_and_and
= False):
81 self
.execute_external
= execute_external
82 self
.require_and_and
= require_and_and
84 def execute(self
, test
, litConfig
):
85 return TestRunner
.executeShTest(test
, litConfig
,
86 self
.execute_external
,
89 class TclTest(FileBasedTest
):
90 def execute(self
, test
, litConfig
):
91 return TestRunner
.executeTclTest(test
, litConfig
)
98 class SyntaxCheckTest
:
99 # FIXME: Refactor into generic test for running some command on a directory
102 def __init__(self
, compiler
, dir, recursive
, pattern
, extra_cxx_args
=[]):
103 self
.compiler
= str(compiler
)
105 self
.recursive
= bool(recursive
)
106 self
.pattern
= re
.compile(pattern
)
107 self
.extra_cxx_args
= list(extra_cxx_args
)
109 def getTestsInDirectory(self
, testSuite
, path_in_suite
,
110 litConfig
, localConfig
):
111 for dirname
,subdirs
,filenames
in os
.walk(self
.dir):
112 if not self
.recursive
:
115 for filename
in filenames
:
116 if (not self
.pattern
.match(filename
) or
117 filename
in localConfig
.excludes
):
120 path
= os
.path
.join(dirname
,filename
)
121 suffix
= path
[len(self
.dir):]
122 if suffix
.startswith(os
.sep
):
124 test
= Test
.Test(testSuite
,
125 path_in_suite
+ tuple(suffix
.split(os
.sep
)),
128 test
.source_path
= path
131 def execute(self
, test
, litConfig
):
132 tmp
= tempfile
.NamedTemporaryFile(suffix
='.cpp')
133 print >>tmp
, '#include "%s"' % test
.source_path
136 cmd
= [self
.compiler
, '-x', 'c++', '-fsyntax-only', tmp
.name
]
137 cmd
.extend(self
.extra_cxx_args
)
138 out
, err
, exitCode
= TestRunner
.executeCommand(cmd
)
141 if not exitCode
and not diags
.strip():
144 return Test
.FAIL
, diags