Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
googletest
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
googletest
Commits
cc265df8
Commit
cc265df8
authored
Jun 13, 2011
by
vladlosev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixes broken build on VC++ 7.1.
parent
7e29bb7f
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
101 additions
and
43 deletions
+101
-43
CMakeLists.txt
CMakeLists.txt
+24
-14
internal_utils.cmake
cmake/internal_utils.cmake
+10
-0
gtest-printers.h
include/gtest/gtest-printers.h
+4
-1
gtest-internal.h
include/gtest/internal/gtest-internal.h
+10
-0
gtest_throw_on_failure_test_.cc
test/gtest_throw_on_failure_test_.cc
+17
-1
gtest_xml_output_unittest.py
test/gtest_xml_output_unittest.py
+30
-24
gtest_xml_output_unittest_.cc
test/gtest_xml_output_unittest_.cc
+6
-3
No files found.
CMakeLists.txt
View file @
cc265df8
...
...
@@ -140,10 +140,13 @@ if (gtest_build_tests)
############################################################
# C++ tests built with non-standard compiler flags.
cxx_library
(
gtest_no_exception
"
${
cxx_no_exception
}
"
src/gtest-all.cc
)
cxx_library
(
gtest_main_no_exception
"
${
cxx_no_exception
}
"
src/gtest-all.cc src/gtest_main.cc
)
# MSVC 7.1 does not support STL with exceptions disabled.
if
(
NOT MSVC OR MSVC_VERSION GREATER 1310
)
cxx_library
(
gtest_no_exception
"
${
cxx_no_exception
}
"
src/gtest-all.cc
)
cxx_library
(
gtest_main_no_exception
"
${
cxx_no_exception
}
"
src/gtest-all.cc src/gtest_main.cc
)
endif
()
cxx_library
(
gtest_main_no_rtti
"
${
cxx_no_rtti
}
"
src/gtest-all.cc src/gtest_main.cc
)
...
...
@@ -189,11 +192,15 @@ if (gtest_build_tests)
cxx_executable
(
gtest_break_on_failure_unittest_ test gtest
)
py_test
(
gtest_break_on_failure_unittest
)
cxx_executable_with_flags
(
gtest_catch_exceptions_no_ex_test_
"
${
cxx_no_exception
}
"
gtest_main_no_exception
test/gtest_catch_exceptions_test_.cc
)
# MSVC 7.1 does not support STL with exceptions disabled.
if
(
NOT MSVC OR MSVC_VERSION GREATER 1310
)
cxx_executable_with_flags
(
gtest_catch_exceptions_no_ex_test_
"
${
cxx_no_exception
}
"
gtest_main_no_exception
test/gtest_catch_exceptions_test_.cc
)
endif
()
cxx_executable_with_flags
(
gtest_catch_exceptions_ex_test_
"
${
cxx_exception
}
"
...
...
@@ -222,11 +229,14 @@ if (gtest_build_tests)
cxx_executable
(
gtest_shuffle_test_ test gtest
)
py_test
(
gtest_shuffle_test
)
cxx_executable
(
gtest_throw_on_failure_test_ test gtest_no_exception
)
set_target_properties
(
gtest_throw_on_failure_test_
PROPERTIES
COMPILE_FLAGS
"
${
cxx_no_exception
}
"
)
py_test
(
gtest_throw_on_failure_test
)
# MSVC 7.1 does not support STL with exceptions disabled.
if
(
NOT MSVC OR MSVC_VERSION GREATER 1310
)
cxx_executable
(
gtest_throw_on_failure_test_ test gtest_no_exception
)
set_target_properties
(
gtest_throw_on_failure_test_
PROPERTIES
COMPILE_FLAGS
"
${
cxx_no_exception
}
"
)
py_test
(
gtest_throw_on_failure_test
)
endif
()
cxx_executable
(
gtest_uninitialized_test_ test gtest
)
py_test
(
gtest_uninitialized_test
)
...
...
cmake/internal_utils.cmake
View file @
cc265df8
...
...
@@ -56,6 +56,16 @@ macro(config_compiler_and_linker)
# Newlines inside flags variables break CMake's NMake generator.
# TODO(vladl@google.com): Add -RTCs and -RTCu to debug builds.
set
(
cxx_base_flags
"-GS -W4 -WX -wd4127 -wd4251 -wd4275 -nologo -J -Zi"
)
if
(
MSVC_VERSION LESS 1400
)
# Suppress spurious warnings MSVC 7.1 sometimes issues.
# Forcing value to bool.
set
(
cxx_base_flags
"
${
cxx_base_flags
}
-wd4800"
)
# Copy constructor and assignment operator could not be generated.
set
(
cxx_base_flags
"
${
cxx_base_flags
}
-wd4511 -wd4512"
)
# Compatibility warnings not applicable to Google Test.
# Resolved overload was found by argument-dependent lookup.
set
(
cxx_base_flags
"
${
cxx_base_flags
}
-wd4675"
)
endif
()
set
(
cxx_base_flags
"
${
cxx_base_flags
}
-D_UNICODE -DUNICODE -DWIN32 -D_WIN32"
)
set
(
cxx_base_flags
"
${
cxx_base_flags
}
-DSTRICT -DWIN32_LEAN_AND_MEAN"
)
set
(
cxx_exception_flags
"-EHsc -D_HAS_EXCEPTIONS=1"
)
...
...
include/gtest/gtest-printers.h
View file @
cc265df8
...
...
@@ -694,7 +694,10 @@ inline void UniversalTersePrint(char* str, ::std::ostream* os) {
// NUL-terminated string.
template
<
typename
T
>
void
UniversalPrint
(
const
T
&
value
,
::
std
::
ostream
*
os
)
{
UniversalPrinter
<
T
>::
Print
(
value
,
os
);
// A workarond for the bug in VC++ 7.1 that prevents us from instantiating
// UniversalPrinter with T directly.
typedef
T
T1
;
UniversalPrinter
<
T1
>::
Print
(
value
,
os
);
}
#if GTEST_HAS_TR1_TUPLE
...
...
include/gtest/internal/gtest-internal.h
View file @
cc265df8
...
...
@@ -802,6 +802,16 @@ struct RemoveConst<const T[N]> {
typedef
typename
RemoveConst
<
T
>::
type
type
[
N
];
};
#if defined(_MSC_VER) && _MSC_VER < 1400
// This is the only specialization that allows VC++ 7.1 to remove const in
// 'const int[3] and 'const int[3][4]'. However, it causes trouble with GCC
// and thus needs to be conditionally compiled.
template
<
typename
T
,
size_t
N
>
struct
RemoveConst
<
T
[
N
]
>
{
typedef
typename
RemoveConst
<
T
>::
type
type
[
N
];
};
#endif
// A handy wrapper around RemoveConst that works when the argument
// T depends on template parameters.
#define GTEST_REMOVE_CONST_(T) \
...
...
test/gtest_throw_on_failure_test_.cc
View file @
cc265df8
...
...
@@ -37,12 +37,28 @@
#include "gtest/gtest.h"
#include <stdio.h> // for fflush, fprintf, NULL, etc.
#include <stdlib.h> // for exit
#include <exception> // for set_terminate
// This terminate handler aborts the program using exit() rather than abort().
// This avoids showing pop-ups on Windows systems and core dumps on Unix-like
// ones.
void
TerminateHandler
()
{
fprintf
(
stderr
,
"%s
\n
"
,
"Unhandled C++ exception terminating the program."
);
fflush
(
NULL
);
exit
(
1
);
}
int
main
(
int
argc
,
char
**
argv
)
{
#if GTEST_HAS_EXCEPTIONS
std
::
set_terminate
(
&
TerminateHandler
);
#endif
testing
::
InitGoogleTest
(
&
argc
,
argv
);
// We want to ensure that people can use Google Test assertions in
// other testing frameworks, as long as they initialize Google Test
// properly and set the throw
n
-on-failure mode. Therefore, we don't
// properly and set the throw-on-failure mode. Therefore, we don't
// use Google Test's constructs for defining and running tests
// (e.g. TEST and RUN_ALL_TESTS) here.
...
...
test/gtest_xml_output_unittest.py
View file @
cc265df8
...
...
@@ -42,6 +42,7 @@ import gtest_test_utils
import
gtest_xml_test_utils
GTEST_LIST_TESTS_FLAG
=
'--gtest_list_tests'
GTEST_OUTPUT_FLAG
=
"--gtest_output"
GTEST_DEFAULT_OUTPUT_FILE
=
"test_detail.xml"
GTEST_PROGRAM_NAME
=
"gtest_xml_output_unittest_"
...
...
@@ -49,9 +50,9 @@ GTEST_PROGRAM_NAME = "gtest_xml_output_unittest_"
SUPPORTS_STACK_TRACES
=
False
if
SUPPORTS_STACK_TRACES
:
STACK_TRACE_TEMPLATE
=
"
\n
Stack trace:
\n
*"
STACK_TRACE_TEMPLATE
=
'
\n
Stack trace:
\n
*'
else
:
STACK_TRACE_TEMPLATE
=
""
STACK_TRACE_TEMPLATE
=
''
EXPECTED_NON_EMPTY_XML
=
"""<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="23" failures="4" disabled="2" errors="0" time="*" name="AllTests">
...
...
@@ -130,18 +131,26 @@ EXPECTED_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="0" failures="0" disabled="0" errors="0" time="*" name="AllTests">
</testsuites>"""
GTEST_PROGRAM_PATH
=
gtest_test_utils
.
GetTestExecutablePath
(
GTEST_PROGRAM_NAME
)
SUPPORTS_TYPED_TESTS
=
'TypedTest'
in
gtest_test_utils
.
Subprocess
(
[
GTEST_PROGRAM_PATH
,
GTEST_LIST_TESTS_FLAG
],
capture_stderr
=
False
)
.
output
class
GTestXMLOutputUnitTest
(
gtest_xml_test_utils
.
GTestXMLTestCase
):
"""
Unit test for Google Test's XML output functionality.
"""
def
testNonEmptyXmlOutput
(
self
):
"""
Runs a test program that generates a non-empty XML output, and
tests that the XML output is expected.
"""
self
.
_TestXmlOutput
(
GTEST_PROGRAM_NAME
,
EXPECTED_NON_EMPTY_XML
,
1
)
# This test currently breaks on platforms that do not support typed and
# type-parameterized tests, so we don't run it under them.
if
SUPPORTS_TYPED_TESTS
:
def
testNonEmptyXmlOutput
(
self
):
"""
Runs a test program that generates a non-empty XML output, and
tests that the XML output is expected.
"""
self
.
_TestXmlOutput
(
GTEST_PROGRAM_NAME
,
EXPECTED_NON_EMPTY_XML
,
1
)
def
testEmptyXmlOutput
(
self
):
"""
...
...
@@ -149,8 +158,7 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
tests that the XML output is expected.
"""
self
.
_TestXmlOutput
(
"gtest_no_test_unittest"
,
EXPECTED_EMPTY_XML
,
0
)
self
.
_TestXmlOutput
(
'gtest_no_test_unittest'
,
EXPECTED_EMPTY_XML
,
0
)
def
testDefaultOutputFile
(
self
):
"""
...
...
@@ -160,7 +168,7 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
output_file
=
os
.
path
.
join
(
gtest_test_utils
.
GetTempDir
(),
GTEST_DEFAULT_OUTPUT_FILE
)
gtest_prog_path
=
gtest_test_utils
.
GetTestExecutablePath
(
"gtest_no_test_unittest"
)
'gtest_no_test_unittest'
)
try
:
os
.
remove
(
output_file
)
except
OSError
,
e
:
...
...
@@ -168,7 +176,7 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
raise
p
=
gtest_test_utils
.
Subprocess
(
[
gtest_prog_path
,
"
%
s=xml"
%
GTEST_OUTPUT_FLAG
],
[
gtest_prog_path
,
'
%
s=xml'
%
GTEST_OUTPUT_FLAG
],
working_dir
=
gtest_test_utils
.
GetTempDir
())
self
.
assert_
(
p
.
exited
)
self
.
assertEquals
(
0
,
p
.
exit_code
)
...
...
@@ -181,24 +189,22 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
"""
xml_path
=
os
.
path
.
join
(
gtest_test_utils
.
GetTempDir
(),
GTEST_PROGRAM_NAME
+
"out.xml"
)
GTEST_PROGRAM_NAME
+
'out.xml'
)
if
os
.
path
.
isfile
(
xml_path
):
os
.
remove
(
xml_path
)
gtest_prog_path
=
gtest_test_utils
.
GetTestExecutablePath
(
GTEST_PROGRAM_NAME
)
command
=
[
gtest_prog_path
,
"
%
s=xml:
%
s"
%
(
GTEST_OUTPUT_FLAG
,
xml_path
),
"--shut_down_xml"
]
command
=
[
GTEST_PROGRAM_PATH
,
'
%
s=xml:
%
s'
%
(
GTEST_OUTPUT_FLAG
,
xml_path
),
'--shut_down_xml'
]
p
=
gtest_test_utils
.
Subprocess
(
command
)
if
p
.
terminated_by_signal
:
self
.
assert_
(
False
,
"
%
s was killed by signal
%
d"
%
(
gtest_prog_name
,
p
.
signal
))
'
%
s was killed by signal
%
d'
%
(
gtest_prog_name
,
p
.
signal
))
else
:
self
.
assert_
(
p
.
exited
)
self
.
assertEquals
(
1
,
p
.
exit_code
,
"'
%
s' exited with code
%
s, which doesn't match "
"the expected exit code
%
s."
'the expected exit code
%
s.'
%
(
command
,
p
.
exit_code
,
1
))
self
.
assert_
(
not
os
.
path
.
isfile
(
xml_path
))
...
...
@@ -212,19 +218,19 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
expected_exit_code.
"""
xml_path
=
os
.
path
.
join
(
gtest_test_utils
.
GetTempDir
(),
gtest_prog_name
+
"out.xml"
)
gtest_prog_name
+
'out.xml'
)
gtest_prog_path
=
gtest_test_utils
.
GetTestExecutablePath
(
gtest_prog_name
)
command
=
[
gtest_prog_path
,
"
%
s=xml:
%
s"
%
(
GTEST_OUTPUT_FLAG
,
xml_path
)]
command
=
[
gtest_prog_path
,
'
%
s=xml:
%
s'
%
(
GTEST_OUTPUT_FLAG
,
xml_path
)]
p
=
gtest_test_utils
.
Subprocess
(
command
)
if
p
.
terminated_by_signal
:
self
.
assert_
(
False
,
"
%
s was killed by signal
%
d"
%
(
gtest_prog_name
,
p
.
signal
))
'
%
s was killed by signal
%
d'
%
(
gtest_prog_name
,
p
.
signal
))
else
:
self
.
assert_
(
p
.
exited
)
self
.
assertEquals
(
expected_exit_code
,
p
.
exit_code
,
"'
%
s' exited with code
%
s, which doesn't match "
"the expected exit code
%
s."
'the expected exit code
%
s.'
%
(
command
,
p
.
exit_code
,
expected_exit_code
))
expected
=
minidom
.
parseString
(
expected_xml
)
...
...
test/gtest_xml_output_unittest_.cc
View file @
cc265df8
...
...
@@ -45,7 +45,6 @@ using ::testing::TestEventListeners;
using
::
testing
::
TestWithParam
;
using
::
testing
::
UnitTest
;
using
::
testing
::
Test
;
using
::
testing
::
Types
;
using
::
testing
::
Values
;
class
SuccessfulTest
:
public
Test
{
...
...
@@ -145,23 +144,27 @@ TEST_P(ValueParamTest, HasValueParamAttribute) {}
TEST_P
(
ValueParamTest
,
AnotherTestThatHasValueParamAttribute
)
{}
INSTANTIATE_TEST_CASE_P
(
Single
,
ValueParamTest
,
Values
(
33
,
42
));
#if GTEST_HAS_TYPED_TEST
// Verifies that the type parameter name is output in the 'type_param'
// XML attribute for typed tests.
template
<
typename
T
>
class
TypedTest
:
public
Test
{};
typedef
Types
<
int
,
long
>
TypedTestTypes
;
typedef
testing
::
Types
<
int
,
long
>
TypedTestTypes
;
TYPED_TEST_CASE
(
TypedTest
,
TypedTestTypes
);
TYPED_TEST
(
TypedTest
,
HasTypeParamAttribute
)
{}
#endif
#if GTEST_HAS_TYPED_TEST_P
// Verifies that the type parameter name is output in the 'type_param'
// XML attribute for type-parameterized tests.
template
<
typename
T
>
class
TypeParameterizedTestCase
:
public
Test
{};
TYPED_TEST_CASE_P
(
TypeParameterizedTestCase
);
TYPED_TEST_P
(
TypeParameterizedTestCase
,
HasTypeParamAttribute
)
{}
REGISTER_TYPED_TEST_CASE_P
(
TypeParameterizedTestCase
,
HasTypeParamAttribute
);
typedef
Types
<
int
,
long
>
TypeParameterizedTestCaseTypes
;
typedef
testing
::
Types
<
int
,
long
>
TypeParameterizedTestCaseTypes
;
INSTANTIATE_TYPED_TEST_CASE_P
(
Single
,
TypeParameterizedTestCase
,
TypeParameterizedTestCaseTypes
);
#endif
int
main
(
int
argc
,
char
**
argv
)
{
InitGoogleTest
(
&
argc
,
argv
);
...
...
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