Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
72512aa8
Commit
72512aa8
authored
Oct 08, 2020
by
Abseil Team
Committed by
Derek Mauro
Oct 14, 2020
Browse files
Googletest export
Make the code Python3 compliant. PiperOrigin-RevId: 336144198
parent
4abb012c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
74 additions
and
55 deletions
+74
-55
googlemock/scripts/fuse_gmock_files.py
googlemock/scripts/fuse_gmock_files.py
+74
-55
No files found.
googlemock/scripts/fuse_gmock_files.py
View file @
72512aa8
...
@@ -28,8 +28,8 @@
...
@@ -28,8 +28,8 @@
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""fuse_gmock_files.py v0.1.0.
"""fuse_gmock_files.py v0.1.0
Fuses Google Mock and Google Test source code into two .h files and a .cc file.
Fuses Google Mock and Google Test source code into two .h files and a .cc file.
SYNOPSIS
SYNOPSIS
...
@@ -55,27 +55,31 @@ EXAMPLES
...
@@ -55,27 +55,31 @@ EXAMPLES
This tool is experimental. In particular, it assumes that there is no
This tool is experimental. In particular, it assumes that there is no
conditional inclusion of Google Mock or Google Test headers. Please
conditional inclusion of Google Mock or Google Test headers. Please
report any problems to googlemock@googlegroups.com. You can read
report any problems to googlemock@googlegroups.com. You can read
https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md for more
https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md
for more
information.
information.
"""
"""
__
a
ut
hor__
=
'wan@google.com (Zhanyong Wan)'
from
__
f
ut
ure__
import
print_function
import
os
import
os
import
re
import
re
import
sets
import
sys
import
sys
import
fuse_gtest_files
__author__
=
'wan@google.com (Zhanyong Wan)'
# We assume that this file is in the scripts/ directory in the Google
# We assume that this file is in the scripts/ directory in the Google
# Mock root directory.
# Mock root directory.
DEFAULT_GMOCK_ROOT_DIR
=
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'..'
)
DEFAULT_GMOCK_ROOT_DIR
=
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'..'
)
# We need to call into googletest/scripts/fuse_gtest_files.py.
# We need to call into googletest/scripts/fuse_gtest_files.py.
sys
.
path
.
append
(
os
.
path
.
join
(
DEFAULT_GMOCK_ROOT_DIR
,
'../googletest/scripts'
))
sys
.
path
.
append
(
os
.
path
.
join
(
DEFAULT_GMOCK_ROOT_DIR
,
'../googletest/scripts'
))
import
fuse_gtest_files
gtest
=
fuse_gtest_files
gtest
=
fuse_gtest_files
# Regex for matching '#include "gmock/..."'.
# Regex for matching
# '#include "gmock/..."'.
INCLUDE_GMOCK_FILE_REGEX
=
re
.
compile
(
r
'^\s*#\s*include\s*"(gmock/.+)"'
)
INCLUDE_GMOCK_FILE_REGEX
=
re
.
compile
(
r
'^\s*#\s*include\s*"(gmock/.+)"'
)
# Where to find the source seed files.
# Where to find the source seed files.
...
@@ -98,6 +102,9 @@ def ValidateGMockRootDir(gmock_root):
...
@@ -98,6 +102,9 @@ def ValidateGMockRootDir(gmock_root):
"""Makes sure gmock_root points to a valid gmock root directory.
"""Makes sure gmock_root points to a valid gmock root directory.
The function aborts the program on failure.
The function aborts the program on failure.
Args:
gmock_root: A string with the mock root directory.
"""
"""
gtest
.
ValidateGTestRootDir
(
GetGTestRootDir
(
gmock_root
))
gtest
.
ValidateGTestRootDir
(
GetGTestRootDir
(
gmock_root
))
...
@@ -109,6 +116,9 @@ def ValidateOutputDir(output_dir):
...
@@ -109,6 +116,9 @@ def ValidateOutputDir(output_dir):
"""Makes sure output_dir points to a valid output directory.
"""Makes sure output_dir points to a valid output directory.
The function aborts the program on failure.
The function aborts the program on failure.
Args:
output_dir: A string representing the output directory.
"""
"""
gtest
.
VerifyOutputFile
(
output_dir
,
gtest
.
GTEST_H_OUTPUT
)
gtest
.
VerifyOutputFile
(
output_dir
,
gtest
.
GTEST_H_OUTPUT
)
...
@@ -119,8 +129,8 @@ def ValidateOutputDir(output_dir):
...
@@ -119,8 +129,8 @@ def ValidateOutputDir(output_dir):
def
FuseGMockH
(
gmock_root
,
output_dir
):
def
FuseGMockH
(
gmock_root
,
output_dir
):
"""Scans folder gmock_root to generate gmock/gmock.h in output_dir."""
"""Scans folder gmock_root to generate gmock/gmock.h in output_dir."""
output_file
=
file
(
os
.
path
.
join
(
output_dir
,
GMOCK_H_OUTPUT
),
'w'
)
output_file
=
open
(
os
.
path
.
join
(
output_dir
,
GMOCK_H_OUTPUT
),
'w'
)
processed_files
=
sets
.
S
et
()
# Holds all gmock headers we've processed.
processed_files
=
frozens
et
()
# Holds all gmock headers we've processed.
def
ProcessFile
(
gmock_header_path
):
def
ProcessFile
(
gmock_header_path
):
"""Processes the given gmock header file."""
"""Processes the given gmock header file."""
...
@@ -132,25 +142,29 @@ def FuseGMockH(gmock_root, output_dir):
...
@@ -132,25 +142,29 @@ def FuseGMockH(gmock_root, output_dir):
processed_files
.
add
(
gmock_header_path
)
processed_files
.
add
(
gmock_header_path
)
# Reads each line in the given gmock header.
# Reads each line in the given gmock header.
for
line
in
file
(
os
.
path
.
join
(
gmock_root
,
gmock_header_path
),
'r'
):
m
=
INCLUDE_GMOCK_FILE_REGEX
.
match
(
line
)
with
open
(
os
.
path
.
join
(
gmock_root
,
gmock_header_path
),
'r'
)
as
fh
:
if
m
:
for
line
in
fh
:
# It's '#include "gmock/..."' - let's process it recursively.
m
=
INCLUDE_GMOCK_FILE_REGEX
.
match
(
line
)
ProcessFile
(
'include/'
+
m
.
group
(
1
))
else
:
m
=
gtest
.
INCLUDE_GTEST_FILE_REGEX
.
match
(
line
)
if
m
:
if
m
:
# It's '#include "gtest/foo.h"'. We translate it to
# '#include "gmock/..."'
# "gtest/gtest.h", regardless of what foo is, since all
# - let's process it recursively.
# gtest headers are fused into gtest/gtest.h.
ProcessFile
(
'include/'
+
m
.
group
(
1
))
# There is no need to #include gtest.h twice.
if
not
gtest
.
GTEST_H_SEED
in
processed_files
:
processed_files
.
add
(
gtest
.
GTEST_H_SEED
)
output_file
.
write
(
'#include "%s"
\n
'
%
(
gtest
.
GTEST_H_OUTPUT
,))
else
:
else
:
# Otherwise we copy the line unchanged to the output file.
m
=
gtest
.
INCLUDE_GTEST_FILE_REGEX
.
match
(
line
)
output_file
.
write
(
line
)
if
m
:
# '#include "third_party/googletest/googletest/
# include/gtest/foo.h"'.
# We translate it to "gtest/gtest.h", regardless of what foo is,
# since all gtest headers are fused into gtest/gtest.h.
# There is no need to #include gtest.h twice.
if
gtest
.
GTEST_H_SEED
not
in
processed_files
:
processed_files
.
add
(
gtest
.
GTEST_H_SEED
)
output_file
.
write
(
'#include "%s"
\n
'
%
(
gtest
.
GTEST_H_OUTPUT
,))
else
:
# Otherwise we copy the line unchanged to the output file.
output_file
.
write
(
line
)
ProcessFile
(
GMOCK_H_SEED
)
ProcessFile
(
GMOCK_H_SEED
)
output_file
.
close
()
output_file
.
close
()
...
@@ -159,7 +173,7 @@ def FuseGMockH(gmock_root, output_dir):
...
@@ -159,7 +173,7 @@ def FuseGMockH(gmock_root, output_dir):
def
FuseGMockAllCcToFile
(
gmock_root
,
output_file
):
def
FuseGMockAllCcToFile
(
gmock_root
,
output_file
):
"""Scans folder gmock_root to fuse gmock-all.cc into output_file."""
"""Scans folder gmock_root to fuse gmock-all.cc into output_file."""
processed_files
=
sets
.
S
et
()
processed_files
=
frozens
et
()
def
ProcessFile
(
gmock_source_file
):
def
ProcessFile
(
gmock_source_file
):
"""Processes the given gmock source file."""
"""Processes the given gmock source file."""
...
@@ -171,32 +185,37 @@ def FuseGMockAllCcToFile(gmock_root, output_file):
...
@@ -171,32 +185,37 @@ def FuseGMockAllCcToFile(gmock_root, output_file):
processed_files
.
add
(
gmock_source_file
)
processed_files
.
add
(
gmock_source_file
)
# Reads each line in the given gmock source file.
# Reads each line in the given gmock source file.
for
line
in
file
(
os
.
path
.
join
(
gmock_root
,
gmock_source_file
),
'r'
):
m
=
INCLUDE_GMOCK_FILE_REGEX
.
match
(
line
)
with
open
(
os
.
path
.
join
(
gmock_root
,
gmock_source_file
),
'r'
)
as
fh
:
if
m
:
for
line
in
fh
:
# It's '#include "gmock/foo.h"'. We treat it as '#include
m
=
INCLUDE_GMOCK_FILE_REGEX
.
match
(
line
)
# "gmock/gmock.h"', as all other gmock headers are being fused
# into gmock.h and cannot be #included directly.
# There is no need to #include "gmock/gmock.h" more than once.
if
not
GMOCK_H_SEED
in
processed_files
:
processed_files
.
add
(
GMOCK_H_SEED
)
output_file
.
write
(
'#include "%s"
\n
'
%
(
GMOCK_H_OUTPUT
,))
else
:
m
=
gtest
.
INCLUDE_GTEST_FILE_REGEX
.
match
(
line
)
if
m
:
if
m
:
# It's '#include "gtest/..."'.
# '#include "gmock/foo.h"'.
# There is no need to #include gtest.h as it has been
# We treat it as '#include "gmock/gmock.h"', as all other gmock
# #included by gtest-all.cc.
# headers are being fused into gmock.h and cannot be
pass
# included directly. No need to #include
# "third_party/googletest/googlemock/include/gmock/gmock.h"
# more than once.
if
GMOCK_H_SEED
not
in
processed_files
:
processed_files
.
add
(
GMOCK_H_SEED
)
output_file
.
write
(
'#include "%s"
\n
'
%
(
GMOCK_H_OUTPUT
,))
else
:
else
:
m
=
gtest
.
INCLUDE_
SRC
_FILE_REGEX
.
match
(
line
)
m
=
gtest
.
INCLUDE_
GTEST
_FILE_REGEX
.
match
(
line
)
if
m
:
if
m
:
# It's '#include "src/foo"' - let's process it recursively.
# '#include "gtest/..."'.
ProcessFile
(
m
.
group
(
1
))
# There is no need to #include gtest.h as it has been
# #included by gtest-all.cc.
pass
else
:
else
:
# Otherwise we copy the line unchanged to the output file.
m
=
gtest
.
INCLUDE_SRC_FILE_REGEX
.
match
(
line
)
output_file
.
write
(
line
)
if
m
:
# It's '#include "src/foo"' - let's process it recursively.
ProcessFile
(
m
.
group
(
1
))
else
:
# Otherwise we copy the line unchanged to the output file.
output_file
.
write
(
line
)
ProcessFile
(
GMOCK_ALL_CC_SEED
)
ProcessFile
(
GMOCK_ALL_CC_SEED
)
...
@@ -204,12 +223,12 @@ def FuseGMockAllCcToFile(gmock_root, output_file):
...
@@ -204,12 +223,12 @@ def FuseGMockAllCcToFile(gmock_root, output_file):
def
FuseGMockGTestAllCc
(
gmock_root
,
output_dir
):
def
FuseGMockGTestAllCc
(
gmock_root
,
output_dir
):
"""Scans folder gmock_root to generate gmock-gtest-all.cc in output_dir."""
"""Scans folder gmock_root to generate gmock-gtest-all.cc in output_dir."""
output_file
=
file
(
os
.
path
.
join
(
output_dir
,
GMOCK_GTEST_ALL_CC_OUTPUT
),
'w'
)
with
open
(
os
.
path
.
join
(
output_dir
,
GMOCK_GTEST_ALL_CC_OUTPUT
),
# First, fuse gtest-all.cc into gmock-gtest-all.cc.
'w'
)
as
output_file
:
gtest
.
FuseGTestAllCcToFile
(
GetGTestRootDir
(
gmock_root
),
output_file
)
# First, fuse gtest-all.cc into gmock-gtest-all.cc.
# Next, append fused gmock-all.cc to gmock-gtest-all.cc.
gtest
.
FuseGTestAllCcToFile
(
GetGTestRootDir
(
gmock_root
),
output_file
)
FuseGMockAllCcToFile
(
gmock_root
,
output_file
)
# Next, append fused gmock-all.cc to gmock-gtest-all.cc.
output_file
.
close
(
)
FuseGMockAllCcToFile
(
gmock_root
,
output_file
)
def
FuseGMock
(
gmock_root
,
output_dir
):
def
FuseGMock
(
gmock_root
,
output_dir
):
...
@@ -232,7 +251,7 @@ def main():
...
@@ -232,7 +251,7 @@ def main():
# fuse_gmock_files.py GMOCK_ROOT_DIR OUTPUT_DIR
# fuse_gmock_files.py GMOCK_ROOT_DIR OUTPUT_DIR
FuseGMock
(
sys
.
argv
[
1
],
sys
.
argv
[
2
])
FuseGMock
(
sys
.
argv
[
1
],
sys
.
argv
[
2
])
else
:
else
:
print
__doc__
print
(
__doc__
)
sys
.
exit
(
1
)
sys
.
exit
(
1
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment