32 """fuse_gmock_files.py v0.1.0 33 Fuses Google Mock and Google Test source code into two .h files and a .cc file. 36 fuse_gmock_files.py [GMOCK_ROOT_DIR] OUTPUT_DIR 38 Scans GMOCK_ROOT_DIR for Google Mock and Google Test source 39 code, assuming Google Test is in the GMOCK_ROOT_DIR/gtest 40 sub-directory, and generates three files: 41 OUTPUT_DIR/gtest/gtest.h, OUTPUT_DIR/gmock/gmock.h, and 42 OUTPUT_DIR/gmock-gtest-all.cc. Then you can build your tests 43 by adding OUTPUT_DIR to the include search path and linking 44 with OUTPUT_DIR/gmock-gtest-all.cc. These three files contain 45 everything you need to use Google Mock. Hence you can 46 "install" Google Mock by copying them to wherever you want. 48 GMOCK_ROOT_DIR can be omitted and defaults to the parent 49 directory of the directory holding this script. 52 ./fuse_gmock_files.py fused_gmock 53 ./fuse_gmock_files.py path/to/unpacked/gmock fused_gmock 55 This tool is experimental. In particular, it assumes that there is no 56 conditional inclusion of Google Mock or Google Test headers. Please 57 report any problems to googlemock@googlegroups.com. You can read 58 http://code.google.com/p/googlemock/wiki/CookBook for more 62 __author__ =
'wan@google.com (Zhanyong Wan)' 71 DEFAULT_GMOCK_ROOT_DIR = os.path.join(os.path.dirname(__file__),
'..')
74 sys.path.append(os.path.join(DEFAULT_GMOCK_ROOT_DIR,
'gtest/scripts'))
75 import fuse_gtest_files
76 gtest = fuse_gtest_files
79 INCLUDE_GMOCK_FILE_REGEX = re.compile(
r'^\s*#\s*include\s*"(gmock/.+)"')
82 GMOCK_H_SEED =
'include/gmock/gmock.h' 83 GMOCK_ALL_CC_SEED =
'src/gmock-all.cc' 86 GTEST_H_OUTPUT =
'gtest/gtest.h' 87 GMOCK_H_OUTPUT =
'gmock/gmock.h' 88 GMOCK_GTEST_ALL_CC_OUTPUT =
'gmock-gtest-all.cc' 92 """Returns the root directory of Google Test.""" 94 return os.path.join(gmock_root,
'gtest')
98 """Makes sure gmock_root points to a valid gmock root directory. 100 The function aborts the program on failure. 104 gtest.VerifyFileExists(gmock_root, GMOCK_H_SEED)
105 gtest.VerifyFileExists(gmock_root, GMOCK_ALL_CC_SEED)
109 """Makes sure output_dir points to a valid output directory. 111 The function aborts the program on failure. 114 gtest.VerifyOutputFile(output_dir, gtest.GTEST_H_OUTPUT)
115 gtest.VerifyOutputFile(output_dir, GMOCK_H_OUTPUT)
116 gtest.VerifyOutputFile(output_dir, GMOCK_GTEST_ALL_CC_OUTPUT)
120 """Scans folder gmock_root to generate gmock/gmock.h in output_dir.""" 122 output_file = file(os.path.join(output_dir, GMOCK_H_OUTPUT),
'w')
123 processed_files = sets.Set()
125 def ProcessFile(gmock_header_path):
126 """Processes the given gmock header file.""" 129 if gmock_header_path
in processed_files:
132 processed_files.add(gmock_header_path)
135 for line
in file(os.path.join(gmock_root, gmock_header_path),
'r'): 136 m = INCLUDE_GMOCK_FILE_REGEX.match(line) 139 ProcessFile(
'include/' + m.group(1))
141 m = gtest.INCLUDE_GTEST_FILE_REGEX.match(line)
148 if not gtest.GTEST_H_SEED
in processed_files:
149 processed_files.add(gtest.GTEST_H_SEED)
150 output_file.write(
'#include "%s"\n' % (gtest.GTEST_H_OUTPUT,))
153 output_file.write(line)
155 ProcessFile(GMOCK_H_SEED)
160 """Scans folder gmock_root to fuse gmock-all.cc into output_file.""" 162 processed_files = sets.Set()
164 def ProcessFile(gmock_source_file):
165 """Processes the given gmock source file.""" 168 if gmock_source_file
in processed_files:
171 processed_files.add(gmock_source_file)
174 for line
in file(os.path.join(gmock_root, gmock_source_file),
'r'): 175 m = INCLUDE_GMOCK_FILE_REGEX.match(line) 182 if not GMOCK_H_SEED
in processed_files:
183 processed_files.add(GMOCK_H_SEED)
184 output_file.write(
'#include "%s"\n' % (GMOCK_H_OUTPUT,))
186 m = gtest.INCLUDE_GTEST_FILE_REGEX.match(line)
193 m = gtest.INCLUDE_SRC_FILE_REGEX.match(line)
196 ProcessFile(m.group(1))
199 output_file.write(line)
201 ProcessFile(GMOCK_ALL_CC_SEED)
205 """Scans folder gmock_root to generate gmock-gtest-all.cc in output_dir.""" 207 output_file = file(os.path.join(output_dir, GMOCK_GTEST_ALL_CC_OUTPUT),
'w')
216 """Fuses gtest.h, gmock.h, and gmock-gtest-all.h.""" 230 FuseGMock(DEFAULT_GMOCK_ROOT_DIR, sys.argv[1])
239 if __name__ ==
'__main__':
def ValidateGMockRootDir(gmock_root)
def ValidateOutputDir(output_dir)
def FuseGMockGTestAllCc(gmock_root, output_dir)
FMT_API void print(std::FILE *f, CStringRef format_str, ArgList args)
def GetGTestRootDir(gmock_root)
def FuseGMockAllCcToFile(gmock_root, output_file)
def FuseGMockH(gmock_root, output_dir)
def FuseGMock(gmock_root, output_dir)