diff options
author | zhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925> | 2009-04-09 02:57:38 (GMT) |
---|---|---|
committer | zhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925> | 2009-04-09 02:57:38 (GMT) |
commit | 7fa242a44b47ce74d7246440b14571f7a5dd1b17 (patch) | |
tree | 968a9d50b23d7ef33cf37aaed77d23f0407fde7d /scripts | |
parent | c12f63214e9b7761d27e68353e4aaf1761c9cf88 (diff) | |
download | googletest-7fa242a44b47ce74d7246440b14571f7a5dd1b17.zip googletest-7fa242a44b47ce74d7246440b14571f7a5dd1b17.tar.gz googletest-7fa242a44b47ce74d7246440b14571f7a5dd1b17.tar.bz2 |
Makes the Python tests more stable (by Vlad Losev); fixes a memory leak in GetThreadCount() on Mac (by Vlad Losev); improves fuse_gtest_files.py to support fusing Google Mock files (by Zhanyong Wan).
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/fuse_gtest_files.py | 107 |
1 files changed, 55 insertions, 52 deletions
diff --git a/scripts/fuse_gtest_files.py b/scripts/fuse_gtest_files.py index edffb1d..148444c 100755 --- a/scripts/fuse_gtest_files.py +++ b/scripts/fuse_gtest_files.py @@ -29,7 +29,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -"""fuse_gtest_files.py v0.1.0 +"""fuse_gtest_files.py v0.2.0 Fuses Google Test source code into a .h file and a .cc file. SYNOPSIS @@ -42,8 +42,8 @@ SYNOPSIS two files contain everything you need to use Google Test. Hence you can "install" Google Test by copying them to wherever you want. - GTEST_ROOT_DIR can be omitted and defaults to the parent directory - of the directory holding the fuse_gtest_files.py script. + GTEST_ROOT_DIR can be omitted and defaults to the parent + directory of the directory holding this script. EXAMPLES ./fuse_gtest_files.py fused_gtest @@ -63,13 +63,17 @@ import re import sets import sys +# We assume that this file is in the scripts/ directory in the Google +# Test root directory. +DEFAULT_GTEST_ROOT_DIR = os.path.join(os.path.dirname(__file__), '..') + # Regex for matching '#include <gtest/...>'. INCLUDE_GTEST_FILE_REGEX = re.compile(r'^\s*#\s*include\s*<(gtest/.+)>') # Regex for matching '#include "src/..."'. INCLUDE_SRC_FILE_REGEX = re.compile(r'^\s*#\s*include\s*"(src/.+)"') -# Where to find the source files. +# Where to find the source seed files. GTEST_H_SEED = 'include/gtest/gtest.h' GTEST_SPI_H_SEED = 'include/gtest/gtest-spi.h' GTEST_ALL_CC_SEED = 'src/gtest-all.cc' @@ -79,18 +83,18 @@ GTEST_H_OUTPUT = 'gtest/gtest.h' GTEST_ALL_CC_OUTPUT = 'gtest/gtest-all.cc' -def GetGTestRootDir(): - """Returns the absolute path to the Google Test root directory. +def VerifyFileExists(directory, relative_path): + """Verifies that the given file exists; aborts on failure. - We assume that this script is in a sub-directory of the Google Test root. + relative_path is the file path relative to the given directory. """ - my_path = sys.argv[0] # Path to this script. - my_dir = os.path.dirname(my_path) - if not my_dir: - my_dir = '.' - - return os.path.abspath(os.path.join(my_dir, '..')) + if not os.path.isfile(os.path.join(directory, relative_path)): + print 'ERROR: Cannot find %s in directory %s.' % (relative_path, + directory) + print ('Please either specify a valid project root directory ' + 'or omit it on the command line.') + sys.exit(1) def ValidateGTestRootDir(gtest_root): @@ -99,21 +103,34 @@ def ValidateGTestRootDir(gtest_root): The function aborts the program on failure. """ - def VerifyFileExists(relative_path): - """Verifies that the given file exists; aborts on failure. + VerifyFileExists(gtest_root, GTEST_H_SEED) + VerifyFileExists(gtest_root, GTEST_ALL_CC_SEED) + + +def VerifyOutputFile(output_dir, relative_path): + """Verifies that the given output file path is valid. - relative_path is the file path relative to the gtest root. - """ + relative_path is relative to the output_dir directory. + """ - if not os.path.isfile(os.path.join(gtest_root, relative_path)): - print 'ERROR: Cannot find %s in directory %s.' % (relative_path, - gtest_root) - print ('Please either specify a valid Google Test root directory ' - 'or omit it on the command line.') + # Makes sure the output file either doesn't exist or can be overwritten. + output_file = os.path.join(output_dir, relative_path) + if os.path.exists(output_file): + # TODO(wan@google.com): The following user-interaction doesn't + # work with automated processes. We should provide a way for the + # Makefile to force overwriting the files. + print ('%s already exists in directory %s - overwrite it? (y/N) ' % + (relative_path, output_dir)) + answer = sys.stdin.readline().strip() + if answer not in ['y', 'Y']: + print 'ABORTED.' sys.exit(1) - VerifyFileExists(GTEST_H_SEED) - VerifyFileExists(GTEST_ALL_CC_SEED) + # Makes sure the directory holding the output file exists; creates + # it and all its ancestors if necessary. + parent_directory = os.path.dirname(output_file) + if not os.path.isdir(parent_directory): + os.makedirs(parent_directory) def ValidateOutputDir(output_dir): @@ -122,30 +139,8 @@ def ValidateOutputDir(output_dir): The function aborts the program on failure. """ - def VerifyOutputFile(relative_path): - """Verifies that the given output file path is valid. - - relative_path is relative to the output_dir directory. - """ - - # Makes sure the output file either doesn't exist or can be overwritten. - output_file = os.path.join(output_dir, relative_path) - if os.path.exists(output_file): - print ('%s already exists in directory %s - overwrite it? (y/N) ' % - (relative_path, output_dir)) - answer = sys.stdin.readline().strip() - if answer not in ['y', 'Y']: - print 'ABORTED.' - sys.exit(1) - - # Makes sure the directory holding the output file exists; creates - # it and all its ancestors if necessary. - parent_directory = os.path.dirname(output_file) - if not os.path.isdir(parent_directory): - os.makedirs(parent_directory) - - VerifyOutputFile(GTEST_H_OUTPUT) - VerifyOutputFile(GTEST_ALL_CC_OUTPUT) + VerifyOutputFile(output_dir, GTEST_H_OUTPUT) + VerifyOutputFile(output_dir, GTEST_ALL_CC_OUTPUT) def FuseGTestH(gtest_root, output_dir): @@ -177,10 +172,9 @@ def FuseGTestH(gtest_root, output_dir): output_file.close() -def FuseGTestAllCc(gtest_root, output_dir): - """Scans folder gtest_root to generate gtest/gtest-all.cc in output_dir.""" +def FuseGTestAllCcToFile(gtest_root, output_file): + """Scans folder gtest_root to generate gtest/gtest-all.cc in output_file.""" - output_file = file(os.path.join(output_dir, GTEST_ALL_CC_OUTPUT), 'w') processed_files = sets.Set() def ProcessFile(gtest_source_file): @@ -219,10 +213,19 @@ def FuseGTestAllCc(gtest_root, output_dir): output_file.write(line) ProcessFile(GTEST_ALL_CC_SEED) + + +def FuseGTestAllCc(gtest_root, output_dir): + """Scans folder gtest_root to generate gtest/gtest-all.cc in output_dir.""" + + output_file = file(os.path.join(output_dir, GTEST_ALL_CC_OUTPUT), 'w') + FuseGTestAllCcToFile(gtest_root, output_file) output_file.close() def FuseGTest(gtest_root, output_dir): + """Fuses gtest.h and gtest-all.cc.""" + ValidateGTestRootDir(gtest_root) ValidateOutputDir(output_dir) @@ -234,7 +237,7 @@ def main(): argc = len(sys.argv) if argc == 2: # fuse_gtest_files.py OUTPUT_DIR - FuseGTest(GetGTestRootDir(), sys.argv[1]) + FuseGTest(DEFAULT_GTEST_ROOT_DIR, sys.argv[1]) elif argc == 3: # fuse_gtest_files.py GTEST_ROOT_DIR OUTPUT_DIR FuseGTest(sys.argv[1], sys.argv[2]) |