summaryrefslogtreecommitdiffstats
path: root/gtest
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2010-05-29 13:00:38 -0700
committerWink Saville <wink@google.com>2010-05-29 13:00:38 -0700
commitd0332953cda33fb4f8e24ebff9c49159b69c43d6 (patch)
tree81612e8b12f590310aeb0ebf1da37b304eb7baa6 /gtest
parentede38fe9b9f93888e6e41afc7abb09525f44da95 (diff)
downloadexternal_protobuf-d0332953cda33fb4f8e24ebff9c49159b69c43d6.zip
external_protobuf-d0332953cda33fb4f8e24ebff9c49159b69c43d6.tar.gz
external_protobuf-d0332953cda33fb4f8e24ebff9c49159b69c43d6.tar.bz2
Add protobuf 2.3.0 sources
This is the contents of protobuf-2.3.0.tar.bz2 from http://code.google.com/p/protobuf/downloads/list. Change-Id: Idfde09ce7ef5ac027b07ee83f2674fbbed5c30b2
Diffstat (limited to 'gtest')
-rw-r--r--gtest/CHANGES21
-rw-r--r--gtest/CONTRIBUTORS2
-rw-r--r--gtest/Makefile.am47
-rw-r--r--gtest/Makefile.in125
-rw-r--r--gtest/README80
-rwxr-xr-xgtest/configure20
-rw-r--r--gtest/configure.ac2
-rw-r--r--gtest/include/gtest/gtest-death-test.h17
-rw-r--r--gtest/include/gtest/gtest-spi.h39
-rw-r--r--gtest/include/gtest/gtest-test-part.h30
-rw-r--r--gtest/include/gtest/gtest.h333
-rw-r--r--gtest/include/gtest/internal/gtest-death-test-internal.h51
-rw-r--r--gtest/include/gtest/internal/gtest-internal.h53
-rw-r--r--gtest/include/gtest/internal/gtest-param-util-generated.h285
-rw-r--r--gtest/include/gtest/internal/gtest-param-util-generated.h.pump21
-rw-r--r--gtest/include/gtest/internal/gtest-param-util.h11
-rw-r--r--gtest/include/gtest/internal/gtest-port.h114
-rw-r--r--gtest/include/gtest/internal/gtest-string.h135
-rw-r--r--gtest/msvc/gtest-md.sln45
-rw-r--r--gtest/msvc/gtest-md.vcproj237
-rw-r--r--gtest/msvc/gtest.sln40
-rw-r--r--gtest/msvc/gtest.vcproj12
-rw-r--r--gtest/msvc/gtest_environment_test.vcproj144
-rw-r--r--gtest/msvc/gtest_main-md.vcproj (renamed from gtest/msvc/gtest_env_var_test_.vcproj)105
-rw-r--r--gtest/msvc/gtest_main.vcproj12
-rw-r--r--gtest/msvc/gtest_prod_test-md.vcproj (renamed from gtest/msvc/gtest_color_test_.vcproj)48
-rw-r--r--gtest/msvc/gtest_prod_test.vcproj12
-rw-r--r--gtest/msvc/gtest_uninitialized_test_.vcproj144
-rw-r--r--gtest/msvc/gtest_unittest-md.vcproj (renamed from gtest/msvc/gtest_output_test_.vcproj)28
-rw-r--r--gtest/msvc/gtest_unittest.vcproj12
-rw-r--r--gtest/samples/sample10_unittest.cc145
-rw-r--r--gtest/samples/sample9_unittest.cc160
-rw-r--r--gtest/scons/SConscript90
-rw-r--r--gtest/scons/SConstruct61
-rw-r--r--gtest/scons/SConstruct.common356
-rwxr-xr-xgtest/scripts/gen_gtest_pred_impl.py2
-rw-r--r--gtest/src/gtest-death-test.cc57
-rw-r--r--gtest/src/gtest-filepath.cc47
-rw-r--r--gtest/src/gtest-internal-inl.h176
-rw-r--r--gtest/src/gtest-port.cc51
-rw-r--r--gtest/src/gtest-test-part.cc12
-rw-r--r--gtest/src/gtest.cc1023
-rw-r--r--gtest/test/gtest-death-test_test.cc121
-rw-r--r--gtest/test/gtest-filepath_test.cc23
-rw-r--r--gtest/test/gtest-listener_test.cc322
-rw-r--r--gtest/test/gtest-options_test.cc8
-rw-r--r--gtest/test/gtest-port_test.cc13
-rw-r--r--gtest/test/gtest-test-part_test.cc28
-rw-r--r--gtest/test/gtest-typed-test_test.cc22
-rw-r--r--gtest/test/gtest-unittest-api_test.cc66
-rwxr-xr-xgtest/test/gtest_env_var_test.py2
-rw-r--r--gtest/test/gtest_filter_unittest_.cc10
-rw-r--r--gtest/test/gtest_repeat_test.cc10
-rwxr-xr-xgtest/test/gtest_shuffle_test.py331
-rw-r--r--gtest/test/gtest_shuffle_test_.cc104
-rw-r--r--gtest/test/gtest_stress_test.cc1
-rw-r--r--gtest/test/gtest_unittest.cc983
-rwxr-xr-xgtest/test/gtest_xml_output_unittest.py49
-rw-r--r--gtest/test/gtest_xml_output_unittest_.cc25
-rwxr-xr-xgtest/test/gtest_xml_test_utils.py48
-rw-r--r--gtest/xcode/Config/FrameworkTarget.xcconfig4
-rw-r--r--gtest/xcode/Config/InternalPythonTestTarget.xcconfig8
-rw-r--r--gtest/xcode/Config/InternalTestTarget.xcconfig8
-rw-r--r--gtest/xcode/Config/StaticLibraryTarget.xcconfig18
-rw-r--r--gtest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj43
-rw-r--r--gtest/xcode/Scripts/runtests.sh49
-rw-r--r--gtest/xcode/gtest.xcodeproj/project.pbxproj4231
67 files changed, 5262 insertions, 5670 deletions
diff --git a/gtest/CHANGES b/gtest/CHANGES
index 3565588..1858f7f 100644
--- a/gtest/CHANGES
+++ b/gtest/CHANGES
@@ -1,3 +1,22 @@
+Changes for 1.4.0:
+
+ * New feature: the event listener API
+ * New feature: test shuffling
+ * New feature: the XML report format is closer to junitreport and can
+ be parsed by Hudson now.
+ * New feature: when a test runs under Visual Studio, its failures are
+ integrated in the IDE.
+ * New feature: /MD(d) versions of VC++ projects.
+ * New feature: elapsed time for the tests is printed by default.
+ * New feature: comes with a TR1 tuple implementation such that Boost
+ is no longer needed for Combine().
+ * New feature: EXPECT_DEATH_IF_SUPPORTED macro and friends.
+ * New feature: the Xcode project can now produce static gtest
+ libraries in addition to a framework.
+ * Compatibility fixes for Solaris, Cygwin, minGW, Windows Mobile,
+ Symbian, gcc, and C++Builder.
+ * Bug fixes and implementation clean-ups.
+
Changes for 1.3.0:
* New feature: death tests on Windows, Cygwin, and Mac.
@@ -11,7 +30,7 @@ Changes for 1.3.0:
.cc file for easy deployment.
* New feature: support for distributing test functions to multiple
machines (requires support from the test runner).
- * Bug fixes and implementation clean-up.
+ * Bug fixes and implementation clean-ups.
Changes for 1.2.1:
diff --git a/gtest/CONTRIBUTORS b/gtest/CONTRIBUTORS
index ae91217..40ce6c8 100644
--- a/gtest/CONTRIBUTORS
+++ b/gtest/CONTRIBUTORS
@@ -21,7 +21,7 @@ Mika Raento <mikie@iki.fi>
Patrick Hanna <phanna@google.com>
Patrick Riley <pfr@google.com>
Peter Kaminski <piotrk@google.com>
-Preston Jackson <preston.jackson@gmail.com>
+Preston Jackson <preston.a.jackson@gmail.com>
Rainer Klaffenboeck <rainer.klaffenboeck@dynatrace.com>
Russ Cox <rsc@google.com>
Russ Rufer <russ@pentad.com>
diff --git a/gtest/Makefile.am b/gtest/Makefile.am
index 2f7e911..3a9233d 100644
--- a/gtest/Makefile.am
+++ b/gtest/Makefile.am
@@ -12,6 +12,8 @@ EXTRA_DIST = \
include/gtest/internal/gtest-param-util-generated.h.pump \
make/Makefile \
scons/SConscript \
+ scons/SConstruct \
+ scons/SConstruct.common \
scripts/fuse_gtest_files.py \
scripts/gen_gtest_pred_impl.py \
scripts/test/Makefile \
@@ -19,15 +21,15 @@ EXTRA_DIST = \
# MSVC project files
EXTRA_DIST += \
+ msvc/gtest-md.sln \
msvc/gtest.sln \
+ msvc/gtest-md.vcproj \
msvc/gtest.vcproj \
- msvc/gtest_color_test_.vcproj \
- msvc/gtest_env_var_test_.vcproj \
- msvc/gtest_environment_test.vcproj \
+ msvc/gtest_main-md.vcproj \
msvc/gtest_main.vcproj \
- msvc/gtest_output_test_.vcproj \
+ msvc/gtest_prod_test-md.vcproj \
msvc/gtest_prod_test.vcproj \
- msvc/gtest_uninitialized_test_.vcproj \
+ msvc/gtest_unittest-md.vcproj \
msvc/gtest_unittest.vcproj
# xcode project files
@@ -36,9 +38,8 @@ EXTRA_DIST += \
xcode/Config/FrameworkTarget.xcconfig \
xcode/Config/General.xcconfig \
xcode/Config/ReleaseProject.xcconfig \
+ xcode/Config/StaticLibraryTarget.xcconfig \
xcode/Config/TestTarget.xcconfig \
- xcode/Config/InternalTestTarget.xcconfig \
- xcode/Config/InternalPythonTestTarget.xcconfig \
xcode/Resources/Info.plist \
xcode/Scripts/versiongenerate.py \
xcode/Scripts/runtests.sh \
@@ -172,22 +173,29 @@ TESTS += samples/sample6_unittest
check_PROGRAMS += samples/sample6_unittest
samples_sample6_unittest_SOURCES = samples/prime_tables.h \
samples/sample6_unittest.cc
-samples_sample6_unittest_LDADD = lib/libgtest_main.la \
- samples/libsamples.la
+samples_sample6_unittest_LDADD = lib/libgtest_main.la
TESTS += samples/sample7_unittest
check_PROGRAMS += samples/sample7_unittest
samples_sample7_unittest_SOURCES = samples/prime_tables.h \
samples/sample7_unittest.cc
-samples_sample7_unittest_LDADD = lib/libgtest_main.la \
- samples/libsamples.la
+samples_sample7_unittest_LDADD = lib/libgtest_main.la
TESTS += samples/sample8_unittest
check_PROGRAMS += samples/sample8_unittest
samples_sample8_unittest_SOURCES = samples/prime_tables.h \
samples/sample8_unittest.cc
-samples_sample8_unittest_LDADD = lib/libgtest_main.la \
- samples/libsamples.la
+samples_sample8_unittest_LDADD = lib/libgtest_main.la
+
+TESTS += samples/sample9_unittest
+check_PROGRAMS += samples/sample9_unittest
+samples_sample9_unittest_SOURCES = samples/sample9_unittest.cc
+samples_sample9_unittest_LDADD = lib/libgtest.la
+
+TESTS += samples/sample10_unittest
+check_PROGRAMS += samples/sample10_unittest
+samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc
+samples_sample10_unittest_LDADD = lib/libgtest.la
TESTS += test/gtest-death-test_test
check_PROGRAMS += test/gtest-death-test_test
@@ -299,6 +307,11 @@ check_PROGRAMS += test/gtest-unittest-api_test
test_gtest_unittest_api_test_SOURCES = test/gtest-unittest-api_test.cc
test_gtest_unittest_api_test_LDADD = lib/libgtest_main.la
+TESTS += test/gtest-listener_test
+check_PROGRAMS += test/gtest-listener_test
+test_gtest_listener_test_SOURCES = test/gtest-listener_test.cc
+test_gtest_listener_test_LDADD = lib/libgtest_main.la
+
# Verifies that Google Test works when RTTI is disabled.
TESTS += test/gtest_no_rtti_test
check_PROGRAMS += test/gtest_no_rtti_test
@@ -382,6 +395,12 @@ EXTRA_DIST += test/gtest_output_test_golden_lin.txt \
test/gtest_output_test_golden_win.txt
TESTS += test/gtest_output_test.py
+check_PROGRAMS += test/gtest_shuffle_test_
+test_gtest_shuffle_test__SOURCES = test/gtest_shuffle_test_.cc
+test_gtest_shuffle_test__LDADD = lib/libgtest.la
+check_SCRIPTS += test/gtest_shuffle_test.py
+TESTS += test/gtest_shuffle_test.py
+
check_PROGRAMS += test/gtest_throw_on_failure_test_
test_gtest_throw_on_failure_test__SOURCES = \
test/gtest_throw_on_failure_test_.cc \
@@ -407,7 +426,7 @@ TESTS += test/gtest_xml_outfiles_test.py
check_PROGRAMS += test/gtest_xml_output_unittest_
test_gtest_xml_output_unittest__SOURCES = test/gtest_xml_output_unittest_.cc
-test_gtest_xml_output_unittest__LDADD = lib/libgtest_main.la
+test_gtest_xml_output_unittest__LDADD = lib/libgtest.la
check_SCRIPTS += test/gtest_xml_output_unittest.py
TESTS += test/gtest_xml_output_unittest.py
diff --git a/gtest/Makefile.in b/gtest/Makefile.in
index 678d069..2cc34bf 100644
--- a/gtest/Makefile.in
+++ b/gtest/Makefile.in
@@ -47,6 +47,8 @@ TESTS = samples/sample1_unittest$(EXEEXT) \
samples/sample6_unittest$(EXEEXT) \
samples/sample7_unittest$(EXEEXT) \
samples/sample8_unittest$(EXEEXT) \
+ samples/sample9_unittest$(EXEEXT) \
+ samples/sample10_unittest$(EXEEXT) \
test/gtest-death-test_test$(EXEEXT) \
test/gtest_environment_test$(EXEEXT) \
test/gtest-filepath_test$(EXEEXT) \
@@ -66,6 +68,7 @@ TESTS = samples/sample1_unittest$(EXEEXT) \
test/gtest-typed-test_test$(EXEEXT) \
test/gtest_unittest$(EXEEXT) \
test/gtest-unittest-api_test$(EXEEXT) \
+ test/gtest-listener_test$(EXEEXT) \
test/gtest_no_rtti_test$(EXEEXT) \
test/gtest-tuple_test$(EXEEXT) \
test/gtest_use_own_tuple_test$(EXEEXT) $(am__append_2)
@@ -77,6 +80,8 @@ check_PROGRAMS = samples/sample1_unittest$(EXEEXT) \
samples/sample6_unittest$(EXEEXT) \
samples/sample7_unittest$(EXEEXT) \
samples/sample8_unittest$(EXEEXT) \
+ samples/sample9_unittest$(EXEEXT) \
+ samples/sample10_unittest$(EXEEXT) \
test/gtest-death-test_test$(EXEEXT) \
test/gtest_environment_test$(EXEEXT) \
test/gtest-filepath_test$(EXEEXT) \
@@ -96,6 +101,7 @@ check_PROGRAMS = samples/sample1_unittest$(EXEEXT) \
test/gtest-typed-test_test$(EXEEXT) \
test/gtest_unittest$(EXEEXT) \
test/gtest-unittest-api_test$(EXEEXT) \
+ test/gtest-listener_test$(EXEEXT) \
test/gtest_no_rtti_test$(EXEEXT) \
test/gtest-tuple_test$(EXEEXT) \
test/gtest_use_own_tuple_test$(EXEEXT) $(am__EXEEXT_1)
@@ -107,6 +113,7 @@ check_PROGRAMS = samples/sample1_unittest$(EXEEXT) \
@HAVE_PYTHON_TRUE@ test/gtest_help_test_ \
@HAVE_PYTHON_TRUE@ test/gtest_list_tests_unittest_ \
@HAVE_PYTHON_TRUE@ test/gtest_output_test_ \
+@HAVE_PYTHON_TRUE@ test/gtest_shuffle_test_ \
@HAVE_PYTHON_TRUE@ test/gtest_throw_on_failure_test_ \
@HAVE_PYTHON_TRUE@ test/gtest_uninitialized_test_ \
@HAVE_PYTHON_TRUE@ test/gtest_xml_outfile1_test_ \
@@ -120,6 +127,7 @@ check_PROGRAMS = samples/sample1_unittest$(EXEEXT) \
@HAVE_PYTHON_TRUE@ test/gtest_help_test.py \
@HAVE_PYTHON_TRUE@ test/gtest_list_tests_unittest.py \
@HAVE_PYTHON_TRUE@ test/gtest_output_test.py \
+@HAVE_PYTHON_TRUE@ test/gtest_shuffle_test.py \
@HAVE_PYTHON_TRUE@ test/gtest_throw_on_failure_test.py \
@HAVE_PYTHON_TRUE@ test/gtest_uninitialized_test.py \
@HAVE_PYTHON_TRUE@ test/gtest_xml_outfiles_test.py \
@@ -183,11 +191,17 @@ samples_libsamples_la_OBJECTS = $(am_samples_libsamples_la_OBJECTS)
@HAVE_PYTHON_TRUE@ test/gtest_help_test_$(EXEEXT) \
@HAVE_PYTHON_TRUE@ test/gtest_list_tests_unittest_$(EXEEXT) \
@HAVE_PYTHON_TRUE@ test/gtest_output_test_$(EXEEXT) \
+@HAVE_PYTHON_TRUE@ test/gtest_shuffle_test_$(EXEEXT) \
@HAVE_PYTHON_TRUE@ test/gtest_throw_on_failure_test_$(EXEEXT) \
@HAVE_PYTHON_TRUE@ test/gtest_uninitialized_test_$(EXEEXT) \
@HAVE_PYTHON_TRUE@ test/gtest_xml_outfile1_test_$(EXEEXT) \
@HAVE_PYTHON_TRUE@ test/gtest_xml_outfile2_test_$(EXEEXT) \
@HAVE_PYTHON_TRUE@ test/gtest_xml_output_unittest_$(EXEEXT)
+am_samples_sample10_unittest_OBJECTS = \
+ samples/sample10_unittest.$(OBJEXT)
+samples_sample10_unittest_OBJECTS = \
+ $(am_samples_sample10_unittest_OBJECTS)
+samples_sample10_unittest_DEPENDENCIES = lib/libgtest.la
am_samples_sample1_unittest_OBJECTS = \
samples/sample1_unittest.$(OBJEXT)
samples_sample1_unittest_OBJECTS = \
@@ -222,20 +236,22 @@ am_samples_sample6_unittest_OBJECTS = \
samples/sample6_unittest.$(OBJEXT)
samples_sample6_unittest_OBJECTS = \
$(am_samples_sample6_unittest_OBJECTS)
-samples_sample6_unittest_DEPENDENCIES = lib/libgtest_main.la \
- samples/libsamples.la
+samples_sample6_unittest_DEPENDENCIES = lib/libgtest_main.la
am_samples_sample7_unittest_OBJECTS = \
samples/sample7_unittest.$(OBJEXT)
samples_sample7_unittest_OBJECTS = \
$(am_samples_sample7_unittest_OBJECTS)
-samples_sample7_unittest_DEPENDENCIES = lib/libgtest_main.la \
- samples/libsamples.la
+samples_sample7_unittest_DEPENDENCIES = lib/libgtest_main.la
am_samples_sample8_unittest_OBJECTS = \
samples/sample8_unittest.$(OBJEXT)
samples_sample8_unittest_OBJECTS = \
$(am_samples_sample8_unittest_OBJECTS)
-samples_sample8_unittest_DEPENDENCIES = lib/libgtest_main.la \
- samples/libsamples.la
+samples_sample8_unittest_DEPENDENCIES = lib/libgtest_main.la
+am_samples_sample9_unittest_OBJECTS = \
+ samples/sample9_unittest.$(OBJEXT)
+samples_sample9_unittest_OBJECTS = \
+ $(am_samples_sample9_unittest_OBJECTS)
+samples_sample9_unittest_DEPENDENCIES = lib/libgtest.la
am_test_gtest_death_test_test_OBJECTS = test/test_gtest_death_test_test-gtest-death-test_test.$(OBJEXT)
test_gtest_death_test_test_OBJECTS = \
$(am_test_gtest_death_test_test_OBJECTS)
@@ -256,6 +272,11 @@ am_test_gtest_linked_ptr_test_OBJECTS = \
test_gtest_linked_ptr_test_OBJECTS = \
$(am_test_gtest_linked_ptr_test_OBJECTS)
test_gtest_linked_ptr_test_DEPENDENCIES = lib/libgtest_main.la
+am_test_gtest_listener_test_OBJECTS = \
+ test/gtest-listener_test.$(OBJEXT)
+test_gtest_listener_test_OBJECTS = \
+ $(am_test_gtest_listener_test_OBJECTS)
+test_gtest_listener_test_DEPENDENCIES = lib/libgtest_main.la
am_test_gtest_message_test_OBJECTS = \
test/gtest-message_test.$(OBJEXT)
test_gtest_message_test_OBJECTS = \
@@ -389,6 +410,14 @@ test_gtest_prod_test_DEPENDENCIES = lib/libgtest_main.la
am_test_gtest_repeat_test_OBJECTS = test/gtest_repeat_test.$(OBJEXT)
test_gtest_repeat_test_OBJECTS = $(am_test_gtest_repeat_test_OBJECTS)
test_gtest_repeat_test_DEPENDENCIES = lib/libgtest.la
+am__test_gtest_shuffle_test__SOURCES_DIST = \
+ test/gtest_shuffle_test_.cc
+@HAVE_PYTHON_TRUE@am_test_gtest_shuffle_test__OBJECTS = \
+@HAVE_PYTHON_TRUE@ test/gtest_shuffle_test_.$(OBJEXT)
+test_gtest_shuffle_test__OBJECTS = \
+ $(am_test_gtest_shuffle_test__OBJECTS)
+@HAVE_PYTHON_TRUE@test_gtest_shuffle_test__DEPENDENCIES = \
+@HAVE_PYTHON_TRUE@ lib/libgtest.la
am_test_gtest_sole_header_test_OBJECTS = \
test/gtest_sole_header_test.$(OBJEXT)
test_gtest_sole_header_test_OBJECTS = \
@@ -461,7 +490,7 @@ am__test_gtest_xml_output_unittest__SOURCES_DIST = \
test_gtest_xml_output_unittest__OBJECTS = \
$(am_test_gtest_xml_output_unittest__OBJECTS)
@HAVE_PYTHON_TRUE@test_gtest_xml_output_unittest__DEPENDENCIES = \
-@HAVE_PYTHON_TRUE@ lib/libgtest_main.la
+@HAVE_PYTHON_TRUE@ lib/libgtest.la
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
SCRIPTS = $(bin_SCRIPTS)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/build-aux
@@ -487,6 +516,7 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(lib_libgtest_la_SOURCES) $(lib_libgtest_main_la_SOURCES) \
$(samples_libsamples_la_SOURCES) \
+ $(samples_sample10_unittest_SOURCES) \
$(samples_sample1_unittest_SOURCES) \
$(samples_sample2_unittest_SOURCES) \
$(samples_sample3_unittest_SOURCES) \
@@ -495,9 +525,11 @@ SOURCES = $(lib_libgtest_la_SOURCES) $(lib_libgtest_main_la_SOURCES) \
$(samples_sample6_unittest_SOURCES) \
$(samples_sample7_unittest_SOURCES) \
$(samples_sample8_unittest_SOURCES) \
+ $(samples_sample9_unittest_SOURCES) \
$(test_gtest_death_test_test_SOURCES) \
$(test_gtest_filepath_test_SOURCES) \
$(test_gtest_linked_ptr_test_SOURCES) \
+ $(test_gtest_listener_test_SOURCES) \
$(test_gtest_message_test_SOURCES) \
$(test_gtest_options_test_SOURCES) \
$(test_gtest_param_test_test_SOURCES) \
@@ -520,6 +552,7 @@ SOURCES = $(lib_libgtest_la_SOURCES) $(lib_libgtest_main_la_SOURCES) \
$(test_gtest_pred_impl_unittest_SOURCES) \
$(test_gtest_prod_test_SOURCES) \
$(test_gtest_repeat_test_SOURCES) \
+ $(test_gtest_shuffle_test__SOURCES) \
$(test_gtest_sole_header_test_SOURCES) \
$(test_gtest_stress_test_SOURCES) \
$(test_gtest_throw_on_failure_ex_test_SOURCES) \
@@ -533,6 +566,7 @@ SOURCES = $(lib_libgtest_la_SOURCES) $(lib_libgtest_main_la_SOURCES) \
DIST_SOURCES = $(lib_libgtest_la_SOURCES) \
$(lib_libgtest_main_la_SOURCES) \
$(samples_libsamples_la_SOURCES) \
+ $(samples_sample10_unittest_SOURCES) \
$(samples_sample1_unittest_SOURCES) \
$(samples_sample2_unittest_SOURCES) \
$(samples_sample3_unittest_SOURCES) \
@@ -541,9 +575,11 @@ DIST_SOURCES = $(lib_libgtest_la_SOURCES) \
$(samples_sample6_unittest_SOURCES) \
$(samples_sample7_unittest_SOURCES) \
$(samples_sample8_unittest_SOURCES) \
+ $(samples_sample9_unittest_SOURCES) \
$(test_gtest_death_test_test_SOURCES) \
$(test_gtest_filepath_test_SOURCES) \
$(test_gtest_linked_ptr_test_SOURCES) \
+ $(test_gtest_listener_test_SOURCES) \
$(test_gtest_message_test_SOURCES) \
$(test_gtest_options_test_SOURCES) \
$(test_gtest_param_test_test_SOURCES) \
@@ -566,6 +602,7 @@ DIST_SOURCES = $(lib_libgtest_la_SOURCES) \
$(test_gtest_pred_impl_unittest_SOURCES) \
$(test_gtest_prod_test_SOURCES) \
$(test_gtest_repeat_test_SOURCES) \
+ $(am__test_gtest_shuffle_test__SOURCES_DIST) \
$(test_gtest_sole_header_test_SOURCES) \
$(test_gtest_stress_test_SOURCES) \
$(test_gtest_throw_on_failure_ex_test_SOURCES) \
@@ -727,22 +764,21 @@ EXTRA_DIST = CHANGES CONTRIBUTORS \
include/gtest/internal/gtest-tuple.h.pump \
include/gtest/internal/gtest-type-util.h.pump \
include/gtest/internal/gtest-param-util-generated.h.pump \
- make/Makefile scons/SConscript scripts/fuse_gtest_files.py \
+ make/Makefile scons/SConscript scons/SConstruct \
+ scons/SConstruct.common scripts/fuse_gtest_files.py \
scripts/gen_gtest_pred_impl.py scripts/test/Makefile \
- test/gtest_all_test.cc msvc/gtest.sln msvc/gtest.vcproj \
- msvc/gtest_color_test_.vcproj msvc/gtest_env_var_test_.vcproj \
- msvc/gtest_environment_test.vcproj msvc/gtest_main.vcproj \
- msvc/gtest_output_test_.vcproj msvc/gtest_prod_test.vcproj \
- msvc/gtest_uninitialized_test_.vcproj \
- msvc/gtest_unittest.vcproj xcode/Config/DebugProject.xcconfig \
+ test/gtest_all_test.cc msvc/gtest-md.sln msvc/gtest.sln \
+ msvc/gtest-md.vcproj msvc/gtest.vcproj \
+ msvc/gtest_main-md.vcproj msvc/gtest_main.vcproj \
+ msvc/gtest_prod_test-md.vcproj msvc/gtest_prod_test.vcproj \
+ msvc/gtest_unittest-md.vcproj msvc/gtest_unittest.vcproj \
+ xcode/Config/DebugProject.xcconfig \
xcode/Config/FrameworkTarget.xcconfig \
xcode/Config/General.xcconfig \
xcode/Config/ReleaseProject.xcconfig \
- xcode/Config/TestTarget.xcconfig \
- xcode/Config/InternalTestTarget.xcconfig \
- xcode/Config/InternalPythonTestTarget.xcconfig \
- xcode/Resources/Info.plist xcode/Scripts/versiongenerate.py \
- xcode/Scripts/runtests.sh \
+ xcode/Config/StaticLibraryTarget.xcconfig \
+ xcode/Config/TestTarget.xcconfig xcode/Resources/Info.plist \
+ xcode/Scripts/versiongenerate.py xcode/Scripts/runtests.sh \
xcode/gtest.xcodeproj/project.pbxproj \
xcode/Samples/FrameworkSample/Info.plist \
xcode/Samples/FrameworkSample/widget_test.cc \
@@ -848,21 +884,19 @@ samples_sample5_unittest_LDADD = lib/libgtest_main.la \
samples_sample6_unittest_SOURCES = samples/prime_tables.h \
samples/sample6_unittest.cc
-samples_sample6_unittest_LDADD = lib/libgtest_main.la \
- samples/libsamples.la
-
+samples_sample6_unittest_LDADD = lib/libgtest_main.la
samples_sample7_unittest_SOURCES = samples/prime_tables.h \
samples/sample7_unittest.cc
-samples_sample7_unittest_LDADD = lib/libgtest_main.la \
- samples/libsamples.la
-
+samples_sample7_unittest_LDADD = lib/libgtest_main.la
samples_sample8_unittest_SOURCES = samples/prime_tables.h \
samples/sample8_unittest.cc
-samples_sample8_unittest_LDADD = lib/libgtest_main.la \
- samples/libsamples.la
-
+samples_sample8_unittest_LDADD = lib/libgtest_main.la
+samples_sample9_unittest_SOURCES = samples/sample9_unittest.cc
+samples_sample9_unittest_LDADD = lib/libgtest.la
+samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc
+samples_sample10_unittest_LDADD = lib/libgtest.la
test_gtest_death_test_test_SOURCES = test/gtest-death-test_test.cc
test_gtest_death_test_test_CXXFLAGS = $(AM_CXXFLAGS) $(PTHREAD_CFLAGS)
test_gtest_death_test_test_LDADD = $(PTHREAD_LIBS) $(PTHREAD_CFLAGS) \
@@ -918,6 +952,8 @@ test_gtest_unittest_SOURCES = test/gtest_unittest.cc
test_gtest_unittest_LDADD = lib/libgtest_main.la
test_gtest_unittest_api_test_SOURCES = test/gtest-unittest-api_test.cc
test_gtest_unittest_api_test_LDADD = lib/libgtest_main.la
+test_gtest_listener_test_SOURCES = test/gtest-listener_test.cc
+test_gtest_listener_test_LDADD = lib/libgtest_main.la
test_gtest_no_rtti_test_SOURCES = test/gtest_unittest.cc \
src/gtest-all.cc \
src/gtest_main.cc
@@ -953,6 +989,7 @@ test_gtest_use_own_tuple_test_CXXFLAGS = \
@HAVE_PYTHON_TRUE@ test/gtest_help_test.py \
@HAVE_PYTHON_TRUE@ test/gtest_list_tests_unittest.py \
@HAVE_PYTHON_TRUE@ test/gtest_output_test.py \
+@HAVE_PYTHON_TRUE@ test/gtest_shuffle_test.py \
@HAVE_PYTHON_TRUE@ test/gtest_throw_on_failure_test.py \
@HAVE_PYTHON_TRUE@ test/gtest_uninitialized_test.py \
@HAVE_PYTHON_TRUE@ test/gtest_xml_outfiles_test.py \
@@ -973,6 +1010,8 @@ test_gtest_use_own_tuple_test_CXXFLAGS = \
@HAVE_PYTHON_TRUE@test_gtest_list_tests_unittest__LDADD = lib/libgtest.la
@HAVE_PYTHON_TRUE@test_gtest_output_test__SOURCES = test/gtest_output_test_.cc
@HAVE_PYTHON_TRUE@test_gtest_output_test__LDADD = lib/libgtest.la
+@HAVE_PYTHON_TRUE@test_gtest_shuffle_test__SOURCES = test/gtest_shuffle_test_.cc
+@HAVE_PYTHON_TRUE@test_gtest_shuffle_test__LDADD = lib/libgtest.la
@HAVE_PYTHON_TRUE@test_gtest_throw_on_failure_test__SOURCES = \
@HAVE_PYTHON_TRUE@ test/gtest_throw_on_failure_test_.cc \
@HAVE_PYTHON_TRUE@ src/gtest-all.cc
@@ -985,7 +1024,7 @@ test_gtest_use_own_tuple_test_CXXFLAGS = \
@HAVE_PYTHON_TRUE@test_gtest_xml_outfile2_test__SOURCES = test/gtest_xml_outfile2_test_.cc
@HAVE_PYTHON_TRUE@test_gtest_xml_outfile2_test__LDADD = lib/libgtest_main.la
@HAVE_PYTHON_TRUE@test_gtest_xml_output_unittest__SOURCES = test/gtest_xml_output_unittest_.cc
-@HAVE_PYTHON_TRUE@test_gtest_xml_output_unittest__LDADD = lib/libgtest_main.la
+@HAVE_PYTHON_TRUE@test_gtest_xml_output_unittest__LDADD = lib/libgtest.la
all: all-am
.SUFFIXES:
@@ -1123,6 +1162,11 @@ clean-checkPROGRAMS:
echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
done
+samples/sample10_unittest.$(OBJEXT): samples/$(am__dirstamp) \
+ samples/$(DEPDIR)/$(am__dirstamp)
+samples/sample10_unittest$(EXEEXT): $(samples_sample10_unittest_OBJECTS) $(samples_sample10_unittest_DEPENDENCIES) samples/$(am__dirstamp)
+ @rm -f samples/sample10_unittest$(EXEEXT)
+ $(CXXLINK) $(samples_sample10_unittest_OBJECTS) $(samples_sample10_unittest_LDADD) $(LIBS)
samples/sample1_unittest.$(OBJEXT): samples/$(am__dirstamp) \
samples/$(DEPDIR)/$(am__dirstamp)
samples/sample1_unittest$(EXEEXT): $(samples_sample1_unittest_OBJECTS) $(samples_sample1_unittest_DEPENDENCIES) samples/$(am__dirstamp)
@@ -1163,6 +1207,11 @@ samples/sample8_unittest.$(OBJEXT): samples/$(am__dirstamp) \
samples/sample8_unittest$(EXEEXT): $(samples_sample8_unittest_OBJECTS) $(samples_sample8_unittest_DEPENDENCIES) samples/$(am__dirstamp)
@rm -f samples/sample8_unittest$(EXEEXT)
$(CXXLINK) $(samples_sample8_unittest_OBJECTS) $(samples_sample8_unittest_LDADD) $(LIBS)
+samples/sample9_unittest.$(OBJEXT): samples/$(am__dirstamp) \
+ samples/$(DEPDIR)/$(am__dirstamp)
+samples/sample9_unittest$(EXEEXT): $(samples_sample9_unittest_OBJECTS) $(samples_sample9_unittest_DEPENDENCIES) samples/$(am__dirstamp)
+ @rm -f samples/sample9_unittest$(EXEEXT)
+ $(CXXLINK) $(samples_sample9_unittest_OBJECTS) $(samples_sample9_unittest_LDADD) $(LIBS)
test/$(am__dirstamp):
@$(MKDIR_P) test
@: > test/$(am__dirstamp)
@@ -1184,6 +1233,11 @@ test/gtest-linked_ptr_test.$(OBJEXT): test/$(am__dirstamp) \
test/gtest-linked_ptr_test$(EXEEXT): $(test_gtest_linked_ptr_test_OBJECTS) $(test_gtest_linked_ptr_test_DEPENDENCIES) test/$(am__dirstamp)
@rm -f test/gtest-linked_ptr_test$(EXEEXT)
$(CXXLINK) $(test_gtest_linked_ptr_test_OBJECTS) $(test_gtest_linked_ptr_test_LDADD) $(LIBS)
+test/gtest-listener_test.$(OBJEXT): test/$(am__dirstamp) \
+ test/$(DEPDIR)/$(am__dirstamp)
+test/gtest-listener_test$(EXEEXT): $(test_gtest_listener_test_OBJECTS) $(test_gtest_listener_test_DEPENDENCIES) test/$(am__dirstamp)
+ @rm -f test/gtest-listener_test$(EXEEXT)
+ $(CXXLINK) $(test_gtest_listener_test_OBJECTS) $(test_gtest_listener_test_LDADD) $(LIBS)
test/gtest-message_test.$(OBJEXT): test/$(am__dirstamp) \
test/$(DEPDIR)/$(am__dirstamp)
test/gtest-message_test$(EXEEXT): $(test_gtest_message_test_OBJECTS) $(test_gtest_message_test_DEPENDENCIES) test/$(am__dirstamp)
@@ -1308,6 +1362,11 @@ test/gtest_repeat_test.$(OBJEXT): test/$(am__dirstamp) \
test/gtest_repeat_test$(EXEEXT): $(test_gtest_repeat_test_OBJECTS) $(test_gtest_repeat_test_DEPENDENCIES) test/$(am__dirstamp)
@rm -f test/gtest_repeat_test$(EXEEXT)
$(CXXLINK) $(test_gtest_repeat_test_OBJECTS) $(test_gtest_repeat_test_LDADD) $(LIBS)
+test/gtest_shuffle_test_.$(OBJEXT): test/$(am__dirstamp) \
+ test/$(DEPDIR)/$(am__dirstamp)
+test/gtest_shuffle_test_$(EXEEXT): $(test_gtest_shuffle_test__OBJECTS) $(test_gtest_shuffle_test__DEPENDENCIES) test/$(am__dirstamp)
+ @rm -f test/gtest_shuffle_test_$(EXEEXT)
+ $(CXXLINK) $(test_gtest_shuffle_test__OBJECTS) $(test_gtest_shuffle_test__LDADD) $(LIBS)
test/gtest_sole_header_test.$(OBJEXT): test/$(am__dirstamp) \
test/$(DEPDIR)/$(am__dirstamp)
test/gtest_sole_header_test$(EXEEXT): $(test_gtest_sole_header_test_OBJECTS) $(test_gtest_sole_header_test_DEPENDENCIES) test/$(am__dirstamp)
@@ -1390,6 +1449,7 @@ mostlyclean-compile:
-rm -f *.$(OBJEXT)
-rm -f samples/sample1.$(OBJEXT)
-rm -f samples/sample1.lo
+ -rm -f samples/sample10_unittest.$(OBJEXT)
-rm -f samples/sample1_unittest.$(OBJEXT)
-rm -f samples/sample2.$(OBJEXT)
-rm -f samples/sample2.lo
@@ -1402,6 +1462,7 @@ mostlyclean-compile:
-rm -f samples/sample6_unittest.$(OBJEXT)
-rm -f samples/sample7_unittest.$(OBJEXT)
-rm -f samples/sample8_unittest.$(OBJEXT)
+ -rm -f samples/sample9_unittest.$(OBJEXT)
-rm -f src/gtest-death-test.$(OBJEXT)
-rm -f src/gtest-death-test.lo
-rm -f src/gtest-filepath.$(OBJEXT)
@@ -1425,6 +1486,7 @@ mostlyclean-compile:
-rm -f src/test_gtest_use_own_tuple_test-gtest-all.$(OBJEXT)
-rm -f test/gtest-filepath_test.$(OBJEXT)
-rm -f test/gtest-linked_ptr_test.$(OBJEXT)
+ -rm -f test/gtest-listener_test.$(OBJEXT)
-rm -f test/gtest-message_test.$(OBJEXT)
-rm -f test/gtest-options_test.$(OBJEXT)
-rm -f test/gtest-param-test2_test.$(OBJEXT)
@@ -1447,6 +1509,7 @@ mostlyclean-compile:
-rm -f test/gtest_pred_impl_unittest.$(OBJEXT)
-rm -f test/gtest_prod_test.$(OBJEXT)
-rm -f test/gtest_repeat_test.$(OBJEXT)
+ -rm -f test/gtest_shuffle_test_.$(OBJEXT)
-rm -f test/gtest_sole_header_test.$(OBJEXT)
-rm -f test/gtest_stress_test.$(OBJEXT)
-rm -f test/gtest_uninitialized_test_.$(OBJEXT)
@@ -1467,6 +1530,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample10_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample1_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample2.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample2_unittest.Po@am__quote@
@@ -1477,6 +1541,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample6_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample7_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample8_unittest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@samples/$(DEPDIR)/sample9_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gtest-death-test.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gtest-filepath.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gtest-port.Plo@am__quote@
@@ -1493,6 +1558,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_gtest_use_own_tuple_test-gtest-all.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest-filepath_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest-linked_ptr_test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest-listener_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest-message_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest-options_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest-param-test2_test.Po@am__quote@
@@ -1515,6 +1581,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest_pred_impl_unittest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest_prod_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest_repeat_test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest_shuffle_test_.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest_sole_header_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest_stress_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/gtest_uninitialized_test_.Po@am__quote@
diff --git a/gtest/README b/gtest/README
index cb8d4de..a9172c5 100644
--- a/gtest/README
+++ b/gtest/README
@@ -190,9 +190,16 @@ see 'gtest-config --help' for more detailed information.
g++ $(../../my_gtest_build/scripts/gtest-config ...) ...
### Windows ###
-Open the gtest.sln file in the msvc/ folder using Visual Studio, and
-you are ready to build Google Test the same way you build any Visual
-Studio project.
+The msvc\ folder contains two solutions with Visual C++ projects. Open the
+gtest.sln or gtest-md.sln file using Visual Studio, and you are ready to
+build Google Test the same way you build any Visual Studio project. Files
+that have names ending with -md use DLL versions of Microsoft runtime
+libraries (the /MD or the /MDd compiler option). Files without that suffix
+use static versions of the runtime libraries (the /MT or the /MTd option).
+Please note that one must use the same option to compile both gtest and his
+test code. If you use Visual Studio 2005 or above, we recommend the -md
+version as /MD is the default for new projects in these versions of Visual
+Studio.
### Mac OS X (universal-binary framework) ###
Open the gtest.xcodeproj in the xcode/ folder using Xcode. Build the "gtest"
@@ -201,10 +208,10 @@ directory (selected in the Xcode "Preferences..." -> "Building" pane and
defaults to xcode/build). Alternatively, at the command line, enter:
xcodebuild
-
-This will build the "Release" configuration of the gtest.framework, but you can
-select the "Debug" configuration with a command line option. See the
-"xcodebuild" man page for more information.
+
+This will build the "Release" configuration of gtest.framework in your
+default build location. See the "xcodebuild" man page for more information about
+building different configurations and building in different locations.
To test the gtest.framework in Xcode, change the active target to "Check" and
then build. This target builds all of the tests and then runs them. Don't worry
@@ -212,21 +219,39 @@ if you see some errors. Xcode reports all test failures (even the intentional
ones) as errors. However, you should see a "Build succeeded" message at the end
of the build log. To run all of the tests from the command line, enter:
- xcodebuid -target Check
+ xcodebuild -target Check
+
+Installation with xcodebuild requires specifying an installation desitination
+directory, known as the DSTROOT. Three items will be installed when using
+xcodebuild:
+
+ $DSTROOT/Library/Frameworks/gtest.framework
+ $DSTROOT/usr/local/lib/libgtest.a
+ $DSTROOT/usr/local/lib/libgtest_main.a
+
+You specify the installation directory on the command line with the other
+xcodebuild options. Here's how you would install in a user-visible location:
+
+ xcodebuild install DSTROOT=~
+
+To perform a system-wide inistall, escalate to an administrator and specify
+the file system root as the DSTROOT:
+
+ sudo xcodebuild install DSTROOT=/
+
+To uninstall gtest.framework via the command line, you need to delete the three
+items listed above. Remember to escalate to an administrator if deleting these
+from the system-wide location using the commands listed below:
+
+ sudo rm -r /Library/Frameworks/gtest.framework
+ sudo rm /usr/local/lib/libgtest.a
+ sudo rm /usr/local/lib/libgtest_main.a
It is also possible to build and execute individual tests within Xcode. Each
test has its own Xcode "Target" and Xcode "Executable". To build any of the
tests, change the active target and the active executable to the test of
interest and then build and run.
-NOTE: Several tests use a Python script to run the test executable. These can be
-run from Xcode by creating a "Custom Executable". For example, to run the Python
-script which executes the gtest_color_test, select the Project->New Custom
-Executable... menu item. When prompted, set the "Executable Name" to something
-like "run_gtest_color_test" and set the "Executable Path" to the path of the
-gtest_color_test.py script. Finally, choose "Run" from the Run menu and check
-the Console for the results.
-
Individual tests can be built from the command line using:
xcodebuild -target <test_name>
@@ -235,21 +260,14 @@ These tests can be executed from the command line by moving to the build
directory and then (in bash)
export DYLD_FRAMEWORK_PATH=`pwd`
- ./<test_name> # (if it is not a python test, e.g. ./gtest_unittest)
- # OR
- ./<test_name>.py # (if it is a python test, e.g. ./gtest_color_test.py)
-
-To use the gtest.framework for your own tests, first, add the framework to Xcode
-project. Next, create a new executable target and add the framework to the
-"Link Binary With Libraries" build phase. Select "Edit Active Executable" from
-the "Project" menu. In the "Arguments" tab, add
-
- "DYLD_FRAMEWORK_PATH" : "/real/framework/path"
-
-in the "Variables to be set in the environment:" list, where you replace
-"/real/framework/path" with the actual location of the gtest.framework. Now
-when you run your executable, it will load the framework and your test will
-run as expected.
+ ./<test_name> # (e.g. ./gtest_unittest)
+
+To use gtest.framework for your own tests, first, install the framework using
+the steps described above. Then add it to your Xcode project by selecting
+Project->Add to Project... from the main menu. Next, add libgtest_main.a from
+gtest.framework/Resources directory using the same menu command. Finally,
+create a new executable target and add gtest.framework and libgtest_main.a to
+the "Link Binary With Libraries" build phase.
### Using GNU Make ###
The make/ directory contains a Makefile that you can use to build
diff --git a/gtest/configure b/gtest/configure
index 876ba74..cb3877f 100755
--- a/gtest/configure
+++ b/gtest/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for Google C++ Testing Framework 1.3.0.
+# Generated by GNU Autoconf 2.61 for Google C++ Testing Framework 1.4.0.
#
# Report bugs to <googletestframework@googlegroups.com>.
#
@@ -723,8 +723,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='Google C++ Testing Framework'
PACKAGE_TARNAME='gtest'
-PACKAGE_VERSION='1.3.0'
-PACKAGE_STRING='Google C++ Testing Framework 1.3.0'
+PACKAGE_VERSION='1.4.0'
+PACKAGE_STRING='Google C++ Testing Framework 1.4.0'
PACKAGE_BUGREPORT='googletestframework@googlegroups.com'
ac_unique_file="./COPYING"
@@ -1398,7 +1398,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Google C++ Testing Framework 1.3.0 to adapt to many kinds of systems.
+\`configure' configures Google C++ Testing Framework 1.4.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1468,7 +1468,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Google C++ Testing Framework 1.3.0:";;
+ short | recursive ) echo "Configuration of Google C++ Testing Framework 1.4.0:";;
esac
cat <<\_ACEOF
@@ -1567,7 +1567,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Google C++ Testing Framework configure 1.3.0
+Google C++ Testing Framework configure 1.4.0
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1581,7 +1581,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Google C++ Testing Framework $as_me 1.3.0, which was
+It was created by Google C++ Testing Framework $as_me 1.4.0, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
@@ -2285,7 +2285,7 @@ fi
# Define the identity of the package.
PACKAGE='gtest'
- VERSION='1.3.0'
+ VERSION='1.4.0'
cat >>confdefs.h <<_ACEOF
@@ -16123,7 +16123,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Google C++ Testing Framework $as_me 1.3.0, which was
+This file was extended by Google C++ Testing Framework $as_me 1.4.0, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -16176,7 +16176,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-Google C++ Testing Framework config.status 1.3.0
+Google C++ Testing Framework config.status 1.4.0
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
diff --git a/gtest/configure.ac b/gtest/configure.ac
index 92670bf..709b024 100644
--- a/gtest/configure.ac
+++ b/gtest/configure.ac
@@ -5,7 +5,7 @@ m4_include(m4/acx_pthread.m4)
# "[1.0.1]"). It also asumes that there won't be any closing parenthesis
# between "AC_INIT(" and the closing ")" including comments and strings.
AC_INIT([Google C++ Testing Framework],
- [1.3.0],
+ [1.4.0],
[googletestframework@googlegroups.com],
[gtest])
diff --git a/gtest/include/gtest/gtest-death-test.h b/gtest/include/gtest/gtest-death-test.h
index 410654b..fdb497f 100644
--- a/gtest/include/gtest/gtest-death-test.h
+++ b/gtest/include/gtest/gtest-death-test.h
@@ -181,6 +181,9 @@ class ExitedWithCode {
explicit ExitedWithCode(int exit_code);
bool operator()(int exit_status) const;
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ExitedWithCode& other);
+
const int exit_code_;
};
@@ -242,10 +245,10 @@ class KilledBySignal {
#ifdef NDEBUG
#define EXPECT_DEBUG_DEATH(statement, regex) \
- do { statement; } while (false)
+ do { statement; } while (::testing::internal::AlwaysFalse())
#define ASSERT_DEBUG_DEATH(statement, regex) \
- do { statement; } while (false)
+ do { statement; } while (::testing::internal::AlwaysFalse())
#else
@@ -260,7 +263,7 @@ class KilledBySignal {
// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and
// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if
-// death tests are supported; otherwise they expand to empty. This is
+// death tests are supported; otherwise they just issue a warning. This is
// useful when you are combining death test assertions with normal test
// assertions in one test.
#if GTEST_HAS_DEATH_TEST
@@ -270,13 +273,9 @@ class KilledBySignal {
ASSERT_DEATH(statement, regex)
#else
#define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
- GTEST_LOG_(WARNING, \
- "Death tests are not supported on this platform. The statement" \
- " '" #statement "' can not be verified")
+ GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, )
#define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
- GTEST_LOG_(WARNING, \
- "Death tests are not supported on this platform. The statement" \
- " '" #statement "' can not be verified")
+ GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return)
#endif
} // namespace testing
diff --git a/gtest/include/gtest/gtest-spi.h b/gtest/include/gtest/gtest-spi.h
index a4e387a..2953411 100644
--- a/gtest/include/gtest/gtest-spi.h
+++ b/gtest/include/gtest/gtest-spi.h
@@ -97,12 +97,12 @@ class SingleFailureChecker {
public:
// The constructor remembers the arguments.
SingleFailureChecker(const TestPartResultArray* results,
- TestPartResultType type,
+ TestPartResult::Type type,
const char* substr);
~SingleFailureChecker();
private:
const TestPartResultArray* const results_;
- const TestPartResultType type_;
+ const TestPartResult::Type type_;
const String substr_;
GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker);
@@ -143,14 +143,14 @@ class SingleFailureChecker {
};\
::testing::TestPartResultArray gtest_failures;\
::testing::internal::SingleFailureChecker gtest_checker(\
- &gtest_failures, ::testing::TPRT_FATAL_FAILURE, (substr));\
+ &gtest_failures, ::testing::TestPartResult::kFatalFailure, (substr));\
{\
::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
::testing::ScopedFakeTestPartResultReporter:: \
INTERCEPT_ONLY_CURRENT_THREAD, &gtest_failures);\
GTestExpectFatalFailureHelper::Execute();\
}\
- } while (false)
+ } while (::testing::internal::AlwaysFalse())
#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \
do { \
@@ -160,14 +160,14 @@ class SingleFailureChecker {
};\
::testing::TestPartResultArray gtest_failures;\
::testing::internal::SingleFailureChecker gtest_checker(\
- &gtest_failures, ::testing::TPRT_FATAL_FAILURE, (substr));\
+ &gtest_failures, ::testing::TestPartResult::kFatalFailure, (substr));\
{\
::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
::testing::ScopedFakeTestPartResultReporter:: \
INTERCEPT_ALL_THREADS, &gtest_failures);\
GTestExpectFatalFailureHelper::Execute();\
}\
- } while (false)
+ } while (::testing::internal::AlwaysFalse())
// A macro for testing Google Test assertions or code that's expected to
// generate Google Test non-fatal failures. It asserts that the given
@@ -190,32 +190,43 @@ class SingleFailureChecker {
// Note that even though the implementations of the following two
// macros are much alike, we cannot refactor them to use a common
// helper macro, due to some peculiarity in how the preprocessor
-// works. The AcceptsMacroThatExpandsToUnprotectedComma test in
-// gtest_unittest.cc will fail to compile if we do that.
+// works. If we do that, the code won't compile when the user gives
+// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that
+// expands to code containing an unprotected comma. The
+// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc
+// catches that.
+//
+// For the same reason, we have to write
+// if (::testing::internal::AlwaysTrue()) { statement; }
+// instead of
+// GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)
+// to avoid an MSVC warning on unreachable code.
#define EXPECT_NONFATAL_FAILURE(statement, substr) \
do {\
::testing::TestPartResultArray gtest_failures;\
::testing::internal::SingleFailureChecker gtest_checker(\
- &gtest_failures, ::testing::TPRT_NONFATAL_FAILURE, (substr));\
+ &gtest_failures, ::testing::TestPartResult::kNonFatalFailure, \
+ (substr));\
{\
::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
::testing::ScopedFakeTestPartResultReporter:: \
INTERCEPT_ONLY_CURRENT_THREAD, &gtest_failures);\
- statement;\
+ if (::testing::internal::AlwaysTrue()) { statement; }\
}\
- } while (false)
+ } while (::testing::internal::AlwaysFalse())
#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \
do {\
::testing::TestPartResultArray gtest_failures;\
::testing::internal::SingleFailureChecker gtest_checker(\
- &gtest_failures, ::testing::TPRT_NONFATAL_FAILURE, (substr));\
+ &gtest_failures, ::testing::TestPartResult::kNonFatalFailure, \
+ (substr));\
{\
::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS,\
&gtest_failures);\
- statement;\
+ if (::testing::internal::AlwaysTrue()) { statement; }\
}\
- } while (false)
+ } while (::testing::internal::AlwaysFalse())
#endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_
diff --git a/gtest/include/gtest/gtest-test-part.h b/gtest/include/gtest/gtest-test-part.h
index d5b2713..58e7df9 100644
--- a/gtest/include/gtest/gtest-test-part.h
+++ b/gtest/include/gtest/gtest-test-part.h
@@ -39,24 +39,24 @@
namespace testing {
-// The possible outcomes of a test part (i.e. an assertion or an
-// explicit SUCCEED(), FAIL(), or ADD_FAILURE()).
-enum TestPartResultType {
- TPRT_SUCCESS, // Succeeded.
- TPRT_NONFATAL_FAILURE, // Failed but the test can continue.
- TPRT_FATAL_FAILURE // Failed and the test should be terminated.
-};
-
// A copyable object representing the result of a test part (i.e. an
// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()).
//
// Don't inherit from TestPartResult as its destructor is not virtual.
class TestPartResult {
public:
+ // The possible outcomes of a test part (i.e. an assertion or an
+ // explicit SUCCEED(), FAIL(), or ADD_FAILURE()).
+ enum Type {
+ kSuccess, // Succeeded.
+ kNonFatalFailure, // Failed but the test can continue.
+ kFatalFailure // Failed and the test should be terminated.
+ };
+
// C'tor. TestPartResult does NOT have a default constructor.
// Always use this constructor (with parameters) to create a
// TestPartResult object.
- TestPartResult(TestPartResultType type,
+ TestPartResult(Type type,
const char* file_name,
int line_number,
const char* message)
@@ -68,7 +68,7 @@ class TestPartResult {
}
// Gets the outcome of the test part.
- TestPartResultType type() const { return type_; }
+ Type type() const { return type_; }
// Gets the name of the source file where the test part took place, or
// NULL if it's unknown.
@@ -85,18 +85,18 @@ class TestPartResult {
const char* message() const { return message_.c_str(); }
// Returns true iff the test part passed.
- bool passed() const { return type_ == TPRT_SUCCESS; }
+ bool passed() const { return type_ == kSuccess; }
// Returns true iff the test part failed.
- bool failed() const { return type_ != TPRT_SUCCESS; }
+ bool failed() const { return type_ != kSuccess; }
// Returns true iff the test part non-fatally failed.
- bool nonfatally_failed() const { return type_ == TPRT_NONFATAL_FAILURE; }
+ bool nonfatally_failed() const { return type_ == kNonFatalFailure; }
// Returns true iff the test part fatally failed.
- bool fatally_failed() const { return type_ == TPRT_FATAL_FAILURE; }
+ bool fatally_failed() const { return type_ == kFatalFailure; }
private:
- TestPartResultType type_;
+ Type type_;
// Gets the summary of the failure message by omitting the stack
// trace in it.
diff --git a/gtest/include/gtest/gtest.h b/gtest/include/gtest/gtest.h
index 90c36a5..9be15fb 100644
--- a/gtest/include/gtest/gtest.h
+++ b/gtest/include/gtest/gtest.h
@@ -51,9 +51,6 @@
#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
#define GTEST_INCLUDE_GTEST_GTEST_H_
-// The following platform macro is used throughout Google Test:
-// _WIN32_WCE Windows CE (set in project files)
-
#include <limits>
#include <gtest/internal/gtest-internal.h>
#include <gtest/internal/gtest-string.h>
@@ -130,7 +127,7 @@ GTEST_DECLARE_int32_(repeat);
// stack frames in failure stack traces.
GTEST_DECLARE_bool_(show_internal_stack_frames);
-// When this flag is specified, tests' order is randomized on every run.
+// When this flag is specified, tests' order is randomized on every iteration.
GTEST_DECLARE_bool_(shuffle);
// This flag specifies the maximum number of stack frames to be
@@ -150,16 +147,19 @@ namespace internal {
class AssertHelper;
class DefaultGlobalTestPartResultReporter;
class ExecDeathTest;
+class NoExecDeathTest;
class FinalSuccessChecker;
class GTestFlagSaver;
-class TestCase;
class TestInfoImpl;
class TestResultAccessor;
-class UnitTestAccessor;
+class TestEventListenersAccessor;
+class TestEventRepeater;
class WindowsDeathTest;
class UnitTestImpl* GetUnitTestImpl();
-void ReportFailureInUnknownLocation(TestPartResultType result_type,
+void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
const String& message);
+class PrettyUnitTestResultPrinter;
+class XmlUnitTestResultPrinter;
// Converts a streamable value to a String. A NULL pointer is
// converted to "(null)". When the input value is a ::string,
@@ -366,8 +366,6 @@ class Test {
typedef internal::TimeInMillis TimeInMillis;
-namespace internal {
-
// A copyable object representing a user specified test property which can be
// output as a key/value string pair.
//
@@ -450,14 +448,14 @@ class TestResult {
const TestProperty& GetTestProperty(int i) const;
private:
+ friend class TestInfo;
+ friend class UnitTest;
friend class internal::DefaultGlobalTestPartResultReporter;
friend class internal::ExecDeathTest;
friend class internal::TestInfoImpl;
friend class internal::TestResultAccessor;
friend class internal::UnitTestImpl;
friend class internal::WindowsDeathTest;
- friend class testing::TestInfo;
- friend class testing::UnitTest;
// Gets the vector of TestPartResults.
const internal::Vector<TestPartResult>& test_part_results() const {
@@ -516,8 +514,6 @@ class TestResult {
GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult);
}; // class TestResult
-} // namespace internal
-
// A TestInfo object stores the following information about a test:
//
// Test case name
@@ -566,16 +562,16 @@ class TestInfo {
bool should_run() const;
// Returns the result of the test.
- const internal::TestResult* result() const;
+ const TestResult* result() const;
private:
#if GTEST_HAS_DEATH_TEST
friend class internal::DefaultDeathTestFactory;
#endif // GTEST_HAS_DEATH_TEST
+ friend class Test;
+ friend class TestCase;
friend class internal::TestInfoImpl;
friend class internal::UnitTestImpl;
- friend class Test;
- friend class internal::TestCase;
friend TestInfo* internal::MakeAndRegisterTestInfo(
const char* test_case_name, const char* name,
const char* test_case_comment, const char* comment,
@@ -608,8 +604,6 @@ class TestInfo {
GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo);
};
-namespace internal {
-
// A test case, which consists of a vector of TestInfos.
//
// TestCase is not copyable.
@@ -670,7 +664,7 @@ class TestCase {
const TestInfo* GetTestInfo(int i) const;
private:
- friend class testing::Test;
+ friend class Test;
friend class internal::UnitTestImpl;
// Gets the (mutable) vector of TestInfos in this TestCase.
@@ -681,6 +675,10 @@ class TestCase {
return *test_info_list_;
}
+ // Returns the i-th test among all the tests. i can range from 0 to
+ // total_test_count() - 1. If i is not in that range, returns NULL.
+ TestInfo* GetMutableTestInfo(int i);
+
// Sets the should_run member.
void set_should_run(bool should) { should_run_ = should; }
@@ -699,9 +697,6 @@ class TestCase {
// Runs every test in this TestCase.
void Run();
- // Runs every test in the given TestCase.
- static void RunTestCase(TestCase * test_case) { test_case->Run(); }
-
// Returns true iff test passed.
static bool TestPassed(const TestInfo * test_info);
@@ -714,12 +709,23 @@ class TestCase {
// Returns true if the given test should run.
static bool ShouldRunTest(const TestInfo *test_info);
+ // Shuffles the tests in this test case.
+ void ShuffleTests(internal::Random* random);
+
+ // Restores the test order to before the first shuffle.
+ void UnshuffleTests();
+
// Name of the test case.
internal::String name_;
// Comment on the test case.
internal::String comment_;
- // Vector of TestInfos.
- internal::Vector<TestInfo*>* test_info_list_;
+ // The vector of TestInfos in their original order. It owns the
+ // elements in the vector.
+ const internal::scoped_ptr<internal::Vector<TestInfo*> > test_info_list_;
+ // Provides a level of indirection for the test list to allow easy
+ // shuffling and restoring the test order. The i-th element in this
+ // vector is the index of the i-th test in the shuffled test list.
+ const internal::scoped_ptr<internal::Vector<int> > test_indices_;
// Pointer to the function that sets up the test case.
Test::SetUpTestCaseFunc set_up_tc_;
// Pointer to the function that tears down the test case.
@@ -733,8 +739,6 @@ class TestCase {
GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase);
};
-} // namespace internal
-
// An Environment object is capable of setting up and tearing down an
// environment. The user should subclass this to define his own
// environment(s).
@@ -766,6 +770,158 @@ class Environment {
virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; }
};
+// The interface for tracing execution of tests. The methods are organized in
+// the order the corresponding events are fired.
+class TestEventListener {
+ public:
+ virtual ~TestEventListener() {}
+
+ // Fired before any test activity starts.
+ virtual void OnTestProgramStart(const UnitTest& unit_test) = 0;
+
+ // Fired before each iteration of tests starts. There may be more than
+ // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration
+ // index, starting from 0.
+ virtual void OnTestIterationStart(const UnitTest& unit_test,
+ int iteration) = 0;
+
+ // Fired before environment set-up for each iteration of tests starts.
+ virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0;
+
+ // Fired after environment set-up for each iteration of tests ends.
+ virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0;
+
+ // Fired before the test case starts.
+ virtual void OnTestCaseStart(const TestCase& test_case) = 0;
+
+ // Fired before the test starts.
+ virtual void OnTestStart(const TestInfo& test_info) = 0;
+
+ // Fired after a failed assertion or a SUCCESS().
+ virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0;
+
+ // Fired after the test ends.
+ virtual void OnTestEnd(const TestInfo& test_info) = 0;
+
+ // Fired after the test case ends.
+ virtual void OnTestCaseEnd(const TestCase& test_case) = 0;
+
+ // Fired before environment tear-down for each iteration of tests starts.
+ virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0;
+
+ // Fired after environment tear-down for each iteration of tests ends.
+ virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0;
+
+ // Fired after each iteration of tests finishes.
+ virtual void OnTestIterationEnd(const UnitTest& unit_test,
+ int iteration) = 0;
+
+ // Fired after all test activities have ended.
+ virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0;
+};
+
+// The convenience class for users who need to override just one or two
+// methods and are not concerned that a possible change to a signature of
+// the methods they override will not be caught during the build. For
+// comments about each method please see the definition of TestEventListener
+// above.
+class EmptyTestEventListener : public TestEventListener {
+ public:
+ virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {}
+ virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,
+ int /*iteration*/) {}
+ virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {}
+ virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {}
+ virtual void OnTestCaseStart(const TestCase& /*test_case*/) {}
+ virtual void OnTestStart(const TestInfo& /*test_info*/) {}
+ virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {}
+ virtual void OnTestEnd(const TestInfo& /*test_info*/) {}
+ virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {}
+ virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {}
+ virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {}
+ virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,
+ int /*iteration*/) {}
+ virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {}
+};
+
+// TestEventListeners lets users add listeners to track events in Google Test.
+class TestEventListeners {
+ public:
+ TestEventListeners();
+ ~TestEventListeners();
+
+ // Appends an event listener to the end of the list. Google Test assumes
+ // the ownership of the listener (i.e. it will delete the listener when
+ // the test program finishes).
+ void Append(TestEventListener* listener);
+
+ // Removes the given event listener from the list and returns it. It then
+ // becomes the caller's responsibility to delete the listener. Returns
+ // NULL if the listener is not found in the list.
+ TestEventListener* Release(TestEventListener* listener);
+
+ // Returns the standard listener responsible for the default console
+ // output. Can be removed from the listeners list to shut down default
+ // console output. Note that removing this object from the listener list
+ // with Release transfers its ownership to the caller and makes this
+ // function return NULL the next time.
+ TestEventListener* default_result_printer() const {
+ return default_result_printer_;
+ }
+
+ // Returns the standard listener responsible for the default XML output
+ // controlled by the --gtest_output=xml flag. Can be removed from the
+ // listeners list by users who want to shut down the default XML output
+ // controlled by this flag and substitute it with custom one. Note that
+ // removing this object from the listener list with Release transfers its
+ // ownership to the caller and makes this function return NULL the next
+ // time.
+ TestEventListener* default_xml_generator() const {
+ return default_xml_generator_;
+ }
+
+ private:
+ friend class TestCase;
+ friend class internal::DefaultGlobalTestPartResultReporter;
+ friend class internal::NoExecDeathTest;
+ friend class internal::TestEventListenersAccessor;
+ friend class internal::TestInfoImpl;
+ friend class internal::UnitTestImpl;
+
+ // Returns repeater that broadcasts the TestEventListener events to all
+ // subscribers.
+ TestEventListener* repeater();
+
+ // Sets the default_result_printer attribute to the provided listener.
+ // The listener is also added to the listener list and previous
+ // default_result_printer is removed from it and deleted. The listener can
+ // also be NULL in which case it will not be added to the list. Does
+ // nothing if the previous and the current listener objects are the same.
+ void SetDefaultResultPrinter(TestEventListener* listener);
+
+ // Sets the default_xml_generator attribute to the provided listener. The
+ // listener is also added to the listener list and previous
+ // default_xml_generator is removed from it and deleted. The listener can
+ // also be NULL in which case it will not be added to the list. Does
+ // nothing if the previous and the current listener objects are the same.
+ void SetDefaultXmlGenerator(TestEventListener* listener);
+
+ // Controls whether events will be forwarded by the repeater to the
+ // listeners in the list.
+ bool EventForwardingEnabled() const;
+ void SuppressEventForwarding();
+
+ // The actual list of listeners.
+ internal::TestEventRepeater* repeater_;
+ // Listener responsible for the standard result output.
+ TestEventListener* default_result_printer_;
+ // Listener responsible for the creation of the XML output file.
+ TestEventListener* default_xml_generator_;
+
+ // We disallow copying TestEventListeners.
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners);
+};
+
// A UnitTest consists of a vector of TestCases.
//
// This is a singleton class. The only instance of UnitTest is
@@ -797,7 +953,7 @@ class UnitTest {
// Returns the TestCase object for the test that's currently running,
// or NULL if no test is running.
- const internal::TestCase* current_test_case() const;
+ const TestCase* current_test_case() const;
// Returns the TestInfo object for the test that's currently running,
// or NULL if no test is running.
@@ -814,36 +970,6 @@ class UnitTest {
internal::ParameterizedTestCaseRegistry& parameterized_test_registry();
#endif // GTEST_HAS_PARAM_TEST
- private:
- // Registers and returns a global test environment. When a test
- // program is run, all global test environments will be set-up in
- // the order they were registered. After all tests in the program
- // have finished, all global test environments will be torn-down in
- // the *reverse* order they were registered.
- //
- // The UnitTest object takes ownership of the given environment.
- //
- // This method can only be called from the main thread.
- Environment* AddEnvironment(Environment* env);
-
- // Adds a TestPartResult to the current TestResult object. All
- // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc)
- // eventually call this to report their results. The user code
- // should use the assertion macros instead of calling this directly.
- void AddTestPartResult(TestPartResultType result_type,
- const char* file_name,
- int line_number,
- const internal::String& message,
- const internal::String& os_stack_trace);
-
- // Adds a TestProperty to the current TestResult object. If the result already
- // contains a property with the same key, the value will be updated.
- void RecordPropertyForCurrentTest(const char* key, const char* value);
-
- // Accessors for the implementation object.
- internal::UnitTestImpl* impl() { return impl_; }
- const internal::UnitTestImpl* impl() const { return impl_; }
-
// Gets the number of successful test cases.
int successful_test_case_count() const;
@@ -884,29 +1010,56 @@ class UnitTest {
// Gets the i-th test case among all the test cases. i can range from 0 to
// total_test_case_count() - 1. If i is not in that range, returns NULL.
- const internal::TestCase* GetTestCase(int i) const;
+ const TestCase* GetTestCase(int i) const;
- // ScopedTrace is a friend as it needs to modify the per-thread
- // trace stack, which is a private member of UnitTest.
- // TODO(vladl@google.com): Order all declarations according to the style
- // guide after publishing of the above methods is done.
+ // Returns the list of event listeners that can be used to track events
+ // inside Google Test.
+ TestEventListeners& listeners();
+
+ private:
+ // Registers and returns a global test environment. When a test
+ // program is run, all global test environments will be set-up in
+ // the order they were registered. After all tests in the program
+ // have finished, all global test environments will be torn-down in
+ // the *reverse* order they were registered.
+ //
+ // The UnitTest object takes ownership of the given environment.
+ //
+ // This method can only be called from the main thread.
+ Environment* AddEnvironment(Environment* env);
+
+ // Adds a TestPartResult to the current TestResult object. All
+ // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc)
+ // eventually call this to report their results. The user code
+ // should use the assertion macros instead of calling this directly.
+ void AddTestPartResult(TestPartResult::Type result_type,
+ const char* file_name,
+ int line_number,
+ const internal::String& message,
+ const internal::String& os_stack_trace);
+
+ // Adds a TestProperty to the current TestResult object. If the result already
+ // contains a property with the same key, the value will be updated.
+ void RecordPropertyForCurrentTest(const char* key, const char* value);
+
+ // Gets the i-th test case among all the test cases. i can range from 0 to
+ // total_test_case_count() - 1. If i is not in that range, returns NULL.
+ TestCase* GetMutableTestCase(int i);
+
+ // Accessors for the implementation object.
+ internal::UnitTestImpl* impl() { return impl_; }
+ const internal::UnitTestImpl* impl() const { return impl_; }
+
+ // These classes and funcions are friends as they need to access private
+ // members of UnitTest.
+ friend class Test;
+ friend class internal::AssertHelper;
friend class internal::ScopedTrace;
friend Environment* AddGlobalTestEnvironment(Environment* env);
friend internal::UnitTestImpl* internal::GetUnitTestImpl();
- friend class internal::AssertHelper;
- friend class Test;
friend void internal::ReportFailureInUnknownLocation(
- TestPartResultType result_type,
+ TestPartResult::Type result_type,
const internal::String& message);
- // TODO(vladl@google.com): Remove these when publishing the new accessors.
- friend class PrettyUnitTestResultPrinter;
- friend class XmlUnitTestResultPrinter;
- friend class internal::UnitTestAccessor;
- friend class FinalSuccessChecker;
- FRIEND_TEST(ApiTest, UnitTestImmutableAccessorsWork);
- FRIEND_TEST(ApiTest, TestCaseImmutableAccessorsWork);
- FRIEND_TEST(ApiTest, DisabledTestCaseAccessorsWork);
-
// Creates an empty UnitTest.
UnitTest();
@@ -1297,16 +1450,38 @@ AssertionResult DoubleNearPredFormat(const char* expr1,
class AssertHelper {
public:
// Constructor.
- AssertHelper(TestPartResultType type, const char* file, int line,
+ AssertHelper(TestPartResult::Type type,
+ const char* file,
+ int line,
const char* message);
+ ~AssertHelper();
+
// Message assignment is a semantic trick to enable assertion
// streaming; see the GTEST_MESSAGE_ macro below.
void operator=(const Message& message) const;
+
private:
- TestPartResultType const type_;
- const char* const file_;
- int const line_;
- String const message_;
+ // We put our data in a struct so that the size of the AssertHelper class can
+ // be as small as possible. This is important because gcc is incapable of
+ // re-using stack space even for temporary variables, so every EXPECT_EQ
+ // reserves stack space for another AssertHelper.
+ struct AssertHelperData {
+ AssertHelperData(TestPartResult::Type t,
+ const char* srcfile,
+ int line_num,
+ const char* msg)
+ : type(t), file(srcfile), line(line_num), message(msg) { }
+
+ TestPartResult::Type const type;
+ const char* const file;
+ int const line;
+ String const message;
+
+ private:
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData);
+ };
+
+ AssertHelperData* const data_;
GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper);
};
diff --git a/gtest/include/gtest/internal/gtest-death-test-internal.h b/gtest/include/gtest/internal/gtest-death-test-internal.h
index 143e58a..5aba1a0 100644
--- a/gtest/include/gtest/internal/gtest-death-test-internal.h
+++ b/gtest/include/gtest/internal/gtest-death-test-internal.h
@@ -153,7 +153,7 @@ bool ExitedUnsuccessfully(int exit_status);
// ASSERT_EXIT*, and EXPECT_EXIT*.
#define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
- if (true) { \
+ if (::testing::internal::AlwaysTrue()) { \
const ::testing::internal::RE& gtest_regex = (regex); \
::testing::internal::DeathTest* gtest_dt; \
if (!::testing::internal::DeathTest::Create(#statement, &gtest_regex, \
@@ -172,7 +172,7 @@ bool ExitedUnsuccessfully(int exit_status);
case ::testing::internal::DeathTest::EXECUTE_TEST: { \
::testing::internal::DeathTest::ReturnSentinel \
gtest_sentinel(gtest_dt); \
- GTEST_HIDE_UNREACHABLE_CODE_(statement); \
+ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \
break; \
} \
@@ -219,6 +219,53 @@ class InternalRunDeathTestFlag {
// the flag is specified; otherwise returns NULL.
InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();
+#else // GTEST_HAS_DEATH_TEST
+
+// This macro is used for implementing macros such as
+// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where
+// death tests are not supported. Those macros must compile on such systems
+// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on
+// systems that support death tests. This allows one to write such a macro
+// on a system that does not support death tests and be sure that it will
+// compile on a death-test supporting system.
+//
+// Parameters:
+// statement - A statement that a macro such as EXPECT_DEATH would test
+// for program termination. This macro has to make sure this
+// statement is compiled but not executed, to ensure that
+// EXPECT_DEATH_IF_SUPPORTED compiles with a certain
+// parameter iff EXPECT_DEATH compiles with it.
+// regex - A regex that a macro such as EXPECT_DEATH would use to test
+// the output of statement. This parameter has to be
+// compiled but not evaluated by this macro, to ensure that
+// this macro only accepts expressions that a macro such as
+// EXPECT_DEATH would accept.
+// terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED
+// and a return statement for ASSERT_DEATH_IF_SUPPORTED.
+// This ensures that ASSERT_DEATH_IF_SUPPORTED will not
+// compile inside functions where ASSERT_DEATH doesn't
+// compile.
+//
+// The branch that has an always false condition is used to ensure that
+// statement and regex are compiled (and thus syntactically correct) but
+// never executed. The unreachable code macro protects the terminator
+// statement from generating an 'unreachable code' warning in case
+// statement unconditionally returns or throws. The Message constructor at
+// the end allows the syntax of streaming additional messages into the
+// macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH.
+#define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \
+ GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
+ if (::testing::internal::AlwaysTrue()) { \
+ GTEST_LOG_(WARNING) \
+ << "Death tests are not supported on this platform.\n" \
+ << "Statement '" #statement "' cannot be verified."; \
+ } else if (::testing::internal::AlwaysFalse()) { \
+ ::testing::internal::RE::PartialMatch(".*", (regex)); \
+ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
+ terminator; \
+ } else \
+ ::testing::Message()
+
#endif // GTEST_HAS_DEATH_TEST
} // namespace internal
diff --git a/gtest/include/gtest/internal/gtest-internal.h b/gtest/include/gtest/internal/gtest-internal.h
index be37726..7033b0c 100644
--- a/gtest/include/gtest/internal/gtest-internal.h
+++ b/gtest/include/gtest/internal/gtest-internal.h
@@ -107,7 +107,6 @@ class Test; // Represents a test.
class TestInfo; // Information about a test.
class TestPartResult; // Result of a test part.
class UnitTest; // A collection of test cases.
-class UnitTestEventListenerInterface; // Listens to Google Test events.
namespace internal {
@@ -726,8 +725,8 @@ class TypeParameterizedTestCase {
template <GTEST_TEMPLATE_ Fixture, typename Types>
class TypeParameterizedTestCase<Fixture, Templates0, Types> {
public:
- static bool Register(const char* prefix, const char* case_name,
- const char* test_names) {
+ static bool Register(const char* /*prefix*/, const char* /*case_name*/,
+ const char* /*test_names*/) {
return true;
}
};
@@ -746,9 +745,37 @@ class TypeParameterizedTestCase<Fixture, Templates0, Types> {
// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.
String GetCurrentOsStackTraceExceptTop(UnitTest* unit_test, int skip_count);
-// A helper for suppressing warnings on unreachable code in some macros.
+// Helpers for suppressing warnings on unreachable code or constant
+// condition.
+
+// Always returns true.
bool AlwaysTrue();
+// Always returns false.
+inline bool AlwaysFalse() { return !AlwaysTrue(); }
+
+// A simple Linear Congruential Generator for generating random
+// numbers with a uniform distribution. Unlike rand() and srand(), it
+// doesn't use global state (and therefore can't interfere with user
+// code). Unlike rand_r(), it's portable. An LCG isn't very random,
+// but it's good enough for our purposes.
+class Random {
+ public:
+ static const UInt32 kMaxRange = 1u << 31;
+
+ explicit Random(UInt32 seed) : state_(seed) {}
+
+ void Reseed(UInt32 seed) { state_ = seed; }
+
+ // Generates a random number from [0, range). Crashes if 'range' is
+ // 0 or greater than kMaxRange.
+ UInt32 Generate(UInt32 range);
+
+ private:
+ UInt32 state_;
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(Random);
+};
+
} // namespace internal
} // namespace testing
@@ -757,18 +784,18 @@ bool AlwaysTrue();
= ::testing::Message()
#define GTEST_FATAL_FAILURE_(message) \
- return GTEST_MESSAGE_(message, ::testing::TPRT_FATAL_FAILURE)
+ return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)
#define GTEST_NONFATAL_FAILURE_(message) \
- GTEST_MESSAGE_(message, ::testing::TPRT_NONFATAL_FAILURE)
+ GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)
#define GTEST_SUCCESS_(message) \
- GTEST_MESSAGE_(message, ::testing::TPRT_SUCCESS)
+ GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)
// Suppresses MSVC warnings 4072 (unreachable code) for the code following
// statement if it returns or throws (or doesn't return or throw in some
// situations).
-#define GTEST_HIDE_UNREACHABLE_CODE_(statement) \
+#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
if (::testing::internal::AlwaysTrue()) { statement; }
#define GTEST_TEST_THROW_(statement, expected_exception, fail) \
@@ -776,7 +803,7 @@ bool AlwaysTrue();
if (const char* gtest_msg = "") { \
bool gtest_caught_expected = false; \
try { \
- GTEST_HIDE_UNREACHABLE_CODE_(statement); \
+ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
} \
catch (expected_exception const&) { \
gtest_caught_expected = true; \
@@ -800,7 +827,7 @@ bool AlwaysTrue();
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
if (const char* gtest_msg = "") { \
try { \
- GTEST_HIDE_UNREACHABLE_CODE_(statement); \
+ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
} \
catch (...) { \
gtest_msg = "Expected: " #statement " doesn't throw an exception.\n" \
@@ -816,7 +843,7 @@ bool AlwaysTrue();
if (const char* gtest_msg = "") { \
bool gtest_caught_any = false; \
try { \
- GTEST_HIDE_UNREACHABLE_CODE_(statement); \
+ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
} \
catch (...) { \
gtest_caught_any = true; \
@@ -833,7 +860,7 @@ bool AlwaysTrue();
#define GTEST_TEST_BOOLEAN_(boolexpr, booltext, actual, expected, fail) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
- if (boolexpr) \
+ if (::testing::internal::IsTrue(boolexpr)) \
; \
else \
fail("Value of: " booltext "\n Actual: " #actual "\nExpected: " #expected)
@@ -842,7 +869,7 @@ bool AlwaysTrue();
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
if (const char* gtest_msg = "") { \
::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \
- GTEST_HIDE_UNREACHABLE_CODE_(statement); \
+ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \
gtest_msg = "Expected: " #statement " doesn't generate new fatal " \
"failures in the current thread.\n" \
diff --git a/gtest/include/gtest/internal/gtest-param-util-generated.h b/gtest/include/gtest/internal/gtest-param-util-generated.h
index ad06e02..1358c32 100644
--- a/gtest/include/gtest/internal/gtest-param-util-generated.h
+++ b/gtest/include/gtest/internal/gtest-param-util-generated.h
@@ -63,6 +63,9 @@ class ValueArray1 {
operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray1& other);
+
const T1 v1_;
};
@@ -78,6 +81,9 @@ class ValueArray2 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray2& other);
+
const T1 v1_;
const T2 v2_;
};
@@ -94,6 +100,9 @@ class ValueArray3 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray3& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -112,6 +121,9 @@ class ValueArray4 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray4& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -131,6 +143,9 @@ class ValueArray5 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray5& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -152,6 +167,9 @@ class ValueArray6 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray6& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -174,6 +192,9 @@ class ValueArray7 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray7& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -198,6 +219,9 @@ class ValueArray8 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray8& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -223,6 +247,9 @@ class ValueArray9 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray9& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -249,6 +276,9 @@ class ValueArray10 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray10& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -277,6 +307,9 @@ class ValueArray11 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray11& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -307,6 +340,9 @@ class ValueArray12 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray12& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -339,6 +375,9 @@ class ValueArray13 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray13& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -372,6 +411,9 @@ class ValueArray14 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray14& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -406,6 +448,9 @@ class ValueArray15 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray15& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -443,6 +488,9 @@ class ValueArray16 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray16& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -481,6 +529,9 @@ class ValueArray17 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray17& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -520,6 +571,9 @@ class ValueArray18 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray18& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -560,6 +614,9 @@ class ValueArray19 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray19& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -602,6 +659,9 @@ class ValueArray20 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray20& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -646,6 +706,9 @@ class ValueArray21 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray21& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -691,6 +754,9 @@ class ValueArray22 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray22& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -739,6 +805,9 @@ class ValueArray23 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray23& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -788,6 +857,9 @@ class ValueArray24 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray24& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -838,6 +910,9 @@ class ValueArray25 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray25& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -890,6 +965,9 @@ class ValueArray26 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray26& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -944,6 +1022,9 @@ class ValueArray27 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray27& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -999,6 +1080,9 @@ class ValueArray28 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray28& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1055,6 +1139,9 @@ class ValueArray29 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray29& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1113,6 +1200,9 @@ class ValueArray30 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray30& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1173,6 +1263,9 @@ class ValueArray31 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray31& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1234,6 +1327,9 @@ class ValueArray32 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray32& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1297,6 +1393,9 @@ class ValueArray33 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray33& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1361,6 +1460,9 @@ class ValueArray34 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray34& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1427,6 +1529,9 @@ class ValueArray35 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray35& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1495,6 +1600,9 @@ class ValueArray36 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray36& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1565,6 +1673,9 @@ class ValueArray37 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray37& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1636,6 +1747,9 @@ class ValueArray38 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray38& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1708,6 +1822,9 @@ class ValueArray39 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray39& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1782,6 +1899,9 @@ class ValueArray40 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray40& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1858,6 +1978,9 @@ class ValueArray41 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray41& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -1935,6 +2058,9 @@ class ValueArray42 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray42& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -2013,6 +2139,9 @@ class ValueArray43 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray43& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -2093,6 +2222,9 @@ class ValueArray44 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray44& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -2174,6 +2306,9 @@ class ValueArray45 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray45& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -2257,6 +2392,9 @@ class ValueArray46 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray46& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -2343,6 +2481,9 @@ class ValueArray47 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray47& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -2430,6 +2571,9 @@ class ValueArray48 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray48& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -2518,6 +2662,9 @@ class ValueArray49 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray49& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -2607,6 +2754,9 @@ class ValueArray50 {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray50& other);
+
const T1 v1_;
const T2 v2_;
const T3 v3_;
@@ -2757,6 +2907,9 @@ class CartesianProductGenerator2
current2_ == end2_;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -2767,11 +2920,14 @@ class CartesianProductGenerator2
const typename ParamGenerator<T2>::iterator end2_;
typename ParamGenerator<T2>::iterator current2_;
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator2::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator2& other);
const ParamGenerator<T1> g1_;
const ParamGenerator<T2> g2_;
-};
+}; // class CartesianProductGenerator2
template <typename T1, typename T2, typename T3>
@@ -2879,6 +3035,9 @@ class CartesianProductGenerator3
current3_ == end3_;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -2892,12 +3051,15 @@ class CartesianProductGenerator3
const typename ParamGenerator<T3>::iterator end3_;
typename ParamGenerator<T3>::iterator current3_;
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator3::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator3& other);
const ParamGenerator<T1> g1_;
const ParamGenerator<T2> g2_;
const ParamGenerator<T3> g3_;
-};
+}; // class CartesianProductGenerator3
template <typename T1, typename T2, typename T3, typename T4>
@@ -3020,6 +3182,9 @@ class CartesianProductGenerator4
current4_ == end4_;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -3036,13 +3201,16 @@ class CartesianProductGenerator4
const typename ParamGenerator<T4>::iterator end4_;
typename ParamGenerator<T4>::iterator current4_;
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator4::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator4& other);
const ParamGenerator<T1> g1_;
const ParamGenerator<T2> g2_;
const ParamGenerator<T3> g3_;
const ParamGenerator<T4> g4_;
-};
+}; // class CartesianProductGenerator4
template <typename T1, typename T2, typename T3, typename T4, typename T5>
@@ -3177,6 +3345,9 @@ class CartesianProductGenerator5
current5_ == end5_;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -3196,14 +3367,17 @@ class CartesianProductGenerator5
const typename ParamGenerator<T5>::iterator end5_;
typename ParamGenerator<T5>::iterator current5_;
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator5::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator5& other);
const ParamGenerator<T1> g1_;
const ParamGenerator<T2> g2_;
const ParamGenerator<T3> g3_;
const ParamGenerator<T4> g4_;
const ParamGenerator<T5> g5_;
-};
+}; // class CartesianProductGenerator5
template <typename T1, typename T2, typename T3, typename T4, typename T5,
@@ -3353,6 +3527,9 @@ class CartesianProductGenerator6
current6_ == end6_;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -3375,7 +3552,10 @@ class CartesianProductGenerator6
const typename ParamGenerator<T6>::iterator end6_;
typename ParamGenerator<T6>::iterator current6_;
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator6::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator6& other);
const ParamGenerator<T1> g1_;
const ParamGenerator<T2> g2_;
@@ -3383,7 +3563,7 @@ class CartesianProductGenerator6
const ParamGenerator<T4> g4_;
const ParamGenerator<T5> g5_;
const ParamGenerator<T6> g6_;
-};
+}; // class CartesianProductGenerator6
template <typename T1, typename T2, typename T3, typename T4, typename T5,
@@ -3546,6 +3726,9 @@ class CartesianProductGenerator7
current7_ == end7_;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -3571,7 +3754,10 @@ class CartesianProductGenerator7
const typename ParamGenerator<T7>::iterator end7_;
typename ParamGenerator<T7>::iterator current7_;
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator7::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator7& other);
const ParamGenerator<T1> g1_;
const ParamGenerator<T2> g2_;
@@ -3580,7 +3766,7 @@ class CartesianProductGenerator7
const ParamGenerator<T5> g5_;
const ParamGenerator<T6> g6_;
const ParamGenerator<T7> g7_;
-};
+}; // class CartesianProductGenerator7
template <typename T1, typename T2, typename T3, typename T4, typename T5,
@@ -3758,6 +3944,9 @@ class CartesianProductGenerator8
current8_ == end8_;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -3786,7 +3975,10 @@ class CartesianProductGenerator8
const typename ParamGenerator<T8>::iterator end8_;
typename ParamGenerator<T8>::iterator current8_;
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator8::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator8& other);
const ParamGenerator<T1> g1_;
const ParamGenerator<T2> g2_;
@@ -3796,7 +3988,7 @@ class CartesianProductGenerator8
const ParamGenerator<T6> g6_;
const ParamGenerator<T7> g7_;
const ParamGenerator<T8> g8_;
-};
+}; // class CartesianProductGenerator8
template <typename T1, typename T2, typename T3, typename T4, typename T5,
@@ -3987,6 +4179,9 @@ class CartesianProductGenerator9
current9_ == end9_;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -4018,7 +4213,10 @@ class CartesianProductGenerator9
const typename ParamGenerator<T9>::iterator end9_;
typename ParamGenerator<T9>::iterator current9_;
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator9::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator9& other);
const ParamGenerator<T1> g1_;
const ParamGenerator<T2> g2_;
@@ -4029,7 +4227,7 @@ class CartesianProductGenerator9
const ParamGenerator<T7> g7_;
const ParamGenerator<T8> g8_;
const ParamGenerator<T9> g9_;
-};
+}; // class CartesianProductGenerator9
template <typename T1, typename T2, typename T3, typename T4, typename T5,
@@ -4233,6 +4431,9 @@ class CartesianProductGenerator10
current10_ == end10_;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -4267,7 +4468,10 @@ class CartesianProductGenerator10
const typename ParamGenerator<T10>::iterator end10_;
typename ParamGenerator<T10>::iterator current10_;
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator10::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator10& other);
const ParamGenerator<T1> g1_;
const ParamGenerator<T2> g2_;
@@ -4279,7 +4483,7 @@ class CartesianProductGenerator10
const ParamGenerator<T8> g8_;
const ParamGenerator<T9> g9_;
const ParamGenerator<T10> g10_;
-};
+}; // class CartesianProductGenerator10
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
@@ -4302,9 +4506,12 @@ CartesianProductHolder2(const Generator1& g1, const Generator2& g2)
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder2& other);
+
const Generator1 g1_;
const Generator2 g2_;
-};
+}; // class CartesianProductHolder2
template <class Generator1, class Generator2, class Generator3>
class CartesianProductHolder3 {
@@ -4322,10 +4529,13 @@ CartesianProductHolder3(const Generator1& g1, const Generator2& g2,
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder3& other);
+
const Generator1 g1_;
const Generator2 g2_;
const Generator3 g3_;
-};
+}; // class CartesianProductHolder3
template <class Generator1, class Generator2, class Generator3,
class Generator4>
@@ -4345,11 +4555,14 @@ CartesianProductHolder4(const Generator1& g1, const Generator2& g2,
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder4& other);
+
const Generator1 g1_;
const Generator2 g2_;
const Generator3 g3_;
const Generator4 g4_;
-};
+}; // class CartesianProductHolder4
template <class Generator1, class Generator2, class Generator3,
class Generator4, class Generator5>
@@ -4370,12 +4583,15 @@ CartesianProductHolder5(const Generator1& g1, const Generator2& g2,
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder5& other);
+
const Generator1 g1_;
const Generator2 g2_;
const Generator3 g3_;
const Generator4 g4_;
const Generator5 g5_;
-};
+}; // class CartesianProductHolder5
template <class Generator1, class Generator2, class Generator3,
class Generator4, class Generator5, class Generator6>
@@ -4399,13 +4615,16 @@ CartesianProductHolder6(const Generator1& g1, const Generator2& g2,
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder6& other);
+
const Generator1 g1_;
const Generator2 g2_;
const Generator3 g3_;
const Generator4 g4_;
const Generator5 g5_;
const Generator6 g6_;
-};
+}; // class CartesianProductHolder6
template <class Generator1, class Generator2, class Generator3,
class Generator4, class Generator5, class Generator6, class Generator7>
@@ -4431,6 +4650,9 @@ CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder7& other);
+
const Generator1 g1_;
const Generator2 g2_;
const Generator3 g3_;
@@ -4438,7 +4660,7 @@ CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
const Generator5 g5_;
const Generator6 g6_;
const Generator7 g7_;
-};
+}; // class CartesianProductHolder7
template <class Generator1, class Generator2, class Generator3,
class Generator4, class Generator5, class Generator6, class Generator7,
@@ -4467,6 +4689,9 @@ CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder8& other);
+
const Generator1 g1_;
const Generator2 g2_;
const Generator3 g3_;
@@ -4475,7 +4700,7 @@ CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
const Generator6 g6_;
const Generator7 g7_;
const Generator8 g8_;
-};
+}; // class CartesianProductHolder8
template <class Generator1, class Generator2, class Generator3,
class Generator4, class Generator5, class Generator6, class Generator7,
@@ -4507,6 +4732,9 @@ CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder9& other);
+
const Generator1 g1_;
const Generator2 g2_;
const Generator3 g3_;
@@ -4516,7 +4744,7 @@ CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
const Generator7 g7_;
const Generator8 g8_;
const Generator9 g9_;
-};
+}; // class CartesianProductHolder9
template <class Generator1, class Generator2, class Generator3,
class Generator4, class Generator5, class Generator6, class Generator7,
@@ -4550,6 +4778,9 @@ CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder10& other);
+
const Generator1 g1_;
const Generator2 g2_;
const Generator3 g3_;
@@ -4560,7 +4791,7 @@ CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
const Generator8 g8_;
const Generator9 g9_;
const Generator10 g10_;
-};
+}; // class CartesianProductHolder10
#endif // GTEST_HAS_COMBINE
diff --git a/gtest/include/gtest/internal/gtest-param-util-generated.h.pump b/gtest/include/gtest/internal/gtest-param-util-generated.h.pump
index 54b2dc1..2da2872 100644
--- a/gtest/include/gtest/internal/gtest-param-util-generated.h.pump
+++ b/gtest/include/gtest/internal/gtest-param-util-generated.h.pump
@@ -64,6 +64,9 @@ class ValueArray1 {
operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray1& other);
+
const T1 v1_;
};
@@ -83,6 +86,9 @@ class ValueArray$i {
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const ValueArray$i& other);
+
$for j [[
const T$j v$(j)_;
@@ -201,6 +207,9 @@ $for j || [[
]];
}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<ParamType>* const base_;
// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
// current[i]_ is the actual traversing iterator.
@@ -212,14 +221,17 @@ $for j [[
]]
ParamType current_value_;
- };
+ }; // class CartesianProductGenerator$i::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductGenerator$i& other);
$for j [[
const ParamGenerator<T$j> g$(j)_;
]]
-};
+}; // class CartesianProductGenerator$i
]]
@@ -250,12 +262,15 @@ $for j,[[
}
private:
+ // No implementation - assignment is unsupported.
+ void operator=(const CartesianProductHolder$i& other);
+
$for j [[
const Generator$j g$(j)_;
]]
-};
+}; // class CartesianProductHolder$i
]]
diff --git a/gtest/include/gtest/internal/gtest-param-util.h b/gtest/include/gtest/internal/gtest-param-util.h
index 34361ab..dcc5494 100644
--- a/gtest/include/gtest/internal/gtest-param-util.h
+++ b/gtest/include/gtest/internal/gtest-param-util.h
@@ -248,6 +248,9 @@ class RangeGenerator : public ParamGeneratorInterface<T> {
: base_(other.base_), value_(other.value_), index_(other.index_),
step_(other.step_) {}
+ // No implementation - assignment is unsupported.
+ void operator=(const Iterator& other);
+
const ParamGeneratorInterface<T>* const base_;
T value_;
int index_;
@@ -263,6 +266,9 @@ class RangeGenerator : public ParamGeneratorInterface<T> {
return end_index;
}
+ // No implementation - assignment is unsupported.
+ void operator=(const RangeGenerator& other);
+
const T begin_;
const T end_;
const IncrementT step_;
@@ -349,7 +355,10 @@ class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> {
// Use of scoped_ptr helps manage cached value's lifetime,
// which is bound by the lifespan of the iterator itself.
mutable scoped_ptr<const T> value_;
- };
+ }; // class ValuesInIteratorRangeGenerator::Iterator
+
+ // No implementation - assignment is unsupported.
+ void operator=(const ValuesInIteratorRangeGenerator& other);
const ContainerType container_;
}; // class ValuesInIteratorRangeGenerator
diff --git a/gtest/include/gtest/internal/gtest-port.h b/gtest/include/gtest/internal/gtest-port.h
index a5adbc0..ee97881 100644
--- a/gtest/include/gtest/internal/gtest-port.h
+++ b/gtest/include/gtest/internal/gtest-port.h
@@ -77,7 +77,10 @@
// GTEST_OS_MAC - Mac OS X
// GTEST_OS_SOLARIS - Sun Solaris
// GTEST_OS_SYMBIAN - Symbian
-// GTEST_OS_WINDOWS - Windows
+// GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile)
+// GTEST_OS_WINDOWS_DESKTOP - Windows Desktop
+// GTEST_OS_WINDOWS_MINGW - MinGW
+// GTEST_OS_WINODWS_MOBILE - Windows Mobile
// GTEST_OS_ZOS - z/OS
//
// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the
@@ -184,6 +187,13 @@
#define GTEST_OS_SYMBIAN 1
#elif defined _WIN32
#define GTEST_OS_WINDOWS 1
+#ifdef _WIN32_WCE
+#define GTEST_OS_WINDOWS_MOBILE 1
+#elif defined(__MINGW__) || defined(__MINGW32__)
+#define GTEST_OS_WINDOWS_MINGW 1
+#else
+#define GTEST_OS_WINDOWS_DESKTOP 1
+#endif // _WIN32_WCE
#elif defined __APPLE__
#define GTEST_OS_MAC 1
#elif defined __linux__
@@ -210,10 +220,10 @@
#elif GTEST_OS_WINDOWS
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
#include <direct.h> // NOLINT
#include <io.h> // NOLINT
-#endif // !_WIN32_WCE
+#endif
// <regex.h> is not available on Windows. Use our own simple regex
// implementation instead.
@@ -449,11 +459,9 @@
// (this is covered by GTEST_HAS_STD_STRING guard).
// 3. abort() in a VC 7.1 application compiled as GUI in debug config
// pops up a dialog window that cannot be suppressed programmatically.
-#if GTEST_HAS_STD_STRING && (GTEST_OS_LINUX || \
- GTEST_OS_MAC || \
- GTEST_OS_CYGWIN || \
- (GTEST_OS_WINDOWS && (_MSC_VER >= 1400) && \
- !defined(_WIN32_WCE)))
+#if GTEST_HAS_STD_STRING && \
+ (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN || \
+ (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || GTEST_OS_WINDOWS_MINGW)
#define GTEST_HAS_DEATH_TEST 1
#include <vector> // NOLINT
#endif
@@ -569,6 +577,10 @@ typedef ::std::stringstream StrStream;
typedef ::std::strstream StrStream;
#endif // GTEST_HAS_STD_STRING
+// A helper for suppressing warnings on constant condition. It just
+// returns 'condition'.
+bool IsTrue(bool condition);
+
// Defines scoped_ptr.
// This implementation of scoped_ptr is PARTIAL - it only contains
@@ -591,7 +603,7 @@ class scoped_ptr {
void reset(T* p = NULL) {
if (p != ptr_) {
- if (sizeof(T) > 0) { // Makes sure T is a complete type.
+ if (IsTrue(sizeof(T) > 0)) { // Makes sure T is a complete type.
delete ptr_;
}
ptr_ = p;
@@ -672,7 +684,8 @@ class RE {
};
// Defines logging utilities:
-// GTEST_LOG_() - logs messages at the specified severity level.
+// GTEST_LOG_(severity) - logs messages at the specified severity level. The
+// message itself is streamed into the macro.
// LogToStderr() - directs all log messages to stderr.
// FlushInfoLog() - flushes informational log messages.
@@ -683,13 +696,27 @@ enum GTestLogSeverity {
GTEST_FATAL
};
-void GTestLog(GTestLogSeverity severity, const char* file,
- int line, const char* msg);
+// Formats log entry severity, provides a stream object for streaming the
+// log message, and terminates the message with a newline when going out of
+// scope.
+class GTestLog {
+ public:
+ GTestLog(GTestLogSeverity severity, const char* file, int line);
+
+ // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program.
+ ~GTestLog();
-#define GTEST_LOG_(severity, msg)\
- ::testing::internal::GTestLog(\
- ::testing::internal::GTEST_##severity, __FILE__, __LINE__, \
- (::testing::Message() << (msg)).GetString().c_str())
+ ::std::ostream& GetStream() { return ::std::cerr; }
+
+ private:
+ const GTestLogSeverity severity_;
+
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog);
+};
+
+#define GTEST_LOG_(severity) \
+ ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \
+ __FILE__, __LINE__).GetStream()
inline void LogToStderr() {}
inline void FlushInfoLog() { fflush(NULL); }
@@ -820,29 +847,29 @@ inline int StrCaseCmp(const char* s1, const char* s2) {
}
inline char* StrDup(const char* src) { return strdup(src); }
#else // !__BORLANDC__
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
inline int IsATTY(int /* fd */) { return 0; }
-#else // !_WIN32_WCE
+#else
inline int IsATTY(int fd) { return _isatty(fd); }
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
inline int StrCaseCmp(const char* s1, const char* s2) {
return _stricmp(s1, s2);
}
inline char* StrDup(const char* src) { return _strdup(src); }
#endif // __BORLANDC__
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
inline int FileNo(FILE* file) { return reinterpret_cast<int>(_fileno(file)); }
// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this
// time and thus not defined there.
-#else // !_WIN32_WCE
+#else
inline int FileNo(FILE* file) { return _fileno(file); }
inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); }
inline int RmDir(const char* dir) { return _rmdir(dir); }
inline bool IsDir(const StatStruct& st) {
return (_S_IFDIR & st.st_mode) != 0;
}
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
#else
@@ -876,20 +903,20 @@ inline const char* StrNCpy(char* dest, const char* src, size_t n) {
// StrError() aren't needed on Windows CE at this time and thus not
// defined there.
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
inline int ChDir(const char* dir) { return chdir(dir); }
#endif
inline FILE* FOpen(const char* path, const char* mode) {
return fopen(path, mode);
}
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
inline FILE *FReopen(const char* path, const char* mode, FILE* stream) {
return freopen(path, mode, stream);
}
inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); }
#endif
inline int FClose(FILE* fp) { return fclose(fp); }
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
inline int Read(int fd, void* buf, unsigned int count) {
return static_cast<int>(read(fd, buf, count));
}
@@ -900,7 +927,8 @@ inline int Close(int fd) { return close(fd); }
inline const char* StrError(int errnum) { return strerror(errnum); }
#endif
inline const char* GetEnv(const char* name) {
-#ifdef _WIN32_WCE // We are on Windows CE, which has no environment variables.
+#if GTEST_OS_WINDOWS_MOBILE
+ // We are on Windows CE, which has no environment variables.
return NULL;
#elif defined(__BORLANDC__)
// Environment variables which we programmatically clear will be set to the
@@ -916,14 +944,14 @@ inline const char* GetEnv(const char* name) {
#pragma warning(pop) // Restores the warning state.
#endif
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
// Windows CE has no C library. The abort() function is used in
// several places in Google Test. This implementation provides a reasonable
// imitation of standard behaviour.
void Abort();
#else
inline void Abort() { abort(); }
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
} // namespace posix
@@ -1011,38 +1039,12 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds.
// condition itself, plus additional message streamed into it, if any,
// and then it aborts the program. It aborts the program irrespective of
// whether it is built in the debug mode or not.
-class GTestCheckProvider {
- public:
- GTestCheckProvider(const char* condition, const char* file, int line) {
- FormatFileLocation(file, line);
- ::std::cerr << " ERROR: Condition " << condition << " failed. ";
- }
- ~GTestCheckProvider() {
- ::std::cerr << ::std::endl;
- posix::Abort();
- }
- void FormatFileLocation(const char* file, int line) {
- if (file == NULL)
- file = "unknown file";
- if (line < 0) {
- ::std::cerr << file << ":";
- } else {
-#if _MSC_VER
- ::std::cerr << file << "(" << line << "):";
-#else
- ::std::cerr << file << ":" << line << ":";
-#endif
- }
- }
- ::std::ostream& GetStream() { return ::std::cerr; }
-};
#define GTEST_CHECK_(condition) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
- if (condition) \
+ if (::testing::internal::IsTrue(condition)) \
; \
else \
- ::testing::internal::GTestCheckProvider(\
- #condition, __FILE__, __LINE__).GetStream()
+ GTEST_LOG_(FATAL) << "Condition " #condition " failed. "
// Macro for referencing flags.
#define GTEST_FLAG(name) FLAGS_gtest_##name
diff --git a/gtest/include/gtest/internal/gtest-string.h b/gtest/include/gtest/internal/gtest-string.h
index 566a6b5..4bc8241 100644
--- a/gtest/include/gtest/internal/gtest-string.h
+++ b/gtest/include/gtest/internal/gtest-string.h
@@ -80,19 +80,6 @@ class String {
public:
// Static utility methods
- // Returns the input if it's not NULL, otherwise returns "(null)".
- // This function serves two purposes:
- //
- // 1. ShowCString(NULL) has type 'const char *', instead of the
- // type of NULL (which is int).
- //
- // 2. In MSVC, streaming a null char pointer to StrStream generates
- // an access violation, so we need to convert NULL to "(null)"
- // before streaming it.
- static inline const char* ShowCString(const char* c_str) {
- return c_str ? c_str : "(null)";
- }
-
// Returns the input enclosed in double quotes if it's not NULL;
// otherwise returns "(null)". For example, "\"Hello\"" is returned
// for input "Hello".
@@ -111,7 +98,7 @@ class String {
// memory using malloc().
static const char* CloneCString(const char* c_str);
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
// Windows CE does not have the 'ANSI' versions of Win32 APIs. To be
// able to pass strings to Win32 APIs on CE we need to convert them
// to 'Unicode', UTF-16.
@@ -200,22 +187,29 @@ class String {
// C'tors
// The default c'tor constructs a NULL string.
- String() : c_str_(NULL) {}
+ String() : c_str_(NULL), length_(0) {}
// Constructs a String by cloning a 0-terminated C string.
- String(const char* c_str) : c_str_(NULL) { // NOLINT
- *this = c_str;
+ String(const char* c_str) { // NOLINT
+ if (c_str == NULL) {
+ c_str_ = NULL;
+ length_ = 0;
+ } else {
+ ConstructNonNull(c_str, strlen(c_str));
+ }
}
// Constructs a String by copying a given number of chars from a
- // buffer. E.g. String("hello", 3) will create the string "hel".
- String(const char* buffer, size_t len);
+ // buffer. E.g. String("hello", 3) creates the string "hel",
+ // String("a\0bcd", 4) creates "a\0bc", String(NULL, 0) creates "",
+ // and String(NULL, 1) results in access violation.
+ String(const char* buffer, size_t length) {
+ ConstructNonNull(buffer, length);
+ }
// The copy c'tor creates a new copy of the string. The two
// String objects do not share content.
- String(const String& str) : c_str_(NULL) {
- *this = str;
- }
+ String(const String& str) : c_str_(NULL), length_(0) { *this = str; }
// D'tor. String is intended to be a final class, so the d'tor
// doesn't need to be virtual.
@@ -228,21 +222,23 @@ class String {
// character to a String will result in the prefix up to the first
// NUL character.
#if GTEST_HAS_STD_STRING
- String(const ::std::string& str) : c_str_(NULL) { *this = str.c_str(); }
+ String(const ::std::string& str) {
+ ConstructNonNull(str.c_str(), str.length());
+ }
- operator ::std::string() const { return ::std::string(c_str_); }
+ operator ::std::string() const { return ::std::string(c_str(), length()); }
#endif // GTEST_HAS_STD_STRING
#if GTEST_HAS_GLOBAL_STRING
- String(const ::string& str) : c_str_(NULL) { *this = str.c_str(); }
+ String(const ::string& str) {
+ ConstructNonNull(str.c_str(), str.length());
+ }
- operator ::string() const { return ::string(c_str_); }
+ operator ::string() const { return ::string(c_str(), length()); }
#endif // GTEST_HAS_GLOBAL_STRING
// Returns true iff this is an empty string (i.e. "").
- bool empty() const {
- return (c_str_ != NULL) && (*c_str_ == '\0');
- }
+ bool empty() const { return (c_str() != NULL) && (length() == 0); }
// Compares this with another String.
// Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0
@@ -251,19 +247,15 @@ class String {
// Returns true iff this String equals the given C string. A NULL
// string and a non-NULL string are considered not equal.
- bool operator==(const char* c_str) const {
- return CStringEquals(c_str_, c_str);
- }
+ bool operator==(const char* c_str) const { return Compare(c_str) == 0; }
- // Returns true iff this String is less than the given C string. A NULL
- // string is considered less than "".
+ // Returns true iff this String is less than the given String. A
+ // NULL string is considered less than "".
bool operator<(const String& rhs) const { return Compare(rhs) < 0; }
// Returns true iff this String doesn't equal the given C string. A NULL
// string and a non-NULL string are considered not equal.
- bool operator!=(const char* c_str) const {
- return !CStringEquals(c_str_, c_str);
- }
+ bool operator!=(const char* c_str) const { return !(*this == c_str); }
// Returns true iff this String ends with the given suffix. *Any*
// String is considered to end with a NULL or empty suffix.
@@ -273,45 +265,66 @@ class String {
// case. Any String is considered to end with a NULL or empty suffix.
bool EndsWithCaseInsensitive(const char* suffix) const;
- // Returns the length of the encapsulated string, or -1 if the
+ // Returns the length of the encapsulated string, or 0 if the
// string is NULL.
- int GetLength() const {
- return c_str_ ? static_cast<int>(strlen(c_str_)) : -1;
- }
+ size_t length() const { return length_; }
// Gets the 0-terminated C string this String object represents.
// The String object still owns the string. Therefore the caller
// should NOT delete the return value.
const char* c_str() const { return c_str_; }
- // Sets the 0-terminated C string this String object represents.
- // The old string in this object is deleted, and this object will
- // own a clone of the input string. This function copies only up to
- // length bytes (plus a terminating null byte), or until the first
- // null byte, whichever comes first.
- //
- // This function works even when the c_str parameter has the same
- // value as that of the c_str_ field.
- void Set(const char* c_str, size_t length);
-
// Assigns a C string to this object. Self-assignment works.
- const String& operator=(const char* c_str);
+ const String& operator=(const char* c_str) { return *this = String(c_str); }
// Assigns a String object to this object. Self-assignment works.
- const String& operator=(const String &rhs) {
- *this = rhs.c_str_;
+ const String& operator=(const String& rhs) {
+ if (this != &rhs) {
+ delete[] c_str_;
+ if (rhs.c_str() == NULL) {
+ c_str_ = NULL;
+ length_ = 0;
+ } else {
+ ConstructNonNull(rhs.c_str(), rhs.length());
+ }
+ }
+
return *this;
}
private:
- const char* c_str_;
-};
+ // Constructs a non-NULL String from the given content. This
+ // function can only be called when data_ has not been allocated.
+ // ConstructNonNull(NULL, 0) results in an empty string ("").
+ // ConstructNonNull(NULL, non_zero) is undefined behavior.
+ void ConstructNonNull(const char* buffer, size_t length) {
+ char* const str = new char[length + 1];
+ memcpy(str, buffer, length);
+ str[length] = '\0';
+ c_str_ = str;
+ length_ = length;
+ }
-// Streams a String to an ostream.
-inline ::std::ostream& operator <<(::std::ostream& os, const String& str) {
- // We call String::ShowCString() to convert NULL to "(null)".
- // Otherwise we'll get an access violation on Windows.
- return os << String::ShowCString(str.c_str());
+ const char* c_str_;
+ size_t length_;
+}; // class String
+
+// Streams a String to an ostream. Each '\0' character in the String
+// is replaced with "\\0".
+inline ::std::ostream& operator<<(::std::ostream& os, const String& str) {
+ if (str.c_str() == NULL) {
+ os << "(null)";
+ } else {
+ const char* const c_str = str.c_str();
+ for (size_t i = 0; i != str.length(); i++) {
+ if (c_str[i] == '\0') {
+ os << "\\0";
+ } else {
+ os << c_str[i];
+ }
+ }
+ }
+ return os;
}
// Gets the content of the StrStream's buffer as a String. Each '\0'
diff --git a/gtest/msvc/gtest-md.sln b/gtest/msvc/gtest-md.sln
new file mode 100644
index 0000000..f7908da
--- /dev/null
+++ b/gtest/msvc/gtest-md.sln
@@ -0,0 +1,45 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-md", "gtest-md.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main-md", "gtest_main-md.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862033}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test-md", "gtest_prod_test-md.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest-md", "gtest_unittest-md.vcproj", "{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.ActiveCfg = Debug|Win32
+ {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.Build.0 = Debug|Win32
+ {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.ActiveCfg = Release|Win32
+ {C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.Build.0 = Release|Win32
+ {3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.ActiveCfg = Debug|Win32
+ {3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.Build.0 = Debug|Win32
+ {3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.ActiveCfg = Release|Win32
+ {3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.Build.0 = Release|Win32
+ {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.ActiveCfg = Debug|Win32
+ {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.Build.0 = Debug|Win32
+ {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.ActiveCfg = Release|Win32
+ {24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.Build.0 = Release|Win32
+ {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.ActiveCfg = Debug|Win32
+ {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.Build.0 = Debug|Win32
+ {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.ActiveCfg = Release|Win32
+ {4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/gtest/msvc/gtest-md.vcproj b/gtest/msvc/gtest-md.vcproj
new file mode 100644
index 0000000..c78a4a4
--- /dev/null
+++ b/gtest/msvc/gtest-md.vcproj
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="gtest-md"
+ ProjectGUID="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ ReferencesPath="">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)/gtestd.lib"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ ReferencesPath="&quot;..\include&quot;;&quot;..&quot;">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="FALSE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)/gtest.lib"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\src\gtest-death-test.cc">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\gtest-filepath.cc">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\gtest-port.cc">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\gtest-test-part.cc">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\gtest-typed-test.cc">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\src\gtest.cc">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath="..\include\gtest\internal\gtest-death-test-internal.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest-death-test.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\internal\gtest-filepath.h">
+ </File>
+ <File
+ RelativePath="..\src\gtest-internal-inl.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\internal\gtest-internal.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest-message.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\internal\gtest-port.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest-spi.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\internal\gtest-string.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest_pred_impl.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest_prod.h">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/gtest/msvc/gtest.sln b/gtest/msvc/gtest.sln
index 5619c12..ef4b057 100644
--- a/gtest/msvc/gtest.sln
+++ b/gtest/msvc/gtest.sln
@@ -11,30 +11,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest", "gtest_uni
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_environment_test", "gtest_environment_test.vcproj", "{DF5FA93D-DC03-41A6-A18C-079198633450}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test", "gtest_prod_test.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_color_test_", "gtest_color_test_.vcproj", "{ABC5A7E8-072C-4A2D-B186-19EA5394B9C6}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_env_var_test_", "gtest_env_var_test_.vcproj", "{569C6F70-F41C-47F3-A622-8A88DC43D452}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_output_test_", "gtest_output_test_.vcproj", "{A4903F73-ED6C-4972-863E-F7355EB0145E}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_uninitialized_test_", "gtest_uninitialized_test_.vcproj", "{42B8A077-E162-4540-A688-246296ACAC1D}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
@@ -53,30 +33,10 @@ Global
{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Debug.Build.0 = Debug|Win32
{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.ActiveCfg = Release|Win32
{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.Build.0 = Release|Win32
- {DF5FA93D-DC03-41A6-A18C-079198633450}.Debug.ActiveCfg = Debug|Win32
- {DF5FA93D-DC03-41A6-A18C-079198633450}.Debug.Build.0 = Debug|Win32
- {DF5FA93D-DC03-41A6-A18C-079198633450}.Release.ActiveCfg = Release|Win32
- {DF5FA93D-DC03-41A6-A18C-079198633450}.Release.Build.0 = Release|Win32
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.ActiveCfg = Debug|Win32
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.Build.0 = Debug|Win32
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.ActiveCfg = Release|Win32
{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.Build.0 = Release|Win32
- {ABC5A7E8-072C-4A2D-B186-19EA5394B9C6}.Debug.ActiveCfg = Debug|Win32
- {ABC5A7E8-072C-4A2D-B186-19EA5394B9C6}.Debug.Build.0 = Debug|Win32
- {ABC5A7E8-072C-4A2D-B186-19EA5394B9C6}.Release.ActiveCfg = Release|Win32
- {ABC5A7E8-072C-4A2D-B186-19EA5394B9C6}.Release.Build.0 = Release|Win32
- {569C6F70-F41C-47F3-A622-8A88DC43D452}.Debug.ActiveCfg = Debug|Win32
- {569C6F70-F41C-47F3-A622-8A88DC43D452}.Debug.Build.0 = Debug|Win32
- {569C6F70-F41C-47F3-A622-8A88DC43D452}.Release.ActiveCfg = Release|Win32
- {569C6F70-F41C-47F3-A622-8A88DC43D452}.Release.Build.0 = Release|Win32
- {A4903F73-ED6C-4972-863E-F7355EB0145E}.Debug.ActiveCfg = Debug|Win32
- {A4903F73-ED6C-4972-863E-F7355EB0145E}.Debug.Build.0 = Debug|Win32
- {A4903F73-ED6C-4972-863E-F7355EB0145E}.Release.ActiveCfg = Release|Win32
- {A4903F73-ED6C-4972-863E-F7355EB0145E}.Release.Build.0 = Release|Win32
- {42B8A077-E162-4540-A688-246296ACAC1D}.Debug.ActiveCfg = Debug|Win32
- {42B8A077-E162-4540-A688-246296ACAC1D}.Debug.Build.0 = Debug|Win32
- {42B8A077-E162-4540-A688-246296ACAC1D}.Release.ActiveCfg = Release|Win32
- {42B8A077-E162-4540-A688-246296ACAC1D}.Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
diff --git a/gtest/msvc/gtest.vcproj b/gtest/msvc/gtest.vcproj
index d38ea3b..09d5b93 100644
--- a/gtest/msvc/gtest.vcproj
+++ b/gtest/msvc/gtest.vcproj
@@ -12,8 +12,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="4"
CharacterSet="2"
ReferencesPath="">
@@ -26,7 +26,7 @@
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
@@ -54,8 +54,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="4"
CharacterSet="2"
ReferencesPath="&quot;..\include&quot;;&quot;..&quot;">
@@ -65,7 +65,7 @@
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
diff --git a/gtest/msvc/gtest_environment_test.vcproj b/gtest/msvc/gtest_environment_test.vcproj
deleted file mode 100644
index 69d0f42..0000000
--- a/gtest/msvc/gtest_environment_test.vcproj
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="gtest_environment_test"
- ProjectGUID="{DF5FA93D-DC03-41A6-A18C-079198633450}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_environment_test.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/gtest_unittest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_environment_test.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- <ProjectReference
- ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
- Name="gtest"/>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath="..\test\gtest_environment_test.cc">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"
- UsePrecompiledHeader="0"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"
- UsePrecompiledHeader="0"/>
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/gtest/msvc/gtest_env_var_test_.vcproj b/gtest/msvc/gtest_main-md.vcproj
index a61e7a2..321667f 100644
--- a/gtest/msvc/gtest_env_var_test_.vcproj
+++ b/gtest/msvc/gtest_main-md.vcproj
@@ -2,8 +2,8 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
- Name="gtest_env_var_test_"
- ProjectGUID="{569C6F70-F41C-47F3-A622-8A88DC43D452}"
+ Name="gtest_main-md"
+ ProjectGUID="{3AF54C8A-10BF-4332-9147-F68ED9862033}"
Keyword="Win32Proj">
<Platforms>
<Platform
@@ -12,31 +12,27 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ ReferencesPath="">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="3"
+ UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_env_var_test_.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/gtest_env_var_test_.pdb"
- SubSystem="1"
- TargetMachine="1"/>
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)/$(ProjectName)d.lib"/>
<Tool
Name="VCMIDLTool"/>
<Tool
@@ -52,37 +48,30 @@
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
- Name="VCWebDeploymentTool"/>
- <Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
+ ConfigurationType="4"
+ CharacterSet="2"
+ ReferencesPath="&quot;..\include&quot;;&quot;..&quot;">
<Tool
Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="2"
- UsePrecompiledHeader="3"
+ UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_env_var_test_.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)/$(ProjectName).lib"/>
<Tool
Name="VCMIDLTool"/>
<Tool
@@ -98,8 +87,6 @@
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
- Name="VCWebDeploymentTool"/>
- <Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
@@ -107,8 +94,8 @@
</Configurations>
<References>
<ProjectReference
- ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
- Name="gtest"/>
+ ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}"
+ Name="gtest-md"/>
</References>
<Files>
<Filter
@@ -116,20 +103,18 @@
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
- RelativePath="..\test\gtest_env_var_test_.cc">
+ RelativePath="..\src\gtest_main.cc">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"
- UsePrecompiledHeader="0"/>
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"
- UsePrecompiledHeader="0"/>
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"/>
</FileConfiguration>
</File>
</Filter>
@@ -137,6 +122,42 @@
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath="..\include\gtest\internal\gtest-death-test-internal.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest-death-test.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\internal\gtest-filepath.h">
+ </File>
+ <File
+ RelativePath="..\src\gtest-internal-inl.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\internal\gtest-internal.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest-message.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\internal\gtest-port.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest-spi.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\internal\gtest-string.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest_pred_impl.h">
+ </File>
+ <File
+ RelativePath="..\include\gtest\gtest_prod.h">
+ </File>
</Filter>
</Files>
<Globals>
diff --git a/gtest/msvc/gtest_main.vcproj b/gtest/msvc/gtest_main.vcproj
index db2f617..1c8c58e 100644
--- a/gtest/msvc/gtest_main.vcproj
+++ b/gtest/msvc/gtest_main.vcproj
@@ -12,8 +12,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="4"
CharacterSet="2"
ReferencesPath="">
@@ -26,7 +26,7 @@
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
@@ -54,8 +54,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="4"
CharacterSet="2"
ReferencesPath="&quot;..\include&quot;;&quot;..&quot;">
@@ -65,7 +65,7 @@
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
diff --git a/gtest/msvc/gtest_color_test_.vcproj b/gtest/msvc/gtest_prod_test-md.vcproj
index e5b52ec..05b05d9 100644
--- a/gtest/msvc/gtest_color_test_.vcproj
+++ b/gtest/msvc/gtest_prod_test-md.vcproj
@@ -2,8 +2,8 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
- Name="gtest_color_test_"
- ProjectGUID="{ABC5A7E8-072C-4A2D-B186-19EA5394B9C6}"
+ Name="gtest_prod_test-md"
+ ProjectGUID="{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}"
Keyword="Win32Proj">
<Platforms>
<Platform
@@ -12,8 +12,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="1"
CharacterSet="2">
<Tool
@@ -25,16 +25,16 @@
RuntimeLibrary="3"
UsePrecompiledHeader="3"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_color_test_.exe"
+ OutputFile="$(OutDir)/gtest_prod_test.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/gtest_color_test_.pdb"
+ ProgramDatabaseFile="$(OutDir)/gtest_prod_test.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
@@ -60,8 +60,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="1"
CharacterSet="2">
<Tool
@@ -70,13 +70,13 @@
RuntimeLibrary="2"
UsePrecompiledHeader="3"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_color_test_.exe"
+ OutputFile="$(OutDir)/gtest_prod_test.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
SubSystem="1"
@@ -107,8 +107,8 @@
</Configurations>
<References>
<ProjectReference
- ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
- Name="gtest"/>
+ ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862033}"
+ Name="gtest_main-md"/>
</References>
<Files>
<Filter
@@ -116,7 +116,24 @@
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
- RelativePath="..\test\gtest_color_test_.cc">
+ RelativePath="..\test\gtest_prod_test.cc">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"
+ UsePrecompiledHeader="0"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\test\production.cc">
<FileConfiguration
Name="Debug|Win32">
<Tool
@@ -137,6 +154,9 @@
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath="..\test\production.h">
+ </File>
</Filter>
</Files>
<Globals>
diff --git a/gtest/msvc/gtest_prod_test.vcproj b/gtest/msvc/gtest_prod_test.vcproj
index 9e31611..d1f6345 100644
--- a/gtest/msvc/gtest_prod_test.vcproj
+++ b/gtest/msvc/gtest_prod_test.vcproj
@@ -12,8 +12,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="1"
CharacterSet="2">
<Tool
@@ -25,7 +25,7 @@
RuntimeLibrary="3"
UsePrecompiledHeader="3"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
@@ -60,8 +60,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="1"
CharacterSet="2">
<Tool
@@ -70,7 +70,7 @@
RuntimeLibrary="2"
UsePrecompiledHeader="3"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
diff --git a/gtest/msvc/gtest_uninitialized_test_.vcproj b/gtest/msvc/gtest_uninitialized_test_.vcproj
deleted file mode 100644
index b6c1e71..0000000
--- a/gtest/msvc/gtest_uninitialized_test_.vcproj
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="gtest_uninitialized_test_"
- ProjectGUID="{42B8A077-E162-4540-A688-246296ACAC1D}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_uninitialized_test_.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/gtest_uninitialized_test_.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_uninitialized_test_.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- <ProjectReference
- ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
- Name="gtest"/>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath="..\test\gtest_uninitialized_test_.cc">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"
- UsePrecompiledHeader="0"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;..&quot;;&quot;..\include&quot;"
- UsePrecompiledHeader="0"/>
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/gtest/msvc/gtest_output_test_.vcproj b/gtest/msvc/gtest_unittest-md.vcproj
index 6c73796..38a5e56 100644
--- a/gtest/msvc/gtest_output_test_.vcproj
+++ b/gtest/msvc/gtest_unittest-md.vcproj
@@ -2,8 +2,8 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
- Name="gtest_output_test_"
- ProjectGUID="{A4903F73-ED6C-4972-863E-F7355EB0145E}"
+ Name="gtest_unittest-md"
+ ProjectGUID="{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}"
Keyword="Win32Proj">
<Platforms>
<Platform
@@ -12,8 +12,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="1"
CharacterSet="2">
<Tool
@@ -25,16 +25,16 @@
RuntimeLibrary="3"
UsePrecompiledHeader="3"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_output_test_.exe"
+ OutputFile="$(OutDir)/gtest_unittest.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/gtest_output_test_.pdb"
+ ProgramDatabaseFile="$(OutDir)/gtest_unittest.pdb"
SubSystem="1"
TargetMachine="1"/>
<Tool
@@ -60,8 +60,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="1"
CharacterSet="2">
<Tool
@@ -70,13 +70,13 @@
RuntimeLibrary="2"
UsePrecompiledHeader="3"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- OutputFile="$(OutDir)/gtest_output_test_.exe"
+ OutputFile="$(OutDir)/gtest_unittest.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
SubSystem="1"
@@ -107,8 +107,8 @@
</Configurations>
<References>
<ProjectReference
- ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
- Name="gtest"/>
+ ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862033}"
+ Name="gtest_main-md"/>
</References>
<Files>
<Filter
@@ -116,7 +116,7 @@
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
- RelativePath="..\test\gtest_output_test_.cc">
+ RelativePath="..\test\gtest_unittest.cc">
<FileConfiguration
Name="Debug|Win32">
<Tool
diff --git a/gtest/msvc/gtest_unittest.vcproj b/gtest/msvc/gtest_unittest.vcproj
index 9350bef..3c8769e 100644
--- a/gtest/msvc/gtest_unittest.vcproj
+++ b/gtest/msvc/gtest_unittest.vcproj
@@ -12,8 +12,8 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="1"
CharacterSet="2">
<Tool
@@ -25,7 +25,7 @@
RuntimeLibrary="3"
UsePrecompiledHeader="3"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
@@ -60,8 +60,8 @@
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
+ OutputDirectory="$(SolutionName)/$(ConfigurationName)"
+ IntermediateDirectory="$(OutDir)/$(ProjectName)"
ConfigurationType="1"
CharacterSet="2">
<Tool
@@ -70,7 +70,7 @@
RuntimeLibrary="2"
UsePrecompiledHeader="3"
WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
+ Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
diff --git a/gtest/samples/sample10_unittest.cc b/gtest/samples/sample10_unittest.cc
new file mode 100644
index 0000000..703ec6e
--- /dev/null
+++ b/gtest/samples/sample10_unittest.cc
@@ -0,0 +1,145 @@
+// Copyright 2009 Google Inc. All Rights Reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: vladl@google.com (Vlad Losev)
+
+// This sample shows how to use Google Test listener API to implement
+// a primitive leak checker.
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <gtest/gtest.h>
+
+using ::testing::EmptyTestEventListener;
+using ::testing::InitGoogleTest;
+using ::testing::Test;
+using ::testing::TestCase;
+using ::testing::TestEventListeners;
+using ::testing::TestInfo;
+using ::testing::TestPartResult;
+using ::testing::UnitTest;
+
+namespace {
+
+// We will track memory used by this class.
+class Water {
+ public:
+ // Normal Water declarations go here.
+
+ // operator new and operator delete help us control water allocation.
+ void* operator new(size_t allocation_size) {
+ allocated_++;
+ return malloc(allocation_size);
+ }
+
+ void operator delete(void* block, size_t allocation_size) {
+ allocated_--;
+ free(block);
+ }
+
+ static int allocated() { return allocated_; }
+
+ private:
+ static int allocated_;
+};
+
+int Water::allocated_ = 0;
+
+// This event listener monitors how many Water objects are created and
+// destroyed by each test, and reports a failure if a test leaks some Water
+// objects. It does this by comparing the number of live Water objects at
+// the beginning of a test and at the end of a test.
+class LeakChecker : public EmptyTestEventListener {
+ private:
+ // Called before a test starts.
+ virtual void OnTestStart(const TestInfo& test_info) {
+ initially_allocated_ = Water::allocated();
+ }
+
+ // Called after a test ends.
+ virtual void OnTestEnd(const TestInfo& test_info) {
+ int difference = Water::allocated() - initially_allocated_;
+
+ // You can generate a failure in any event handler except
+ // OnTestPartResult. Just use an appropriate Google Test assertion to do
+ // it.
+ EXPECT_TRUE(difference <= 0)
+ << "Leaked " << difference << " unit(s) of Water!";
+ }
+
+ int initially_allocated_;
+};
+
+TEST(ListenersTest, DoesNotLeak) {
+ Water* water = new Water;
+ delete water;
+}
+
+// This should fail when the --check_for_leaks command line flag is
+// specified.
+TEST(ListenersTest, LeaksWater) {
+ Water* water = new Water;
+ EXPECT_TRUE(water != NULL);
+}
+
+} // namespace
+
+int main(int argc, char **argv) {
+ InitGoogleTest(&argc, argv);
+
+ bool check_for_leaks = false;
+ if (argc > 1 && strcmp(argv[1], "--check_for_leaks") == 0 )
+ check_for_leaks = true;
+ else
+ printf("%s\n", "Run this program with --check_for_leaks to enable "
+ "custom leak checking in the tests.");
+
+ // If we are given the --check_for_leaks command line flag, installs the
+ // leak checker.
+ if (check_for_leaks) {
+ TestEventListeners& listeners = UnitTest::GetInstance()->listeners();
+
+ // Adds the leak checker to the end of the test event listener list,
+ // after the default text output printer and the default XML report
+ // generator.
+ //
+ // The order is important - it ensures that failures generated in the
+ // leak checker's OnTestEnd() method are processed by the text and XML
+ // printers *before* their OnTestEnd() methods are called, such that
+ // they are attributed to the right test. Remember that a listener
+ // receives an OnXyzStart event *after* listeners preceding it in the
+ // list received that event, and receives an OnXyzEnd event *before*
+ // listeners preceding it.
+ //
+ // We don't need to worry about deleting the new listener later, as
+ // Google Test will do it.
+ listeners.Append(new LeakChecker);
+ }
+ return RUN_ALL_TESTS();
+}
diff --git a/gtest/samples/sample9_unittest.cc b/gtest/samples/sample9_unittest.cc
new file mode 100644
index 0000000..8944c47
--- /dev/null
+++ b/gtest/samples/sample9_unittest.cc
@@ -0,0 +1,160 @@
+// Copyright 2009 Google Inc. All Rights Reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: vladl@google.com (Vlad Losev)
+
+// This sample shows how to use Google Test listener API to implement
+// an alternative console output and how to use the UnitTest reflection API
+// to enumerate test cases and tests and to inspect their results.
+
+#include <stdio.h>
+
+#include <gtest/gtest.h>
+
+using ::testing::EmptyTestEventListener;
+using ::testing::InitGoogleTest;
+using ::testing::Test;
+using ::testing::TestCase;
+using ::testing::TestEventListeners;
+using ::testing::TestInfo;
+using ::testing::TestPartResult;
+using ::testing::UnitTest;
+
+namespace {
+
+// Provides alternative output mode which produces minimal amount of
+// information about tests.
+class TersePrinter : public EmptyTestEventListener {
+ private:
+ // Called before any test activity starts.
+ virtual void OnTestProgramStart(const UnitTest& unit_test) {}
+
+ // Called after all test activities have ended.
+ virtual void OnTestProgramEnd(const UnitTest& unit_test) {
+ fprintf(stdout, "TEST %s\n", unit_test.Passed() ? "PASSED" : "FAILED");
+ fflush(stdout);
+ }
+
+ // Called before a test starts.
+ virtual void OnTestStart(const TestInfo& test_info) {
+ fprintf(stdout,
+ "*** Test %s.%s starting.\n",
+ test_info.test_case_name(),
+ test_info.name());
+ fflush(stdout);
+ }
+
+ // Called after a failed assertion or a SUCCESS().
+ virtual void OnTestPartResult(const TestPartResult& test_part_result) {
+ fprintf(stdout,
+ "%s in %s:%d\n%s\n",
+ test_part_result.failed() ? "*** Failure" : "Success",
+ test_part_result.file_name(),
+ test_part_result.line_number(),
+ test_part_result.summary());
+ fflush(stdout);
+ }
+
+ // Called after a test ends.
+ virtual void OnTestEnd(const TestInfo& test_info) {
+ fprintf(stdout,
+ "*** Test %s.%s ending.\n",
+ test_info.test_case_name(),
+ test_info.name());
+ fflush(stdout);
+ }
+}; // class TersePrinter
+
+TEST(CustomOutputTest, PrintsMessage) {
+ printf("Printing something from the test body...\n");
+}
+
+TEST(CustomOutputTest, Succeeds) {
+ SUCCEED() << "SUCCEED() has been invoked from here";
+}
+
+TEST(CustomOutputTest, Fails) {
+ EXPECT_EQ(1, 2)
+ << "This test fails in order to demonstrate alternative failure messages";
+}
+
+} // namespace
+
+int main(int argc, char **argv) {
+ InitGoogleTest(&argc, argv);
+
+ bool terse_output = false;
+ if (argc > 1 && strcmp(argv[1], "--terse_output") == 0 )
+ terse_output = true;
+ else
+ printf("%s\n", "Run this program with --terse_output to change the way "
+ "it prints its output.");
+
+ UnitTest& unit_test = *UnitTest::GetInstance();
+
+ // If we are given the --terse_output command line flag, suppresses the
+ // standard output and attaches own result printer.
+ if (terse_output) {
+ TestEventListeners& listeners = unit_test.listeners();
+
+ // Removes the default console output listener from the list so it will
+ // not receive events from Google Test and won't print any output. Since
+ // this operation transfers ownership of the listener to the caller we
+ // have to delete it as well.
+ delete listeners.Release(listeners.default_result_printer());
+
+ // Adds the custom output listener to the list. It will now receive
+ // events from Google Test and print the alternative output. We don't
+ // have to worry about deleting it since Google Test assumes ownership
+ // over it after adding it to the list.
+ listeners.Append(new TersePrinter);
+ }
+ int ret_val = RUN_ALL_TESTS();
+
+ // This is an example of using the UnitTest reflection API to inspect test
+ // results. Here we discount failures from the tests we expected to fail.
+ int unexpectedly_failed_tests = 0;
+ for (int i = 0; i < unit_test.total_test_case_count(); ++i) {
+ const TestCase& test_case = *unit_test.GetTestCase(i);
+ for (int j = 0; j < test_case.total_test_count(); ++j) {
+ const TestInfo& test_info = *test_case.GetTestInfo(j);
+ // Counts failed tests that were not meant to fail (those without
+ // 'Fails' in the name).
+ if (test_info.result()->Failed() &&
+ strcmp(test_info.name(), "Fails") != 0) {
+ unexpectedly_failed_tests++;
+ }
+ }
+ }
+
+ // Test that were meant to fail should not affect the test program outcome.
+ if (unexpectedly_failed_tests == 0)
+ ret_val = 0;
+
+ return ret_val;
+}
diff --git a/gtest/scons/SConscript b/gtest/scons/SConscript
index 8fbd5f5..26fa5fb 100644
--- a/gtest/scons/SConscript
+++ b/gtest/scons/SConscript
@@ -1,5 +1,4 @@
-#!/usr/bin/python2.4
-#
+# -*- Python -*-
# Copyright 2008 Google Inc. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -96,29 +95,9 @@ import os
############################################################
# Environments for building the targets, sorted by name.
-def NewEnvironment(env, type):
- """Copies environment and gives it suffix for names of targets built in it."""
-
- if type:
- suffix = '_' + type
- else:
- suffix = ''
-
- new_env = env.Clone()
- new_env['OBJ_SUFFIX'] = suffix
- return new_env;
-
-
-def Remove(env, attribute, value):
- """Removes the given attribute value from the environment."""
-
- attribute_values = env[attribute]
- if value in attribute_values:
- attribute_values.remove(value)
-
+Import('env', 'EnvCreator')
-Import('env')
-env = NewEnvironment(env, '')
+env = EnvCreator.Create(env)
# Note: The relative paths in SConscript files are relative to the location
# of the SConscript file itself. To make a path relative to the location of
@@ -133,51 +112,16 @@ env = NewEnvironment(env, '')
# file is one directory deeper than the gtest directory.
env.Prepend(CPPPATH = ['..', '../include'])
-env_use_own_tuple = NewEnvironment(env, 'use_own_tuple')
-env_use_own_tuple.Append(CPPDEFINES = 'GTEST_USE_OWN_TR1_TUPLE=1')
-
-# Needed to allow gtest_unittest.cc, which triggers a gcc warning when
-# testing EXPECT_EQ(NULL, ptr), to compile.
-env_warning_ok = NewEnvironment(env, 'warning_ok')
-if env_warning_ok['PLATFORM'] == 'win32':
- Remove(env_warning_ok, 'CCFLAGS', '-WX')
-else:
- Remove(env_warning_ok, 'CCFLAGS', '-Werror')
-
-env_with_exceptions = NewEnvironment(env_warning_ok, 'ex')
-if env_with_exceptions['PLATFORM'] == 'win32':
- env_with_exceptions.Append(CCFLAGS=['/EHsc'])
- env_with_exceptions.Append(CPPDEFINES='_HAS_EXCEPTIONS=1')
- # Undoes the _TYPEINFO_ hack, which is unnecessary and only creates
- # trouble when exceptions are enabled.
- Remove(env_with_exceptions, 'CPPDEFINES', '_TYPEINFO_')
- Remove(env_with_exceptions, 'CPPDEFINES', '_HAS_EXCEPTIONS=0')
-else:
- env_with_exceptions.Append(CCFLAGS='-fexceptions')
- Remove(env_with_exceptions, 'CCFLAGS', '-fno-exceptions')
-
-# We need to disable some optimization flags for some tests on
-# Windows; otherwise the redirection of stdout does not work
-# (apparently because of a compiler bug).
-env_less_optimized = NewEnvironment(env, 'less_optimized')
-if env_less_optimized['PLATFORM'] == 'win32':
- for flag in ['/O1', '/Os', '/Og', '/Oy']:
- Remove(env_less_optimized, 'LINKFLAGS', flag)
-
-# Assuming POSIX-like environment with GCC.
-# TODO(vladl@google.com): sniff presence of pthread_atfork instead of
-# selecting on a platform.
-env_with_threads = NewEnvironment(env, 'with_threads')
-if env_with_threads['PLATFORM'] != 'win32':
- env_with_threads.Append(CCFLAGS=['-pthread'])
- env_with_threads.Append(LINKFLAGS=['-pthread'])
-
-env_without_rtti = NewEnvironment(env_warning_ok, 'no_rtti')
-if env_without_rtti['PLATFORM'] == 'win32':
- env_without_rtti.Append(CCFLAGS=['/GR-'])
-else:
- env_without_rtti.Append(CCFLAGS=['-fno-rtti'])
- env_without_rtti.Append(CPPDEFINES='GTEST_HAS_RTTI=0')
+env_use_own_tuple = EnvCreator.Create(env, EnvCreator.UseOwnTuple)
+env_less_optimized = EnvCreator.Create(env, EnvCreator.LessOptimized)
+env_with_threads = EnvCreator.Create(env, EnvCreator.WithThreads)
+# The following environments are used to compile gtest_unittest.cc, which
+# triggers a warning in all but the most recent GCC versions when compiling
+# the EXPECT_EQ(NULL, ptr) statement.
+env_warning_ok = EnvCreator.Create(env, EnvCreator.WarningOk)
+env_with_exceptions = EnvCreator.Create(env_warning_ok,
+ EnvCreator.WithExceptions)
+env_without_rtti = EnvCreator.Create(env_warning_ok, EnvCreator.NoRtti)
############################################################
# Helpers for creating build targets.
@@ -318,8 +262,10 @@ GtestTest(env, 'gtest_list_tests_unittest_', gtest)
GtestTest(env, 'gtest_throw_on_failure_test_', gtest)
GtestTest(env, 'gtest_xml_outfile1_test_', gtest_main)
GtestTest(env, 'gtest_xml_outfile2_test_', gtest_main)
-GtestTest(env, 'gtest_xml_output_unittest_', gtest_main)
+GtestTest(env, 'gtest_xml_output_unittest_', gtest)
GtestTest(env, 'gtest-unittest-api_test', gtest)
+GtestTest(env, 'gtest-listener_test', gtest)
+GtestTest(env, 'gtest_shuffle_test_', gtest)
############################################################
# Tests targets using custom environments.
@@ -363,13 +309,15 @@ if env.get('GTEST_BUILD_SAMPLES', False):
GtestSample(env, 'sample6_unittest')
GtestSample(env, 'sample7_unittest')
GtestSample(env, 'sample8_unittest')
+ GtestSample(env, 'sample9_unittest')
+ GtestSample(env, 'sample10_unittest')
# These exports are used by Google Mock.
gtest_exports = {'gtest': gtest,
'gtest_ex': gtest_ex,
'gtest_no_rtti': gtest_no_rtti,
'gtest_use_own_tuple': gtest_use_own_tuple,
- 'NewEnvironment': NewEnvironment,
+ 'EnvCreator': EnvCreator,
'GtestObject': GtestObject,
'GtestBinary': GtestBinary,
'GtestTest': GtestTest}
diff --git a/gtest/scons/SConstruct b/gtest/scons/SConstruct
new file mode 100644
index 0000000..1f2f37f
--- /dev/null
+++ b/gtest/scons/SConstruct
@@ -0,0 +1,61 @@
+# -*- Python -*-
+# Copyright 2008 Google Inc. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Author: joi@google.com (Joi Sigurdsson)
+# Author: vladl@google.com (Vlad Losev)
+#
+# Base build file for Google Test Tests.
+#
+# Usage:
+# cd to the directory with this file, then
+# ./scons.py [OPTIONS]
+#
+# where frequently used command-line options include:
+# -h print usage help.
+# BUILD=all build all build types.
+# BUILD=win-opt build the given build type.
+
+EnsurePythonVersion(2, 3)
+
+sconstruct_helper = SConscript('SConstruct.common')
+
+sconstruct_helper.Initialize(build_root_path='..',
+ support_multiple_win_builds=False)
+
+win_base = sconstruct_helper.MakeWinBaseEnvironment()
+
+if win_base.get('MSVS_VERSION', None) == '7.1':
+ sconstruct_helper.AllowVc71StlWithoutExceptions(win_base)
+
+sconstruct_helper.MakeWinDebugEnvironment(win_base, 'win-dbg')
+sconstruct_helper.MakeWinOptimizedEnvironment(win_base, 'win-opt')
+
+sconstruct_helper.ConfigureGccEnvironments()
+
+sconstruct_helper.BuildSelectedEnvironments()
diff --git a/gtest/scons/SConstruct.common b/gtest/scons/SConstruct.common
new file mode 100644
index 0000000..2445beb
--- /dev/null
+++ b/gtest/scons/SConstruct.common
@@ -0,0 +1,356 @@
+# -*- Python -*-
+# Copyright 2008 Google Inc. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Author: joi@google.com (Joi Sigurdsson)
+# Author: vladl@google.com (Vlad Losev)
+#
+# Shared SCons utilities for building Google Test inside and outside of
+# Google's environment.
+#
+
+EnsurePythonVersion(2, 3)
+
+
+BUILD_DIR_PREFIX = 'build'
+
+
+class SConstructHelper:
+ def __init__(self):
+ # A dictionary to look up an environment by its name.
+ self.env_dict = {}
+
+ def Initialize(self, build_root_path, support_multiple_win_builds=False):
+ test_env = Environment()
+ platform = test_env['PLATFORM']
+ if platform == 'win32':
+ if support_multiple_win_builds:
+ available_build_types = ['win-dbg8', 'win-opt8', 'win-dbg', 'win-opt']
+ else:
+ available_build_types = ['win-dbg', 'win-opt']
+ elif platform == 'darwin': # MacOSX
+ available_build_types = ['mac-dbg', 'mac-opt']
+ else:
+ available_build_types = ['dbg', 'opt'] # Assuming POSIX-like environment
+ # with GCC by default.
+
+ vars = Variables()
+ vars.Add(ListVariable('BUILD', 'Build type', available_build_types[0],
+ available_build_types))
+ vars.Add(BoolVariable('GTEST_BUILD_SAMPLES', 'Build samples', False))
+
+ # Create base environment.
+ self.env_base = Environment(variables=vars,
+ BUILD_MODE={'BUILD' : '"${BUILD}"'})
+
+ # Leave around a variable pointing at the build root so that SConscript
+ # files from outside our project root can find their bearings. Trick
+ # borrowed from Hammer in Software Construction Toolkit
+ # (http://code.google.com/p/swtoolkit/); if/when we switch to using the
+ # Hammer idioms instead of just Hammer's version of SCons, we should be
+ # able to remove this line.
+ self.env_base['SOURCE_ROOT'] = self.env_base.Dir(build_root_path)
+
+ # And another that definitely always points to the project root.
+ self.env_base['PROJECT_ROOT'] = self.env_base.Dir('.').abspath
+
+ # Enable scons -h
+ Help(vars.GenerateHelpText(self.env_base))
+
+ class EnvCreator:
+ """Creates new customized environments from a base one."""
+
+ def _Remove(cls, env, attribute, value):
+ """Removes the given attribute value from the environment."""
+
+ attribute_values = env[attribute]
+ if value in attribute_values:
+ attribute_values.remove(value)
+ _Remove = classmethod(_Remove)
+
+ def Create(cls, base_env, modifier=None):
+ # User should NOT create more than one environment with the same
+ # modifier (including None).
+ env = base_env.Clone()
+ if modifier:
+ modifier(env)
+ else:
+ env['OBJ_SUFFIX'] = '' # Default suffix for unchanged environment.
+ return env;
+ Create = classmethod(Create)
+
+ # Each of the following methods modifies the environment for a particular
+ # purpose and can be used by clients for creating new environments. Each
+ # one needs to set the OBJ_SUFFIX variable to a unique suffix to
+ # differentiate targets built with that environment. Otherwise, SCons may
+ # complain about same target built with different settings.
+
+ def UseOwnTuple(cls, env):
+ """Instructs Google Test to use its internal implementation of tuple."""
+
+ env['OBJ_SUFFIX'] = '_use_own_tuple'
+ env.Append(CPPDEFINES = 'GTEST_USE_OWN_TR1_TUPLE=1')
+ UseOwnTuple = classmethod(UseOwnTuple)
+
+ def WarningOk(cls, env):
+ """Does not treat warnings as errors.
+
+ Necessary for compiling gtest_unittest.cc, which triggers a gcc
+ warning when testing EXPECT_EQ(NULL, ptr)."""
+
+ env['OBJ_SUFFIX'] = '_warning_ok'
+ if env['PLATFORM'] == 'win32':
+ cls._Remove(env, 'CCFLAGS', '-WX')
+ else:
+ cls._Remove(env, 'CCFLAGS', '-Werror')
+ WarningOk = classmethod(WarningOk)
+
+ def WithExceptions(cls, env):
+ """Re-enables exceptions."""
+
+ env['OBJ_SUFFIX'] = '_ex'
+ if env['PLATFORM'] == 'win32':
+ env.Append(CCFLAGS=['/EHsc'])
+ env.Append(CPPDEFINES='_HAS_EXCEPTIONS=1')
+ # Undoes the _TYPEINFO_ hack, which is unnecessary and only creates
+ # trouble when exceptions are enabled.
+ cls._Remove(env, 'CPPDEFINES', '_TYPEINFO_')
+ cls._Remove(env, 'CPPDEFINES', '_HAS_EXCEPTIONS=0')
+ else:
+ env.Append(CCFLAGS='-fexceptions')
+ cls._Remove(env, 'CCFLAGS', '-fno-exceptions')
+ WithExceptions = classmethod(WithExceptions)
+
+ def LessOptimized(cls, env):
+ """Disables certain optimizations on Windows.
+
+ We need to disable some optimization flags for some tests on
+ Windows; otherwise the redirection of stdout does not work
+ (apparently because of a compiler bug)."""
+
+ env['OBJ_SUFFIX'] = '_less_optimized'
+ if env['PLATFORM'] == 'win32':
+ for flag in ['/O1', '/Os', '/Og', '/Oy']:
+ cls._Remove(env, 'LINKFLAGS', flag)
+ LessOptimized = classmethod(LessOptimized)
+
+ def WithThreads(cls, env):
+ """Allows use of threads.
+
+ Currently only enables pthreads under GCC."""
+
+ env['OBJ_SUFFIX'] = '_with_threads'
+ if env['PLATFORM'] != 'win32':
+ # Assuming POSIX-like environment with GCC.
+ # TODO(vladl@google.com): sniff presence of pthread_atfork instead of
+ # selecting on a platform.
+ env.Append(CCFLAGS=['-pthread'])
+ env.Append(LINKFLAGS=['-pthread'])
+ WithThreads = classmethod(WithThreads)
+
+ def NoRtti(cls, env):
+ """Disables RTTI support."""
+
+ env['OBJ_SUFFIX'] = '_no_rtti'
+ if env['PLATFORM'] == 'win32':
+ env.Append(CCFLAGS=['/GR-'])
+ else:
+ env.Append(CCFLAGS=['-fno-rtti'])
+ env.Append(CPPDEFINES='GTEST_HAS_RTTI=0')
+ NoRtti = classmethod(NoRtti)
+
+ def AllowVc71StlWithoutExceptions(self, env):
+ env.Append(
+ CPPDEFINES = [# needed for using some parts of STL with exception
+ # disabled. The scoop is given here, with comments
+ # from P.J. Plauger at
+ # http://groups.google.com/group/microsoft.public.vc.stl/browse_thread/thread/5e719833c6bdb177?q=_HAS_EXCEPTIONS+using+namespace+std&pli=1
+ '_TYPEINFO_'])
+
+ def MakeWinBaseEnvironment(self):
+ win_base = self.env_base.Clone(
+ platform='win32',
+ CCFLAGS=['-GS', # Enable buffer security check
+ '-W4', # Warning level
+
+ # Disables warnings that are either uninteresting or
+ # hard to fix.
+
+ '-WX', # Treat warning as errors
+ #'-GR-', # Disable runtime type information
+ '-RTCs', # Enable stack-frame run-time error checks
+ '-RTCu', # Report when variable used without init.
+ #'-EHs', # enable C++ EH (no SEH exceptions)
+ '-nologo', # Suppress logo line
+ '-J', # All chars unsigned
+ #'-Wp64', # Detect 64-bit portability issues. This
+ # flag has been deprecated by VS 2008.
+ '-Zi', # Produce debug information in PDB files.
+ ],
+ CCPDBFLAGS='',
+ CPPDEFINES=['_UNICODE', 'UNICODE',
+ 'WIN32', '_WIN32',
+ 'STRICT',
+ 'WIN32_LEAN_AND_MEAN',
+ '_HAS_EXCEPTIONS=0',
+ ],
+ LIBPATH=['#/$MAIN_DIR/lib'],
+ LINKFLAGS=['-MACHINE:x86', # Enable safe SEH (not supp. on x64)
+ '-DEBUG', # Generate debug info
+ '-NOLOGO', # Suppress logo line
+ ],
+ # All strings in string tables zero terminated.
+ RCFLAGS=['-n'])
+
+ return win_base
+
+ def SetBuildNameAndDir(self, env, name):
+ env['BUILD_NAME'] = name;
+ env['BUILD_DIR'] = '%s/%s' % (BUILD_DIR_PREFIX, name)
+ self.env_dict[name] = env
+
+ def MakeWinDebugEnvironment(self, base_environment, name):
+ """Takes a VC71 or VC80 base environment and adds debug settings."""
+ debug_env = base_environment.Clone()
+ self.SetBuildNameAndDir(debug_env, name)
+ debug_env.Append(
+ CCFLAGS = ['-Od', # Disable optimizations
+ '-MTd', # Multithreaded, static link (debug)
+ # Path for PDB files
+ '-Fd%s\\' % debug_env.Dir(debug_env['BUILD_DIR']),
+ ],
+ CPPDEFINES = ['DEBUG',
+ '_DEBUG',
+ ],
+ LIBPATH = [],
+ LINKFLAGS = ['-INCREMENTAL:yes',
+ '/OPT:NOICF',
+ ]
+ )
+ return debug_env
+
+ def MakeWinOptimizedEnvironment(self, base_environment, name):
+ """Takes a VC71 or VC80 base environment and adds release settings."""
+ optimized_env = base_environment.Clone()
+ self.SetBuildNameAndDir(optimized_env, name)
+ optimized_env.Append(
+ CCFLAGS = ['-GL', # Enable link-time code generation (/GL)
+ '-GF', # Enable String Pooling (/GF)
+ '-MT', # Multithreaded, static link
+ # Path for PDB files
+ '-Fd%s\\' % optimized_env.Dir(optimized_env['BUILD_DIR']),
+
+ # Favor small code (this is /O1 minus /Og)
+ '-Os',
+ '-Oy',
+ '-Ob2',
+ '-Gs',
+ '-GF',
+ '-Gy',
+ ],
+ CPPDEFINES = ['NDEBUG',
+ '_NDEBUG',
+ ],
+ LIBPATH = [],
+ ARFLAGS = ['-LTCG'], # Link-time Code Generation
+ LINKFLAGS = ['-LTCG', # Link-time Code Generation
+ '-OPT:REF', # Optimize by reference.
+ '-OPT:ICF=32', # Optimize by identical COMDAT folding
+ '-OPT:NOWIN98', # Optimize by not aligning section for
+ # Win98
+ '-INCREMENTAL:NO', # No incremental linking as we don't
+ # want padding bytes in release build.
+ ],
+ )
+ return optimized_env
+
+ def AddGccFlagsTo(self, env, optimized):
+ env.Append(CCFLAGS=['-fno-exceptions',
+ '-Wall',
+ '-Werror',
+ ])
+ if optimized:
+ env.Append(CCFLAGS=['-O2'], CPPDEFINES=['NDEBUG', '_NDEBUG'])
+ else:
+ env.Append(CCFLAGS=['-g'], CPPDEFINES=['DEBUG', '_DEBUG'])
+
+ def ConfigureGccEnvironments(self):
+ # Mac environments.
+ mac_base = self.env_base.Clone(platform='darwin')
+
+ mac_dbg = mac_base.Clone()
+ self.AddGccFlagsTo(mac_dbg, optimized=False)
+ self.SetBuildNameAndDir(mac_dbg, 'mac-dbg')
+
+ mac_opt = mac_base.Clone()
+ self.AddGccFlagsTo(mac_opt, optimized=True)
+ self.SetBuildNameAndDir(mac_opt, 'mac-opt')
+
+ # Generic GCC environments.
+ gcc_dbg = self.env_base.Clone()
+ self.AddGccFlagsTo(gcc_dbg, optimized=False)
+ self.SetBuildNameAndDir(gcc_dbg, 'dbg')
+
+ gcc_opt = self.env_base.Clone()
+ self.AddGccFlagsTo(gcc_opt, optimized=True)
+ self.SetBuildNameAndDir(gcc_opt, 'opt')
+
+ def BuildSelectedEnvironments(self):
+ EnvCreator = SConstructHelper.EnvCreator
+ Export('EnvCreator')
+ # Build using whichever environments the 'BUILD' option selected
+ for build_name in self.env_base['BUILD']:
+ print 'BUILDING %s' % build_name
+ env = self.env_dict[build_name]
+
+ # Make sure SConscript files can refer to base build dir
+ env['MAIN_DIR'] = env.Dir(env['BUILD_DIR'])
+
+ #print 'CCFLAGS: %s' % env.subst('$CCFLAGS')
+ #print 'LINK: %s' % env.subst('$LINK')
+ #print 'AR: %s' % env.subst('$AR')
+ #print 'CC: %s' % env.subst('$CC')
+ #print 'CXX: %s' % env.subst('$CXX')
+ #print 'LIBPATH: %s' % env.subst('$LIBPATH')
+ #print 'ENV:PATH: %s' % env['ENV']['PATH']
+ #print 'ENV:INCLUDE: %s' % env['ENV']['INCLUDE']
+ #print 'ENV:LIB: %s' % env['ENV']['LIB']
+ #print 'ENV:TEMP: %s' % env['ENV']['TEMP']
+
+ Export('env')
+ # Invokes SConscript with variant_dir being build/<config name>.
+ # Counter-intuitively, src_dir is relative to the build dir and has
+ # to be '..' to point to the scons directory.
+ SConscript('SConscript',
+ src_dir='..',
+ variant_dir=env['BUILD_DIR'],
+ duplicate=0)
+
+
+sconstruct_helper = SConstructHelper()
+Return('sconstruct_helper')
diff --git a/gtest/scripts/gen_gtest_pred_impl.py b/gtest/scripts/gen_gtest_pred_impl.py
index d1b2f25..8307134 100755
--- a/gtest/scripts/gen_gtest_pred_impl.py
+++ b/gtest/scripts/gen_gtest_pred_impl.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python2.4
+#!/usr/bin/env python
#
# Copyright 2006, Google Inc.
# All rights reserved.
diff --git a/gtest/src/gtest-death-test.cc b/gtest/src/gtest-death-test.cc
index 02ce48d..106b01c 100644
--- a/gtest/src/gtest-death-test.cc
+++ b/gtest/src/gtest-death-test.cc
@@ -220,12 +220,12 @@ void DeathTestAbort(const String& message) {
// fails.
#define GTEST_DEATH_TEST_CHECK_(expression) \
do { \
- if (!(expression)) { \
- DeathTestAbort(::testing::internal::String::Format(\
+ if (!::testing::internal::IsTrue(expression)) { \
+ DeathTestAbort(::testing::internal::String::Format( \
"CHECK failed: File %s, line %d: %s", \
__FILE__, __LINE__, #expression)); \
} \
- } while (0)
+ } while (::testing::internal::AlwaysFalse())
// This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for
// evaluating any system call that fulfills two conditions: it must return
@@ -241,11 +241,11 @@ void DeathTestAbort(const String& message) {
gtest_retval = (expression); \
} while (gtest_retval == -1 && errno == EINTR); \
if (gtest_retval == -1) { \
- DeathTestAbort(::testing::internal::String::Format(\
+ DeathTestAbort(::testing::internal::String::Format( \
"CHECK failed: File %s, line %d: %s != -1", \
__FILE__, __LINE__, #expression)); \
} \
- } while (0)
+ } while (::testing::internal::AlwaysFalse())
// Returns the message describing the last system error in errno.
String GetLastErrnoDescription() {
@@ -269,13 +269,11 @@ static void FailFromInternalError(int fd) {
} while (num_read == -1 && errno == EINTR);
if (num_read == 0) {
- GTEST_LOG_(FATAL, error);
+ GTEST_LOG_(FATAL) << error.GetString();
} else {
const int last_error = errno;
- const String message = GetLastErrnoDescription();
- GTEST_LOG_(FATAL,
- Message() << "Error while reading death test internal: "
- << message << " [" << last_error << "]");
+ GTEST_LOG_(FATAL) << "Error while reading death test internal: "
+ << GetLastErrnoDescription() << " [" << last_error << "]";
}
}
@@ -397,15 +395,13 @@ void DeathTestImpl::ReadAndInterpretStatusByte() {
FailFromInternalError(read_fd()); // Does not return.
break;
default:
- GTEST_LOG_(FATAL,
- Message() << "Death test child process reported "
- << "unexpected status byte ("
- << static_cast<unsigned int>(flag) << ")");
+ GTEST_LOG_(FATAL) << "Death test child process reported "
+ << "unexpected status byte ("
+ << static_cast<unsigned int>(flag) << ")";
}
} else {
- GTEST_LOG_(FATAL,
- Message() << "Read from death test child process failed: "
- << GetLastErrnoDescription());
+ GTEST_LOG_(FATAL) << "Read from death test child process failed: "
+ << GetLastErrnoDescription();
}
GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd()));
set_read_fd(-1);
@@ -469,7 +465,8 @@ bool DeathTestImpl::Passed(bool status_ok) {
break;
case DIED:
if (status_ok) {
- if (RE::PartialMatch(error_message.c_str(), *regex())) {
+ const bool matched = RE::PartialMatch(error_message.c_str(), *regex());
+ if (matched) {
success = true;
} else {
buffer << " Result: died but not with expected error.\n"
@@ -483,8 +480,8 @@ bool DeathTestImpl::Passed(bool status_ok) {
break;
case IN_PROGRESS:
default:
- GTEST_LOG_(FATAL,
- "DeathTest::Passed somehow called before conclusion of test");
+ GTEST_LOG_(FATAL)
+ << "DeathTest::Passed somehow called before conclusion of test";
}
DeathTest::set_last_death_test_message(buffer.GetString());
@@ -584,8 +581,8 @@ int WindowsDeathTest::Wait() {
WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(),
INFINITE));
DWORD status;
- GTEST_DEATH_TEST_CHECK_(::GetExitCodeProcess(child_handle_.Get(),
- &status));
+ GTEST_DEATH_TEST_CHECK_(::GetExitCodeProcess(child_handle_.Get(), &status)
+ != FALSE);
child_handle_.Reset();
set_status(static_cast<int>(status));
return this->status();
@@ -615,9 +612,10 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() {
SECURITY_ATTRIBUTES handles_are_inheritable = {
sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
HANDLE read_handle, write_handle;
- GTEST_DEATH_TEST_CHECK_(::CreatePipe(&read_handle, &write_handle,
- &handles_are_inheritable,
- 0)); // Default buffer size.
+ GTEST_DEATH_TEST_CHECK_(
+ ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable,
+ 0) // Default buffer size.
+ != FALSE);
set_read_fd(::_open_osfhandle(reinterpret_cast<intptr_t>(read_handle),
O_RDONLY));
write_handle_.Reset(write_handle);
@@ -680,7 +678,7 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() {
NULL, // Inherit the parent's environment.
UnitTest::GetInstance()->original_working_dir(),
&startup_info,
- &process_info));
+ &process_info) != FALSE);
child_handle_.Reset(process_info.hProcess);
::CloseHandle(process_info.hThread);
set_spawned(true);
@@ -740,7 +738,7 @@ class NoExecDeathTest : public ForkingDeathTest {
DeathTest::TestRole NoExecDeathTest::AssumeRole() {
const size_t thread_count = GetThreadCount();
if (thread_count != 1) {
- GTEST_LOG_(WARNING, DeathTestThreadWarning(thread_count));
+ GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count);
}
int pipe_fd[2];
@@ -767,6 +765,9 @@ DeathTest::TestRole NoExecDeathTest::AssumeRole() {
// concurrent writes to the log files. We capture stderr in the parent
// process and append the child process' output to a log.
LogToStderr();
+ // Event forwarding to the listeners of event listener API mush be shut
+ // down in death test subprocesses.
+ GetUnitTestImpl()->listeners()->SuppressEventForwarding();
return EXECUTE_TEST;
} else {
GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1]));
@@ -1042,7 +1043,7 @@ static void SplitString(const ::std::string& str, char delimiter,
::std::vector< ::std::string>* dest) {
::std::vector< ::std::string> parsed;
::std::string::size_type pos = 0;
- while (true) {
+ while (::testing::internal::AlwaysTrue()) {
const ::std::string::size_type colon = str.find(delimiter, pos);
if (colon == ::std::string::npos) {
parsed.push_back(str.substr(pos));
diff --git a/gtest/src/gtest-filepath.cc b/gtest/src/gtest-filepath.cc
index f966352..515d61c 100644
--- a/gtest/src/gtest-filepath.cc
+++ b/gtest/src/gtest-filepath.cc
@@ -34,7 +34,7 @@
#include <stdlib.h>
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
#include <windows.h>
#elif GTEST_OS_WINDOWS
#include <direct.h>
@@ -45,7 +45,7 @@
#else
#include <limits.h>
#include <climits> // Some Linux distributions define PATH_MAX here.
-#endif // _WIN32_WCE or _WIN32
+#endif // GTEST_OS_WINDOWS_MOBILE
#if GTEST_OS_WINDOWS
#define GTEST_PATH_MAX_ _MAX_PATH
@@ -65,7 +65,7 @@ namespace internal {
#if GTEST_OS_WINDOWS
const char kPathSeparator = '\\';
const char kPathSeparatorString[] = "\\";
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
// Windows CE doesn't have a current directory. You should not use
// the current directory in tests on Windows CE, but this at least
// provides a reasonable fallback.
@@ -74,7 +74,7 @@ const char kCurrentDirectoryString[] = "\\";
const DWORD kInvalidFileAttributes = 0xffffffff;
#else
const char kCurrentDirectoryString[] = ".\\";
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
#else
const char kPathSeparator = '/';
const char kPathSeparatorString[] = "/";
@@ -83,9 +83,9 @@ const char kCurrentDirectoryString[] = "./";
// Returns the current working directory, or "" if unsuccessful.
FilePath FilePath::GetCurrentDir() {
-#ifdef _WIN32_WCE
-// Windows CE doesn't have a current directory, so we just return
-// something reasonable.
+#if GTEST_OS_WINDOWS_MOBILE
+ // Windows CE doesn't have a current directory, so we just return
+ // something reasonable.
return FilePath(kCurrentDirectoryString);
#elif GTEST_OS_WINDOWS
char cwd[GTEST_PATH_MAX_ + 1] = { '\0' };
@@ -93,7 +93,7 @@ FilePath FilePath::GetCurrentDir() {
#else
char cwd[GTEST_PATH_MAX_ + 1] = { '\0' };
return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd);
-#endif
+#endif // GTEST_OS_WINDOWS_MOBILE
}
// Returns a copy of the FilePath with the case-insensitive extension removed.
@@ -103,7 +103,7 @@ FilePath FilePath::GetCurrentDir() {
FilePath FilePath::RemoveExtension(const char* extension) const {
String dot_extension(String::Format(".%s", extension));
if (pathname_.EndsWithCaseInsensitive(dot_extension.c_str())) {
- return FilePath(String(pathname_.c_str(), pathname_.GetLength() - 4));
+ return FilePath(String(pathname_.c_str(), pathname_.length() - 4));
}
return *this;
}
@@ -169,7 +169,7 @@ FilePath FilePath::ConcatPaths(const FilePath& directory,
// Returns true if pathname describes something findable in the file-system,
// either a file, directory, or whatever.
bool FilePath::FileOrDirectoryExists() const {
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str());
const DWORD attributes = GetFileAttributes(unicode);
delete [] unicode;
@@ -177,7 +177,7 @@ bool FilePath::FileOrDirectoryExists() const {
#else
posix::StatStruct file_stat;
return posix::Stat(pathname_.c_str(), &file_stat) == 0;
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
}
// Returns true if pathname describes a directory in the file-system
@@ -193,7 +193,7 @@ bool FilePath::DirectoryExists() const {
const FilePath& path(*this);
#endif
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
LPCWSTR unicode = String::AnsiToUtf16(path.c_str());
const DWORD attributes = GetFileAttributes(unicode);
delete [] unicode;
@@ -205,7 +205,7 @@ bool FilePath::DirectoryExists() const {
posix::StatStruct file_stat;
result = posix::Stat(path.c_str(), &file_stat) == 0 &&
posix::IsDir(file_stat);
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
return result;
}
@@ -217,7 +217,7 @@ bool FilePath::IsRootDirectory() const {
// TODO(wan@google.com): on Windows a network share like
// \\server\share can be a root directory, although it cannot be the
// current directory. Handle this properly.
- return pathname_.GetLength() == 3 && IsAbsolutePath();
+ return pathname_.length() == 3 && IsAbsolutePath();
#else
return pathname_ == kPathSeparatorString;
#endif
@@ -227,7 +227,7 @@ bool FilePath::IsRootDirectory() const {
bool FilePath::IsAbsolutePath() const {
const char* const name = pathname_.c_str();
#if GTEST_OS_WINDOWS
- return pathname_.GetLength() >= 3 &&
+ return pathname_.length() >= 3 &&
((name[0] >= 'a' && name[0] <= 'z') ||
(name[0] >= 'A' && name[0] <= 'Z')) &&
name[1] == ':' &&
@@ -271,7 +271,7 @@ bool FilePath::CreateDirectoriesRecursively() const {
return false;
}
- if (pathname_.GetLength() == 0 || this->DirectoryExists()) {
+ if (pathname_.length() == 0 || this->DirectoryExists()) {
return true;
}
@@ -284,18 +284,17 @@ bool FilePath::CreateDirectoriesRecursively() const {
// directory for any reason, including if the parent directory does not
// exist. Not named "CreateDirectory" because that's a macro on Windows.
bool FilePath::CreateFolder() const {
-#if GTEST_OS_WINDOWS
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
FilePath removed_sep(this->RemoveTrailingPathSeparator());
LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str());
int result = CreateDirectory(unicode, NULL) ? 0 : -1;
delete [] unicode;
-#else
+#elif GTEST_OS_WINDOWS
int result = _mkdir(pathname_.c_str());
-#endif // !WIN32_WCE
#else
int result = mkdir(pathname_.c_str(), 0777);
-#endif // _WIN32
+#endif // GTEST_OS_WINDOWS_MOBILE
+
if (result == -1) {
return this->DirectoryExists(); // An error is OK if the directory exists.
}
@@ -307,7 +306,7 @@ bool FilePath::CreateFolder() const {
// On Windows platform, uses \ as the separator, other platforms use /.
FilePath FilePath::RemoveTrailingPathSeparator() const {
return pathname_.EndsWith(kPathSeparatorString)
- ? FilePath(String(pathname_.c_str(), pathname_.GetLength() - 1))
+ ? FilePath(String(pathname_.c_str(), pathname_.length() - 1))
: *this;
}
@@ -320,9 +319,9 @@ void FilePath::Normalize() {
return;
}
const char* src = pathname_.c_str();
- char* const dest = new char[pathname_.GetLength() + 1];
+ char* const dest = new char[pathname_.length() + 1];
char* dest_ptr = dest;
- memset(dest_ptr, 0, pathname_.GetLength() + 1);
+ memset(dest_ptr, 0, pathname_.length() + 1);
while (*src != '\0') {
*dest_ptr++ = *src;
diff --git a/gtest/src/gtest-internal-inl.h b/gtest/src/gtest-internal-inl.h
index 189852e..47aec22 100644
--- a/gtest/src/gtest-internal-inl.h
+++ b/gtest/src/gtest-internal-inl.h
@@ -277,7 +277,7 @@ class Vector {
// is created using the copy constructor, and then stored in the
// Vector. Changes made to the element in the Vector doesn't affect
// the source object, and vice versa.
- void PushBack(const E & element) { Insert(element, size_); }
+ void PushBack(const E& element) { Insert(element, size_); }
// Adds an element to the beginning of this Vector.
void PushFront(const E& element) { Insert(element, 0); }
@@ -369,7 +369,7 @@ class Vector {
return NULL;
}
- // Returns the i-th element of the list, or aborts the program if i
+ // Returns the i-th element of the Vector, or aborts the program if i
// is not in range [0, size()).
const E& GetElement(int i) const {
GTEST_CHECK_(0 <= i && i < size_)
@@ -379,13 +379,84 @@ class Vector {
return *(elements_[i]);
}
- // Returns the i-th element of the list, or default_value if i is not
+ // Returns a mutable reference to the i-th element of the Vector, or
+ // aborts the program if i is not in range [0, size()).
+ E& GetMutableElement(int i) {
+ GTEST_CHECK_(0 <= i && i < size_)
+ << "Invalid Vector index " << i << ": must be in range [0, "
+ << (size_ - 1) << "].";
+
+ return *(elements_[i]);
+ }
+
+ // Returns the i-th element of the Vector, or default_value if i is not
// in range [0, size()).
E GetElementOr(int i, E default_value) const {
return (i < 0 || i >= size_) ? default_value : *(elements_[i]);
}
+ // Swaps the i-th and j-th elements of the Vector. Crashes if i or
+ // j is invalid.
+ void Swap(int i, int j) {
+ GTEST_CHECK_(0 <= i && i < size_)
+ << "Invalid first swap element " << i << ": must be in range [0, "
+ << (size_ - 1) << "].";
+ GTEST_CHECK_(0 <= j && j < size_)
+ << "Invalid second swap element " << j << ": must be in range [0, "
+ << (size_ - 1) << "].";
+
+ E* const temp = elements_[i];
+ elements_[i] = elements_[j];
+ elements_[j] = temp;
+ }
+
+ // Performs an in-place shuffle of a range of this Vector's nodes.
+ // 'begin' and 'end' are element indices as an STL-style range;
+ // i.e. [begin, end) are shuffled, where 'end' == size() means to
+ // shuffle to the end of the Vector.
+ void ShuffleRange(internal::Random* random, int begin, int end) {
+ GTEST_CHECK_(0 <= begin && begin <= size_)
+ << "Invalid shuffle range start " << begin << ": must be in range [0, "
+ << size_ << "].";
+ GTEST_CHECK_(begin <= end && end <= size_)
+ << "Invalid shuffle range finish " << end << ": must be in range ["
+ << begin << ", " << size_ << "].";
+
+ // Fisher-Yates shuffle, from
+ // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle
+ for (int range_width = end - begin; range_width >= 2; range_width--) {
+ const int last_in_range = begin + range_width - 1;
+ const int selected = begin + random->Generate(range_width);
+ Swap(selected, last_in_range);
+ }
+ }
+
+ // Performs an in-place shuffle of this Vector's nodes.
+ void Shuffle(internal::Random* random) {
+ ShuffleRange(random, 0, size());
+ }
+
+ // Returns a copy of this Vector.
+ Vector* Clone() const {
+ Vector* const clone = new Vector;
+ clone->Reserve(size_);
+ for (int i = 0; i < size_; i++) {
+ clone->PushBack(GetElement(i));
+ }
+ return clone;
+ }
+
private:
+ // Makes sure this Vector's capacity is at least the given value.
+ void Reserve(int new_capacity) {
+ if (new_capacity <= capacity_)
+ return;
+
+ capacity_ = new_capacity;
+ elements_ = static_cast<E**>(
+ realloc(elements_, capacity_*sizeof(elements_[0])));
+ }
+
// Grows the buffer if it is not big enough to hold one more element.
void GrowIfNeeded() {
if (size_ < capacity_)
@@ -397,9 +468,7 @@ class Vector {
const int new_capacity = 3*(capacity_/2 + 1);
GTEST_CHECK_(new_capacity > capacity_) // Does the new capacity overflow?
<< "Cannot grow a Vector with " << capacity_ << " elements already.";
- capacity_ = new_capacity;
- elements_ = static_cast<E**>(
- realloc(elements_, capacity_*sizeof(elements_[0])));
+ Reserve(new_capacity);
}
// Moves the give consecutive elements to a new index in the Vector.
@@ -491,11 +560,6 @@ class TestInfoImpl {
// deletes it.
void Run();
- // Calls the given TestInfo object's Run() method.
- static void RunTest(TestInfo * test_info) {
- test_info->impl()->Run();
- }
-
// Clears the test result.
void ClearResult() { result_.Clear(); }
@@ -606,7 +670,7 @@ class OsStackTraceGetterInterface {
// A working implementation of the OsStackTraceGetterInterface interface.
class OsStackTraceGetter : public OsStackTraceGetterInterface {
public:
- OsStackTraceGetter() {}
+ OsStackTraceGetter() : caller_frame_(NULL) {}
virtual String CurrentStackTrace(int max_depth, int skip_count);
virtual void UponLeavingGTest();
@@ -738,9 +802,20 @@ class UnitTestImpl {
// Gets the i-th test case among all the test cases. i can range from 0 to
// total_test_case_count() - 1. If i is not in that range, returns NULL.
const TestCase* GetTestCase(int i) const {
- return test_cases_.GetElementOr(i, NULL);
+ const int index = test_case_indices_.GetElementOr(i, -1);
+ return index < 0 ? NULL : test_cases_.GetElement(i);
+ }
+
+ // Gets the i-th test case among all the test cases. i can range from 0 to
+ // total_test_case_count() - 1. If i is not in that range, returns NULL.
+ TestCase* GetMutableTestCase(int i) {
+ const int index = test_case_indices_.GetElementOr(i, -1);
+ return index < 0 ? NULL : test_cases_.GetElement(index);
}
+ // Provides access to the event listener list.
+ TestEventListeners* listeners() { return &listeners_; }
+
// Returns the TestResult for the test that's currently running, or
// the TestResult for the ad hoc test if no test is running.
TestResult* current_test_result();
@@ -748,18 +823,6 @@ class UnitTestImpl {
// Returns the TestResult for the ad hoc test.
const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; }
- // Sets the unit test result printer.
- //
- // Does nothing if the input and the current printer object are the
- // same; otherwise, deletes the old printer object and makes the
- // input the current printer.
- void set_result_printer(UnitTestEventListenerInterface* result_printer);
-
- // Returns the current unit test result printer if it is not NULL;
- // otherwise, creates an appropriate result printer, makes it the
- // current printer, and returns it.
- UnitTestEventListenerInterface* result_printer();
-
// Sets the OS stack trace getter.
//
// Does nothing if the input and the current OS stack trace getter
@@ -895,9 +958,6 @@ class UnitTestImpl {
return &environments_in_reverse_order_;
}
- internal::Vector<TestCase*>* test_cases() { return &test_cases_; }
- const internal::Vector<TestCase*>* test_cases() const { return &test_cases_; }
-
// Getters for the per-thread Google Test trace stack.
internal::Vector<TraceInfo>* gtest_trace_stack() {
return gtest_trace_stack_.pointer();
@@ -907,9 +967,13 @@ class UnitTestImpl {
}
#if GTEST_HAS_DEATH_TEST
+ void InitDeathTestSubprocessControlInfo() {
+ internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag());
+ }
// Returns a pointer to the parsed --gtest_internal_run_death_test
// flag, or NULL if that flag was not specified.
// This information is useful only in a death test child process.
+ // Must not be called before a call to InitGoogleTest.
const InternalRunDeathTestFlag* internal_run_death_test_flag() const {
return internal_run_death_test_flag_.get();
}
@@ -919,12 +983,35 @@ class UnitTestImpl {
return death_test_factory_.get();
}
+ void SuppressTestEventsIfInSubprocess();
+
friend class ReplaceDeathTestFactory;
#endif // GTEST_HAS_DEATH_TEST
- // Gets the random seed used at the start of the current test run.
+ // Initializes the event listener performing XML output as specified by
+ // UnitTestOptions. Must not be called before InitGoogleTest.
+ void ConfigureXmlOutput();
+
+ // Performs initialization dependent upon flag values obtained in
+ // ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to
+ // ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest
+ // this function is also called from RunAllTests. Since this function can be
+ // called more than once, it has to be idempotent.
+ void PostFlagParsingInit();
+
+ // Gets the random seed used at the start of the current test iteration.
int random_seed() const { return random_seed_; }
+ // Gets the random number generator.
+ internal::Random* random() { return &random_; }
+
+ // Shuffles all test cases, and the tests within each test case,
+ // making sure that death tests are still run first.
+ void ShuffleTests();
+
+ // Restores the test cases and tests to their order before the first shuffle.
+ void UnshuffleTests();
+
private:
friend class ::testing::UnitTest;
@@ -956,7 +1043,15 @@ class UnitTestImpl {
internal::Vector<Environment*> environments_;
internal::Vector<Environment*> environments_in_reverse_order_;
- internal::Vector<TestCase*> test_cases_; // The vector of TestCases.
+ // The vector of TestCases in their original order. It owns the
+ // elements in the vector.
+ internal::Vector<TestCase*> test_cases_;
+
+ // Provides a level of indirection for the test case list to allow
+ // easy shuffling and restoring the test case order. The i-th
+ // element of this vector is the index of the i-th test case in the
+ // shuffled order.
+ internal::Vector<int> test_case_indices_;
#if GTEST_HAS_PARAM_TEST
// ParameterizedTestRegistry object used to register value-parameterized
@@ -992,11 +1087,9 @@ class UnitTestImpl {
// test, and records the result in ad_hoc_test_result_.
TestResult ad_hoc_test_result_;
- // The unit test result printer. Will be deleted when the UnitTest
- // object is destructed. By default, a plain text printer is used,
- // but the user can set this field to use a custom printer if that
- // is desired.
- UnitTestEventListenerInterface* result_printer_;
+ // The list of event listeners that can be used to track events inside
+ // Google Test.
+ TestEventListeners listeners_;
// The OS stack trace getter. Will be deleted when the UnitTest
// object is destructed. By default, an OsStackTraceGetter is used,
@@ -1004,9 +1097,15 @@ class UnitTestImpl {
// desired.
OsStackTraceGetterInterface* os_stack_trace_getter_;
+ // True iff PostFlagParsingInit() has been called.
+ bool post_flag_parse_init_performed_;
+
// The random number seed used at the beginning of the test run.
int random_seed_;
+ // Our random number generator.
+ internal::Random random_;
+
// How long the test took to run, in milliseconds.
TimeInMillis elapsed_time_;
@@ -1099,13 +1198,14 @@ bool ParseNaturalNumber(const ::std::string& str, Integer* number) {
char* end;
// BiggestConvertible is the largest integer type that system-provided
// string-to-number conversion routines can return.
-#if GTEST_OS_WINDOWS
+#if GTEST_OS_WINDOWS && !defined(__GNUC__)
+ // MSVC and C++ Builder define __int64 instead of the standard long long.
typedef unsigned __int64 BiggestConvertible;
const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10);
#else
typedef unsigned long long BiggestConvertible; // NOLINT
const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10);
-#endif // GTEST_OS_WINDOWS
+#endif // GTEST_OS_WINDOWS && !defined(__GNUC__)
const bool parse_success = *end == '\0' && errno == 0;
// TODO(vladl@google.com): Convert this to compile time assertion when it is
@@ -1131,8 +1231,6 @@ class TestResultAccessor {
test_result->RecordProperty(property);
}
- static bool Passed(const TestResult& result) { return result.Passed(); }
-
static void ClearTestPartResults(TestResult* test_result) {
test_result->ClearTestPartResults();
}
diff --git a/gtest/src/gtest-port.cc b/gtest/src/gtest-port.cc
index 09d1a8e..de169e2 100644
--- a/gtest/src/gtest-port.cc
+++ b/gtest/src/gtest-port.cc
@@ -35,14 +35,14 @@
#include <stdlib.h>
#include <stdio.h>
-#if GTEST_OS_WINDOWS
-#ifndef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
+#include <windows.h> // For TerminateProcess()
+#elif GTEST_OS_WINDOWS
#include <io.h>
#include <sys/stat.h>
-#endif // _WIN32_WCE
#else
#include <unistd.h>
-#endif // GTEST_OS_WINDOWS
+#endif // GTEST_OS_WINDOWS_MOBILE
#if GTEST_OS_MAC
#include <mach/mach_init.h>
@@ -50,10 +50,6 @@
#include <mach/vm_map.h>
#endif // GTEST_OS_MAC
-#ifdef _WIN32_WCE
-#include <windows.h> // For TerminateProcess()
-#endif // _WIN32_WCE
-
#include <gtest/gtest-spi.h>
#include <gtest/gtest-message.h>
#include <gtest/internal/gtest-string.h>
@@ -417,20 +413,25 @@ void RE::Init(const char* regex) {
#endif // GTEST_USES_POSIX_RE
-// Logs a message at the given severity level.
-void GTestLog(GTestLogSeverity severity, const char* file,
- int line, const char* msg) {
+
+GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line)
+ : severity_(severity) {
const char* const marker =
severity == GTEST_INFO ? "[ INFO ]" :
severity == GTEST_WARNING ? "[WARNING]" :
severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]";
- fprintf(stderr, "\n%s %s:%d: %s\n", marker, file, line, msg);
- if (severity == GTEST_FATAL) {
- fflush(NULL); // abort() is not guaranteed to flush open file streams.
+ GetStream() << ::std::endl << marker << " "
+ << FormatFileLocation(file, line).c_str() << ": ";
+}
+
+// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program.
+GTestLog::~GTestLog() {
+ GetStream() << ::std::endl;
+ if (severity_ == GTEST_FATAL) {
+ fflush(stderr);
posix::Abort();
}
}
-
// Disable Microsoft deprecation warnings for POSIX functions called from
// this class (creat, dup, dup2, and close)
#ifdef _MSC_VER
@@ -444,7 +445,7 @@ class CapturedStderr {
public:
// The ctor redirects stderr to a temporary file.
CapturedStderr() {
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
// Not supported on Windows CE.
posix::Abort();
#else
@@ -469,24 +470,24 @@ class CapturedStderr {
fflush(NULL);
dup2(captured_fd, kStdErrFileno);
close(captured_fd);
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
}
~CapturedStderr() {
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
remove(filename_.c_str());
-#endif // _WIN32_WCE
+#endif // !GTEST_OS_WINDOWS_MOBILE
}
// Stops redirecting stderr.
void StopCapture() {
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
// Restores the original stream.
fflush(NULL);
dup2(uncaptured_fd_, kStdErrFileno);
close(uncaptured_fd_);
uncaptured_fd_ = -1;
-#endif // !_WIN32_WCE
+#endif // !GTEST_OS_WINDOWS_MOBILE
}
// Returns the name of the temporary file holding the stderr output.
@@ -537,7 +538,7 @@ static String ReadEntireFile(FILE * file) {
// Starts capturing stderr.
void CaptureStderr() {
if (g_captured_stderr != NULL) {
- GTEST_LOG_(FATAL, "Only one stderr capturer can exist at one time.");
+ GTEST_LOG_(FATAL) << "Only one stderr capturer can exist at one time.";
}
g_captured_stderr = new CapturedStderr;
}
@@ -568,14 +569,14 @@ const ::std::vector<String>& GetArgvs() { return g_argvs; }
#endif // GTEST_HAS_DEATH_TEST
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
namespace posix {
void Abort() {
DebugBreak();
TerminateProcess(GetCurrentProcess(), 1);
}
} // namespace posix
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
// Returns the name of the environment variable corresponding to the
// given flag. For example, FlagToEnvVar("foo") will return
@@ -585,7 +586,7 @@ static String FlagToEnvVar(const char* flag) {
(Message() << GTEST_FLAG_PREFIX_ << flag).GetString();
Message env_var;
- for (int i = 0; i != full_flag.GetLength(); i++) {
+ for (size_t i = 0; i != full_flag.length(); i++) {
env_var << static_cast<char>(toupper(full_flag.c_str()[i]));
}
diff --git a/gtest/src/gtest-test-part.cc b/gtest/src/gtest-test-part.cc
index f053773..4f36df6 100644
--- a/gtest/src/gtest-test-part.cc
+++ b/gtest/src/gtest-test-part.cc
@@ -56,12 +56,12 @@ internal::String TestPartResult::ExtractSummary(const char* message) {
// Prints a TestPartResult object.
std::ostream& operator<<(std::ostream& os, const TestPartResult& result) {
- return os << result.file_name() << ":"
- << result.line_number() << ": "
- << (result.type() == TPRT_SUCCESS ? "Success" :
- result.type() == TPRT_FATAL_FAILURE ? "Fatal failure" :
- "Non-fatal failure") << ":\n"
- << result.message() << std::endl;
+ return os
+ << result.file_name() << ":" << result.line_number() << ": "
+ << (result.type() == TestPartResult::kSuccess ? "Success" :
+ result.type() == TestPartResult::kFatalFailure ? "Fatal failure" :
+ "Non-fatal failure") << ":\n"
+ << result.message() << std::endl;
}
// Constructs an empty TestPartResultArray.
diff --git a/gtest/src/gtest.cc b/gtest/src/gtest.cc
index a767d19..9340724 100644
--- a/gtest/src/gtest.cc
+++ b/gtest/src/gtest.cc
@@ -42,6 +42,8 @@
#include <wchar.h>
#include <wctype.h>
+#include <ostream>
+
#if GTEST_OS_LINUX
// TODO(kenton@google.com): Use autoconf to detect availability of
@@ -70,7 +72,7 @@
// On z/OS we additionally need strings.h for strcasecmp.
#include <strings.h> // NOLINT
-#elif defined(_WIN32_WCE) // We are on Windows CE.
+#elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE.
#include <windows.h> // NOLINT
@@ -81,7 +83,7 @@
#include <sys/types.h> // NOLINT
#include <sys/stat.h> // NOLINT
-#if defined(__MINGW__) || defined(__MINGW32__)
+#if GTEST_OS_WINDOWS_MINGW
// MinGW has gettimeofday() but not _ftime64().
// TODO(kenton@google.com): Use autoconf to detect availability of
// gettimeofday().
@@ -90,7 +92,7 @@
// supports these. consider using them instead.
#define GTEST_HAS_GETTIMEOFDAY_ 1
#include <sys/time.h> // NOLINT
-#endif // defined(__MINGW__) || defined(__MINGW32__)
+#endif // GTEST_OS_WINDOWS_MINGW
// cpplint thinks that the header is already included, so we want to
// silence it.
@@ -129,10 +131,6 @@
namespace testing {
-using internal::TestCase;
-using internal::TestProperty;
-using internal::TestResult;
-
// Constants.
// A test whose test case name or test name matches this filter is
@@ -257,6 +255,25 @@ GTEST_DEFINE_bool_(
namespace internal {
+// Generates a random number from [0, range), using a Linear
+// Congruential Generator (LCG). Crashes if 'range' is 0 or greater
+// than kMaxRange.
+UInt32 Random::Generate(UInt32 range) {
+ // These constants are the same as are used in glibc's rand(3).
+ state_ = (1103515245U*state_ + 12345U) % kMaxRange;
+
+ GTEST_CHECK_(range > 0)
+ << "Cannot generate a number in the range [0, 0).";
+ GTEST_CHECK_(range <= kMaxRange)
+ << "Generation of a number in [0, " << range << ") was requested, "
+ << "but this can only generate numbers in [0, " << kMaxRange << ").";
+
+ // Converting via modulus introduces a bit of downward bias, but
+ // it's simple, and a linear congruential generator isn't too good
+ // to begin with.
+ return state_ % range;
+}
+
// g_help_flag is true iff the --help flag or an equivalent form is
// specified on the command line.
static bool g_help_flag = false;
@@ -301,16 +318,22 @@ static bool ShouldRunTestCase(const TestCase* test_case) {
}
// AssertHelper constructor.
-AssertHelper::AssertHelper(TestPartResultType type, const char* file,
- int line, const char* message)
- : type_(type), file_(file), line_(line), message_(message) {
+AssertHelper::AssertHelper(TestPartResult::Type type,
+ const char* file,
+ int line,
+ const char* message)
+ : data_(new AssertHelperData(type, file, line, message)) {
+}
+
+AssertHelper::~AssertHelper() {
+ delete data_;
}
// Message assignment, for assertion streaming support.
void AssertHelper::operator=(const Message& message) const {
UnitTest::GetInstance()->
- AddTestPartResult(type_, file_, line_,
- AppendUserMessage(message_, message),
+ AddTestPartResult(data_->type, data_->file, data_->line,
+ AppendUserMessage(data_->message, message),
UnitTest::GetInstance()->impl()
->CurrentOsStackTraceExceptTop(1)
// Skips the stack frame for this function itself.
@@ -328,11 +351,11 @@ String g_executable_path;
FilePath GetCurrentExecutableName() {
FilePath result;
-#if defined(_WIN32_WCE) || GTEST_OS_WINDOWS
+#if GTEST_OS_WINDOWS
result.Set(FilePath(g_executable_path).RemoveExtension("exe"));
#else
result.Set(FilePath(g_executable_path));
-#endif // _WIN32_WCE || GTEST_OS_WINDOWS
+#endif // GTEST_OS_WINDOWS
return result.RemoveDirectoryName();
}
@@ -445,7 +468,7 @@ bool UnitTestOptions::FilterMatchesTest(const String &test_case_name,
positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter
negative = String("");
} else {
- positive.Set(p, dash - p); // Everything up to the dash
+ positive = String(p, dash - p); // Everything up to the dash
negative = String(dash+1); // Everything after the dash
if (positive.empty()) {
// Treat '-test1' as the same as '*-test1'
@@ -476,86 +499,6 @@ int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) {
} // namespace internal
-// The interface for printing the result of a UnitTest
-class UnitTestEventListenerInterface {
- public:
- // The d'tor is pure virtual as this is an abstract class.
- virtual ~UnitTestEventListenerInterface() {}
-
- // Called before the unit test starts.
- virtual void OnUnitTestStart(const UnitTest& unit_test) = 0;
-
- // Called after the unit test ends.
- virtual void OnUnitTestEnd(const UnitTest& unit_test) = 0;
-
- // Called before the test case starts.
- virtual void OnTestCaseStart(const TestCase& test_case) = 0;
-
- // Called after the test case ends.
- virtual void OnTestCaseEnd(const TestCase& test_case) = 0;
-
- // Called before the global set-up starts.
- virtual void OnGlobalSetUpStart(const UnitTest& unit_test) = 0;
-
- // Called after the global set-up ends.
- virtual void OnGlobalSetUpEnd(const UnitTest& unit_test) = 0;
-
- // Called before the global tear-down starts.
- virtual void OnGlobalTearDownStart(const UnitTest& unit_test) = 0;
-
- // Called after the global tear-down ends.
- virtual void OnGlobalTearDownEnd(const UnitTest& unit_test) = 0;
-
- // Called before the test starts.
- virtual void OnTestStart(const TestInfo& test_info) = 0;
-
- // Called after the test ends.
- virtual void OnTestEnd(const TestInfo& test_info) = 0;
-
- // Called after an assertion.
- virtual void OnNewTestPartResult(const TestPartResult& test_part_result) = 0;
-};
-
-// The convenience class for users who need to override just one or two
-// methods and are not concerned that a possible change to a signature of
-// the methods they override will not be caught during the build.
-class EmptyTestEventListener : public UnitTestEventListenerInterface {
- public:
- // Called before the unit test starts.
- virtual void OnUnitTestStart(const UnitTest& /*unit_test*/) {}
-
- // Called after the unit test ends.
- virtual void OnUnitTestEnd(const UnitTest& /*unit_test*/) {}
-
- // Called before the test case starts.
- virtual void OnTestCaseStart(const TestCase& /*test_case*/) {}
-
- // Called after the test case ends.
- virtual void OnTestCaseEnd(const TestCase& /*test_case&*/) {}
-
- // Called before the global set-up starts.
- virtual void OnGlobalSetUpStart(const UnitTest& /*unit_test*/) {}
-
- // Called after the global set-up ends.
- virtual void OnGlobalSetUpEnd(const UnitTest& /*unit_test*/) {}
-
- // Called before the global tear-down starts.
- virtual void OnGlobalTearDownStart(const UnitTest& /*unit_test*/) {}
-
- // Called after the global tear-down ends.
- virtual void OnGlobalTearDownEnd(const UnitTest& /*unit_test*/) {}
-
- // Called before the test starts.
- virtual void OnTestStart(const TestInfo& /*test_info*/) {}
-
- // Called after the test ends.
- virtual void OnTestEnd(const TestInfo& /*test_info*/) {}
-
- // Called after an assertion.
- virtual void OnNewTestPartResult(const TestPartResult& /*test_part_result*/) {
- }
-};
-
// The c'tor sets this object as the test part result reporter used by
// Google Test. The 'result' parameter specifies where to report the
// results. Intercepts only failures from the current thread.
@@ -631,11 +574,11 @@ AssertionResult HasOneFailure(const char* /* results_expr */,
const char* /* type_expr */,
const char* /* substr_expr */,
const TestPartResultArray& results,
- TestPartResultType type,
+ TestPartResult::Type type,
const char* substr) {
- const String expected(
- type == TPRT_FATAL_FAILURE ? "1 fatal failure" :
- "1 non-fatal failure");
+ const String expected(type == TestPartResult::kFatalFailure ?
+ "1 fatal failure" :
+ "1 non-fatal failure");
Message msg;
if (results.size() != 1) {
msg << "Expected: " << expected << "\n"
@@ -670,7 +613,7 @@ AssertionResult HasOneFailure(const char* /* results_expr */,
// substring the failure message should contain.
SingleFailureChecker:: SingleFailureChecker(
const TestPartResultArray* results,
- TestPartResultType type,
+ TestPartResult::Type type,
const char* substr)
: results_(results),
type_(type),
@@ -690,7 +633,7 @@ DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter(
void DefaultGlobalTestPartResultReporter::ReportTestPartResult(
const TestPartResult& result) {
unit_test_->current_test_result()->AddTestPartResult(result);
- unit_test_->result_printer()->OnNewTestPartResult(result);
+ unit_test_->listeners()->repeater()->OnTestPartResult(result);
}
DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter(
@@ -790,7 +733,7 @@ String UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) {
// Returns the current time in milliseconds.
TimeInMillis GetTimeInMillis() {
-#if defined(_WIN32_WCE) || defined(__BORLANDC__)
+#if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__)
// Difference between 1970-01-01 and 1601-01-01 in milliseconds.
// http://analogous.blogspot.com/2005/04/epoch.html
const TimeInMillis kJavaEpochToWinFileTimeDelta =
@@ -873,7 +816,7 @@ const char * String::CloneCString(const char* c_str) {
NULL : CloneString(c_str, strlen(c_str));
}
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
// Creates a UTF-16 wide string from the given ANSI string, allocating
// memory using new. The caller is responsible for deleting the return
// value using delete[]. Returns the wide string, or NULL if the
@@ -907,7 +850,7 @@ const char* String::Utf16ToAnsi(LPCWSTR utf16_str) {
return ansi;
}
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
// Compares two C strings. Returns true iff they have the same content.
//
@@ -926,17 +869,17 @@ bool String::CStringEquals(const char * lhs, const char * rhs) {
// Converts an array of wide chars to a narrow string using the UTF-8
// encoding, and streams the result to the given Message object.
-static void StreamWideCharsToMessage(const wchar_t* wstr, size_t len,
+static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length,
Message* msg) {
// TODO(wan): consider allowing a testing::String object to
// contain '\0'. This will make it behave more like std::string,
// and will allow ToUtf8String() to return the correct encoding
// for '\0' s.t. we can get rid of the conditional here (and in
// several other places).
- for (size_t i = 0; i != len; ) { // NOLINT
+ for (size_t i = 0; i != length; ) { // NOLINT
if (wstr[i] != L'\0') {
- *msg << WideStringToUtf8(wstr + i, static_cast<int>(len - i));
- while (i != len && wstr[i] != L'\0')
+ *msg << WideStringToUtf8(wstr + i, static_cast<int>(length - i));
+ while (i != length && wstr[i] != L'\0')
i++;
} else {
*msg << '\0';
@@ -1381,7 +1324,7 @@ namespace {
AssertionResult HRESULTFailureHelper(const char* expr,
const char* expected,
long hr) { // NOLINT
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
// Windows CE doesn't support FormatMessage.
const char error_text[] = "";
#else
@@ -1405,7 +1348,7 @@ AssertionResult HRESULTFailureHelper(const char* expr,
--message_length) {
error_text[message_length - 1] = '\0';
}
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
const String error_hex(String::Format("0x%08X ", hr));
Message msg;
@@ -1679,24 +1622,30 @@ bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs,
#endif // OS selector
}
-// Constructs a String by copying a given number of chars from a
-// buffer. E.g. String("hello", 3) will create the string "hel".
-String::String(const char * buffer, size_t len) {
- char * const temp = new char[ len + 1 ];
- memcpy(temp, buffer, len);
- temp[ len ] = '\0';
- c_str_ = temp;
-}
-
// Compares this with another String.
// Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0
// if this is greater than rhs.
int String::Compare(const String & rhs) const {
- if ( c_str_ == NULL ) {
- return rhs.c_str_ == NULL ? 0 : -1; // NULL < anything except NULL
+ const char* const lhs_c_str = c_str();
+ const char* const rhs_c_str = rhs.c_str();
+
+ if (lhs_c_str == NULL) {
+ return rhs_c_str == NULL ? 0 : -1; // NULL < anything except NULL
+ } else if (rhs_c_str == NULL) {
+ return 1;
}
- return rhs.c_str_ == NULL ? 1 : strcmp(c_str_, rhs.c_str_);
+ const size_t shorter_str_len =
+ length() <= rhs.length() ? length() : rhs.length();
+ for (size_t i = 0; i != shorter_str_len; i++) {
+ if (lhs_c_str[i] < rhs_c_str[i]) {
+ return -1;
+ } else if (lhs_c_str[i] > rhs_c_str[i]) {
+ return 1;
+ }
+ }
+ return (length() < rhs.length()) ? -1 :
+ (length() > rhs.length()) ? 1 : 0;
}
// Returns true iff this String ends with the given suffix. *Any*
@@ -1704,12 +1653,12 @@ int String::Compare(const String & rhs) const {
bool String::EndsWith(const char* suffix) const {
if (suffix == NULL || CStringEquals(suffix, "")) return true;
- if (c_str_ == NULL) return false;
+ if (c_str() == NULL) return false;
- const size_t this_len = strlen(c_str_);
+ const size_t this_len = strlen(c_str());
const size_t suffix_len = strlen(suffix);
return (this_len >= suffix_len) &&
- CStringEquals(c_str_ + this_len - suffix_len, suffix);
+ CStringEquals(c_str() + this_len - suffix_len, suffix);
}
// Returns true iff this String ends with the given suffix, ignoring case.
@@ -1717,37 +1666,12 @@ bool String::EndsWith(const char* suffix) const {
bool String::EndsWithCaseInsensitive(const char* suffix) const {
if (suffix == NULL || CStringEquals(suffix, "")) return true;
- if (c_str_ == NULL) return false;
+ if (c_str() == NULL) return false;
- const size_t this_len = strlen(c_str_);
+ const size_t this_len = strlen(c_str());
const size_t suffix_len = strlen(suffix);
return (this_len >= suffix_len) &&
- CaseInsensitiveCStringEquals(c_str_ + this_len - suffix_len, suffix);
-}
-
-// Sets the 0-terminated C string this String object represents. The
-// old string in this object is deleted, and this object will own a
-// clone of the input string. This function copies only up to length
-// bytes (plus a terminating null byte), or until the first null byte,
-// whichever comes first.
-//
-// This function works even when the c_str parameter has the same
-// value as that of the c_str_ field.
-void String::Set(const char * c_str, size_t length) {
- // Makes sure this works when c_str == c_str_
- const char* const temp = CloneString(c_str, length);
- delete[] c_str_;
- c_str_ = temp;
-}
-
-// Assigns a C string to this object. Self-assignment works.
-const String& String::operator=(const char* c_str) {
- // Makes sure this works when c_str == c_str_
- if (c_str != c_str_) {
- delete[] c_str_;
- c_str_ = CloneCString(c_str);
- }
- return *this;
+ CaseInsensitiveCStringEquals(c_str() + this_len - suffix_len, suffix);
}
// Formats a list of arguments to a String, using the same format
@@ -1757,28 +1681,38 @@ const String& String::operator=(const char* c_str) {
// available.
//
// The result is limited to 4096 characters (including the tailing 0).
-// If 4096 characters are not enough to format the input,
-// "<buffer exceeded>" is returned.
+// If 4096 characters are not enough to format the input, or if
+// there's an error, "<formatting error or buffer exceeded>" is
+// returned.
String String::Format(const char * format, ...) {
va_list args;
va_start(args, format);
char buffer[4096];
+ const int kBufferSize = sizeof(buffer)/sizeof(buffer[0]);
+
// MSVC 8 deprecates vsnprintf(), so we want to suppress warning
// 4996 (deprecated function) there.
#ifdef _MSC_VER // We are using MSVC.
#pragma warning(push) // Saves the current warning state.
#pragma warning(disable:4996) // Temporarily disables warning 4996.
- const int size =
- vsnprintf(buffer, sizeof(buffer)/sizeof(buffer[0]) - 1, format, args);
+ const int size = vsnprintf(buffer, kBufferSize, format, args);
#pragma warning(pop) // Restores the warning state.
#else // We are not using MSVC.
- const int size =
- vsnprintf(buffer, sizeof(buffer)/sizeof(buffer[0]) - 1, format, args);
+ const int size = vsnprintf(buffer, kBufferSize, format, args);
#endif // _MSC_VER
va_end(args);
- return String(size >= 0 ? buffer : "<buffer exceeded>");
+ // vsnprintf()'s behavior is not portable. When the buffer is not
+ // big enough, it returns a negative value in MSVC, and returns the
+ // needed buffer size on Linux. When there is an output error, it
+ // always returns a negative value. For simplicity, we lump the two
+ // error cases together.
+ if (size < 0 || size >= kBufferSize) {
+ return String("<formatting error or buffer exceeded>");
+ } else {
+ return String(buffer, size);
+ }
}
// Converts the buffer in a StrStream to a String, converting NUL
@@ -1829,6 +1763,8 @@ String AppendUserMessage(const String& gtest_msg,
return msg.GetString();
}
+} // namespace internal
+
// class TestResult
// Creates an empty TestResult.
@@ -1948,8 +1884,6 @@ int TestResult::test_property_count() const {
return test_properties_->size();
}
-} // namespace internal
-
// class Test
// Creates a Test object.
@@ -1990,7 +1924,7 @@ void Test::RecordProperty(const char* key, int value) {
namespace internal {
-void ReportFailureInUnknownLocation(TestPartResultType result_type,
+void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
const String& message) {
// This function is a friend of UnitTest and as such has access to
// AddTestPartResult.
@@ -2014,7 +1948,7 @@ static void AddExceptionThrownFailure(DWORD exception_code,
message << "Exception thrown with code 0x" << std::setbase(16) <<
exception_code << std::setbase(10) << " in " << location << ".";
- internal::ReportFailureInUnknownLocation(TPRT_FATAL_FAILURE,
+ internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure,
message.GetString());
}
@@ -2316,11 +2250,10 @@ void TestInfoImpl::Run() {
UnitTestImpl* const impl = internal::GetUnitTestImpl();
impl->set_current_test_info(parent_);
- // Notifies the unit test event listener that a test is about to
- // start.
- UnitTestEventListenerInterface* const result_printer =
- impl->result_printer();
- result_printer->OnTestStart(*parent_);
+ TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();
+
+ // Notifies the unit test event listeners that a test is about to start.
+ repeater->OnTestStart(*parent_);
const TimeInMillis start = GetTimeInMillis();
@@ -2363,13 +2296,15 @@ void TestInfoImpl::Run() {
result_.set_elapsed_time(GetTimeInMillis() - start);
// Notifies the unit test event listener that a test has just finished.
- result_printer->OnTestEnd(*parent_);
+ repeater->OnTestEnd(*parent_);
// Tells UnitTest to stop associating assertion results to this
// test.
impl->set_current_test_info(NULL);
}
+} // namespace internal
+
// class TestCase
// Gets the number of successful tests in this test case.
@@ -2408,33 +2343,39 @@ TestCase::TestCase(const char* name, const char* comment,
Test::TearDownTestCaseFunc tear_down_tc)
: name_(name),
comment_(comment),
+ test_info_list_(new internal::Vector<TestInfo*>),
+ test_indices_(new internal::Vector<int>),
set_up_tc_(set_up_tc),
tear_down_tc_(tear_down_tc),
should_run_(false),
elapsed_time_(0) {
- test_info_list_ = new internal::Vector<TestInfo *>;
}
// Destructor of TestCase.
TestCase::~TestCase() {
// Deletes every Test in the collection.
test_info_list_->ForEach(internal::Delete<TestInfo>);
-
- // Then deletes the Test collection.
- delete test_info_list_;
- test_info_list_ = NULL;
}
// Returns the i-th test among all the tests. i can range from 0 to
// total_test_count() - 1. If i is not in that range, returns NULL.
const TestInfo* TestCase::GetTestInfo(int i) const {
- return test_info_list_->GetElementOr(i, NULL);
+ const int index = test_indices_->GetElementOr(i, -1);
+ return index < 0 ? NULL : test_info_list_->GetElement(index);
+}
+
+// Returns the i-th test among all the tests. i can range from 0 to
+// total_test_count() - 1. If i is not in that range, returns NULL.
+TestInfo* TestCase::GetMutableTestInfo(int i) {
+ const int index = test_indices_->GetElementOr(i, -1);
+ return index < 0 ? NULL : test_info_list_->GetElement(index);
}
// Adds a test to this test case. Will delete the test upon
// destruction of the TestCase object.
void TestCase::AddTestInfo(TestInfo * test_info) {
test_info_list_->PushBack(test_info);
+ test_indices_->PushBack(test_indices_->size());
}
// Runs every test in this TestCase.
@@ -2444,20 +2385,21 @@ void TestCase::Run() {
internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();
impl->set_current_test_case(this);
- UnitTestEventListenerInterface * const result_printer =
- impl->result_printer();
+ TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();
- result_printer->OnTestCaseStart(*this);
+ repeater->OnTestCaseStart(*this);
impl->os_stack_trace_getter()->UponLeavingGTest();
set_up_tc_();
const internal::TimeInMillis start = internal::GetTimeInMillis();
- test_info_list_->ForEach(internal::TestInfoImpl::RunTest);
+ for (int i = 0; i < total_test_count(); i++) {
+ GetMutableTestInfo(i)->impl()->Run();
+ }
elapsed_time_ = internal::GetTimeInMillis() - start;
impl->os_stack_trace_getter()->UponLeavingGTest();
tear_down_tc_();
- result_printer->OnTestCaseEnd(*this);
+ repeater->OnTestCaseEnd(*this);
impl->set_current_test_case(NULL);
}
@@ -2488,11 +2430,17 @@ bool TestCase::ShouldRunTest(const TestInfo *test_info) {
return test_info->impl()->should_run();
}
-} // namespace internal
+// Shuffles the tests in this test case.
+void TestCase::ShuffleTests(internal::Random* random) {
+ test_indices_->Shuffle(random);
+}
-// A result printer that never prints anything. Used in the child process
-// of an exec-style death test to avoid needless output clutter.
-class NullUnitTestResultPrinter : public EmptyTestEventListener {};
+// Restores the test order to before the first shuffle.
+void TestCase::UnshuffleTests() {
+ for (int i = 0; i < test_indices_->size(); i++) {
+ test_indices_->GetMutableElement(i) = i;
+ }
+}
// Formats a countable noun. Depending on its quantity, either the
// singular form or the plural form is used. e.g.
@@ -2516,17 +2464,17 @@ static internal::String FormatTestCaseCount(int test_case_count) {
return FormatCountableNoun(test_case_count, "test case", "test cases");
}
-// Converts a TestPartResultType enum to human-friendly string
-// representation. Both TPRT_NONFATAL_FAILURE and TPRT_FATAL_FAILURE
-// are translated to "Failure", as the user usually doesn't care about
-// the difference between the two when viewing the test result.
-static const char * TestPartResultTypeToString(TestPartResultType type) {
+// Converts a TestPartResult::Type enum to human-friendly string
+// representation. Both kNonFatalFailure and kFatalFailure are translated
+// to "Failure", as the user usually doesn't care about the difference
+// between the two when viewing the test result.
+static const char * TestPartResultTypeToString(TestPartResult::Type type) {
switch (type) {
- case TPRT_SUCCESS:
+ case TestPartResult::kSuccess:
return "Success";
- case TPRT_NONFATAL_FAILURE:
- case TPRT_FATAL_FAILURE:
+ case TestPartResult::kNonFatalFailure:
+ case TestPartResult::kFatalFailure:
#ifdef _MSC_VER
return "error: ";
#else
@@ -2557,12 +2505,10 @@ static void PrintTestPartResult(const TestPartResult& test_part_result) {
// following statements add the test part result message to the Output
// window such that the user can double-click on it to jump to the
// corresponding source code location; otherwise they do nothing.
-#ifdef _WIN32_WCE
- // Windows Mobile doesn't support the ANSI version of OutputDebugString,
- // it works only with UTF16 strings.
- ::OutputDebugString(internal::String::AnsiToUtf16(result.c_str()));
- ::OutputDebugString(L"\n");
-#elif GTEST_OS_WINDOWS
+#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
+ // We don't call OutputDebugString*() on Windows Mobile, as printing
+ // to stdout is done by OutputDebugString() there already - we don't
+ // want the same message printed twice.
::OutputDebugStringA(result.c_str());
::OutputDebugStringA("\n");
#endif
@@ -2579,7 +2525,7 @@ enum GTestColor {
COLOR_YELLOW
};
-#if GTEST_OS_WINDOWS && !defined(_WIN32_WCE)
+#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
// Returns the character attribute for the given color.
WORD GetColorAttribute(GTestColor color) {
@@ -2604,7 +2550,7 @@ const char* GetAnsiColorCode(GTestColor color) {
};
}
-#endif // GTEST_OS_WINDOWS && !_WIN32_WCE
+#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
// Returns true iff Google Test should use colors in the output.
bool ShouldUseColor(bool stdout_is_tty) {
@@ -2645,13 +2591,13 @@ void ColoredPrintf(GTestColor color, const char* fmt, ...) {
va_list args;
va_start(args, fmt);
-#if defined(_WIN32_WCE) || GTEST_OS_SYMBIAN || GTEST_OS_ZOS
+#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS
const bool use_color = false;
#else
static const bool in_color_mode =
ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0);
const bool use_color = in_color_mode && (color != COLOR_DEFAULT);
-#endif // defined(_WIN32_WCE) || GTEST_OS_SYMBIAN || GTEST_OS_ZOS
+#endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS
// The '!= 0' comparison is necessary to satisfy MSVC 7.1.
if (!use_color) {
@@ -2660,7 +2606,7 @@ void ColoredPrintf(GTestColor color, const char* fmt, ...) {
return;
}
-#if GTEST_OS_WINDOWS && !defined(_WIN32_WCE)
+#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
// Gets the current text color.
@@ -2678,41 +2624,34 @@ void ColoredPrintf(GTestColor color, const char* fmt, ...) {
printf("\033[0;3%sm", GetAnsiColorCode(color));
vprintf(fmt, args);
printf("\033[m"); // Resets the terminal to default.
-#endif // GTEST_OS_WINDOWS && !defined(_WIN32_WCE)
+#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
va_end(args);
}
-} // namespace internal
-
-using internal::ColoredPrintf;
-using internal::COLOR_DEFAULT;
-using internal::COLOR_RED;
-using internal::COLOR_GREEN;
-using internal::COLOR_YELLOW;
-
-// This class implements the UnitTestEventListenerInterface interface.
+// This class implements the TestEventListener interface.
//
// Class PrettyUnitTestResultPrinter is copyable.
-class PrettyUnitTestResultPrinter : public UnitTestEventListenerInterface {
+class PrettyUnitTestResultPrinter : public TestEventListener {
public:
PrettyUnitTestResultPrinter() {}
static void PrintTestName(const char * test_case, const char * test) {
printf("%s.%s", test_case, test);
}
- // The following methods override what's in the
- // UnitTestEventListenerInterface class.
- virtual void OnUnitTestStart(const UnitTest& unit_test);
- virtual void OnGlobalSetUpStart(const UnitTest& unit_test);
- virtual void OnGlobalSetUpEnd(const UnitTest& /*unit_test*/) {}
+ // The following methods override what's in the TestEventListener class.
+ virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {}
+ virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration);
+ virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test);
+ virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {}
virtual void OnTestCaseStart(const TestCase& test_case);
- virtual void OnTestCaseEnd(const TestCase& test_case);
virtual void OnTestStart(const TestInfo& test_info);
- virtual void OnNewTestPartResult(const TestPartResult& result);
+ virtual void OnTestPartResult(const TestPartResult& result);
virtual void OnTestEnd(const TestInfo& test_info);
- virtual void OnGlobalTearDownStart(const UnitTest& unit_test);
- virtual void OnGlobalTearDownEnd(const UnitTest& /*unit_test*/) {}
- virtual void OnUnitTestEnd(const UnitTest& unit_test);
+ virtual void OnTestCaseEnd(const TestCase& test_case);
+ virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test);
+ virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {}
+ virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);
+ virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {}
private:
static void PrintFailedTests(const UnitTest& unit_test);
@@ -2720,8 +2659,12 @@ class PrettyUnitTestResultPrinter : public UnitTestEventListenerInterface {
internal::String test_case_name_;
};
-// Called before the unit test starts.
-void PrettyUnitTestResultPrinter::OnUnitTestStart(const UnitTest& unit_test) {
+ // Fired before each iteration of tests starts.
+void PrettyUnitTestResultPrinter::OnTestIterationStart(
+ const UnitTest& unit_test, int iteration) {
+ if (GTEST_FLAG(repeat) != 1)
+ printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1);
+
const char* const filter = GTEST_FLAG(filter).c_str();
// Prints the filter if it's not *. This reminds the user that some
@@ -2751,7 +2694,7 @@ void PrettyUnitTestResultPrinter::OnUnitTestStart(const UnitTest& unit_test) {
fflush(stdout);
}
-void PrettyUnitTestResultPrinter::OnGlobalSetUpStart(
+void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart(
const UnitTest& /*unit_test*/) {
ColoredPrintf(COLOR_GREEN, "[----------] ");
printf("Global test environment set-up.\n");
@@ -2772,19 +2715,6 @@ void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) {
fflush(stdout);
}
-void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) {
- if (!GTEST_FLAG(print_time)) return;
-
- test_case_name_ = test_case.name();
- const internal::String counts =
- FormatCountableNoun(test_case.test_to_run_count(), "test", "tests");
- ColoredPrintf(COLOR_GREEN, "[----------] ");
- printf("%s from %s (%s ms total)\n\n",
- counts.c_str(), test_case_name_.c_str(),
- internal::StreamableToString(test_case.elapsed_time()).c_str());
- fflush(stdout);
-}
-
void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) {
ColoredPrintf(COLOR_GREEN, "[ RUN ] ");
PrintTestName(test_case_name_.c_str(), test_info.name());
@@ -2796,6 +2726,18 @@ void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) {
fflush(stdout);
}
+// Called after an assertion failure.
+void PrettyUnitTestResultPrinter::OnTestPartResult(
+ const TestPartResult& result) {
+ // If the test part succeeded, we don't need to do anything.
+ if (result.type() == TestPartResult::kSuccess)
+ return;
+
+ // Print failure message from the assertion (e.g. expected this and got that).
+ PrintTestPartResult(result);
+ fflush(stdout);
+}
+
void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) {
if (test_info.result()->Passed()) {
ColoredPrintf(COLOR_GREEN, "[ OK ] ");
@@ -2812,19 +2754,20 @@ void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) {
fflush(stdout);
}
-// Called after an assertion failure.
-void PrettyUnitTestResultPrinter::OnNewTestPartResult(
- const TestPartResult& result) {
- // If the test part succeeded, we don't need to do anything.
- if (result.type() == TPRT_SUCCESS)
- return;
+void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) {
+ if (!GTEST_FLAG(print_time)) return;
- // Print failure message from the assertion (e.g. expected this and got that).
- PrintTestPartResult(result);
+ test_case_name_ = test_case.name();
+ const internal::String counts =
+ FormatCountableNoun(test_case.test_to_run_count(), "test", "tests");
+ ColoredPrintf(COLOR_GREEN, "[----------] ");
+ printf("%s from %s (%s ms total)\n\n",
+ counts.c_str(), test_case_name_.c_str(),
+ internal::StreamableToString(test_case.elapsed_time()).c_str());
fflush(stdout);
}
-void PrettyUnitTestResultPrinter::OnGlobalTearDownStart(
+void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart(
const UnitTest& /*unit_test*/) {
ColoredPrintf(COLOR_GREEN, "[----------] ");
printf("Global test environment tear-down\n");
@@ -2863,7 +2806,8 @@ void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) {
}
}
-void PrettyUnitTestResultPrinter::OnUnitTestEnd(const UnitTest& unit_test) {
+ void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,
+ int /*iteration*/) {
ColoredPrintf(COLOR_GREEN, "[==========] ");
printf("%s from %s ran.",
FormatTestCount(unit_test.test_to_run_count()).c_str(),
@@ -2902,76 +2846,129 @@ void PrettyUnitTestResultPrinter::OnUnitTestEnd(const UnitTest& unit_test) {
// End PrettyUnitTestResultPrinter
-// class UnitTestEventsRepeater
+// class TestEventRepeater
//
// This class forwards events to other event listeners.
-class UnitTestEventsRepeater : public UnitTestEventListenerInterface {
+class TestEventRepeater : public TestEventListener {
public:
- typedef internal::Vector<UnitTestEventListenerInterface *> Listeners;
- UnitTestEventsRepeater() {}
- virtual ~UnitTestEventsRepeater();
- void AddListener(UnitTestEventListenerInterface *listener);
-
- virtual void OnUnitTestStart(const UnitTest& unit_test);
- virtual void OnUnitTestEnd(const UnitTest& unit_test);
- virtual void OnGlobalSetUpStart(const UnitTest& unit_test);
- virtual void OnGlobalSetUpEnd(const UnitTest& unit_test);
- virtual void OnGlobalTearDownStart(const UnitTest& unit_test);
- virtual void OnGlobalTearDownEnd(const UnitTest& unit_test);
+ TestEventRepeater() : forwarding_enabled_(true) {}
+ virtual ~TestEventRepeater();
+ void Append(TestEventListener *listener);
+ TestEventListener* Release(TestEventListener* listener);
+
+ // Controls whether events will be forwarded to listeners_. Set to false
+ // in death test child processes.
+ bool forwarding_enabled() const { return forwarding_enabled_; }
+ void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; }
+
+ virtual void OnTestProgramStart(const UnitTest& unit_test);
+ virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration);
+ virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test);
+ virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test);
virtual void OnTestCaseStart(const TestCase& test_case);
- virtual void OnTestCaseEnd(const TestCase& test_case);
virtual void OnTestStart(const TestInfo& test_info);
+ virtual void OnTestPartResult(const TestPartResult& result);
virtual void OnTestEnd(const TestInfo& test_info);
- virtual void OnNewTestPartResult(const TestPartResult& result);
+ virtual void OnTestCaseEnd(const TestCase& test_case);
+ virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test);
+ virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test);
+ virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);
+ virtual void OnTestProgramEnd(const UnitTest& unit_test);
private:
- Listeners listeners_;
+ // Controls whether events will be forwarded to listeners_. Set to false
+ // in death test child processes.
+ bool forwarding_enabled_;
+ // The list of listeners that receive events.
+ Vector<TestEventListener*> listeners_;
- GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestEventsRepeater);
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater);
};
-UnitTestEventsRepeater::~UnitTestEventsRepeater() {
+TestEventRepeater::~TestEventRepeater() {
for (int i = 0; i < listeners_.size(); i++) {
delete listeners_.GetElement(i);
}
}
-void UnitTestEventsRepeater::AddListener(
- UnitTestEventListenerInterface *listener) {
+void TestEventRepeater::Append(TestEventListener *listener) {
listeners_.PushBack(listener);
}
-// Since the methods are identical, use a macro to reduce boilerplate.
-// This defines a member that repeats the call to all listeners.
+// TODO(vladl@google.com): Factor the search functionality into Vector::Find.
+TestEventListener* TestEventRepeater::Release(TestEventListener *listener) {
+ for (int i = 0; i < listeners_.size(); ++i) {
+ if (listeners_.GetElement(i) == listener) {
+ listeners_.Erase(i);
+ return listener;
+ }
+ }
+
+ return NULL;
+}
+
+// Since most methods are very similar, use macros to reduce boilerplate.
+// This defines a member that forwards the call to all listeners.
#define GTEST_REPEATER_METHOD_(Name, Type) \
-void UnitTestEventsRepeater::Name(const Type& parameter) { \
- for (int i = 0; i < listeners_.size(); i++) { \
- listeners_.GetElement(i)->Name(parameter); \
+void TestEventRepeater::Name(const Type& parameter) { \
+ if (forwarding_enabled_) { \
+ for (int i = 0; i < listeners_.size(); i++) { \
+ listeners_.GetElement(i)->Name(parameter); \
+ } \
+ } \
+}
+// This defines a member that forwards the call to all listeners in reverse
+// order.
+#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \
+void TestEventRepeater::Name(const Type& parameter) { \
+ if (forwarding_enabled_) { \
+ for (int i = static_cast<int>(listeners_.size()) - 1; i >= 0; i--) { \
+ listeners_.GetElement(i)->Name(parameter); \
+ } \
} \
}
-GTEST_REPEATER_METHOD_(OnUnitTestStart, UnitTest)
-GTEST_REPEATER_METHOD_(OnUnitTestEnd, UnitTest)
-GTEST_REPEATER_METHOD_(OnGlobalSetUpStart, UnitTest)
-GTEST_REPEATER_METHOD_(OnGlobalSetUpEnd, UnitTest)
-GTEST_REPEATER_METHOD_(OnGlobalTearDownStart, UnitTest)
-GTEST_REPEATER_METHOD_(OnGlobalTearDownEnd, UnitTest)
+GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest)
+GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest)
GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase)
-GTEST_REPEATER_METHOD_(OnTestCaseEnd, TestCase)
GTEST_REPEATER_METHOD_(OnTestStart, TestInfo)
-GTEST_REPEATER_METHOD_(OnTestEnd, TestInfo)
-GTEST_REPEATER_METHOD_(OnNewTestPartResult, TestPartResult)
+GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult)
+GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest)
+GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest)
+GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest)
+GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo)
+GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase)
+GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest)
#undef GTEST_REPEATER_METHOD_
+#undef GTEST_REVERSE_REPEATER_METHOD_
-// End PrettyUnitTestResultPrinter
+void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test,
+ int iteration) {
+ if (forwarding_enabled_) {
+ for (int i = 0; i < listeners_.size(); i++) {
+ listeners_.GetElement(i)->OnTestIterationStart(unit_test, iteration);
+ }
+ }
+}
+
+void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test,
+ int iteration) {
+ if (forwarding_enabled_) {
+ for (int i = static_cast<int>(listeners_.size()) - 1; i >= 0; i--) {
+ listeners_.GetElement(i)->OnTestIterationEnd(unit_test, iteration);
+ }
+ }
+}
+
+// End TestEventRepeater
// This class generates an XML output file.
class XmlUnitTestResultPrinter : public EmptyTestEventListener {
public:
explicit XmlUnitTestResultPrinter(const char* output_file);
- virtual void OnUnitTestEnd(const UnitTest& unit_test);
+ virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);
private:
// Is c a whitespace character that is normalized to a space character
@@ -2989,23 +2986,26 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener {
// is_attribute is true, the text is meant to appear as an attribute
// value, and normalizable whitespace is preserved by replacing it
// with character references.
- static internal::String EscapeXml(const char* str,
- bool is_attribute);
+ static String EscapeXml(const char* str, bool is_attribute);
+
+ // Returns the given string with all characters invalid in XML removed.
+ static String RemoveInvalidXmlCharacters(const char* str);
// Convenience wrapper around EscapeXml when str is an attribute value.
- static internal::String EscapeXmlAttribute(const char* str) {
+ static String EscapeXmlAttribute(const char* str) {
return EscapeXml(str, true);
}
// Convenience wrapper around EscapeXml when str is not an attribute value.
- static internal::String EscapeXmlText(const char* str) {
- return EscapeXml(str, false);
- }
+ static String EscapeXmlText(const char* str) { return EscapeXml(str, false); }
- // Prints an XML representation of a TestInfo object.
- static void PrintXmlTestInfo(FILE* out,
- const char* test_case_name,
- const TestInfo& test_info);
+ // Streams an XML CDATA section, escaping invalid CDATA sequences as needed.
+ static void OutputXmlCDataSection(::std::ostream* stream, const char* data);
+
+ // Streams an XML representation of a TestInfo object.
+ static void OutputXmlTestInfo(::std::ostream* stream,
+ const char* test_case_name,
+ const TestInfo& test_info);
// Prints an XML representation of a TestCase object
static void PrintXmlTestCase(FILE* out, const TestCase& test_case);
@@ -3017,11 +3017,10 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener {
// delimited XML attributes based on the property key="value" pairs.
// When the String is not empty, it includes a space at the beginning,
// to delimit this attribute from prior attributes.
- static internal::String TestPropertiesAsXmlAttributes(
- const TestResult& result);
+ static String TestPropertiesAsXmlAttributes(const TestResult& result);
// The output file.
- const internal::String output_file_;
+ const String output_file_;
GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter);
};
@@ -3037,13 +3036,14 @@ XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file)
}
// Called after the unit test ends.
-void XmlUnitTestResultPrinter::OnUnitTestEnd(const UnitTest& unit_test) {
+void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,
+ int /*iteration*/) {
FILE* xmlout = NULL;
- internal::FilePath output_file(output_file_);
- internal::FilePath output_dir(output_file.RemoveFileName());
+ FilePath output_file(output_file_);
+ FilePath output_dir(output_file.RemoveFileName());
if (output_dir.CreateDirectoriesRecursively()) {
- xmlout = internal::posix::FOpen(output_file_.c_str(), "w");
+ xmlout = posix::FOpen(output_file_.c_str(), "w");
}
if (xmlout == NULL) {
// TODO(wan): report the reason of the failure.
@@ -3078,8 +3078,7 @@ void XmlUnitTestResultPrinter::OnUnitTestEnd(const UnitTest& unit_test) {
// most invalid characters can be retained using character references.
// TODO(wan): It might be nice to have a minimally invasive, human-readable
// escaping scheme for invalid characters, rather than dropping them.
-internal::String XmlUnitTestResultPrinter::EscapeXml(const char* str,
- bool is_attribute) {
+String XmlUnitTestResultPrinter::EscapeXml(const char* str, bool is_attribute) {
Message m;
if (str != NULL) {
@@ -3109,7 +3108,7 @@ internal::String XmlUnitTestResultPrinter::EscapeXml(const char* str,
default:
if (IsValidXmlCharacter(*src)) {
if (is_attribute && IsNormalizableWhitespace(*src))
- m << internal::String::Format("&#x%02X;", unsigned(*src));
+ m << String::Format("&#x%02X;", unsigned(*src));
else
m << *src;
}
@@ -3121,6 +3120,21 @@ internal::String XmlUnitTestResultPrinter::EscapeXml(const char* str,
return m.GetString();
}
+// Returns the given string with all characters invalid in XML removed.
+// Currently invalid characters are dropped from the string. An
+// alternative is to replace them with certain characters such as . or ?.
+String XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters(const char* str) {
+ char* const output = new char[strlen(str) + 1];
+ char* appender = output;
+ for (char ch = *str; ch != '\0'; ch = *++str)
+ if (IsValidXmlCharacter(ch))
+ *appender++ = ch;
+ *appender = '\0';
+
+ String ret_value(output);
+ delete[] output;
+ return ret_value;
+}
// The following routines generate an XML representation of a UnitTest
// object.
@@ -3138,8 +3152,6 @@ internal::String XmlUnitTestResultPrinter::EscapeXml(const char* str,
// </testsuite>
// </testsuites>
-namespace internal {
-
// Formats the given time in milliseconds as seconds. The returned
// C-string is owned by this function and cannot be released by the
// caller. Calling the function again invalidates the previous
@@ -3150,43 +3162,62 @@ const char* FormatTimeInMillisAsSeconds(TimeInMillis ms) {
return str.c_str();
}
-} // namespace internal
+// Streams an XML CDATA section, escaping invalid CDATA sequences as needed.
+void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream,
+ const char* data) {
+ const char* segment = data;
+ *stream << "<![CDATA[";
+ for (;;) {
+ const char* const next_segment = strstr(segment, "]]>");
+ if (next_segment != NULL) {
+ stream->write(segment, next_segment - segment);
+ *stream << "]]>]]&gt;<![CDATA[";
+ segment = next_segment + strlen("]]>");
+ } else {
+ *stream << segment;
+ break;
+ }
+ }
+ *stream << "]]>";
+}
// Prints an XML representation of a TestInfo object.
// TODO(wan): There is also value in printing properties with the plain printer.
-void XmlUnitTestResultPrinter::PrintXmlTestInfo(FILE* out,
- const char* test_case_name,
- const TestInfo& test_info) {
+void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
+ const char* test_case_name,
+ const TestInfo& test_info) {
const TestResult& result = *test_info.result();
- fprintf(out,
- " <testcase name=\"%s\" status=\"%s\" time=\"%s\" "
- "classname=\"%s\"%s",
- EscapeXmlAttribute(test_info.name()).c_str(),
- test_info.should_run() ? "run" : "notrun",
- internal::FormatTimeInMillisAsSeconds(result.elapsed_time()),
- EscapeXmlAttribute(test_case_name).c_str(),
- TestPropertiesAsXmlAttributes(result).c_str());
+ *stream << " <testcase name=\""
+ << EscapeXmlAttribute(test_info.name()).c_str()
+ << "\" status=\""
+ << (test_info.should_run() ? "run" : "notrun")
+ << "\" time=\""
+ << FormatTimeInMillisAsSeconds(result.elapsed_time())
+ << "\" classname=\"" << EscapeXmlAttribute(test_case_name).c_str()
+ << "\"" << TestPropertiesAsXmlAttributes(result).c_str();
int failures = 0;
for (int i = 0; i < result.total_part_count(); ++i) {
const TestPartResult& part = result.GetTestPartResult(i);
if (part.failed()) {
- const internal::String message =
- internal::String::Format("%s:%d\n%s", part.file_name(),
- part.line_number(), part.message());
if (++failures == 1)
- fprintf(out, ">\n");
- fprintf(out,
- " <failure message=\"%s\" type=\"\"><![CDATA[%s]]>"
- "</failure>\n",
- EscapeXmlAttribute(part.summary()).c_str(), message.c_str());
+ *stream << ">\n";
+ *stream << " <failure message=\""
+ << EscapeXmlAttribute(part.summary()).c_str()
+ << "\" type=\"\">";
+ const String message = RemoveInvalidXmlCharacters(String::Format(
+ "%s:%d\n%s",
+ part.file_name(), part.line_number(),
+ part.message()).c_str());
+ OutputXmlCDataSection(stream, message.c_str());
+ *stream << "</failure>\n";
}
}
if (failures == 0)
- fprintf(out, " />\n");
+ *stream << " />\n";
else
- fprintf(out, " </testcase>\n");
+ *stream << " </testcase>\n";
}
// Prints an XML representation of a TestCase object
@@ -3201,9 +3232,12 @@ void XmlUnitTestResultPrinter::PrintXmlTestCase(FILE* out,
test_case.disabled_test_count());
fprintf(out,
"errors=\"0\" time=\"%s\">\n",
- internal::FormatTimeInMillisAsSeconds(test_case.elapsed_time()));
- for (int i = 0; i < test_case.total_test_count(); ++i)
- PrintXmlTestInfo(out, test_case.name(), *test_case.GetTestInfo(i));
+ FormatTimeInMillisAsSeconds(test_case.elapsed_time()));
+ for (int i = 0; i < test_case.total_test_count(); ++i) {
+ StrStream stream;
+ OutputXmlTestInfo(&stream, test_case.name(), *test_case.GetTestInfo(i));
+ fprintf(out, "%s", StrStreamToString(&stream).c_str());
+ }
fprintf(out, " </testsuite>\n");
}
@@ -3217,7 +3251,7 @@ void XmlUnitTestResultPrinter::PrintXmlUnitTest(FILE* out,
unit_test.total_test_count(),
unit_test.failed_test_count(),
unit_test.disabled_test_count(),
- internal::FormatTimeInMillisAsSeconds(unit_test.elapsed_time()));
+ FormatTimeInMillisAsSeconds(unit_test.elapsed_time()));
if (GTEST_FLAG(shuffle)) {
fprintf(out, "random_seed=\"%d\" ", unit_test.random_seed());
}
@@ -3229,7 +3263,7 @@ void XmlUnitTestResultPrinter::PrintXmlUnitTest(FILE* out,
// Produces a string representing the test properties in a result as space
// delimited XML attributes based on the property key="value" pairs.
-internal::String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
+String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
const TestResult& result) {
Message attributes;
for (int i = 0; i < result.test_property_count(); ++i) {
@@ -3242,8 +3276,6 @@ internal::String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
// End XmlUnitTestResultPrinter
-namespace internal {
-
// Class ScopedTrace
// Pushes the given source file location and message onto a per-thread
@@ -3290,6 +3322,81 @@ OsStackTraceGetter::kElidedFramesMarker =
} // namespace internal
+// class TestEventListeners
+
+TestEventListeners::TestEventListeners()
+ : repeater_(new internal::TestEventRepeater()),
+ default_result_printer_(NULL),
+ default_xml_generator_(NULL) {
+}
+
+TestEventListeners::~TestEventListeners() { delete repeater_; }
+
+// Returns the standard listener responsible for the default console
+// output. Can be removed from the listeners list to shut down default
+// console output. Note that removing this object from the listener list
+// with Release transfers its ownership to the user.
+void TestEventListeners::Append(TestEventListener* listener) {
+ repeater_->Append(listener);
+}
+
+// Removes the given event listener from the list and returns it. It then
+// becomes the caller's responsibility to delete the listener. Returns
+// NULL if the listener is not found in the list.
+TestEventListener* TestEventListeners::Release(TestEventListener* listener) {
+ if (listener == default_result_printer_)
+ default_result_printer_ = NULL;
+ else if (listener == default_xml_generator_)
+ default_xml_generator_ = NULL;
+ return repeater_->Release(listener);
+}
+
+// Returns repeater that broadcasts the TestEventListener events to all
+// subscribers.
+TestEventListener* TestEventListeners::repeater() { return repeater_; }
+
+// Sets the default_result_printer attribute to the provided listener.
+// The listener is also added to the listener list and previous
+// default_result_printer is removed from it and deleted. The listener can
+// also be NULL in which case it will not be added to the list. Does
+// nothing if the previous and the current listener objects are the same.
+void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) {
+ if (default_result_printer_ != listener) {
+ // It is an error to pass this method a listener that is already in the
+ // list.
+ delete Release(default_result_printer_);
+ default_result_printer_ = listener;
+ if (listener != NULL)
+ Append(listener);
+ }
+}
+
+// Sets the default_xml_generator attribute to the provided listener. The
+// listener is also added to the listener list and previous
+// default_xml_generator is removed from it and deleted. The listener can
+// also be NULL in which case it will not be added to the list. Does
+// nothing if the previous and the current listener objects are the same.
+void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) {
+ if (default_xml_generator_ != listener) {
+ // It is an error to pass this method a listener that is already in the
+ // list.
+ delete Release(default_xml_generator_);
+ default_xml_generator_ = listener;
+ if (listener != NULL)
+ Append(listener);
+ }
+}
+
+// Controls whether events will be forwarded by the repeater to the
+// listeners in the list.
+bool TestEventListeners::EventForwardingEnabled() const {
+ return repeater_->forwarding_enabled();
+}
+
+void TestEventListeners::SuppressEventForwarding() {
+ repeater_->set_forwarding_enabled(false);
+}
+
// class UnitTest
// Gets the singleton UnitTest object. The first time this method is
@@ -3378,6 +3485,18 @@ const TestCase* UnitTest::GetTestCase(int i) const {
return impl()->GetTestCase(i);
}
+// Gets the i-th test case among all the test cases. i can range from 0 to
+// total_test_case_count() - 1. If i is not in that range, returns NULL.
+TestCase* UnitTest::GetMutableTestCase(int i) {
+ return impl()->GetMutableTestCase(i);
+}
+
+// Returns the list of event listeners that can be used to track events
+// inside Google Test.
+TestEventListeners& UnitTest::listeners() {
+ return *impl()->listeners();
+}
+
// Registers and returns a global test environment. When a test
// program is run, all global test environments will be set-up in the
// order they were registered. After all tests in the program have
@@ -3416,7 +3535,7 @@ class GoogleTestFailureException : public ::std::runtime_error {
// this to report their results. The user code should use the
// assertion macros instead of calling this directly.
// L < mutex_
-void UnitTest::AddTestPartResult(TestPartResultType result_type,
+void UnitTest::AddTestPartResult(TestPartResult::Type result_type,
const char* file_name,
int line_number,
const internal::String& message,
@@ -3446,7 +3565,7 @@ void UnitTest::AddTestPartResult(TestPartResultType result_type,
impl_->GetTestPartResultReporterForCurrentThread()->
ReportTestPartResult(result);
- if (result_type != TPRT_SUCCESS) {
+ if (result_type != TestPartResult::kSuccess) {
// gtest_break_on_failure takes precedence over
// gtest_throw_on_failure. This allows a user to set the latter
// in the code (perhaps in order to use Google Test assertions
@@ -3491,27 +3610,27 @@ int UnitTest::Run() {
// Catch SEH-style exceptions.
const bool in_death_test_child_process =
- internal::GTEST_FLAG(internal_run_death_test).GetLength() > 0;
+ internal::GTEST_FLAG(internal_run_death_test).length() > 0;
// Either the user wants Google Test to catch exceptions thrown by the
// tests or this is executing in the context of death test child
// process. In either case the user does not want to see pop-up dialogs
// about crashes - they are expected..
if (GTEST_FLAG(catch_exceptions) || in_death_test_child_process) {
-#if !defined(_WIN32_WCE)
+#if !GTEST_OS_WINDOWS_MOBILE
// SetErrorMode doesn't exist on CE.
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT |
SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
-#endif // _WIN32_WCE
+#endif // !GTEST_OS_WINDOWS_MOBILE
-#if (defined(_MSC_VER) || defined(__MINGW32__)) && !defined(_WIN32_WCE)
+#if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE
// Death test children can be terminated with _abort(). On Windows,
// _abort() can show a dialog with a warning message. This forces the
// abort message to go to stderr instead.
_set_error_mode(_OUT_TO_STDERR);
#endif
-#if _MSC_VER >= 1400 && !defined(_WIN32_WCE)
+#if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE
// In the debug version, Visual Studio pops up a separate dialog
// offering a choice to debug the aborted program. We need to suppress
// this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement
@@ -3624,7 +3743,6 @@ UnitTestImpl::UnitTestImpl(UnitTest* parent)
&default_global_test_part_result_reporter_),
per_thread_test_part_result_reporter_(
&default_per_thread_test_part_result_reporter_),
- test_cases_(),
#if GTEST_HAS_PARAM_TEST
parameterized_test_registry_(),
parameterized_tests_registered_(false),
@@ -3633,9 +3751,10 @@ UnitTestImpl::UnitTestImpl(UnitTest* parent)
current_test_case_(NULL),
current_test_info_(NULL),
ad_hoc_test_result_(),
- result_printer_(NULL),
os_stack_trace_getter_(NULL),
- random_seed_(0),
+ post_flag_parse_init_performed_(false),
+ random_seed_(0), // Will be overridden by the flag before first use.
+ random_(0), // Will be reseeded before first use.
#if GTEST_HAS_DEATH_TEST
elapsed_time_(0),
internal_run_death_test_flag_(NULL),
@@ -3643,6 +3762,7 @@ UnitTestImpl::UnitTestImpl(UnitTest* parent)
#else
elapsed_time_(0) {
#endif // GTEST_HAS_DEATH_TEST
+ listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter);
}
UnitTestImpl::~UnitTestImpl() {
@@ -3652,12 +3772,58 @@ UnitTestImpl::~UnitTestImpl() {
// Deletes every Environment.
environments_.ForEach(internal::Delete<Environment>);
- // Deletes the current test result printer.
- delete result_printer_;
-
delete os_stack_trace_getter_;
}
+#if GTEST_HAS_DEATH_TEST
+// Disables event forwarding if the control is currently in a death test
+// subprocess. Must not be called before InitGoogleTest.
+void UnitTestImpl::SuppressTestEventsIfInSubprocess() {
+ if (internal_run_death_test_flag_.get() != NULL)
+ listeners()->SuppressEventForwarding();
+}
+#endif // GTEST_HAS_DEATH_TEST
+
+// Initializes event listeners performing XML output as specified by
+// UnitTestOptions. Must not be called before InitGoogleTest.
+void UnitTestImpl::ConfigureXmlOutput() {
+ const String& output_format = UnitTestOptions::GetOutputFormat();
+ if (output_format == "xml") {
+ listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter(
+ UnitTestOptions::GetAbsolutePathToOutputFile().c_str()));
+ } else if (output_format != "") {
+ printf("WARNING: unrecognized output format \"%s\" ignored.\n",
+ output_format.c_str());
+ fflush(stdout);
+ }
+}
+
+// Performs initialization dependent upon flag values obtained in
+// ParseGoogleTestFlagsOnly. Is called from InitGoogleTest after the call to
+// ParseGoogleTestFlagsOnly. In case a user neglects to call InitGoogleTest
+// this function is also called from RunAllTests. Since this function can be
+// called more than once, it has to be idempotent.
+void UnitTestImpl::PostFlagParsingInit() {
+ // Ensures that this function does not execute more than once.
+ if (!post_flag_parse_init_performed_) {
+ post_flag_parse_init_performed_ = true;
+
+#if GTEST_HAS_DEATH_TEST
+ InitDeathTestSubprocessControlInfo();
+ SuppressTestEventsIfInSubprocess();
+#endif // GTEST_HAS_DEATH_TEST
+
+ // Registers parameterized tests. This makes parameterized tests
+ // available to the UnitTest reflection API without running
+ // RUN_ALL_TESTS.
+ RegisterParameterizedTests();
+
+ // Configures listeners for XML output. This makes it possible for users
+ // to shut down the default XML output before invoking RUN_ALL_TESTS.
+ ConfigureXmlOutput();
+ }
+}
+
// A predicate that checks the name of a TestCase against a known
// value.
//
@@ -3682,7 +3848,9 @@ class TestCaseNameIs {
};
// Finds and returns a TestCase with the given name. If one doesn't
-// exist, creates one and returns it.
+// exist, creates one and returns it. It's the CALLER'S
+// RESPONSIBILITY to ensure that this function is only called WHEN THE
+// TESTS ARE NOT SHUFFLED.
//
// Arguments:
//
@@ -3707,13 +3875,16 @@ TestCase* UnitTestImpl::GetTestCase(const char* test_case_name,
if (internal::UnitTestOptions::MatchesFilter(String(test_case_name),
kDeathTestCaseFilter)) {
// Yes. Inserts the test case after the last death test case
- // defined so far.
+ // defined so far. This only works when the test cases haven't
+ // been shuffled. Otherwise we may end up running a death test
+ // after a non-death test.
test_cases_.Insert(new_test_case, ++last_death_test_case_);
} else {
// No. Appends to the end of the list.
test_cases_.PushBack(new_test_case);
}
+ test_case_indices_.PushBack(test_case_indices_.size());
return new_test_case;
}
@@ -3728,7 +3899,7 @@ static void TearDownEnvironment(Environment* env) { env->TearDown(); }
// considered to be failed, but the rest of the tests will still be
// run. (We disable exceptions on Linux and Mac OS X, so the issue
// doesn't apply there.)
-// When parameterized tests are enabled, it explands and registers
+// When parameterized tests are enabled, it expands and registers
// parameterized tests first in RegisterParameterizedTests().
// All other functions called from RunAllTests() may safely assume that
// parameterized tests are ready to be counted and run.
@@ -3745,7 +3916,9 @@ int UnitTestImpl::RunAllTests() {
if (g_help_flag)
return 0;
- RegisterParameterizedTests();
+ // Repeats the call to the post-flag parsing initialization in case the
+ // user didn't call InitGoogleTest.
+ PostFlagParsingInit();
// Even if sharding is not on, test runners may want to use the
// GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding
@@ -3757,12 +3930,9 @@ int UnitTestImpl::RunAllTests() {
bool in_subprocess_for_death_test = false;
#if GTEST_HAS_DEATH_TEST
- internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag());
in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL);
#endif // GTEST_HAS_DEATH_TEST
- UnitTestEventListenerInterface * const printer = result_printer();
-
const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex,
in_subprocess_for_death_test);
@@ -3785,59 +3955,79 @@ int UnitTestImpl::RunAllTests() {
// True iff at least one test has failed.
bool failed = false;
+ TestEventListener* repeater = listeners()->repeater();
+
+ repeater->OnTestProgramStart(*parent_);
+
// How many times to repeat the tests? We don't want to repeat them
// when we are inside the subprocess of a death test.
const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat);
// Repeats forever if the repeat count is negative.
const bool forever = repeat < 0;
for (int i = 0; forever || i != repeat; i++) {
- if (repeat != 1) {
- printf("\nRepeating all tests (iteration %d) . . .\n\n", i + 1);
- }
-
- // Tells the unit test event listener that the tests are about to
- // start.
- printer->OnUnitTestStart(*parent_);
+ ClearResult();
const TimeInMillis start = GetTimeInMillis();
+ // Shuffles test cases and tests if requested.
+ if (has_tests_to_run && GTEST_FLAG(shuffle)) {
+ random()->Reseed(random_seed_);
+ // This should be done before calling OnTestIterationStart(),
+ // such that a test event listener can see the actual test order
+ // in the event.
+ ShuffleTests();
+ }
+
+ // Tells the unit test event listeners that the tests are about to start.
+ repeater->OnTestIterationStart(*parent_, i);
+
// Runs each test case if there is at least one test to run.
if (has_tests_to_run) {
// Sets up all environments beforehand.
- printer->OnGlobalSetUpStart(*parent_);
+ repeater->OnEnvironmentsSetUpStart(*parent_);
environments_.ForEach(SetUpEnvironment);
- printer->OnGlobalSetUpEnd(*parent_);
+ repeater->OnEnvironmentsSetUpEnd(*parent_);
// Runs the tests only if there was no fatal failure during global
// set-up.
if (!Test::HasFatalFailure()) {
- test_cases_.ForEach(TestCase::RunTestCase);
+ for (int i = 0; i < total_test_case_count(); i++) {
+ GetMutableTestCase(i)->Run();
+ }
}
// Tears down all environments in reverse order afterwards.
- printer->OnGlobalTearDownStart(*parent_);
+ repeater->OnEnvironmentsTearDownStart(*parent_);
environments_in_reverse_order_.ForEach(TearDownEnvironment);
- printer->OnGlobalTearDownEnd(*parent_);
+ repeater->OnEnvironmentsTearDownEnd(*parent_);
}
elapsed_time_ = GetTimeInMillis() - start;
- // Tells the unit test event listener that the tests have just
- // finished.
- printer->OnUnitTestEnd(*parent_);
+ // Tells the unit test event listener that the tests have just finished.
+ repeater->OnTestIterationEnd(*parent_, i);
// Gets the result and clears it.
if (!Passed()) {
failed = true;
}
- ClearResult();
+
+ // Restores the original test order after the iteration. This
+ // allows the user to quickly repro a failure that happens in the
+ // N-th iteration without repeating the first (N - 1) iterations.
+ // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in
+ // case the user somehow changes the value of the flag somewhere
+ // (it's always safe to unshuffle the tests).
+ UnshuffleTests();
if (GTEST_FLAG(shuffle)) {
- // Picks a new random seed for each run.
+ // Picks a new random seed for each iteration.
random_seed_ = GetNextRandomSeed(random_seed_);
}
}
+ repeater->OnTestProgramEnd(*parent_);
+
// Returns 0 if all tests passed, or 1 other wise.
return failed ? 1 : 0;
}
@@ -4016,49 +4206,6 @@ void UnitTestImpl::ListTestsMatchingFilter() {
fflush(stdout);
}
-// Sets the unit test result printer.
-//
-// Does nothing if the input and the current printer object are the
-// same; otherwise, deletes the old printer object and makes the
-// input the current printer.
-void UnitTestImpl::set_result_printer(
- UnitTestEventListenerInterface* result_printer) {
- if (result_printer_ != result_printer) {
- delete result_printer_;
- result_printer_ = result_printer;
- }
-}
-
-// Returns the current unit test result printer if it is not NULL;
-// otherwise, creates an appropriate result printer, makes it the
-// current printer, and returns it.
-UnitTestEventListenerInterface* UnitTestImpl::result_printer() {
- if (result_printer_ != NULL) {
- return result_printer_;
- }
-
-#if GTEST_HAS_DEATH_TEST
- if (internal_run_death_test_flag_.get() != NULL) {
- result_printer_ = new NullUnitTestResultPrinter;
- return result_printer_;
- }
-#endif // GTEST_HAS_DEATH_TEST
-
- UnitTestEventsRepeater *repeater = new UnitTestEventsRepeater;
- const String& output_format = internal::UnitTestOptions::GetOutputFormat();
- if (output_format == "xml") {
- repeater->AddListener(new XmlUnitTestResultPrinter(
- internal::UnitTestOptions::GetAbsolutePathToOutputFile().c_str()));
- } else if (output_format != "") {
- printf("WARNING: unrecognized output format \"%s\" ignored.\n",
- output_format.c_str());
- fflush(stdout);
- }
- repeater->AddListener(new PrettyUnitTestResultPrinter);
- result_printer_ = repeater;
- return result_printer_;
-}
-
// Sets the OS stack trace getter.
//
// Does nothing if the input and the current OS stack trace getter are
@@ -4090,6 +4237,32 @@ TestResult* UnitTestImpl::current_test_result() {
current_test_info_->impl()->result() : &ad_hoc_test_result_;
}
+// Shuffles all test cases, and the tests within each test case,
+// making sure that death tests are still run first.
+void UnitTestImpl::ShuffleTests() {
+ // Shuffles the death test cases.
+ test_case_indices_.ShuffleRange(random(), 0, last_death_test_case_ + 1);
+
+ // Shuffles the non-death test cases.
+ test_case_indices_.ShuffleRange(random(), last_death_test_case_ + 1,
+ test_cases_.size());
+
+ // Shuffles the tests inside each test case.
+ for (int i = 0; i < test_cases_.size(); i++) {
+ test_cases_.GetElement(i)->ShuffleTests(random());
+ }
+}
+
+// Restores the test cases and tests to their order before the first shuffle.
+void UnitTestImpl::UnshuffleTests() {
+ for (int i = 0; i < test_cases_.size(); i++) {
+ // Unshuffles the tests in each test case.
+ test_cases_.GetElement(i)->UnshuffleTests();
+ // Resets the index of each test case.
+ test_case_indices_.GetMutableElement(i) = i;
+ }
+}
+
// TestInfoImpl constructor. The new instance assumes ownership of the test
// factory object.
TestInfoImpl::TestInfoImpl(TestInfo* parent,
@@ -4126,7 +4299,8 @@ TestInfoImpl::~TestInfoImpl() {
// For example, if Foo() calls Bar(), which in turn calls
// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in
// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.
-String GetCurrentOsStackTraceExceptTop(UnitTest* unit_test, int skip_count) {
+String GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/,
+ int skip_count) {
// We pass skip_count + 1 to skip this wrapper function in addition
// to what the user really wants to skip.
return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1);
@@ -4138,11 +4312,13 @@ namespace {
class ClassUniqueToAlwaysTrue {};
}
+bool IsTrue(bool condition) { return condition; }
+
bool AlwaysTrue() {
#if GTEST_HAS_EXCEPTIONS
// This condition is always false so AlwaysTrue() never actually throws,
// but it makes the compiler think that it may throw.
- if (atoi("42") == 36) // NOLINT
+ if (IsTrue(false))
throw ClassUniqueToAlwaysTrue();
#endif // GTEST_HAS_EXCEPTIONS
return true;
@@ -4161,7 +4337,7 @@ const char* ParseFlagValue(const char* str,
// The flag must start with "--" followed by GTEST_FLAG_PREFIX_.
const String flag_str = String::Format("--%s%s", GTEST_FLAG_PREFIX_, flag);
- const size_t flag_len = flag_str.GetLength();
+ const size_t flag_len = flag_str.length();
if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL;
// Skips the flag name.
@@ -4301,8 +4477,8 @@ static const char kColorEncodedHelpMessage[] =
"Test Execution:\n"
" @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n"
" Run the tests repeatedly; use a negative count to repeat forever.\n"
-" @G--" GTEST_FLAG_PREFIX_ "shuffle\n"
-" Randomize tests' orders on every run. To be implemented.\n"
+" @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n"
+" Randomize tests' orders on every iteration.\n"
" @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n"
" Random number seed to use for shuffling test orders (between 1 and\n"
" 99999, or 0 to use a seed based on the current time).\n"
@@ -4439,6 +4615,7 @@ void InitGoogleTestImpl(int* argc, CharType** argv) {
#endif // GTEST_HAS_DEATH_TEST
ParseGoogleTestFlagsOnly(argc, argv);
+ GetUnitTestImpl()->PostFlagParsingInit();
}
} // namespace internal
diff --git a/gtest/test/gtest-death-test_test.cc b/gtest/test/gtest-death-test_test.cc
index 1881139..288c70a 100644
--- a/gtest/test/gtest-death-test_test.cc
+++ b/gtest/test/gtest-death-test_test.cc
@@ -35,6 +35,9 @@
#include <gtest/gtest.h>
#include <gtest/internal/gtest-filepath.h>
+using testing::internal::AlwaysFalse;
+using testing::internal::AlwaysTrue;
+
#if GTEST_HAS_DEATH_TEST
#if GTEST_OS_WINDOWS
@@ -143,7 +146,7 @@ class MayDie {
// A member function that may die.
void MemberFunction() const {
if (should_die_) {
- GTEST_LOG_(FATAL, "death inside MayDie::MemberFunction().");
+ GTEST_LOG_(FATAL) << "death inside MayDie::MemberFunction().";
}
}
@@ -154,26 +157,26 @@ class MayDie {
// A global function that's expected to die.
void GlobalFunction() {
- GTEST_LOG_(FATAL, "death inside GlobalFunction().");
+ GTEST_LOG_(FATAL) << "death inside GlobalFunction().";
}
// A non-void function that's expected to die.
int NonVoidFunction() {
- GTEST_LOG_(FATAL, "death inside NonVoidFunction().");
+ GTEST_LOG_(FATAL) << "death inside NonVoidFunction().";
return 1;
}
// A unary function that may die.
void DieIf(bool should_die) {
if (should_die) {
- GTEST_LOG_(FATAL, "death inside DieIf().");
+ GTEST_LOG_(FATAL) << "death inside DieIf().";
}
}
// A binary function that may die.
bool DieIfLessThan(int x, int y) {
if (x < y) {
- GTEST_LOG_(FATAL, "death inside DieIfLessThan().");
+ GTEST_LOG_(FATAL) << "death inside DieIfLessThan().";
}
return true;
}
@@ -188,7 +191,7 @@ void DeathTestSubroutine() {
int DieInDebugElse12(int* sideeffect) {
if (sideeffect) *sideeffect = 12;
#ifndef NDEBUG
- GTEST_LOG_(FATAL, "debug death inside DieInDebugElse12()");
+ GTEST_LOG_(FATAL) << "debug death inside DieInDebugElse12()";
#endif // NDEBUG
return 12;
}
@@ -271,28 +274,28 @@ TEST(ExitStatusPredicateTest, KilledBySignal) {
// be followed by operator<<, and that in either case the complete text
// comprises only a single C++ statement.
TEST_F(TestForDeathTest, SingleStatement) {
- if (false)
+ if (AlwaysFalse())
// This would fail if executed; this is a compilation test only
ASSERT_DEATH(return, "");
- if (true)
+ if (AlwaysTrue())
EXPECT_DEATH(_exit(1), "");
else
// This empty "else" branch is meant to ensure that EXPECT_DEATH
// doesn't expand into an "if" statement without an "else"
;
- if (false)
+ if (AlwaysFalse())
ASSERT_DEATH(return, "") << "did not die";
- if (false)
+ if (AlwaysFalse())
;
else
EXPECT_DEATH(_exit(1), "") << 1 << 2 << 3;
}
void DieWithEmbeddedNul() {
- fprintf(stderr, "Hello%cworld.\n", '\0');
+ fprintf(stderr, "Hello%cmy null world.\n", '\0');
fflush(stderr);
_exit(1);
}
@@ -303,8 +306,8 @@ void DieWithEmbeddedNul() {
TEST_F(TestForDeathTest, EmbeddedNulInMessage) {
// TODO(wan@google.com): <regex.h> doesn't support matching strings
// with embedded NUL characters - find a way to workaround it.
- EXPECT_DEATH(DieWithEmbeddedNul(), "w.*ld");
- ASSERT_DEATH(DieWithEmbeddedNul(), "w.*ld");
+ EXPECT_DEATH(DieWithEmbeddedNul(), "my null world");
+ ASSERT_DEATH(DieWithEmbeddedNul(), "my null world");
}
#endif // GTEST_USES_PCRE
@@ -656,7 +659,11 @@ static void TestExitMacros() {
EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), "");
ASSERT_EXIT(_exit(42), testing::ExitedWithCode(42), "");
-#if GTEST_OS_WINDOWS
+#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW
+ // MinGW (as of MinGW 5.1.6 and MSYS 1.0.11) does not tag crashed
+ // processes with non-zero exit code and does not honor calls to
+ // SetErrorMode(SEM_NOGPFAULTERRORBOX) that are supposed to suppress
+ // error pop-ups.
EXPECT_EXIT({
testing::GTEST_FLAG(catch_exceptions) = false;
*static_cast<int*>(NULL) = 1;
@@ -668,7 +675,9 @@ static void TestExitMacros() {
*static_cast<int*>(NULL) = 1;
}, testing::ExitedWithCode(0), "") << "This failure is expected.";
}, "This failure is expected.");
+#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW
+#if GTEST_OS_WINDOWS
// Of all signals effects on the process exit code, only those of SIGABRT
// are documented on Windows.
// See http://msdn.microsoft.com/en-us/library/dwwzkt4c(VS.71).aspx.
@@ -824,9 +833,10 @@ void MockDeathTestFactory::SetParameters(bool create,
// Sets test to NULL (if create_ is false) or to the address of a new
// MockDeathTest object with parameters taken from the last call
// to SetParameters (if create_ is true). Always returns true.
-bool MockDeathTestFactory::Create(const char* statement,
- const ::testing::internal::RE* regex,
- const char* file, int line,
+bool MockDeathTestFactory::Create(const char* /*statement*/,
+ const ::testing::internal::RE* /*regex*/,
+ const char* /*file*/,
+ int /*line*/,
DeathTest** test) {
test_deleted_ = false;
if (create_) {
@@ -1136,7 +1146,7 @@ using testing::internal::GetCapturedStderr;
using testing::internal::String;
// Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED are still
-// defined but do not rigger failures when death tests are not available on
+// defined but do not trigger failures when death tests are not available on
// the system.
TEST(ConditionalDeathMacrosTest, WarnsWhenDeathTestsNotAvailable) {
// Empty statement will not crash, but that should not trigger a failure
@@ -1148,16 +1158,89 @@ TEST(ConditionalDeathMacrosTest, WarnsWhenDeathTestsNotAvailable) {
"Death tests are not supported on this platform"));
ASSERT_TRUE(NULL != strstr(output.c_str(), ";"));
+ // The streamed message should not be printed as there is no test failure.
+ CaptureStderr();
+ EXPECT_DEATH_IF_SUPPORTED(;, "") << "streamed message";
+ output = GetCapturedStderr();
+ ASSERT_TRUE(NULL == strstr(output.c_str(), "streamed message"));
+
CaptureStderr();
- ASSERT_DEATH_IF_SUPPORTED(;, "");
+ ASSERT_DEATH_IF_SUPPORTED(;, ""); // NOLINT
output = GetCapturedStderr();
ASSERT_TRUE(NULL != strstr(output.c_str(),
"Death tests are not supported on this platform"));
ASSERT_TRUE(NULL != strstr(output.c_str(), ";"));
+
+ CaptureStderr();
+ ASSERT_DEATH_IF_SUPPORTED(;, "") << "streamed message"; // NOLINT
+ output = GetCapturedStderr();
+ ASSERT_TRUE(NULL == strstr(output.c_str(), "streamed message"));
+}
+
+void FuncWithAssert(int* n) {
+ ASSERT_DEATH_IF_SUPPORTED(return;, "");
+ (*n)++;
}
+// Tests that ASSERT_DEATH_IF_SUPPORTED does not return from the current
+// function (as ASSERT_DEATH does) if death tests are not supported.
+TEST(ConditionalDeathMacrosTest, AssertDeatDoesNotReturnhIfUnsupported) {
+ int n = 0;
+ FuncWithAssert(&n);
+ EXPECT_EQ(1, n);
+}
#endif // GTEST_HAS_DEATH_TEST
+// Tests that the death test macros expand to code which may or may not
+// be followed by operator<<, and that in either case the complete text
+// comprises only a single C++ statement.
+//
+// The syntax should work whether death tests are available or not.
+TEST(ConditionalDeathMacrosSyntaxDeathTest, SingleStatement) {
+ if (AlwaysFalse())
+ // This would fail if executed; this is a compilation test only
+ ASSERT_DEATH_IF_SUPPORTED(return, "");
+
+ if (AlwaysTrue())
+ EXPECT_DEATH_IF_SUPPORTED(_exit(1), "");
+ else
+ // This empty "else" branch is meant to ensure that EXPECT_DEATH
+ // doesn't expand into an "if" statement without an "else"
+ ; // NOLINT
+
+ if (AlwaysFalse())
+ ASSERT_DEATH_IF_SUPPORTED(return, "") << "did not die";
+
+ if (AlwaysFalse())
+ ; // NOLINT
+ else
+ EXPECT_DEATH_IF_SUPPORTED(_exit(1), "") << 1 << 2 << 3;
+}
+
+// Tests that conditional death test macros expand to code which interacts
+// well with switch statements.
+TEST(ConditionalDeathMacrosSyntaxDeathTest, SwitchStatement) {
+// Microsoft compiler usually complains about switch statements without
+// case labels. We suppress that warning for this test.
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 4065)
+#endif // _MSC_VER
+
+ switch (0)
+ default:
+ ASSERT_DEATH_IF_SUPPORTED(_exit(1), "")
+ << "exit in default switch handler";
+
+ switch (0)
+ case 0:
+ EXPECT_DEATH_IF_SUPPORTED(_exit(1), "") << "exit in switch case";
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+}
+
// Tests that a test case whose name ends with "DeathTest" works fine
// on Windows.
TEST(NotADeathTest, Test) {
diff --git a/gtest/test/gtest-filepath_test.cc b/gtest/test/gtest-filepath_test.cc
index adf9746..5bc4daf 100644
--- a/gtest/test/gtest-filepath_test.cc
+++ b/gtest/test/gtest-filepath_test.cc
@@ -50,17 +50,17 @@
#include "src/gtest-internal-inl.h"
#undef GTEST_IMPLEMENTATION_
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
#include <windows.h> // NOLINT
#elif GTEST_OS_WINDOWS
#include <direct.h> // NOLINT
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
namespace testing {
namespace internal {
namespace {
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
// TODO(wan@google.com): Move these to the POSIX adapter section in
// gtest-port.h.
@@ -81,9 +81,7 @@ int _rmdir(const char* path) {
return ret;
}
-#endif // _WIN32_WCE
-
-#ifndef _WIN32_WCE
+#else
TEST(GetCurrentDirTest, ReturnsCurrentDir) {
const FilePath original_dir = FilePath::GetCurrentDir();
@@ -103,7 +101,7 @@ TEST(GetCurrentDirTest, ReturnsCurrentDir) {
#endif
}
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
TEST(IsEmptyTest, ReturnsTrueForEmptyPath) {
EXPECT_TRUE(FilePath("").IsEmpty());
@@ -156,7 +154,7 @@ TEST(RemoveDirectoryNameTest, ShouldAlsoGiveFileName) {
// RemoveFileName "" -> "./"
TEST(RemoveFileNameTest, EmptyName) {
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
// On Windows CE, we use the root as the current directory.
EXPECT_STREQ(GTEST_PATH_SEP_,
FilePath("").RemoveFileName().c_str());
@@ -344,12 +342,12 @@ TEST(DirectoryTest, RootOfWrongDriveDoesNotExists) {
}
#endif // GTEST_OS_WINDOWS
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
// Windows CE _does_ consider an empty directory to exist.
TEST(DirectoryTest, EmptyPathDirectoryDoesNotExist) {
EXPECT_FALSE(FilePath("").DirectoryExists());
}
-#endif // ! _WIN32_WCE
+#endif // !GTEST_OS_WINDOWS_MOBILE
TEST(DirectoryTest, CurrentDirectoryExists) {
#if GTEST_OS_WINDOWS // We are on Windows.
@@ -449,9 +447,8 @@ class DirectoryCreationTest : public Test {
}
String TempDir() const {
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
return String("\\temp\\");
-
#elif GTEST_OS_WINDOWS
const char* temp_dir = posix::GetEnv("TEMP");
if (temp_dir == NULL || temp_dir[0] == '\0')
@@ -462,7 +459,7 @@ class DirectoryCreationTest : public Test {
return String::Format("%s\\", temp_dir);
#else
return String("/tmp/");
-#endif
+#endif // GTEST_OS_WINDOWS_MOBILE
}
void CreateTextFile(const char* filename) {
diff --git a/gtest/test/gtest-listener_test.cc b/gtest/test/gtest-listener_test.cc
new file mode 100644
index 0000000..f12f518
--- /dev/null
+++ b/gtest/test/gtest-listener_test.cc
@@ -0,0 +1,322 @@
+// Copyright 2009 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: vladl@google.com (Vlad Losev)
+//
+// The Google C++ Testing Framework (Google Test)
+//
+// This file verifies Google Test event listeners receive events at the
+// right times.
+
+#include <gtest/gtest.h>
+
+// Indicates that this translation unit is part of Google Test's
+// implementation. It must come before gtest-internal-inl.h is
+// included, or there will be a compiler error. This trick is to
+// prevent a user from accidentally including gtest-internal-inl.h in
+// his code.
+#define GTEST_IMPLEMENTATION_ 1
+#include "src/gtest-internal-inl.h" // For Vector.
+#undef GTEST_IMPLEMENTATION_
+
+using ::testing::AddGlobalTestEnvironment;
+using ::testing::Environment;
+using ::testing::InitGoogleTest;
+using ::testing::Test;
+using ::testing::TestCase;
+using ::testing::TestEventListener;
+using ::testing::TestInfo;
+using ::testing::TestPartResult;
+using ::testing::UnitTest;
+using ::testing::internal::String;
+using ::testing::internal::Vector;
+
+// Used by tests to register their events.
+Vector<String>* g_events = NULL;
+
+namespace testing {
+namespace internal {
+
+class EventRecordingListener : public TestEventListener {
+ public:
+ EventRecordingListener(const char* name) : name_(name) {}
+
+ protected:
+ virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {
+ g_events->PushBack(GetFullMethodName("OnTestProgramStart"));
+ }
+
+ virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,
+ int iteration) {
+ Message message;
+ message << GetFullMethodName("OnTestIterationStart")
+ << "(" << iteration << ")";
+ g_events->PushBack(message.GetString());
+ }
+
+ virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {
+ g_events->PushBack(GetFullMethodName("OnEnvironmentsSetUpStart"));
+ }
+
+ virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {
+ g_events->PushBack(GetFullMethodName("OnEnvironmentsSetUpEnd"));
+ }
+
+ virtual void OnTestCaseStart(const TestCase& /*test_case*/) {
+ g_events->PushBack(GetFullMethodName("OnTestCaseStart"));
+ }
+
+ virtual void OnTestStart(const TestInfo& /*test_info*/) {
+ g_events->PushBack(GetFullMethodName("OnTestStart"));
+ }
+
+ virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {
+ g_events->PushBack(GetFullMethodName("OnTestPartResult"));
+ }
+
+ virtual void OnTestEnd(const TestInfo& /*test_info*/) {
+ g_events->PushBack(GetFullMethodName("OnTestEnd"));
+ }
+
+ virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {
+ g_events->PushBack(GetFullMethodName("OnTestCaseEnd"));
+ }
+
+ virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {
+ g_events->PushBack(GetFullMethodName("OnEnvironmentsTearDownStart"));
+ }
+
+ virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {
+ g_events->PushBack(GetFullMethodName("OnEnvironmentsTearDownEnd"));
+ }
+
+ virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,
+ int iteration) {
+ Message message;
+ message << GetFullMethodName("OnTestIterationEnd")
+ << "(" << iteration << ")";
+ g_events->PushBack(message.GetString());
+ }
+
+ virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {
+ g_events->PushBack(GetFullMethodName("OnTestProgramEnd"));
+ }
+
+ private:
+ String GetFullMethodName(const char* name) {
+ Message message;
+ message << name_ << "." << name;
+ return message.GetString();
+ }
+
+ String name_;
+};
+
+class EnvironmentInvocationCatcher : public Environment {
+ protected:
+ virtual void SetUp() {
+ g_events->PushBack(String("Environment::SetUp"));
+ }
+
+ virtual void TearDown() {
+ g_events->PushBack(String("Environment::TearDown"));
+ }
+};
+
+class ListenerTest : public Test {
+ protected:
+ static void SetUpTestCase() {
+ g_events->PushBack(String("ListenerTest::SetUpTestCase"));
+ }
+
+ static void TearDownTestCase() {
+ g_events->PushBack(String("ListenerTest::TearDownTestCase"));
+ }
+
+ virtual void SetUp() {
+ g_events->PushBack(String("ListenerTest::SetUp"));
+ }
+
+ virtual void TearDown() {
+ g_events->PushBack(String("ListenerTest::TearDown"));
+ }
+};
+
+TEST_F(ListenerTest, DoesFoo) {
+ // Test execution order within a test case is not guaranteed so we are not
+ // recording the test name.
+ g_events->PushBack(String("ListenerTest::* Test Body"));
+ SUCCEED(); // Triggers OnTestPartResult.
+}
+
+TEST_F(ListenerTest, DoesBar) {
+ g_events->PushBack(String("ListenerTest::* Test Body"));
+ SUCCEED(); // Triggers OnTestPartResult.
+}
+
+} // namespace internal
+
+} // namespace testing
+
+using ::testing::internal::EnvironmentInvocationCatcher;
+using ::testing::internal::EventRecordingListener;
+
+void VerifyResults(const Vector<String>& data,
+ const char* const* expected_data,
+ int expected_data_size) {
+ const int actual_size = data.size();
+ // If the following assertion fails, a new entry will be appended to
+ // data. Hence we save data.size() first.
+ EXPECT_EQ(expected_data_size, actual_size);
+
+ // Compares the common prefix.
+ const int shorter_size = expected_data_size <= actual_size ?
+ expected_data_size : actual_size;
+ int i = 0;
+ for (; i < shorter_size; ++i) {
+ ASSERT_STREQ(expected_data[i], data.GetElement(i).c_str())
+ << "at position " << i;
+ }
+
+ // Prints extra elements in the actual data.
+ for (; i < actual_size; ++i) {
+ printf(" Actual event #%d: %s\n", i, data.GetElement(i).c_str());
+ }
+}
+
+int main(int argc, char **argv) {
+ Vector<String> events;
+ g_events = &events;
+ InitGoogleTest(&argc, argv);
+
+ UnitTest::GetInstance()->listeners().Append(
+ new EventRecordingListener("1st"));
+ UnitTest::GetInstance()->listeners().Append(
+ new EventRecordingListener("2nd"));
+
+ AddGlobalTestEnvironment(new EnvironmentInvocationCatcher);
+
+ GTEST_CHECK_(events.size() == 0)
+ << "AddGlobalTestEnvironment should not generate any events itself.";
+
+ ::testing::GTEST_FLAG(repeat) = 2;
+ int ret_val = RUN_ALL_TESTS();
+
+ const char* const expected_events[] = {
+ "1st.OnTestProgramStart",
+ "2nd.OnTestProgramStart",
+ "1st.OnTestIterationStart(0)",
+ "2nd.OnTestIterationStart(0)",
+ "1st.OnEnvironmentsSetUpStart",
+ "2nd.OnEnvironmentsSetUpStart",
+ "Environment::SetUp",
+ "2nd.OnEnvironmentsSetUpEnd",
+ "1st.OnEnvironmentsSetUpEnd",
+ "1st.OnTestCaseStart",
+ "2nd.OnTestCaseStart",
+ "ListenerTest::SetUpTestCase",
+ "1st.OnTestStart",
+ "2nd.OnTestStart",
+ "ListenerTest::SetUp",
+ "ListenerTest::* Test Body",
+ "1st.OnTestPartResult",
+ "2nd.OnTestPartResult",
+ "ListenerTest::TearDown",
+ "2nd.OnTestEnd",
+ "1st.OnTestEnd",
+ "1st.OnTestStart",
+ "2nd.OnTestStart",
+ "ListenerTest::SetUp",
+ "ListenerTest::* Test Body",
+ "1st.OnTestPartResult",
+ "2nd.OnTestPartResult",
+ "ListenerTest::TearDown",
+ "2nd.OnTestEnd",
+ "1st.OnTestEnd",
+ "ListenerTest::TearDownTestCase",
+ "2nd.OnTestCaseEnd",
+ "1st.OnTestCaseEnd",
+ "1st.OnEnvironmentsTearDownStart",
+ "2nd.OnEnvironmentsTearDownStart",
+ "Environment::TearDown",
+ "2nd.OnEnvironmentsTearDownEnd",
+ "1st.OnEnvironmentsTearDownEnd",
+ "2nd.OnTestIterationEnd(0)",
+ "1st.OnTestIterationEnd(0)",
+ "1st.OnTestIterationStart(1)",
+ "2nd.OnTestIterationStart(1)",
+ "1st.OnEnvironmentsSetUpStart",
+ "2nd.OnEnvironmentsSetUpStart",
+ "Environment::SetUp",
+ "2nd.OnEnvironmentsSetUpEnd",
+ "1st.OnEnvironmentsSetUpEnd",
+ "1st.OnTestCaseStart",
+ "2nd.OnTestCaseStart",
+ "ListenerTest::SetUpTestCase",
+ "1st.OnTestStart",
+ "2nd.OnTestStart",
+ "ListenerTest::SetUp",
+ "ListenerTest::* Test Body",
+ "1st.OnTestPartResult",
+ "2nd.OnTestPartResult",
+ "ListenerTest::TearDown",
+ "2nd.OnTestEnd",
+ "1st.OnTestEnd",
+ "1st.OnTestStart",
+ "2nd.OnTestStart",
+ "ListenerTest::SetUp",
+ "ListenerTest::* Test Body",
+ "1st.OnTestPartResult",
+ "2nd.OnTestPartResult",
+ "ListenerTest::TearDown",
+ "2nd.OnTestEnd",
+ "1st.OnTestEnd",
+ "ListenerTest::TearDownTestCase",
+ "2nd.OnTestCaseEnd",
+ "1st.OnTestCaseEnd",
+ "1st.OnEnvironmentsTearDownStart",
+ "2nd.OnEnvironmentsTearDownStart",
+ "Environment::TearDown",
+ "2nd.OnEnvironmentsTearDownEnd",
+ "1st.OnEnvironmentsTearDownEnd",
+ "2nd.OnTestIterationEnd(1)",
+ "1st.OnTestIterationEnd(1)",
+ "2nd.OnTestProgramEnd",
+ "1st.OnTestProgramEnd"
+ };
+ VerifyResults(events,
+ expected_events,
+ sizeof(expected_events)/sizeof(expected_events[0]));
+
+ // We need to check manually for ad hoc test failures that happen after
+ // RUN_ALL_TESTS finishes.
+ if (UnitTest::GetInstance()->Failed())
+ ret_val = 1;
+
+ return ret_val;
+}
diff --git a/gtest/test/gtest-options_test.cc b/gtest/test/gtest-options_test.cc
index 43c6d22..31ae327 100644
--- a/gtest/test/gtest-options_test.cc
+++ b/gtest/test/gtest-options_test.cc
@@ -40,11 +40,11 @@
#include <gtest/gtest.h>
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
#include <windows.h>
#elif GTEST_OS_WINDOWS
#include <direct.h>
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
// Indicates that this translation unit is part of Google Test's
// implementation. It must come before gtest-internal-inl.h is
@@ -130,7 +130,7 @@ TEST(XmlOutputTest, GetOutputFileFromDirectoryPath) {
TEST(OutputFileHelpersTest, GetCurrentExecutableName) {
const FilePath executable = GetCurrentExecutableName();
const char* const exe_str = executable.c_str();
-#if defined(_WIN32_WCE) || GTEST_OS_WINDOWS
+#if GTEST_OS_WINDOWS
ASSERT_TRUE(_strcmpi("gtest-options_test", exe_str) == 0 ||
_strcmpi("gtest-options-ex_test", exe_str) == 0 ||
_strcmpi("gtest_all_test", exe_str) == 0)
@@ -143,7 +143,7 @@ TEST(OutputFileHelpersTest, GetCurrentExecutableName) {
String(exe_str) == "gtest_all_test" ||
String(exe_str) == "lt-gtest_all_test")
<< "GetCurrentExecutableName() returns " << exe_str;
-#endif
+#endif // GTEST_OS_WINDOWS
}
class XmlOutputChangeDirTest : public Test {
diff --git a/gtest/test/gtest-port_test.cc b/gtest/test/gtest-port_test.cc
index d980b7c..df59f9e 100644
--- a/gtest/test/gtest-port_test.cc
+++ b/gtest/test/gtest-port_test.cc
@@ -54,16 +54,16 @@ namespace testing {
namespace internal {
TEST(GtestCheckSyntaxTest, BehavesLikeASingleStatement) {
- if (false)
+ if (AlwaysFalse())
GTEST_CHECK_(false) << "This should never be executed; "
"It's a compilation test only.";
- if (true)
+ if (AlwaysTrue())
GTEST_CHECK_(true);
else
; // NOLINT
- if (false)
+ if (AlwaysFalse())
; // NOLINT
else
GTEST_CHECK_(true) << "";
@@ -133,8 +133,6 @@ TEST(GetThreadCountTest, ReturnsZeroWhenUnableToCountThreads) {
}
#endif // GTEST_OS_MAC
-#if GTEST_HAS_DEATH_TEST
-
TEST(GtestCheckDeathTest, DiesWithCorrectOutputOnFailure) {
const bool a_false_condition = false;
const char regex[] =
@@ -145,9 +143,12 @@ TEST(GtestCheckDeathTest, DiesWithCorrectOutputOnFailure) {
#endif // _MSC_VER
".*a_false_condition.*Extra info.*";
- EXPECT_DEATH(GTEST_CHECK_(a_false_condition) << "Extra info", regex);
+ EXPECT_DEATH_IF_SUPPORTED(GTEST_CHECK_(a_false_condition) << "Extra info",
+ regex);
}
+#if GTEST_HAS_DEATH_TEST
+
TEST(GtestCheckDeathTest, LivesSilentlyOnSuccess) {
EXPECT_EXIT({
GTEST_CHECK_(true) << "Extra info";
diff --git a/gtest/test/gtest-test-part_test.cc b/gtest/test/gtest-test-part_test.cc
index 93fe156..403c184 100644
--- a/gtest/test/gtest-test-part_test.cc
+++ b/gtest/test/gtest-test-part_test.cc
@@ -38,10 +38,6 @@ using testing::Test;
using testing::TestPartResult;
using testing::TestPartResultArray;
-using testing::TPRT_FATAL_FAILURE;
-using testing::TPRT_NONFATAL_FAILURE;
-using testing::TPRT_SUCCESS;
-
namespace {
// Tests the TestPartResult class.
@@ -50,18 +46,18 @@ namespace {
class TestPartResultTest : public Test {
protected:
TestPartResultTest()
- : r1_(TPRT_SUCCESS, "foo/bar.cc", 10, "Success!"),
- r2_(TPRT_NONFATAL_FAILURE, "foo/bar.cc", -1, "Failure!"),
- r3_(TPRT_FATAL_FAILURE, NULL, -1, "Failure!") {}
+ : r1_(TestPartResult::kSuccess, "foo/bar.cc", 10, "Success!"),
+ r2_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure!"),
+ r3_(TestPartResult::kFatalFailure, NULL, -1, "Failure!") {}
TestPartResult r1_, r2_, r3_;
};
// Tests TestPartResult::type().
TEST_F(TestPartResultTest, type) {
- EXPECT_EQ(TPRT_SUCCESS, r1_.type());
- EXPECT_EQ(TPRT_NONFATAL_FAILURE, r2_.type());
- EXPECT_EQ(TPRT_FATAL_FAILURE, r3_.type());
+ EXPECT_EQ(TestPartResult::kSuccess, r1_.type());
+ EXPECT_EQ(TestPartResult::kNonFatalFailure, r2_.type());
+ EXPECT_EQ(TestPartResult::kFatalFailure, r3_.type());
}
// Tests TestPartResult::file_name().
@@ -114,8 +110,8 @@ TEST_F(TestPartResultTest, NonfatallyFailed) {
class TestPartResultArrayTest : public Test {
protected:
TestPartResultArrayTest()
- : r1_(TPRT_NONFATAL_FAILURE, "foo/bar.cc", -1, "Failure 1"),
- r2_(TPRT_FATAL_FAILURE, "foo/bar.cc", -1, "Failure 2") {}
+ : r1_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure 1"),
+ r2_(TestPartResult::kFatalFailure, "foo/bar.cc", -1, "Failure 2") {}
const TestPartResult r1_, r2_;
};
@@ -146,8 +142,6 @@ TEST_F(TestPartResultArrayTest, ContainsGivenResultsAfterTwoAppends) {
EXPECT_STREQ("Failure 2", results.GetTestPartResult(1).message());
}
-#if GTEST_HAS_DEATH_TEST
-
typedef TestPartResultArrayTest TestPartResultArrayDeathTest;
// Tests that the program dies when GetTestPartResult() is called with
@@ -156,12 +150,10 @@ TEST_F(TestPartResultArrayDeathTest, DiesWhenIndexIsOutOfBound) {
TestPartResultArray results;
results.Append(r1_);
- EXPECT_DEATH(results.GetTestPartResult(-1), "");
- EXPECT_DEATH(results.GetTestPartResult(1), "");
+ EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(-1), "");
+ EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(1), "");
}
-#endif // GTEST_HAS_DEATH_TEST
-
// TODO(mheule@google.com): Add a test for the class HasNewFatalFailureHelper.
} // namespace
diff --git a/gtest/test/gtest-typed-test_test.cc b/gtest/test/gtest-typed-test_test.cc
index 8e86ac8..4b6e971 100644
--- a/gtest/test/gtest-typed-test_test.cc
+++ b/gtest/test/gtest-typed-test_test.cc
@@ -29,8 +29,8 @@
//
// Author: wan@google.com (Zhanyong Wan)
-#include <list>
#include <set>
+#include <vector>
#include "test/gtest-typed-test_test.h"
#include <gtest/gtest.h>
@@ -57,7 +57,9 @@ class CommonTest : public Test {
// This 'protected:' is optional. There's no harm in making all
// members of this fixture class template public.
protected:
- typedef std::list<T> List;
+ // We used to use std::list here, but switched to std::vector since
+ // MSVC's <list> doesn't compile cleanly with /W4.
+ typedef std::vector<T> Vector;
typedef std::set<int> IntSet;
CommonTest() : value_(1) {}
@@ -99,7 +101,7 @@ TYPED_TEST(CommonTest, ValuesAreCorrect) {
// Typedefs in the fixture class template can be visited via the
// "typename TestFixture::" prefix.
- typename TestFixture::List empty;
+ typename TestFixture::Vector empty;
EXPECT_EQ(0U, empty.size());
typename TestFixture::IntSet empty2;
@@ -198,24 +200,22 @@ TEST_F(TypedTestCasePStateTest, IgnoresOrderAndSpaces) {
state_.VerifyRegisteredTestNames("foo.cc", 1, tests));
}
-#if GTEST_HAS_DEATH_TEST
-
typedef TypedTestCasePStateTest TypedTestCasePStateDeathTest;
TEST_F(TypedTestCasePStateDeathTest, DetectsDuplicates) {
- EXPECT_DEATH(
+ EXPECT_DEATH_IF_SUPPORTED(
state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, A, C"),
"foo\\.cc.1.?: Test A is listed more than once\\.");
}
TEST_F(TypedTestCasePStateDeathTest, DetectsExtraTest) {
- EXPECT_DEATH(
+ EXPECT_DEATH_IF_SUPPORTED(
state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, C, D"),
"foo\\.cc.1.?: No test named D can be found in this test case\\.");
}
TEST_F(TypedTestCasePStateDeathTest, DetectsMissedTest) {
- EXPECT_DEATH(
+ EXPECT_DEATH_IF_SUPPORTED(
state_.VerifyRegisteredTestNames("foo.cc", 1, "A, C"),
"foo\\.cc.1.?: You forgot to list test B\\.");
}
@@ -224,14 +224,12 @@ TEST_F(TypedTestCasePStateDeathTest, DetectsMissedTest) {
// a run-time error if the test case has been registered.
TEST_F(TypedTestCasePStateDeathTest, DetectsTestAfterRegistration) {
state_.VerifyRegisteredTestNames("foo.cc", 1, "A, B, C");
- EXPECT_DEATH(
+ EXPECT_DEATH_IF_SUPPORTED(
state_.AddTestName("foo.cc", 2, "FooTest", "D"),
"foo\\.cc.2.?: Test D must be defined before REGISTER_TYPED_TEST_CASE_P"
"\\(FooTest, \\.\\.\\.\\)\\.");
}
-#endif // GTEST_HAS_DEATH_TEST
-
// Tests that SetUpTestCase()/TearDownTestCase(), fixture ctor/dtor,
// and SetUp()/TearDown() work correctly in type-parameterized tests.
@@ -318,7 +316,7 @@ INSTANTIATE_TYPED_TEST_CASE_P(Double, TypedTestP2, Types<double>);
// Tests that the same type-parameterized test case can be
// instantiated in different translation units linked together.
// (ContainerTest is also instantiated in gtest-typed-test_test.cc.)
-typedef Types<std::list<double>, std::set<char> > MyContainers;
+typedef Types<std::vector<double>, std::set<char> > MyContainers;
INSTANTIATE_TYPED_TEST_CASE_P(My, ContainerTest, MyContainers);
// Tests that a type-parameterized test case can be defined and
diff --git a/gtest/test/gtest-unittest-api_test.cc b/gtest/test/gtest-unittest-api_test.cc
index 658e298..7e0f8f8 100644
--- a/gtest/test/gtest-unittest-api_test.cc
+++ b/gtest/test/gtest-unittest-api_test.cc
@@ -38,21 +38,7 @@
#include <string.h> // For strcmp.
#include <algorithm>
-using ::testing::AddGlobalTestEnvironment;
-using ::testing::Environment;
using ::testing::InitGoogleTest;
-using ::testing::Test;
-using ::testing::TestInfo;
-using ::testing::TestPartResult;
-using ::testing::UnitTest;
-using ::testing::internal::TestCase;
-using ::testing::internal::TestProperty;
-
-#if GTEST_HAS_TYPED_TEST
-using ::testing::Types;
-using ::testing::internal::GetTypeName;
-using ::testing::internal::String;
-#endif // GTEST_HAS_TYPED_TEST
namespace testing {
namespace internal {
@@ -64,20 +50,20 @@ struct LessByName {
}
};
-class UnitTestAccessor {
+class UnitTestHelper {
public:
// Returns the array of pointers to all test cases sorted by the test case
// name. The caller is responsible for deleting the array.
static TestCase const** const GetSortedTestCases() {
- UnitTest* unit_test = UnitTest::GetInstance();
+ UnitTest& unit_test = *UnitTest::GetInstance();
TestCase const** const test_cases =
- new const TestCase*[unit_test->total_test_case_count()];
+ new const TestCase*[unit_test.total_test_case_count()];
- for (int i = 0; i < unit_test->total_test_case_count(); ++i)
- test_cases[i] = unit_test->GetTestCase(i);
+ for (int i = 0; i < unit_test.total_test_case_count(); ++i)
+ test_cases[i] = unit_test.GetTestCase(i);
std::sort(test_cases,
- test_cases + unit_test->total_test_case_count(),
+ test_cases + unit_test.total_test_case_count(),
LessByName<TestCase>());
return test_cases;
}
@@ -85,9 +71,9 @@ class UnitTestAccessor {
// Returns the test case by its name. The caller doesn't own the returned
// pointer.
static const TestCase* FindTestCase(const char* name) {
- UnitTest* unit_test = UnitTest::GetInstance();
- for (int i = 0; i < unit_test->total_test_case_count(); ++i) {
- const TestCase* test_case = unit_test->GetTestCase(i);
+ UnitTest& unit_test = *UnitTest::GetInstance();
+ for (int i = 0; i < unit_test.total_test_case_count(); ++i) {
+ const TestCase* test_case = unit_test.GetTestCase(i);
if (0 == strcmp(test_case->name(), name))
return test_case;
}
@@ -104,19 +90,12 @@ class UnitTestAccessor {
for (int i = 0; i < test_case->total_test_count(); ++i)
tests[i] = test_case->GetTestInfo(i);
- std::sort(tests,
- tests + test_case->total_test_count(),
+ std::sort(tests, tests + test_case->total_test_count(),
LessByName<TestInfo>());
return tests;
}
};
-// TODO(vladl@google.com): Put tests into the internal namespace after
-// UnitTest methods are published.
-} // namespace internal
-
-using internal::UnitTestAccessor;
-
#if GTEST_HAS_TYPED_TEST
template <typename T> class TestCaseWithCommentTest : public Test {};
TYPED_TEST_CASE(TestCaseWithCommentTest, Types<int>);
@@ -147,7 +126,7 @@ TEST(ApiTest, UnitTestImmutableAccessorsWork) {
EXPECT_EQ(5 + kTypedTests, unit_test->total_test_count());
EXPECT_EQ(3 + kTypedTests, unit_test->test_to_run_count());
- const TestCase** const test_cases = UnitTestAccessor::GetSortedTestCases();
+ const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases();
EXPECT_STREQ("ApiTest", test_cases[0]->name());
EXPECT_STREQ("DISABLED_Test", test_cases[1]->name());
@@ -165,7 +144,7 @@ TEST(ApiTest, UnitTestImmutableAccessorsWork) {
}
TEST(ApiTest, TestCaseImmutableAccessorsWork) {
- const TestCase* test_case = UnitTestAccessor::FindTestCase("ApiTest");
+ const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest");
ASSERT_TRUE(test_case != NULL);
EXPECT_STREQ("ApiTest", test_case->name());
@@ -175,7 +154,7 @@ TEST(ApiTest, TestCaseImmutableAccessorsWork) {
EXPECT_EQ(3, test_case->test_to_run_count());
ASSERT_EQ(4, test_case->total_test_count());
- const TestInfo** tests = UnitTestAccessor::GetSortedTests(test_case);
+ const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case);
EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name());
EXPECT_STREQ("ApiTest", tests[0]->test_case_name());
@@ -205,7 +184,7 @@ TEST(ApiTest, TestCaseImmutableAccessorsWork) {
tests = NULL;
#if GTEST_HAS_TYPED_TEST
- test_case = UnitTestAccessor::FindTestCase("TestCaseWithCommentTest/0");
+ test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0");
ASSERT_TRUE(test_case != NULL);
EXPECT_STREQ("TestCaseWithCommentTest/0", test_case->name());
@@ -215,7 +194,7 @@ TEST(ApiTest, TestCaseImmutableAccessorsWork) {
EXPECT_EQ(1, test_case->test_to_run_count());
ASSERT_EQ(1, test_case->total_test_count());
- tests = UnitTestAccessor::GetSortedTests(test_case);
+ tests = UnitTestHelper::GetSortedTests(test_case);
EXPECT_STREQ("Dummy", tests[0]->name());
EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name());
@@ -229,7 +208,7 @@ TEST(ApiTest, TestCaseImmutableAccessorsWork) {
}
TEST(ApiTest, TestCaseDisabledAccessorsWork) {
- const TestCase* test_case = UnitTestAccessor::FindTestCase("DISABLED_Test");
+ const TestCase* test_case = UnitTestHelper::FindTestCase("DISABLED_Test");
ASSERT_TRUE(test_case != NULL);
EXPECT_STREQ("DISABLED_Test", test_case->name());
@@ -265,7 +244,7 @@ class FinalSuccessChecker : public Environment {
EXPECT_FALSE(unit_test->Failed());
ASSERT_EQ(2 + kTypedTestCases, unit_test->total_test_case_count());
- const TestCase** const test_cases = UnitTestAccessor::GetSortedTestCases();
+ const TestCase** const test_cases = UnitTestHelper::GetSortedTestCases();
EXPECT_STREQ("ApiTest", test_cases[0]->name());
EXPECT_STREQ("", test_cases[0]->comment());
@@ -298,8 +277,8 @@ class FinalSuccessChecker : public Environment {
EXPECT_FALSE(test_cases[2]->Failed());
#endif // GTEST_HAS_TYPED_TEST
- const TestCase* test_case = UnitTestAccessor::FindTestCase("ApiTest");
- const TestInfo** tests = UnitTestAccessor::GetSortedTests(test_case);
+ const TestCase* test_case = UnitTestHelper::FindTestCase("ApiTest");
+ const TestInfo** tests = UnitTestHelper::GetSortedTests(test_case);
EXPECT_STREQ("DISABLED_Dummy1", tests[0]->name());
EXPECT_STREQ("ApiTest", tests[0]->test_case_name());
EXPECT_FALSE(tests[0]->should_run());
@@ -334,8 +313,8 @@ class FinalSuccessChecker : public Environment {
delete[] tests;
#if GTEST_HAS_TYPED_TEST
- test_case = UnitTestAccessor::FindTestCase("TestCaseWithCommentTest/0");
- tests = UnitTestAccessor::GetSortedTests(test_case);
+ test_case = UnitTestHelper::FindTestCase("TestCaseWithCommentTest/0");
+ tests = UnitTestHelper::GetSortedTests(test_case);
EXPECT_STREQ("Dummy", tests[0]->name());
EXPECT_STREQ("TestCaseWithCommentTest/0", tests[0]->test_case_name());
@@ -352,12 +331,13 @@ class FinalSuccessChecker : public Environment {
}
};
+} // namespace internal
} // namespace testing
int main(int argc, char **argv) {
InitGoogleTest(&argc, argv);
- AddGlobalTestEnvironment(new testing::FinalSuccessChecker());
+ AddGlobalTestEnvironment(new testing::internal::FinalSuccessChecker());
return RUN_ALL_TESTS();
}
diff --git a/gtest/test/gtest_env_var_test.py b/gtest/test/gtest_env_var_test.py
index 19fd810..f8250d4 100755
--- a/gtest/test/gtest_env_var_test.py
+++ b/gtest/test/gtest_env_var_test.py
@@ -85,7 +85,7 @@ class GTestEnvVarTest(gtest_test_utils.TestCase):
TestFlag('break_on_failure', '1', '0')
TestFlag('color', 'yes', 'auto')
TestFlag('filter', 'FooTest.Bar', '*')
- TestFlag('output', 'tmp/foo.xml', '')
+ TestFlag('output', 'xml:tmp/foo.xml', '')
TestFlag('print_time', '0', '1')
TestFlag('repeat', '999', '1')
TestFlag('throw_on_failure', '1', '0')
diff --git a/gtest/test/gtest_filter_unittest_.cc b/gtest/test/gtest_filter_unittest_.cc
index 3cbddcf..325504f 100644
--- a/gtest/test/gtest_filter_unittest_.cc
+++ b/gtest/test/gtest_filter_unittest_.cc
@@ -92,19 +92,13 @@ TEST(BazTest, DISABLED_TestC) {
// Test case HasDeathTest
TEST(HasDeathTest, Test1) {
-#if GTEST_HAS_DEATH_TEST
- EXPECT_DEATH({exit(1);},
- ".*");
-#endif // GTEST_HAS_DEATH_TEST
+ EXPECT_DEATH_IF_SUPPORTED(exit(1), ".*");
}
// We need at least two death tests to make sure that the all death tests
// aren't on the first shard.
TEST(HasDeathTest, Test2) {
-#if GTEST_HAS_DEATH_TEST
- EXPECT_DEATH({exit(1);},
- ".*");
-#endif // GTEST_HAS_DEATH_TEST
+ EXPECT_DEATH_IF_SUPPORTED(exit(1), ".*");
}
// Test case FoobarTest
diff --git a/gtest/test/gtest_repeat_test.cc b/gtest/test/gtest_repeat_test.cc
index 39a0601..df6868b 100644
--- a/gtest/test/gtest_repeat_test.cc
+++ b/gtest/test/gtest_repeat_test.cc
@@ -64,14 +64,14 @@ namespace {
do {\
const int expected_val = (expected);\
const int actual_val = (actual);\
- if (expected_val != actual_val) {\
+ if (::testing::internal::IsTrue(expected_val != actual_val)) {\
::std::cout << "Value of: " #actual "\n"\
<< " Actual: " << actual_val << "\n"\
<< "Expected: " #expected "\n"\
<< "Which is: " << expected_val << "\n";\
abort();\
}\
- } while(false)
+ } while(::testing::internal::AlwaysFalse())
// Used for verifying that global environment set-up and tear-down are
@@ -112,13 +112,11 @@ int g_death_test_count = 0;
TEST(BarDeathTest, ThreadSafeAndFast) {
g_death_test_count++;
-#if GTEST_HAS_DEATH_TEST
GTEST_FLAG(death_test_style) = "threadsafe";
- EXPECT_DEATH(abort(), "");
+ EXPECT_DEATH_IF_SUPPORTED(abort(), "");
GTEST_FLAG(death_test_style) = "fast";
- EXPECT_DEATH(abort(), "");
-#endif // GTEST_HAS_DEATH_TEST
+ EXPECT_DEATH_IF_SUPPORTED(abort(), "");
}
#if GTEST_HAS_PARAM_TEST
diff --git a/gtest/test/gtest_shuffle_test.py b/gtest/test/gtest_shuffle_test.py
new file mode 100755
index 0000000..a870a01
--- /dev/null
+++ b/gtest/test/gtest_shuffle_test.py
@@ -0,0 +1,331 @@
+#!/usr/bin/env python
+#
+# Copyright 2009 Google Inc. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Verifies that test shuffling works."""
+
+__author__ = 'wan@google.com (Zhanyong Wan)'
+
+import os
+import gtest_test_utils
+
+# Command to run the gtest_shuffle_test_ program.
+COMMAND = gtest_test_utils.GetTestExecutablePath('gtest_shuffle_test_')
+
+# The environment variables for test sharding.
+TOTAL_SHARDS_ENV_VAR = 'GTEST_TOTAL_SHARDS'
+SHARD_INDEX_ENV_VAR = 'GTEST_SHARD_INDEX'
+
+TEST_FILTER = 'A*.A:A*.B:C*'
+
+ALL_TESTS = []
+ACTIVE_TESTS = []
+FILTERED_TESTS = []
+SHARDED_TESTS = []
+
+SHUFFLED_ALL_TESTS = []
+SHUFFLED_ACTIVE_TESTS = []
+SHUFFLED_FILTERED_TESTS = []
+SHUFFLED_SHARDED_TESTS = []
+
+
+def AlsoRunDisabledTestsFlag():
+ return '--gtest_also_run_disabled_tests'
+
+
+def FilterFlag(test_filter):
+ return '--gtest_filter=%s' % (test_filter,)
+
+
+def RepeatFlag(n):
+ return '--gtest_repeat=%s' % (n,)
+
+
+def ShuffleFlag():
+ return '--gtest_shuffle'
+
+
+def RandomSeedFlag(n):
+ return '--gtest_random_seed=%s' % (n,)
+
+
+def RunAndReturnOutput(extra_env, args):
+ """Runs the test program and returns its output."""
+
+ try:
+ original_env = os.environ.copy()
+ os.environ.update(extra_env)
+ return gtest_test_utils.Subprocess([COMMAND] + args).output
+ finally:
+ for key in extra_env.iterkeys():
+ if key in original_env:
+ os.environ[key] = original_env[key]
+ else:
+ del os.environ[key]
+
+
+def GetTestsForAllIterations(extra_env, args):
+ """Runs the test program and returns a list of test lists.
+
+ Args:
+ extra_env: a map from environment variables to their values
+ args: command line flags to pass to gtest_shuffle_test_
+
+ Returns:
+ A list where the i-th element is the list of tests run in the i-th
+ test iteration.
+ """
+
+ test_iterations = []
+ for line in RunAndReturnOutput(extra_env, args).split('\n'):
+ if line.startswith('----'):
+ tests = []
+ test_iterations.append(tests)
+ elif line.strip():
+ tests.append(line.strip()) # 'TestCaseName.TestName'
+
+ return test_iterations
+
+
+def GetTestCases(tests):
+ """Returns a list of test cases in the given full test names.
+
+ Args:
+ tests: a list of full test names
+
+ Returns:
+ A list of test cases from 'tests', in their original order.
+ Consecutive duplicates are removed.
+ """
+
+ test_cases = []
+ for test in tests:
+ test_case = test.split('.')[0]
+ if not test_case in test_cases:
+ test_cases.append(test_case)
+
+ return test_cases
+
+
+def CalculateTestLists():
+ """Calculates the list of tests run under different flags."""
+
+ if not ALL_TESTS:
+ ALL_TESTS.extend(
+ GetTestsForAllIterations({}, [AlsoRunDisabledTestsFlag()])[0])
+
+ if not ACTIVE_TESTS:
+ ACTIVE_TESTS.extend(GetTestsForAllIterations({}, [])[0])
+
+ if not FILTERED_TESTS:
+ FILTERED_TESTS.extend(
+ GetTestsForAllIterations({}, [FilterFlag(TEST_FILTER)])[0])
+
+ if not SHARDED_TESTS:
+ SHARDED_TESTS.extend(
+ GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',
+ SHARD_INDEX_ENV_VAR: '1'},
+ [])[0])
+
+ if not SHUFFLED_ALL_TESTS:
+ SHUFFLED_ALL_TESTS.extend(GetTestsForAllIterations(
+ {}, [AlsoRunDisabledTestsFlag(), ShuffleFlag(), RandomSeedFlag(1)])[0])
+
+ if not SHUFFLED_ACTIVE_TESTS:
+ SHUFFLED_ACTIVE_TESTS.extend(GetTestsForAllIterations(
+ {}, [ShuffleFlag(), RandomSeedFlag(1)])[0])
+
+ if not SHUFFLED_FILTERED_TESTS:
+ SHUFFLED_FILTERED_TESTS.extend(GetTestsForAllIterations(
+ {}, [ShuffleFlag(), RandomSeedFlag(1), FilterFlag(TEST_FILTER)])[0])
+
+ if not SHUFFLED_SHARDED_TESTS:
+ SHUFFLED_SHARDED_TESTS.extend(
+ GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',
+ SHARD_INDEX_ENV_VAR: '1'},
+ [ShuffleFlag(), RandomSeedFlag(1)])[0])
+
+
+class GTestShuffleUnitTest(gtest_test_utils.TestCase):
+ """Tests test shuffling."""
+
+ def setUp(self):
+ CalculateTestLists()
+
+ def testShufflePreservesNumberOfTests(self):
+ self.assertEqual(len(ALL_TESTS), len(SHUFFLED_ALL_TESTS))
+ self.assertEqual(len(ACTIVE_TESTS), len(SHUFFLED_ACTIVE_TESTS))
+ self.assertEqual(len(FILTERED_TESTS), len(SHUFFLED_FILTERED_TESTS))
+ self.assertEqual(len(SHARDED_TESTS), len(SHUFFLED_SHARDED_TESTS))
+
+ def testShuffleChangesTestOrder(self):
+ self.assert_(SHUFFLED_ALL_TESTS != ALL_TESTS, SHUFFLED_ALL_TESTS)
+ self.assert_(SHUFFLED_ACTIVE_TESTS != ACTIVE_TESTS, SHUFFLED_ACTIVE_TESTS)
+ self.assert_(SHUFFLED_FILTERED_TESTS != FILTERED_TESTS,
+ SHUFFLED_FILTERED_TESTS)
+ self.assert_(SHUFFLED_SHARDED_TESTS != SHARDED_TESTS,
+ SHUFFLED_SHARDED_TESTS)
+
+ def testShuffleChangesTestCaseOrder(self):
+ self.assert_(GetTestCases(SHUFFLED_ALL_TESTS) != GetTestCases(ALL_TESTS),
+ GetTestCases(SHUFFLED_ALL_TESTS))
+ self.assert_(
+ GetTestCases(SHUFFLED_ACTIVE_TESTS) != GetTestCases(ACTIVE_TESTS),
+ GetTestCases(SHUFFLED_ACTIVE_TESTS))
+ self.assert_(
+ GetTestCases(SHUFFLED_FILTERED_TESTS) != GetTestCases(FILTERED_TESTS),
+ GetTestCases(SHUFFLED_FILTERED_TESTS))
+ self.assert_(
+ GetTestCases(SHUFFLED_SHARDED_TESTS) != GetTestCases(SHARDED_TESTS),
+ GetTestCases(SHUFFLED_SHARDED_TESTS))
+
+ def testShuffleDoesNotRepeatTest(self):
+ for test in SHUFFLED_ALL_TESTS:
+ self.assertEqual(1, SHUFFLED_ALL_TESTS.count(test),
+ '%s appears more than once' % (test,))
+ for test in SHUFFLED_ACTIVE_TESTS:
+ self.assertEqual(1, SHUFFLED_ACTIVE_TESTS.count(test),
+ '%s appears more than once' % (test,))
+ for test in SHUFFLED_FILTERED_TESTS:
+ self.assertEqual(1, SHUFFLED_FILTERED_TESTS.count(test),
+ '%s appears more than once' % (test,))
+ for test in SHUFFLED_SHARDED_TESTS:
+ self.assertEqual(1, SHUFFLED_SHARDED_TESTS.count(test),
+ '%s appears more than once' % (test,))
+
+ def testShuffleDoesNotCreateNewTest(self):
+ for test in SHUFFLED_ALL_TESTS:
+ self.assert_(test in ALL_TESTS, '%s is an invalid test' % (test,))
+ for test in SHUFFLED_ACTIVE_TESTS:
+ self.assert_(test in ACTIVE_TESTS, '%s is an invalid test' % (test,))
+ for test in SHUFFLED_FILTERED_TESTS:
+ self.assert_(test in FILTERED_TESTS, '%s is an invalid test' % (test,))
+ for test in SHUFFLED_SHARDED_TESTS:
+ self.assert_(test in SHARDED_TESTS, '%s is an invalid test' % (test,))
+
+ def testShuffleIncludesAllTests(self):
+ for test in ALL_TESTS:
+ self.assert_(test in SHUFFLED_ALL_TESTS, '%s is missing' % (test,))
+ for test in ACTIVE_TESTS:
+ self.assert_(test in SHUFFLED_ACTIVE_TESTS, '%s is missing' % (test,))
+ for test in FILTERED_TESTS:
+ self.assert_(test in SHUFFLED_FILTERED_TESTS, '%s is missing' % (test,))
+ for test in SHARDED_TESTS:
+ self.assert_(test in SHUFFLED_SHARDED_TESTS, '%s is missing' % (test,))
+
+ def testShuffleLeavesDeathTestsAtFront(self):
+ non_death_test_found = False
+ for test in SHUFFLED_ACTIVE_TESTS:
+ if 'DeathTest.' in test:
+ self.assert_(not non_death_test_found,
+ '%s appears after a non-death test' % (test,))
+ else:
+ non_death_test_found = True
+
+ def _VerifyTestCasesDoNotInterleave(self, tests):
+ test_cases = []
+ for test in tests:
+ [test_case, _] = test.split('.')
+ if test_cases and test_cases[-1] != test_case:
+ test_cases.append(test_case)
+ self.assertEqual(1, test_cases.count(test_case),
+ 'Test case %s is not grouped together in %s' %
+ (test_case, tests))
+
+ def testShuffleDoesNotInterleaveTestCases(self):
+ self._VerifyTestCasesDoNotInterleave(SHUFFLED_ALL_TESTS)
+ self._VerifyTestCasesDoNotInterleave(SHUFFLED_ACTIVE_TESTS)
+ self._VerifyTestCasesDoNotInterleave(SHUFFLED_FILTERED_TESTS)
+ self._VerifyTestCasesDoNotInterleave(SHUFFLED_SHARDED_TESTS)
+
+ def testShuffleRestoresOrderAfterEachIteration(self):
+ # Get the test lists in all 3 iterations, using random seed 1, 2,
+ # and 3 respectively. Google Test picks a different seed in each
+ # iteration, and this test depends on the current implementation
+ # picking successive numbers. This dependency is not ideal, but
+ # makes the test much easier to write.
+ [tests_in_iteration1, tests_in_iteration2, tests_in_iteration3] = (
+ GetTestsForAllIterations(
+ {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)]))
+
+ # Make sure running the tests with random seed 1 gets the same
+ # order as in iteration 1 above.
+ [tests_with_seed1] = GetTestsForAllIterations(
+ {}, [ShuffleFlag(), RandomSeedFlag(1)])
+ self.assertEqual(tests_in_iteration1, tests_with_seed1)
+
+ # Make sure running the tests with random seed 2 gets the same
+ # order as in iteration 2 above. Success means that Google Test
+ # correctly restores the test order before re-shuffling at the
+ # beginning of iteration 2.
+ [tests_with_seed2] = GetTestsForAllIterations(
+ {}, [ShuffleFlag(), RandomSeedFlag(2)])
+ self.assertEqual(tests_in_iteration2, tests_with_seed2)
+
+ # Make sure running the tests with random seed 3 gets the same
+ # order as in iteration 3 above. Success means that Google Test
+ # correctly restores the test order before re-shuffling at the
+ # beginning of iteration 3.
+ [tests_with_seed3] = GetTestsForAllIterations(
+ {}, [ShuffleFlag(), RandomSeedFlag(3)])
+ self.assertEqual(tests_in_iteration3, tests_with_seed3)
+
+ def testShuffleGeneratesNewOrderInEachIteration(self):
+ [tests_in_iteration1, tests_in_iteration2, tests_in_iteration3] = (
+ GetTestsForAllIterations(
+ {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)]))
+
+ self.assert_(tests_in_iteration1 != tests_in_iteration2,
+ tests_in_iteration1)
+ self.assert_(tests_in_iteration1 != tests_in_iteration3,
+ tests_in_iteration1)
+ self.assert_(tests_in_iteration2 != tests_in_iteration3,
+ tests_in_iteration2)
+
+ def testShuffleShardedTestsPreservesPartition(self):
+ # If we run M tests on N shards, the same M tests should be run in
+ # total, regardless of the random seeds used by the shards.
+ [tests1] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',
+ SHARD_INDEX_ENV_VAR: '0'},
+ [ShuffleFlag(), RandomSeedFlag(1)])
+ [tests2] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',
+ SHARD_INDEX_ENV_VAR: '1'},
+ [ShuffleFlag(), RandomSeedFlag(20)])
+ [tests3] = GetTestsForAllIterations({TOTAL_SHARDS_ENV_VAR: '3',
+ SHARD_INDEX_ENV_VAR: '2'},
+ [ShuffleFlag(), RandomSeedFlag(25)])
+ sorted_sharded_tests = tests1 + tests2 + tests3
+ sorted_sharded_tests.sort()
+ sorted_active_tests = []
+ sorted_active_tests.extend(ACTIVE_TESTS)
+ sorted_active_tests.sort()
+ self.assertEqual(sorted_active_tests, sorted_sharded_tests)
+
+if __name__ == '__main__':
+ gtest_test_utils.Main()
diff --git a/gtest/test/gtest_shuffle_test_.cc b/gtest/test/gtest_shuffle_test_.cc
new file mode 100644
index 0000000..53ecf77
--- /dev/null
+++ b/gtest/test/gtest_shuffle_test_.cc
@@ -0,0 +1,104 @@
+// Copyright 2009, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: wan@google.com (Zhanyong Wan)
+
+// Verifies that test shuffling works.
+
+#include <gtest/gtest.h>
+
+namespace {
+
+using ::testing::EmptyTestEventListener;
+using ::testing::InitGoogleTest;
+using ::testing::Message;
+using ::testing::Test;
+using ::testing::TestEventListeners;
+using ::testing::TestInfo;
+using ::testing::UnitTest;
+using ::testing::internal::String;
+using ::testing::internal::scoped_ptr;
+
+// The test methods are empty, as the sole purpose of this program is
+// to print the test names before/after shuffling.
+
+class A : public Test {};
+TEST_F(A, A) {}
+TEST_F(A, B) {}
+
+TEST(ADeathTest, A) {}
+TEST(ADeathTest, B) {}
+TEST(ADeathTest, C) {}
+
+TEST(B, A) {}
+TEST(B, B) {}
+TEST(B, C) {}
+TEST(B, DISABLED_D) {}
+TEST(B, DISABLED_E) {}
+
+TEST(BDeathTest, A) {}
+TEST(BDeathTest, B) {}
+
+TEST(C, A) {}
+TEST(C, B) {}
+TEST(C, C) {}
+TEST(C, DISABLED_D) {}
+
+TEST(CDeathTest, A) {}
+
+TEST(DISABLED_D, A) {}
+TEST(DISABLED_D, DISABLED_B) {}
+
+// This printer prints the full test names only, starting each test
+// iteration with a "----" marker.
+class TestNamePrinter : public EmptyTestEventListener {
+ public:
+ virtual void OnTestIterationStart(const UnitTest& /* unit_test */,
+ int /* iteration */) {
+ printf("----\n");
+ }
+
+ virtual void OnTestStart(const TestInfo& test_info) {
+ printf("%s.%s\n", test_info.test_case_name(), test_info.name());
+ }
+};
+
+} // namespace
+
+int main(int argc, char **argv) {
+ InitGoogleTest(&argc, argv);
+
+ // Replaces the default printer with TestNamePrinter, which prints
+ // the test name only.
+ TestEventListeners& listeners = UnitTest::GetInstance()->listeners();
+ delete listeners.Release(listeners.default_result_printer());
+ listeners.Append(new TestNamePrinter);
+
+ return RUN_ALL_TESTS();
+}
diff --git a/gtest/test/gtest_stress_test.cc b/gtest/test/gtest_stress_test.cc
index 57ea75a..0034bb8 100644
--- a/gtest/test/gtest_stress_test.cc
+++ b/gtest/test/gtest_stress_test.cc
@@ -46,7 +46,6 @@ namespace testing {
namespace {
using internal::String;
-using internal::TestProperty;
using internal::TestPropertyKeyIs;
using internal::Vector;
diff --git a/gtest/test/gtest_unittest.cc b/gtest/test/gtest_unittest.cc
index 2c08720..5c69b46 100644
--- a/gtest/test/gtest_unittest.cc
+++ b/gtest/test/gtest_unittest.cc
@@ -80,23 +80,37 @@ TEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) {
namespace testing {
namespace internal {
-const char* FormatTimeInMillisAsSeconds(TimeInMillis ms);
+bool ShouldUseColor(bool stdout_is_tty);
+const char* FormatTimeInMillisAsSeconds(TimeInMillis ms);
bool ParseInt32Flag(const char* str, const char* flag, Int32* value);
-} // namespace internal
-} // namespace testing
+// Provides access to otherwise private parts of the TestEventListeners class
+// that are needed to test it.
+class TestEventListenersAccessor {
+ public:
+ static TestEventListener* GetRepeater(TestEventListeners* listeners) {
+ return listeners->repeater();
+ }
-using testing::internal::FormatTimeInMillisAsSeconds;
-using testing::internal::ParseInt32Flag;
+ static void SetDefaultResultPrinter(TestEventListeners* listeners,
+ TestEventListener* listener) {
+ listeners->SetDefaultResultPrinter(listener);
+ }
+ static void SetDefaultXmlGenerator(TestEventListeners* listeners,
+ TestEventListener* listener) {
+ listeners->SetDefaultXmlGenerator(listener);
+ }
-namespace testing {
+ static bool EventForwardingEnabled(const TestEventListeners& listeners) {
+ return listeners.EventForwardingEnabled();
+ }
-GTEST_DECLARE_string_(output);
-GTEST_DECLARE_string_(color);
+ static void SuppressEventForwarding(TestEventListeners* listeners) {
+ listeners->SuppressEventForwarding();
+ }
+};
-namespace internal {
-bool ShouldUseColor(bool stdout_is_tty);
} // namespace internal
} // namespace testing
@@ -104,6 +118,7 @@ using testing::AssertionFailure;
using testing::AssertionResult;
using testing::AssertionSuccess;
using testing::DoubleLE;
+using testing::EmptyTestEventListener;
using testing::FloatLE;
using testing::GTEST_FLAG(also_run_disabled_tests);
using testing::GTEST_FLAG(break_on_failure);
@@ -125,19 +140,21 @@ using testing::IsSubstring;
using testing::Message;
using testing::ScopedFakeTestPartResultReporter;
using testing::StaticAssertTypeEq;
-using testing::TPRT_FATAL_FAILURE;
-using testing::TPRT_NONFATAL_FAILURE;
-using testing::TPRT_SUCCESS;
using testing::Test;
+using testing::TestEventListeners;
+using testing::TestCase;
using testing::TestPartResult;
using testing::TestPartResultArray;
+using testing::TestProperty;
+using testing::TestResult;
using testing::UnitTest;
-using testing::internal::kMaxRandomSeed;
-using testing::internal::kTestTypeIdInGoogleTest;
+using testing::internal::AlwaysFalse;
+using testing::internal::AlwaysTrue;
using testing::internal::AppendUserMessage;
using testing::internal::CodePointToUtf8;
using testing::internal::EqFailure;
using testing::internal::FloatingPoint;
+using testing::internal::FormatTimeInMillisAsSeconds;
using testing::internal::GTestFlagSaver;
using testing::internal::GetCurrentOsStackTraceExceptTop;
using testing::internal::GetNextRandomSeed;
@@ -147,19 +164,34 @@ using testing::internal::GetTypeId;
using testing::internal::GetUnitTestImpl;
using testing::internal::Int32;
using testing::internal::Int32FromEnvOrDie;
+using testing::internal::ParseInt32Flag;
using testing::internal::ShouldRunTestOnShard;
using testing::internal::ShouldShard;
using testing::internal::ShouldUseColor;
using testing::internal::StreamableToString;
using testing::internal::String;
-using testing::internal::TestCase;
-using testing::internal::TestProperty;
-using testing::internal::TestResult;
+using testing::internal::TestEventListenersAccessor;
using testing::internal::TestResultAccessor;
using testing::internal::ThreadLocal;
+using testing::internal::UInt32;
using testing::internal::Vector;
using testing::internal::WideStringToUtf8;
+using testing::internal::kMaxRandomSeed;
using testing::internal::kTestTypeIdInGoogleTest;
+using testing::internal::scoped_ptr;
+
+class TestingVector : public Vector<int> {
+};
+
+::std::ostream& operator<<(::std::ostream& os,
+ const TestingVector& vector) {
+ os << "{ ";
+ for (int i = 0; i < vector.size(); i++) {
+ os << vector.GetElement(i) << " ";
+ }
+ os << "}";
+ return os;
+}
// This line tests that we can define tests in an unnamed namespace.
namespace {
@@ -472,6 +504,49 @@ TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) {
}
#endif // !GTEST_WIDE_STRING_USES_UTF16_
+// Tests the Random class.
+
+TEST(RandomDeathTest, GeneratesCrashesOnInvalidRange) {
+ testing::internal::Random random(42);
+ EXPECT_DEATH_IF_SUPPORTED(
+ random.Generate(0),
+ "Cannot generate a number in the range \\[0, 0\\)");
+ EXPECT_DEATH_IF_SUPPORTED(
+ random.Generate(testing::internal::Random::kMaxRange + 1),
+ "Generation of a number in \\[0, 2147483649\\) was requested, "
+ "but this can only generate numbers in \\[0, 2147483648\\)");
+}
+
+TEST(RandomTest, GeneratesNumbersWithinRange) {
+ const UInt32 kRange = 10000;
+ testing::internal::Random random(12345);
+ for (int i = 0; i < 10; i++) {
+ EXPECT_LT(random.Generate(kRange), kRange) << " for iteration " << i;
+ }
+
+ testing::internal::Random random2(testing::internal::Random::kMaxRange);
+ for (int i = 0; i < 10; i++) {
+ EXPECT_LT(random2.Generate(kRange), kRange) << " for iteration " << i;
+ }
+}
+
+TEST(RandomTest, RepeatsWhenReseeded) {
+ const int kSeed = 123;
+ const int kArraySize = 10;
+ const UInt32 kRange = 10000;
+ UInt32 values[kArraySize];
+
+ testing::internal::Random random(kSeed);
+ for (int i = 0; i < kArraySize; i++) {
+ values[i] = random.Generate(kRange);
+ }
+
+ random.Reseed(kSeed);
+ for (int i = 0; i < kArraySize; i++) {
+ EXPECT_EQ(values[i], random.Generate(kRange)) << " for iteration " << i;
+ }
+}
+
// Tests the Vector class template.
// Tests Vector::Clear().
@@ -615,6 +690,53 @@ TEST(VectorTest, GetElementOr) {
EXPECT_EQ('x', a.GetElementOr(2, 'x'));
}
+TEST(VectorTest, Swap) {
+ Vector<int> a;
+ a.PushBack(0);
+ a.PushBack(1);
+ a.PushBack(2);
+
+ // Swaps an element with itself.
+ a.Swap(0, 0);
+ ASSERT_EQ(0, a.GetElement(0));
+ ASSERT_EQ(1, a.GetElement(1));
+ ASSERT_EQ(2, a.GetElement(2));
+
+ // Swaps two different elements where the indices go up.
+ a.Swap(0, 1);
+ ASSERT_EQ(1, a.GetElement(0));
+ ASSERT_EQ(0, a.GetElement(1));
+ ASSERT_EQ(2, a.GetElement(2));
+
+ // Swaps two different elements where the indices go down.
+ a.Swap(2, 0);
+ ASSERT_EQ(2, a.GetElement(0));
+ ASSERT_EQ(0, a.GetElement(1));
+ ASSERT_EQ(1, a.GetElement(2));
+}
+
+TEST(VectorTest, Clone) {
+ // Clones an empty Vector.
+ Vector<int> a;
+ scoped_ptr<Vector<int> > empty(a.Clone());
+ EXPECT_EQ(0, empty->size());
+
+ // Clones a singleton.
+ a.PushBack(42);
+ scoped_ptr<Vector<int> > singleton(a.Clone());
+ ASSERT_EQ(1, singleton->size());
+ EXPECT_EQ(42, singleton->GetElement(0));
+
+ // Clones a Vector with more elements.
+ a.PushBack(43);
+ a.PushBack(44);
+ scoped_ptr<Vector<int> > big(a.Clone());
+ ASSERT_EQ(3, big->size());
+ EXPECT_EQ(42, big->GetElement(0));
+ EXPECT_EQ(43, big->GetElement(1));
+ EXPECT_EQ(44, big->GetElement(2));
+}
+
// Tests Vector::Erase().
TEST(VectorDeathTest, Erase) {
Vector<int> a;
@@ -678,23 +800,260 @@ TEST(VectorDeathTest, Erase) {
}
// Tests the GetElement accessor.
-TEST(ListDeathTest, GetElement) {
+TEST(VectorDeathTest, GetElement) {
Vector<int> a;
a.PushBack(0);
a.PushBack(1);
a.PushBack(2);
+ const Vector<int>& b = a;
- EXPECT_EQ(0, a.GetElement(0));
- EXPECT_EQ(1, a.GetElement(1));
- EXPECT_EQ(2, a.GetElement(2));
+ EXPECT_EQ(0, b.GetElement(0));
+ EXPECT_EQ(1, b.GetElement(1));
+ EXPECT_EQ(2, b.GetElement(2));
EXPECT_DEATH_IF_SUPPORTED(
- a.GetElement(3),
+ b.GetElement(3),
"Invalid Vector index 3: must be in range \\[0, 2\\]\\.");
EXPECT_DEATH_IF_SUPPORTED(
- a.GetElement(-1),
+ b.GetElement(-1),
"Invalid Vector index -1: must be in range \\[0, 2\\]\\.");
}
+// Tests the GetMutableElement accessor.
+TEST(VectorDeathTest, GetMutableElement) {
+ Vector<int> a;
+ a.PushBack(0);
+ a.PushBack(1);
+ a.PushBack(2);
+
+ EXPECT_EQ(0, a.GetMutableElement(0));
+ EXPECT_EQ(1, a.GetMutableElement(1));
+ EXPECT_EQ(2, a.GetMutableElement(2));
+
+ a.GetMutableElement(0) = 42;
+ EXPECT_EQ(42, a.GetMutableElement(0));
+ EXPECT_EQ(1, a.GetMutableElement(1));
+ EXPECT_EQ(2, a.GetMutableElement(2));
+
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.GetMutableElement(3),
+ "Invalid Vector index 3: must be in range \\[0, 2\\]\\.");
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.GetMutableElement(-1),
+ "Invalid Vector index -1: must be in range \\[0, 2\\]\\.");
+}
+
+TEST(VectorDeathTest, Swap) {
+ Vector<int> a;
+ a.PushBack(0);
+ a.PushBack(1);
+ a.PushBack(2);
+
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.Swap(-1, 1),
+ "Invalid first swap element -1: must be in range \\[0, 2\\]");
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.Swap(3, 1),
+ "Invalid first swap element 3: must be in range \\[0, 2\\]");
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.Swap(1, -1),
+ "Invalid second swap element -1: must be in range \\[0, 2\\]");
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.Swap(1, 3),
+ "Invalid second swap element 3: must be in range \\[0, 2\\]");
+}
+
+TEST(VectorDeathTest, ShuffleRange) {
+ Vector<int> a;
+ a.PushBack(0);
+ a.PushBack(1);
+ a.PushBack(2);
+ testing::internal::Random random(1);
+
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.ShuffleRange(&random, -1, 1),
+ "Invalid shuffle range start -1: must be in range \\[0, 3\\]");
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.ShuffleRange(&random, 4, 4),
+ "Invalid shuffle range start 4: must be in range \\[0, 3\\]");
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.ShuffleRange(&random, 3, 2),
+ "Invalid shuffle range finish 2: must be in range \\[3, 3\\]");
+ EXPECT_DEATH_IF_SUPPORTED(
+ a.ShuffleRange(&random, 3, 4),
+ "Invalid shuffle range finish 4: must be in range \\[3, 3\\]");
+}
+
+class VectorShuffleTest : public Test {
+ protected:
+ static const int kVectorSize = 20;
+
+ VectorShuffleTest() : random_(1) {
+ for (int i = 0; i < kVectorSize; i++) {
+ vector_.PushBack(i);
+ }
+ }
+
+ static bool VectorIsCorrupt(const TestingVector& vector) {
+ if (kVectorSize != vector.size()) {
+ return true;
+ }
+
+ bool found_in_vector[kVectorSize] = { false };
+ for (int i = 0; i < vector.size(); i++) {
+ const int e = vector.GetElement(i);
+ if (e < 0 || e >= kVectorSize || found_in_vector[e]) {
+ return true;
+ }
+ found_in_vector[e] = true;
+ }
+
+ // Vector size is correct, elements' range is correct, no
+ // duplicate elements. Therefore no corruption has occurred.
+ return false;
+ }
+
+ static bool VectorIsNotCorrupt(const TestingVector& vector) {
+ return !VectorIsCorrupt(vector);
+ }
+
+ static bool RangeIsShuffled(const TestingVector& vector, int begin, int end) {
+ for (int i = begin; i < end; i++) {
+ if (i != vector.GetElement(i)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ static bool RangeIsUnshuffled(
+ const TestingVector& vector, int begin, int end) {
+ return !RangeIsShuffled(vector, begin, end);
+ }
+
+ static bool VectorIsShuffled(const TestingVector& vector) {
+ return RangeIsShuffled(vector, 0, vector.size());
+ }
+
+ static bool VectorIsUnshuffled(const TestingVector& vector) {
+ return !VectorIsShuffled(vector);
+ }
+
+ testing::internal::Random random_;
+ TestingVector vector_;
+}; // class VectorShuffleTest
+
+const int VectorShuffleTest::kVectorSize;
+
+TEST_F(VectorShuffleTest, HandlesEmptyRange) {
+ // Tests an empty range at the beginning...
+ vector_.ShuffleRange(&random_, 0, 0);
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ ASSERT_PRED1(VectorIsUnshuffled, vector_);
+
+ // ...in the middle...
+ vector_.ShuffleRange(&random_, kVectorSize/2, kVectorSize/2);
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ ASSERT_PRED1(VectorIsUnshuffled, vector_);
+
+ // ...at the end...
+ vector_.ShuffleRange(&random_, kVectorSize - 1, kVectorSize - 1);
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ ASSERT_PRED1(VectorIsUnshuffled, vector_);
+
+ // ...and past the end.
+ vector_.ShuffleRange(&random_, kVectorSize, kVectorSize);
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ ASSERT_PRED1(VectorIsUnshuffled, vector_);
+}
+
+TEST_F(VectorShuffleTest, HandlesRangeOfSizeOne) {
+ // Tests a size one range at the beginning...
+ vector_.ShuffleRange(&random_, 0, 1);
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ ASSERT_PRED1(VectorIsUnshuffled, vector_);
+
+ // ...in the middle...
+ vector_.ShuffleRange(&random_, kVectorSize/2, kVectorSize/2 + 1);
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ ASSERT_PRED1(VectorIsUnshuffled, vector_);
+
+ // ...and at the end.
+ vector_.ShuffleRange(&random_, kVectorSize - 1, kVectorSize);
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ ASSERT_PRED1(VectorIsUnshuffled, vector_);
+}
+
+// Because we use our own random number generator and a fixed seed,
+// we can guarantee that the following "random" tests will succeed.
+
+TEST_F(VectorShuffleTest, ShufflesEntireVector) {
+ vector_.Shuffle(&random_);
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ EXPECT_FALSE(VectorIsUnshuffled(vector_)) << vector_;
+
+ // Tests the first and last elements in particular to ensure that
+ // there are no off-by-one problems in our shuffle algorithm.
+ EXPECT_NE(0, vector_.GetElement(0));
+ EXPECT_NE(kVectorSize - 1, vector_.GetElement(kVectorSize - 1));
+}
+
+TEST_F(VectorShuffleTest, ShufflesStartOfVector) {
+ const int kRangeSize = kVectorSize/2;
+
+ vector_.ShuffleRange(&random_, 0, kRangeSize);
+
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ EXPECT_PRED3(RangeIsShuffled, vector_, 0, kRangeSize);
+ EXPECT_PRED3(RangeIsUnshuffled, vector_, kRangeSize, kVectorSize);
+}
+
+TEST_F(VectorShuffleTest, ShufflesEndOfVector) {
+ const int kRangeSize = kVectorSize / 2;
+ vector_.ShuffleRange(&random_, kRangeSize, kVectorSize);
+
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize);
+ EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, kVectorSize);
+}
+
+TEST_F(VectorShuffleTest, ShufflesMiddleOfVector) {
+ int kRangeSize = kVectorSize/3;
+ vector_.ShuffleRange(&random_, kRangeSize, 2*kRangeSize);
+
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize);
+ EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, 2*kRangeSize);
+ EXPECT_PRED3(RangeIsUnshuffled, vector_, 2*kRangeSize, kVectorSize);
+}
+
+TEST_F(VectorShuffleTest, ShufflesRepeatably) {
+ TestingVector vector2;
+ for (int i = 0; i < kVectorSize; i++) {
+ vector2.PushBack(i);
+ }
+
+ random_.Reseed(1234);
+ vector_.Shuffle(&random_);
+ random_.Reseed(1234);
+ vector2.Shuffle(&random_);
+
+ ASSERT_PRED1(VectorIsNotCorrupt, vector_);
+ ASSERT_PRED1(VectorIsNotCorrupt, vector2);
+
+ for (int i = 0; i < kVectorSize; i++) {
+ EXPECT_EQ(vector_.GetElement(i), vector2.GetElement(i))
+ << " where i is " << i;
+ }
+}
+
+// Tests the size of the AssertHelper class.
+
+TEST(AssertHelperTest, AssertHelperIsSmall) {
+ // To avoid breaking clients that use lots of assertions in one
+ // function, we cannot grow the size of AssertHelper.
+ EXPECT_LE(sizeof(testing::internal::AssertHelper), sizeof(void*));
+}
+
// Tests the String class.
// Tests String's constructors.
@@ -703,19 +1062,49 @@ TEST(StringTest, Constructors) {
String s1;
// We aren't using EXPECT_EQ(NULL, s1.c_str()) because comparing
// pointers with NULL isn't supported on all platforms.
+ EXPECT_EQ(0U, s1.length());
EXPECT_TRUE(NULL == s1.c_str());
// Implicitly constructs from a C-string.
String s2 = "Hi";
+ EXPECT_EQ(2U, s2.length());
EXPECT_STREQ("Hi", s2.c_str());
// Constructs from a C-string and a length.
String s3("hello", 3);
+ EXPECT_EQ(3U, s3.length());
EXPECT_STREQ("hel", s3.c_str());
- // Copy ctor.
- String s4 = s3;
- EXPECT_STREQ("hel", s4.c_str());
+ // The empty String should be created when String is constructed with
+ // a NULL pointer and length 0.
+ EXPECT_EQ(0U, String(NULL, 0).length());
+ EXPECT_FALSE(String(NULL, 0).c_str() == NULL);
+
+ // Constructs a String that contains '\0'.
+ String s4("a\0bcd", 4);
+ EXPECT_EQ(4U, s4.length());
+ EXPECT_EQ('a', s4.c_str()[0]);
+ EXPECT_EQ('\0', s4.c_str()[1]);
+ EXPECT_EQ('b', s4.c_str()[2]);
+ EXPECT_EQ('c', s4.c_str()[3]);
+
+ // Copy ctor where the source is NULL.
+ const String null_str;
+ String s5 = null_str;
+ EXPECT_TRUE(s5.c_str() == NULL);
+
+ // Copy ctor where the source isn't NULL.
+ String s6 = s3;
+ EXPECT_EQ(3U, s6.length());
+ EXPECT_STREQ("hel", s6.c_str());
+
+ // Copy ctor where the source contains '\0'.
+ String s7 = s4;
+ EXPECT_EQ(4U, s7.length());
+ EXPECT_EQ('a', s7.c_str()[0]);
+ EXPECT_EQ('\0', s7.c_str()[1]);
+ EXPECT_EQ('b', s7.c_str()[2]);
+ EXPECT_EQ('c', s7.c_str()[3]);
}
#if GTEST_HAS_STD_STRING
@@ -724,17 +1113,22 @@ TEST(StringTest, ConvertsFromStdString) {
// An empty std::string.
const std::string src1("");
const String dest1 = src1;
+ EXPECT_EQ(0U, dest1.length());
EXPECT_STREQ("", dest1.c_str());
// A normal std::string.
const std::string src2("Hi");
const String dest2 = src2;
+ EXPECT_EQ(2U, dest2.length());
EXPECT_STREQ("Hi", dest2.c_str());
// An std::string with an embedded NUL character.
- const char src3[] = "Hello\0world.";
+ const char src3[] = "a\0b";
const String dest3 = std::string(src3, sizeof(src3));
- EXPECT_STREQ("Hello", dest3.c_str());
+ EXPECT_EQ(sizeof(src3), dest3.length());
+ EXPECT_EQ('a', dest3.c_str()[0]);
+ EXPECT_EQ('\0', dest3.c_str()[1]);
+ EXPECT_EQ('b', dest3.c_str()[2]);
}
TEST(StringTest, ConvertsToStdString) {
@@ -747,6 +1141,11 @@ TEST(StringTest, ConvertsToStdString) {
const String src2("Hi");
const std::string dest2 = src2;
EXPECT_EQ("Hi", dest2);
+
+ // A String containing a '\0'.
+ const String src3("x\0y", 3);
+ const std::string dest3 = src3;
+ EXPECT_EQ(std::string("x\0y", 3), dest3);
}
#endif // GTEST_HAS_STD_STRING
@@ -757,17 +1156,22 @@ TEST(StringTest, ConvertsFromGlobalString) {
// An empty ::string.
const ::string src1("");
const String dest1 = src1;
+ EXPECT_EQ(0U, dest1.length());
EXPECT_STREQ("", dest1.c_str());
// A normal ::string.
const ::string src2("Hi");
const String dest2 = src2;
+ EXPECT_EQ(2U, dest2.length());
EXPECT_STREQ("Hi", dest2.c_str());
// An ::string with an embedded NUL character.
- const char src3[] = "Hello\0world.";
+ const char src3[] = "x\0y";
const String dest3 = ::string(src3, sizeof(src3));
- EXPECT_STREQ("Hello", dest3.c_str());
+ EXPECT_EQ(sizeof(src3), dest3.length());
+ EXPECT_EQ('x', dest3.c_str()[0]);
+ EXPECT_EQ('\0', dest3.c_str()[1]);
+ EXPECT_EQ('y', dest3.c_str()[2]);
}
TEST(StringTest, ConvertsToGlobalString) {
@@ -780,17 +1184,14 @@ TEST(StringTest, ConvertsToGlobalString) {
const String src2("Hi");
const ::string dest2 = src2;
EXPECT_EQ("Hi", dest2);
+
+ const String src3("x\0y", 3);
+ const ::string dest3 = src3;
+ EXPECT_EQ(::string("x\0y", 3), dest3);
}
#endif // GTEST_HAS_GLOBAL_STRING
-// Tests String::ShowCString().
-TEST(StringTest, ShowCString) {
- EXPECT_STREQ("(null)", String::ShowCString(NULL));
- EXPECT_STREQ("", String::ShowCString(""));
- EXPECT_STREQ("foo", String::ShowCString("foo"));
-}
-
// Tests String::ShowCStringQuoted().
TEST(StringTest, ShowCStringQuoted) {
EXPECT_STREQ("(null)",
@@ -801,6 +1202,53 @@ TEST(StringTest, ShowCStringQuoted) {
String::ShowCStringQuoted("foo").c_str());
}
+// Tests String::empty().
+TEST(StringTest, Empty) {
+ EXPECT_TRUE(String("").empty());
+ EXPECT_FALSE(String().empty());
+ EXPECT_FALSE(String(NULL).empty());
+ EXPECT_FALSE(String("a").empty());
+ EXPECT_FALSE(String("\0", 1).empty());
+}
+
+// Tests String::Compare().
+TEST(StringTest, Compare) {
+ // NULL vs NULL.
+ EXPECT_EQ(0, String().Compare(String()));
+
+ // NULL vs non-NULL.
+ EXPECT_EQ(-1, String().Compare(String("")));
+
+ // Non-NULL vs NULL.
+ EXPECT_EQ(1, String("").Compare(String()));
+
+ // The following covers non-NULL vs non-NULL.
+
+ // "" vs "".
+ EXPECT_EQ(0, String("").Compare(String("")));
+
+ // "" vs non-"".
+ EXPECT_EQ(-1, String("").Compare(String("\0", 1)));
+ EXPECT_EQ(-1, String("").Compare(" "));
+
+ // Non-"" vs "".
+ EXPECT_EQ(1, String("a").Compare(String("")));
+
+ // The following covers non-"" vs non-"".
+
+ // Same length and equal.
+ EXPECT_EQ(0, String("a").Compare(String("a")));
+
+ // Same length and different.
+ EXPECT_EQ(-1, String("a\0b", 3).Compare(String("a\0c", 3)));
+ EXPECT_EQ(1, String("b").Compare(String("a")));
+
+ // Different lengths.
+ EXPECT_EQ(-1, String("a").Compare(String("ab")));
+ EXPECT_EQ(-1, String("a").Compare(String("a\0", 2)));
+ EXPECT_EQ(1, String("abc").Compare(String("aacd")));
+}
+
// Tests String::operator==().
TEST(StringTest, Equals) {
const String null(NULL);
@@ -818,6 +1266,9 @@ TEST(StringTest, Equals) {
EXPECT_FALSE(foo == ""); // NOLINT
EXPECT_FALSE(foo == "bar"); // NOLINT
EXPECT_TRUE(foo == "foo"); // NOLINT
+
+ const String bar("x\0y", 3);
+ EXPECT_FALSE(bar == "x");
}
// Tests String::operator!=().
@@ -837,6 +1288,17 @@ TEST(StringTest, NotEquals) {
EXPECT_TRUE(foo != ""); // NOLINT
EXPECT_TRUE(foo != "bar"); // NOLINT
EXPECT_FALSE(foo != "foo"); // NOLINT
+
+ const String bar("x\0y", 3);
+ EXPECT_TRUE(bar != "x");
+}
+
+// Tests String::length().
+TEST(StringTest, Length) {
+ EXPECT_EQ(0U, String().length());
+ EXPECT_EQ(0U, String("").length());
+ EXPECT_EQ(2U, String("ab").length());
+ EXPECT_EQ(3U, String("a\0b", 3).length());
}
// Tests String::EndsWith().
@@ -900,9 +1362,17 @@ TEST(StringTest, CanBeAssignedEmpty) {
TEST(StringTest, CanBeAssignedNonEmpty) {
const String src("hello");
String dest;
-
dest = src;
+ EXPECT_EQ(5U, dest.length());
EXPECT_STREQ("hello", dest.c_str());
+
+ const String src2("x\0y", 3);
+ String dest2;
+ dest2 = src2;
+ EXPECT_EQ(3U, dest2.length());
+ EXPECT_EQ('x', dest2.c_str()[0]);
+ EXPECT_EQ('\0', dest2.c_str()[1]);
+ EXPECT_EQ('y', dest2.c_str()[2]);
}
// Tests that a String can be assigned to itself.
@@ -913,6 +1383,40 @@ TEST(StringTest, CanBeAssignedSelf) {
EXPECT_STREQ("hello", dest.c_str());
}
+// Tests streaming a String.
+TEST(StringTest, Streams) {
+ EXPECT_EQ(StreamableToString(String()), "(null)");
+ EXPECT_EQ(StreamableToString(String("")), "");
+ EXPECT_EQ(StreamableToString(String("a\0b", 3)), "a\\0b");
+}
+
+// Tests that String::Format() works.
+TEST(StringTest, FormatWorks) {
+ // Normal case: the format spec is valid, the arguments match the
+ // spec, and the result is < 4095 characters.
+ EXPECT_STREQ("Hello, 42", String::Format("%s, %d", "Hello", 42).c_str());
+
+ // Edge case: the result is 4095 characters.
+ char buffer[4096];
+ const size_t kSize = sizeof(buffer);
+ memset(buffer, 'a', kSize - 1);
+ buffer[kSize - 1] = '\0';
+ EXPECT_STREQ(buffer, String::Format("%s", buffer).c_str());
+
+ // The result needs to be 4096 characters, exceeding Format()'s limit.
+ EXPECT_STREQ("<formatting error or buffer exceeded>",
+ String::Format("x%s", buffer).c_str());
+
+#if GTEST_OS_LINUX
+ // On Linux, invalid format spec should lead to an error message.
+ // In other environment (e.g. MSVC on Windows), String::Format() may
+ // simply ignore a bad format spec, so this assertion is run on
+ // Linux only.
+ EXPECT_STREQ("<formatting error or buffer exceeded>",
+ String::Format("%").c_str());
+#endif
+}
+
#if GTEST_OS_WINDOWS
// Tests String::ShowWideCString().
@@ -933,7 +1437,7 @@ TEST(StringTest, ShowWideCStringQuoted) {
String::ShowWideCStringQuoted(L"foo").c_str());
}
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
TEST(StringTest, AnsiAndUtf16Null) {
EXPECT_EQ(NULL, String::AnsiToUtf16(NULL));
EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL));
@@ -956,7 +1460,7 @@ TEST(StringTest, AnsiAndUtf16ConvertPathChars) {
EXPECT_EQ(0, wcsncmp(L".:\\ \"*?", utf16, 3));
delete [] utf16;
}
-#endif // _WIN32_WCE
+#endif // GTEST_OS_WINDOWS_MOBILE
#endif // GTEST_OS_WINDOWS
@@ -1221,12 +1725,12 @@ TEST(TestPartResultTest, ConstructorWorks) {
message << static_cast<const char*>(testing::internal::kStackTraceMarker);
message << "some unimportant stack trace";
- const TestPartResult result(TPRT_NONFATAL_FAILURE,
+ const TestPartResult result(TestPartResult::kNonFatalFailure,
"some_file.cc",
42,
message.GetString().c_str());
- EXPECT_EQ(TPRT_NONFATAL_FAILURE, result.type());
+ EXPECT_EQ(TestPartResult::kNonFatalFailure, result.type());
EXPECT_STREQ("some_file.cc", result.file_name());
EXPECT_EQ(42, result.line_number());
EXPECT_STREQ(message.GetString().c_str(), result.message());
@@ -1234,13 +1738,16 @@ TEST(TestPartResultTest, ConstructorWorks) {
}
TEST(TestPartResultTest, ResultAccessorsWork) {
- const TestPartResult success(TPRT_SUCCESS, "file.cc", 42, "message");
+ const TestPartResult success(TestPartResult::kSuccess,
+ "file.cc",
+ 42,
+ "message");
EXPECT_TRUE(success.passed());
EXPECT_FALSE(success.failed());
EXPECT_FALSE(success.nonfatally_failed());
EXPECT_FALSE(success.fatally_failed());
- const TestPartResult nonfatal_failure(TPRT_NONFATAL_FAILURE,
+ const TestPartResult nonfatal_failure(TestPartResult::kNonFatalFailure,
"file.cc",
42,
"message");
@@ -1249,7 +1756,7 @@ TEST(TestPartResultTest, ResultAccessorsWork) {
EXPECT_TRUE(nonfatal_failure.nonfatally_failed());
EXPECT_FALSE(nonfatal_failure.fatally_failed());
- const TestPartResult fatal_failure(TPRT_FATAL_FAILURE,
+ const TestPartResult fatal_failure(TestPartResult::kFatalFailure,
"file.cc",
42,
"message");
@@ -1274,10 +1781,14 @@ class TestResultTest : public Test {
virtual void SetUp() {
// pr1 is for success.
- pr1 = new TestPartResult(TPRT_SUCCESS, "foo/bar.cc", 10, "Success!");
+ pr1 = new TestPartResult(TestPartResult::kSuccess,
+ "foo/bar.cc",
+ 10,
+ "Success!");
// pr2 is for fatal failure.
- pr2 = new TestPartResult(TPRT_FATAL_FAILURE, "foo/bar.cc",
+ pr2 = new TestPartResult(TestPartResult::kFatalFailure,
+ "foo/bar.cc",
-1, // This line number means "unknown"
"Failure!");
@@ -1577,7 +2088,7 @@ TEST_F(GTestFlagSaverTest, VerifyGTestFlags) {
// value. If the value argument is "", unsets the environment
// variable. The caller must ensure that both arguments are not NULL.
static void SetEnv(const char* name, const char* value) {
-#ifdef _WIN32_WCE
+#if GTEST_OS_WINDOWS_MOBILE
// Environment variables are not supported on Windows CE.
return;
#elif defined(__BORLANDC__)
@@ -1595,7 +2106,6 @@ static void SetEnv(const char* name, const char* value) {
added_env[name] = new String((Message() << name << "=" << value).GetString());
putenv(added_env[name]->c_str());
delete prev_env;
-
#elif GTEST_OS_WINDOWS // If we are on Windows proper.
_putenv((Message() << name << "=" << value).GetString().c_str());
#else
@@ -1604,10 +2114,10 @@ static void SetEnv(const char* name, const char* value) {
} else {
setenv(name, value, 1);
}
-#endif
+#endif // GTEST_OS_WINDOWS_MOBILE
}
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
// Environment variables are not supported on Windows CE.
using testing::internal::Int32FromGTestEnv;
@@ -1655,7 +2165,7 @@ TEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) {
SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-321");
EXPECT_EQ(-321, Int32FromGTestEnv("temp", 0));
}
-#endif // !defined(_WIN32_WCE)
+#endif // !GTEST_OS_WINDOWS_MOBILE
// Tests ParseInt32Flag().
@@ -1713,7 +2223,7 @@ TEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) {
// Tests that Int32FromEnvOrDie() parses the value of the var or
// returns the correct default.
// Environment variables are not supported on Windows CE.
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
TEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) {
EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "123");
@@ -1721,7 +2231,7 @@ TEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) {
SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "-123");
EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
}
-#endif // _WIN32_WCE
+#endif // !GTEST_OS_WINDOWS_MOBILE
// Tests that Int32FromEnvOrDie() aborts with an error message
// if the variable is not an Int32.
@@ -1788,7 +2298,7 @@ TEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) {
// Tests that sharding is enabled if total_shards > 1 and
// we are not in a death test subprocess.
// Environment variables are not supported on Windows CE.
-#ifndef _WIN32_WCE
+#if !GTEST_OS_WINDOWS_MOBILE
TEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) {
SetEnv(index_var_, "4");
SetEnv(total_var_, "22");
@@ -1805,7 +2315,7 @@ TEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) {
EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
}
-#endif // _WIN32_WCE
+#endif // !GTEST_OS_WINDOWS_MOBILE
// Tests that we exit in error if the sharding values are not valid.
@@ -3151,9 +3661,9 @@ TEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) {
DoAssertNoFatalFailureOnFails();
}
ASSERT_EQ(2, gtest_failures.size());
- EXPECT_EQ(testing::TPRT_FATAL_FAILURE,
+ EXPECT_EQ(TestPartResult::kFatalFailure,
gtest_failures.GetTestPartResult(0).type());
- EXPECT_EQ(testing::TPRT_FATAL_FAILURE,
+ EXPECT_EQ(TestPartResult::kFatalFailure,
gtest_failures.GetTestPartResult(1).type());
EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure",
gtest_failures.GetTestPartResult(0).message());
@@ -3168,11 +3678,11 @@ TEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) {
DoExpectNoFatalFailureOnFails();
}
ASSERT_EQ(3, gtest_failures.size());
- EXPECT_EQ(testing::TPRT_FATAL_FAILURE,
+ EXPECT_EQ(TestPartResult::kFatalFailure,
gtest_failures.GetTestPartResult(0).type());
- EXPECT_EQ(testing::TPRT_NONFATAL_FAILURE,
+ EXPECT_EQ(TestPartResult::kNonFatalFailure,
gtest_failures.GetTestPartResult(1).type());
- EXPECT_EQ(testing::TPRT_NONFATAL_FAILURE,
+ EXPECT_EQ(TestPartResult::kNonFatalFailure,
gtest_failures.GetTestPartResult(2).type());
EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure",
gtest_failures.GetTestPartResult(0).message());
@@ -3189,9 +3699,9 @@ TEST_F(NoFatalFailureTest, MessageIsStreamable) {
EXPECT_NO_FATAL_FAILURE(FAIL() << "foo") << "my message";
}
ASSERT_EQ(2, gtest_failures.size());
- EXPECT_EQ(testing::TPRT_NONFATAL_FAILURE,
+ EXPECT_EQ(TestPartResult::kNonFatalFailure,
gtest_failures.GetTestPartResult(0).type());
- EXPECT_EQ(testing::TPRT_NONFATAL_FAILURE,
+ EXPECT_EQ(TestPartResult::kNonFatalFailure,
gtest_failures.GetTestPartResult(1).type());
EXPECT_PRED_FORMAT2(testing::IsSubstring, "foo",
gtest_failures.GetTestPartResult(0).message());
@@ -3651,19 +4161,19 @@ TEST(HRESULTAssertionTest, Streaming) {
// Tests that the assertion macros behave like single statements.
TEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) {
- if (false)
+ if (AlwaysFalse())
ASSERT_TRUE(false) << "This should never be executed; "
"It's a compilation test only.";
- if (true)
+ if (AlwaysTrue())
EXPECT_FALSE(false);
else
; // NOLINT
- if (false)
+ if (AlwaysFalse())
ASSERT_LT(1, 3);
- if (false)
+ if (AlwaysFalse())
; // NOLINT
else
EXPECT_GT(3, 2) << "";
@@ -3685,26 +4195,26 @@ TEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) {
}
TEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) {
- if (false)
+ if (AlwaysFalse())
EXPECT_THROW(ThrowNothing(), bool);
- if (true)
+ if (AlwaysTrue())
EXPECT_THROW(ThrowAnInteger(), int);
else
; // NOLINT
- if (false)
+ if (AlwaysFalse())
EXPECT_NO_THROW(ThrowAnInteger());
- if (true)
+ if (AlwaysTrue())
EXPECT_NO_THROW(ThrowNothing());
else
; // NOLINT
- if (false)
+ if (AlwaysFalse())
EXPECT_ANY_THROW(ThrowNothing());
- if (true)
+ if (AlwaysTrue())
EXPECT_ANY_THROW(ThrowAnInteger());
else
; // NOLINT
@@ -3712,23 +4222,23 @@ TEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) {
#endif // GTEST_HAS_EXCEPTIONS
TEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) {
- if (false)
+ if (AlwaysFalse())
EXPECT_NO_FATAL_FAILURE(FAIL()) << "This should never be executed. "
<< "It's a compilation test only.";
else
; // NOLINT
- if (false)
+ if (AlwaysFalse())
ASSERT_NO_FATAL_FAILURE(FAIL()) << "";
else
; // NOLINT
- if (true)
+ if (AlwaysTrue())
EXPECT_NO_FATAL_FAILURE(SUCCEED());
else
; // NOLINT
- if (false)
+ if (AlwaysFalse())
; // NOLINT
else
ASSERT_NO_FATAL_FAILURE(SUCCEED());
@@ -6018,3 +6528,320 @@ TEST(HasFailureTest, WorksOutsideOfTestBody2) {
ClearCurrentTestPartResults();
EXPECT_TRUE(has_failure);
}
+
+class TestListener : public EmptyTestEventListener {
+ public:
+ TestListener() : on_start_counter_(NULL), is_destroyed_(NULL) {}
+ TestListener(int* on_start_counter, bool* is_destroyed)
+ : on_start_counter_(on_start_counter),
+ is_destroyed_(is_destroyed) {}
+
+ virtual ~TestListener() {
+ if (is_destroyed_)
+ *is_destroyed_ = true;
+ }
+
+ protected:
+ virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {
+ if (on_start_counter_ != NULL)
+ (*on_start_counter_)++;
+ }
+
+ private:
+ int* on_start_counter_;
+ bool* is_destroyed_;
+};
+
+// Tests the constructor.
+TEST(TestEventListenersTest, ConstructionWorks) {
+ TestEventListeners listeners;
+
+ EXPECT_TRUE(TestEventListenersAccessor::GetRepeater(&listeners) != NULL);
+ EXPECT_TRUE(listeners.default_result_printer() == NULL);
+ EXPECT_TRUE(listeners.default_xml_generator() == NULL);
+}
+
+// Tests that the TestEventListeners destructor deletes all the listeners it
+// owns.
+TEST(TestEventListenersTest, DestructionWorks) {
+ bool default_result_printer_is_destroyed = false;
+ bool default_xml_printer_is_destroyed = false;
+ bool extra_listener_is_destroyed = false;
+ TestListener* default_result_printer = new TestListener(
+ NULL, &default_result_printer_is_destroyed);
+ TestListener* default_xml_printer = new TestListener(
+ NULL, &default_xml_printer_is_destroyed);
+ TestListener* extra_listener = new TestListener(
+ NULL, &extra_listener_is_destroyed);
+
+ {
+ TestEventListeners listeners;
+ TestEventListenersAccessor::SetDefaultResultPrinter(&listeners,
+ default_result_printer);
+ TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners,
+ default_xml_printer);
+ listeners.Append(extra_listener);
+ }
+ EXPECT_TRUE(default_result_printer_is_destroyed);
+ EXPECT_TRUE(default_xml_printer_is_destroyed);
+ EXPECT_TRUE(extra_listener_is_destroyed);
+}
+
+// Tests that a listener Append'ed to a TestEventListeners list starts
+// receiving events.
+TEST(TestEventListenersTest, Append) {
+ int on_start_counter = 0;
+ bool is_destroyed = false;
+ TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
+ {
+ TestEventListeners listeners;
+ listeners.Append(listener);
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+ EXPECT_EQ(1, on_start_counter);
+ }
+ EXPECT_TRUE(is_destroyed);
+}
+
+// Tests that listeners receive events in the order they were appended to
+// the list, except for *End requests, which must be received in the reverse
+// order.
+class SequenceTestingListener : public EmptyTestEventListener {
+ public:
+ SequenceTestingListener(Vector<String>* vector, const char* id)
+ : vector_(vector), id_(id) {}
+
+ protected:
+ virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {
+ vector_->PushBack(GetEventDescription("OnTestProgramStart"));
+ }
+
+ virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {
+ vector_->PushBack(GetEventDescription("OnTestProgramEnd"));
+ }
+
+ virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,
+ int /*iteration*/) {
+ vector_->PushBack(GetEventDescription("OnTestIterationStart"));
+ }
+
+ virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,
+ int /*iteration*/) {
+ vector_->PushBack(GetEventDescription("OnTestIterationEnd"));
+ }
+
+ private:
+ String GetEventDescription(const char* method) {
+ Message message;
+ message << id_ << "." << method;
+ return message.GetString();
+ }
+
+ Vector<String>* vector_;
+ const char* const id_;
+
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(SequenceTestingListener);
+};
+
+TEST(EventListenerTest, AppendKeepsOrder) {
+ Vector<String> vec;
+ TestEventListeners listeners;
+ listeners.Append(new SequenceTestingListener(&vec, "1st"));
+ listeners.Append(new SequenceTestingListener(&vec, "2nd"));
+ listeners.Append(new SequenceTestingListener(&vec, "3rd"));
+
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+ ASSERT_EQ(3, vec.size());
+ EXPECT_STREQ("1st.OnTestProgramStart", vec.GetElement(0).c_str());
+ EXPECT_STREQ("2nd.OnTestProgramStart", vec.GetElement(1).c_str());
+ EXPECT_STREQ("3rd.OnTestProgramStart", vec.GetElement(2).c_str());
+
+ vec.Clear();
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramEnd(
+ *UnitTest::GetInstance());
+ ASSERT_EQ(3, vec.size());
+ EXPECT_STREQ("3rd.OnTestProgramEnd", vec.GetElement(0).c_str());
+ EXPECT_STREQ("2nd.OnTestProgramEnd", vec.GetElement(1).c_str());
+ EXPECT_STREQ("1st.OnTestProgramEnd", vec.GetElement(2).c_str());
+
+ vec.Clear();
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationStart(
+ *UnitTest::GetInstance(), 0);
+ ASSERT_EQ(3, vec.size());
+ EXPECT_STREQ("1st.OnTestIterationStart", vec.GetElement(0).c_str());
+ EXPECT_STREQ("2nd.OnTestIterationStart", vec.GetElement(1).c_str());
+ EXPECT_STREQ("3rd.OnTestIterationStart", vec.GetElement(2).c_str());
+
+ vec.Clear();
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationEnd(
+ *UnitTest::GetInstance(), 0);
+ ASSERT_EQ(3, vec.size());
+ EXPECT_STREQ("3rd.OnTestIterationEnd", vec.GetElement(0).c_str());
+ EXPECT_STREQ("2nd.OnTestIterationEnd", vec.GetElement(1).c_str());
+ EXPECT_STREQ("1st.OnTestIterationEnd", vec.GetElement(2).c_str());
+}
+
+// Tests that a listener removed from a TestEventListeners list stops receiving
+// events and is not deleted when the list is destroyed.
+TEST(TestEventListenersTest, Release) {
+ int on_start_counter = 0;
+ bool is_destroyed = false;
+ // Although Append passes the ownership of this object to the list,
+ // the following calls release it, and we need to delete it before the
+ // test ends.
+ TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
+ {
+ TestEventListeners listeners;
+ listeners.Append(listener);
+ EXPECT_EQ(listener, listeners.Release(listener));
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+ EXPECT_TRUE(listeners.Release(listener) == NULL);
+ }
+ EXPECT_EQ(0, on_start_counter);
+ EXPECT_FALSE(is_destroyed);
+ delete listener;
+}
+
+// Tests that no events are forwarded when event forwarding is disabled.
+TEST(EventListenerTest, SuppressEventForwarding) {
+ int on_start_counter = 0;
+ TestListener* listener = new TestListener(&on_start_counter, NULL);
+
+ TestEventListeners listeners;
+ listeners.Append(listener);
+ ASSERT_TRUE(TestEventListenersAccessor::EventForwardingEnabled(listeners));
+ TestEventListenersAccessor::SuppressEventForwarding(&listeners);
+ ASSERT_FALSE(TestEventListenersAccessor::EventForwardingEnabled(listeners));
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+ EXPECT_EQ(0, on_start_counter);
+}
+
+// Tests that events generated by Google Test are not forwarded in
+// death test subprocesses.
+TEST(EventListenerDeathTest, EventsNotForwardedInDeathTestSubprecesses) {
+ EXPECT_DEATH_IF_SUPPORTED({
+ GTEST_CHECK_(TestEventListenersAccessor::EventForwardingEnabled(
+ *GetUnitTestImpl()->listeners())) << "expected failure";},
+ "expected failure");
+}
+
+// Tests that a listener installed via SetDefaultResultPrinter() starts
+// receiving events and is returned via default_result_printer() and that
+// the previous default_result_printer is removed from the list and deleted.
+TEST(EventListenerTest, default_result_printer) {
+ int on_start_counter = 0;
+ bool is_destroyed = false;
+ TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
+
+ TestEventListeners listeners;
+ TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener);
+
+ EXPECT_EQ(listener, listeners.default_result_printer());
+
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+
+ EXPECT_EQ(1, on_start_counter);
+
+ // Replacing default_result_printer with something else should remove it
+ // from the list and destroy it.
+ TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, NULL);
+
+ EXPECT_TRUE(listeners.default_result_printer() == NULL);
+ EXPECT_TRUE(is_destroyed);
+
+ // After broadcasting an event the counter is still the same, indicating
+ // the listener is not in the list anymore.
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+ EXPECT_EQ(1, on_start_counter);
+}
+
+// Tests that the default_result_printer listener stops receiving events
+// when removed via Release and that is not owned by the list anymore.
+TEST(EventListenerTest, RemovingDefaultResultPrinterWorks) {
+ int on_start_counter = 0;
+ bool is_destroyed = false;
+ // Although Append passes the ownership of this object to the list,
+ // the following calls release it, and we need to delete it before the
+ // test ends.
+ TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
+ {
+ TestEventListeners listeners;
+ TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener);
+
+ EXPECT_EQ(listener, listeners.Release(listener));
+ EXPECT_TRUE(listeners.default_result_printer() == NULL);
+ EXPECT_FALSE(is_destroyed);
+
+ // Broadcasting events now should not affect default_result_printer.
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+ EXPECT_EQ(0, on_start_counter);
+ }
+ // Destroying the list should not affect the listener now, too.
+ EXPECT_FALSE(is_destroyed);
+ delete listener;
+}
+
+// Tests that a listener installed via SetDefaultXmlGenerator() starts
+// receiving events and is returned via default_xml_generator() and that
+// the previous default_xml_generator is removed from the list and deleted.
+TEST(EventListenerTest, default_xml_generator) {
+ int on_start_counter = 0;
+ bool is_destroyed = false;
+ TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
+
+ TestEventListeners listeners;
+ TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener);
+
+ EXPECT_EQ(listener, listeners.default_xml_generator());
+
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+
+ EXPECT_EQ(1, on_start_counter);
+
+ // Replacing default_xml_generator with something else should remove it
+ // from the list and destroy it.
+ TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, NULL);
+
+ EXPECT_TRUE(listeners.default_xml_generator() == NULL);
+ EXPECT_TRUE(is_destroyed);
+
+ // After broadcasting an event the counter is still the same, indicating
+ // the listener is not in the list anymore.
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+ EXPECT_EQ(1, on_start_counter);
+}
+
+// Tests that the default_xml_generator listener stops receiving events
+// when removed via Release and that is not owned by the list anymore.
+TEST(EventListenerTest, RemovingDefaultXmlGeneratorWorks) {
+ int on_start_counter = 0;
+ bool is_destroyed = false;
+ // Although Append passes the ownership of this object to the list,
+ // the following calls release it, and we need to delete it before the
+ // test ends.
+ TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
+ {
+ TestEventListeners listeners;
+ TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener);
+
+ EXPECT_EQ(listener, listeners.Release(listener));
+ EXPECT_TRUE(listeners.default_xml_generator() == NULL);
+ EXPECT_FALSE(is_destroyed);
+
+ // Broadcasting events now should not affect default_xml_generator.
+ TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
+ *UnitTest::GetInstance());
+ EXPECT_EQ(0, on_start_counter);
+ }
+ // Destroying the list should not affect the listener now, too.
+ EXPECT_FALSE(is_destroyed);
+ delete listener;
+}
diff --git a/gtest/test/gtest_xml_output_unittest.py b/gtest/test/gtest_xml_output_unittest.py
index a0cd4d0..6d44929 100755
--- a/gtest/test/gtest_xml_output_unittest.py
+++ b/gtest/test/gtest_xml_output_unittest.py
@@ -44,6 +44,7 @@ import gtest_xml_test_utils
GTEST_OUTPUT_FLAG = "--gtest_output"
GTEST_DEFAULT_OUTPUT_FILE = "test_detail.xml"
+GTEST_PROGRAM_NAME = "gtest_xml_output_unittest_"
SUPPORTS_STACK_TRACES = False
@@ -53,7 +54,7 @@ else:
STACK_TRACE_TEMPLATE = ""
EXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?>
-<testsuites tests="13" failures="2" disabled="2" errors="0" time="*" name="AllTests">
+<testsuites tests="15" failures="4" disabled="2" errors="0" time="*" name="AllTests">
<testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*">
<testcase name="Succeeds" status="run" time="*" classname="SuccessfulTest"/>
</testsuite>
@@ -76,6 +77,20 @@ Expected: 2%(stack)s]]></failure>
</testcase>
<testcase name="DISABLED_test" status="notrun" time="*" classname="MixedResultTest"/>
</testsuite>
+ <testsuite name="XmlQuotingTest" tests="1" failures="1" disabled="0" errors="0" time="*">
+ <testcase name="OutputsCData" status="run" time="*" classname="XmlQuotingTest">
+ <failure message="Failed&#x0A;XML output: &lt;?xml encoding=&quot;utf-8&quot;&gt;&lt;top&gt;&lt;![CDATA[cdata text]]&gt;&lt;/top&gt;" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
+Failed
+XML output: <?xml encoding="utf-8"><top><![CDATA[cdata text]]>]]&gt;<![CDATA[</top>%(stack)s]]></failure>
+ </testcase>
+ </testsuite>
+ <testsuite name="InvalidCharactersTest" tests="1" failures="1" disabled="0" errors="0" time="*">
+ <testcase name="InvalidCharactersInMessage" status="run" time="*" classname="InvalidCharactersTest">
+ <failure message="Failed&#x0A;Invalid characters in brackets []" type=""><![CDATA[gtest_xml_output_unittest_.cc:*
+Failed
+Invalid characters in brackets []%(stack)s]]></failure>
+ </testcase>
+ </testsuite>
<testsuite name="DisabledTest" tests="1" failures="0" disabled="1" errors="0" time="*">
<testcase name="DISABLED_test_not_run" status="notrun" time="*" classname="DisabledTest"/>
</testsuite>
@@ -108,8 +123,7 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
Runs a test program that generates a non-empty XML output, and
tests that the XML output is expected.
"""
- self._TestXmlOutput("gtest_xml_output_unittest_",
- EXPECTED_NON_EMPTY_XML, 1)
+ self._TestXmlOutput(GTEST_PROGRAM_NAME, EXPECTED_NON_EMPTY_XML, 1)
def testEmptyXmlOutput(self):
"""
@@ -142,6 +156,35 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
self.assertEquals(0, p.exit_code)
self.assert_(os.path.isfile(output_file))
+ def testSuppressedXmlOutput(self):
+ """
+ Tests that no XML file is generated if the default XML listener is
+ shut down before RUN_ALL_TESTS is invoked.
+ """
+
+ xml_path = os.path.join(gtest_test_utils.GetTempDir(),
+ 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"]
+ 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))
+ 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."
+ % (command, p.exit_code, 1))
+
+ self.assert_(not os.path.isfile(xml_path))
+
def _TestXmlOutput(self, gtest_prog_name, expected_xml, expected_exit_code):
"""
diff --git a/gtest/test/gtest_xml_output_unittest_.cc b/gtest/test/gtest_xml_output_unittest_.cc
index d7ce2c6..fc07ef4 100644
--- a/gtest/test/gtest_xml_output_unittest_.cc
+++ b/gtest/test/gtest_xml_output_unittest_.cc
@@ -40,6 +40,10 @@
#include <gtest/gtest.h>
+using ::testing::InitGoogleTest;
+using ::testing::TestEventListeners;
+using ::testing::UnitTest;
+
class SuccessfulTest : public testing::Test {
};
@@ -76,6 +80,17 @@ TEST(MixedResultTest, DISABLED_test) {
FAIL() << "Unexpected failure: Disabled test should not be run";
}
+TEST(XmlQuotingTest, OutputsCData) {
+ FAIL() << "XML output: "
+ "<?xml encoding=\"utf-8\"><top><![CDATA[cdata text]]></top>";
+}
+
+// Helps to test that invalid characters produced by test code do not make
+// it into the XML file.
+TEST(InvalidCharactersTest, InvalidCharactersInMessage) {
+ FAIL() << "Invalid characters in brackets [\x1\x2]";
+}
+
class PropertyRecordingTest : public testing::Test {
};
@@ -118,3 +133,13 @@ TEST(NoFixtureTest, ExternalUtilityThatCallsRecordIntValuedProperty) {
TEST(NoFixtureTest, ExternalUtilityThatCallsRecordStringValuedProperty) {
ExternalUtilityThatCallsRecordProperty("key_for_utility_string", "1");
}
+
+int main(int argc, char** argv) {
+ InitGoogleTest(&argc, argv);
+
+ if (argc > 1 && strcmp(argv[1], "--shut_down_xml") == 0) {
+ TestEventListeners& listeners = UnitTest::GetInstance()->listeners();
+ delete listeners.Release(listeners.default_xml_generator());
+ }
+ return RUN_ALL_TESTS();
+}
diff --git a/gtest/test/gtest_xml_test_utils.py b/gtest/test/gtest_xml_test_utils.py
index 1811c40..c83c3b7 100755
--- a/gtest/test/gtest_xml_test_utils.py
+++ b/gtest/test/gtest_xml_test_utils.py
@@ -77,19 +77,29 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
expected_attributes = expected_node.attributes
actual_attributes = actual_node .attributes
- self.assertEquals(expected_attributes.length, actual_attributes.length)
+ self.assertEquals(
+ expected_attributes.length, actual_attributes.length,
+ "attribute numbers differ in element " + actual_node.tagName)
for i in range(expected_attributes.length):
expected_attr = expected_attributes.item(i)
actual_attr = actual_attributes.get(expected_attr.name)
- self.assert_(actual_attr is not None)
- self.assertEquals(expected_attr.value, actual_attr.value)
+ self.assert_(
+ actual_attr is not None,
+ "expected attribute %s not found in element %s" %
+ (expected_attr.name, actual_node.tagName))
+ self.assertEquals(expected_attr.value, actual_attr.value,
+ " values of attribute %s in element %s differ" %
+ (expected_attr.name, actual_node.tagName))
expected_children = self._GetChildren(expected_node)
actual_children = self._GetChildren(actual_node)
- self.assertEquals(len(expected_children), len(actual_children))
+ self.assertEquals(
+ len(expected_children), len(actual_children),
+ "number of child elements differ in element " + actual_node.tagName)
for child_id, child in expected_children.iteritems():
self.assert_(child_id in actual_children,
- '<%s> is not in <%s>' % (child_id, actual_children))
+ '<%s> is not in <%s> (in element %s)' %
+ (child_id, actual_children, actual_node.tagName))
self.AssertEquivalentNodes(child, actual_children[child_id])
identifying_attribute = {
@@ -103,14 +113,13 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
"""
Fetches all of the child nodes of element, a DOM Element object.
Returns them as the values of a dictionary keyed by the IDs of the
- children. For <testsuites>, <testsuite> and <testcase> elements,
- the ID is the value of their "name" attribute; for <failure>
- elements, it is the value of the "message" attribute; for CDATA
- section node, it is "detail". An exception is raised if any
- element other than the above four is encountered, if two child
- elements with the same identifying attributes are encountered, or
- if any other type of node is encountered, other than Text nodes
- containing only whitespace.
+ children. For <testsuites>, <testsuite> and <testcase> elements, the ID
+ is the value of their "name" attribute; for <failure> elements, it is
+ the value of the "message" attribute; CDATA sections and non-whitespace
+ text nodes are concatenated into a single CDATA section with ID
+ "detail". An exception is raised if any element other than the above
+ four is encountered, if two child elements with the same identifying
+ attributes are encountered, or if any other type of node is encountered.
"""
children = {}
@@ -121,11 +130,14 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
childID = child.getAttribute(self.identifying_attribute[child.tagName])
self.assert_(childID not in children)
children[childID] = child
- elif child.nodeType == Node.TEXT_NODE:
- self.assert_(child.nodeValue.isspace())
- elif child.nodeType == Node.CDATA_SECTION_NODE:
- self.assert_("detail" not in children)
- children["detail"] = child
+ elif child.nodeType in [Node.TEXT_NODE, Node.CDATA_SECTION_NODE]:
+ if "detail" not in children:
+ if (child.nodeType == Node.CDATA_SECTION_NODE or
+ not child.nodeValue.isspace()):
+ children["detail"] = child.ownerDocument.createCDATASection(
+ child.nodeValue)
+ else:
+ children["detail"].nodeValue += child.nodeValue
else:
self.fail("Encountered unexpected node type %d" % child.nodeType)
return children
diff --git a/gtest/xcode/Config/FrameworkTarget.xcconfig b/gtest/xcode/Config/FrameworkTarget.xcconfig
index 3deadcd..357b1c8 100644
--- a/gtest/xcode/Config/FrameworkTarget.xcconfig
+++ b/gtest/xcode/Config/FrameworkTarget.xcconfig
@@ -13,5 +13,5 @@ GCC_DYNAMIC_NO_PIC = NO
// Dynamic libs should not have their external symbols stripped.
STRIP_STYLE = non-global
-// Installation Directory
-INSTALL_PATH = @loader_path/../Frameworks
+// Let the user install by specifying the $DSTROOT with xcodebuild
+SKIP_INSTALL = NO
diff --git a/gtest/xcode/Config/InternalPythonTestTarget.xcconfig b/gtest/xcode/Config/InternalPythonTestTarget.xcconfig
deleted file mode 100644
index e004445..0000000
--- a/gtest/xcode/Config/InternalPythonTestTarget.xcconfig
+++ /dev/null
@@ -1,8 +0,0 @@
-//
-// InternalPythonTestTarget.xcconfig
-//
-// These are Test target settings for the gtest framework and examples. It
-// is set in the "Based On:" dropdown in the "Target" info dialog.
-
-PRODUCT_NAME = $(TARGET_NAME)_
-HEADER_SEARCH_PATHS = ../ ../include
diff --git a/gtest/xcode/Config/InternalTestTarget.xcconfig b/gtest/xcode/Config/InternalTestTarget.xcconfig
deleted file mode 100644
index c50fd9c..0000000
--- a/gtest/xcode/Config/InternalTestTarget.xcconfig
+++ /dev/null
@@ -1,8 +0,0 @@
-//
-// InternalTestTarget.xcconfig
-//
-// These are Test target settings for the gtest framework and examples. It
-// is set in the "Based On:" dropdown in the "Target" info dialog.
-
-PRODUCT_NAME = $(TARGET_NAME)
-HEADER_SEARCH_PATHS = ../ ../include
diff --git a/gtest/xcode/Config/StaticLibraryTarget.xcconfig b/gtest/xcode/Config/StaticLibraryTarget.xcconfig
new file mode 100644
index 0000000..3922fa5
--- /dev/null
+++ b/gtest/xcode/Config/StaticLibraryTarget.xcconfig
@@ -0,0 +1,18 @@
+//
+// StaticLibraryTarget.xcconfig
+//
+// These are static library target settings for libgtest.a. It
+// is set in the "Based On:" dropdown in the "Target" info dialog.
+// This file is based on the Xcode Configuration files in:
+// http://code.google.com/p/google-toolbox-for-mac/
+//
+
+// Static libs can be included in bundles so make them position independent
+GCC_DYNAMIC_NO_PIC = NO
+
+// Static libs should not have their internal globals or external symbols
+// stripped.
+STRIP_STYLE = debugging
+
+// Let the user install by specifying the $DSTROOT with xcodebuild
+SKIP_INSTALL = NO
diff --git a/gtest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj b/gtest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj
index 243b149..8244910 100644
--- a/gtest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj
+++ b/gtest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 45;
+ objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
@@ -11,7 +11,8 @@
3B7EB1260E5AEE3500C7F239 /* widget.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B7EB1240E5AEE3500C7F239 /* widget.h */; settings = {ATTRIBUTES = (Public, ); }; };
3B7EB1280E5AEE4600C7F239 /* widget_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B7EB1270E5AEE4600C7F239 /* widget_test.cc */; };
3B7EB1480E5AF3B400C7F239 /* Widget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D07F2C80486CC7A007CD1D0 /* Widget.framework */; };
- 3B7F0C8D0E567CC5009CA236 /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BA867DC0E561B7C00326077 /* gtest.framework */; };
+ 408BEC281046D72200DEF522 /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 408BEC271046D72200DEF522 /* gtest.framework */; };
+ 408BEC431046D7B300DEF522 /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 408BEC421046D7B300DEF522 /* libgtest_main.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -29,7 +30,8 @@
3B7EB1230E5AEE3500C7F239 /* widget.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = widget.cc; sourceTree = "<group>"; };
3B7EB1240E5AEE3500C7F239 /* widget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = widget.h; sourceTree = "<group>"; };
3B7EB1270E5AEE4600C7F239 /* widget_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = widget_test.cc; sourceTree = "<group>"; };
- 3BA867DC0E561B7C00326077 /* gtest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = gtest.framework; path = ../../build/Debug/gtest.framework; sourceTree = "<group>"; };
+ 408BEC271046D72200DEF522 /* gtest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = gtest.framework; path = /Library/Frameworks/gtest.framework; sourceTree = "<absolute>"; };
+ 408BEC421046D7B300DEF522 /* libgtest_main.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgtest_main.a; path = /Library/Frameworks/gtest.framework/Versions/A/Resources/libgtest_main.a; sourceTree = "<absolute>"; };
8D07F2C70486CC7A007CD1D0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D07F2C80486CC7A007CD1D0 /* Widget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Widget.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
@@ -40,7 +42,8 @@
buildActionMask = 2147483647;
files = (
3B7EB1480E5AF3B400C7F239 /* Widget.framework in Frameworks */,
- 3B7F0C8D0E567CC5009CA236 /* gtest.framework in Frameworks */,
+ 408BEC281046D72200DEF522 /* gtest.framework in Frameworks */,
+ 408BEC431046D7B300DEF522 /* libgtest_main.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -78,7 +81,8 @@
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
isa = PBXGroup;
children = (
- 3BA867DC0E561B7C00326077 /* gtest.framework */,
+ 408BEC421046D7B300DEF522 /* libgtest_main.a */,
+ 408BEC271046D72200DEF522 /* gtest.framework */,
);
name = "External Frameworks and Libraries";
sourceTree = "<group>";
@@ -165,7 +169,7 @@
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "WidgetFramework" */;
- compatibilityVersion = "Xcode 3.1";
+ compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1;
mainGroup = 0867D691FE84028FC02AAC07 /* gTestExample */;
productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
@@ -229,12 +233,6 @@
3B07BDEC0E3F3F9F00647869 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "\"$(SRCROOT)/externals/googletest/xcode/build/Debug\"",
- "\"$(SRCROOT)/../../build/Debug\"",
- );
- INSTALL_PATH = /usr/local/bin;
PRODUCT_NAME = WidgetFrameworkTest;
};
name = Debug;
@@ -242,12 +240,6 @@
3B07BDED0E3F3F9F00647869 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "\"$(SRCROOT)/externals/googletest/xcode/build/Debug\"",
- "\"$(SRCROOT)/../../build/Debug\"",
- );
- INSTALL_PATH = /usr/local/bin;
PRODUCT_NAME = WidgetFrameworkTest;
};
name = Release;
@@ -260,10 +252,7 @@
FRAMEWORK_VERSION = A;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "@loader_path/../Frameworks";
- LIBRARY_STYLE = DYNAMIC;
- MACH_O_TYPE = mh_dylib;
PRODUCT_NAME = Widget;
- WRAPPER_EXTENSION = framework;
};
name = Debug;
};
@@ -275,27 +264,23 @@
FRAMEWORK_VERSION = A;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "@loader_path/../Frameworks";
- LIBRARY_STYLE = DYNAMIC;
- MACH_O_TYPE = mh_dylib;
PRODUCT_NAME = Widget;
- WRAPPER_EXTENSION = framework;
};
name = Release;
};
4FADC24708B4156D00ABE55E /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_BIT)";
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = macosx10.5;
+ GCC_VERSION = 4.0;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Debug;
};
4FADC24808B4156D00ABE55E /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_BIT)";
- SDKROOT = macosx10.5;
+ GCC_VERSION = 4.0;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
};
name = Release;
};
diff --git a/gtest/xcode/Scripts/runtests.sh b/gtest/xcode/Scripts/runtests.sh
index 168da48..9d23a77 100644
--- a/gtest/xcode/Scripts/runtests.sh
+++ b/gtest/xcode/Scripts/runtests.sh
@@ -1,49 +1,16 @@
#!/bin/bash
-# Executes the samples and tests for the Google Test Framework
+# Executes the samples and tests for the Google Test Framework.
-# Help the dynamic linker find the path to the framework
+# Help the dynamic linker find the path to the libraries.
export DYLD_FRAMEWORK_PATH=$BUILT_PRODUCTS_DIR
+export DYLD_LIBRARY_PATH=$BUILT_PRODUCTS_DIR
-# Create an array of test executables
-test_executables=("$BUILT_PRODUCTS_DIR/sample1_unittest"
- "$BUILT_PRODUCTS_DIR/sample2_unittest"
- "$BUILT_PRODUCTS_DIR/sample3_unittest"
- "$BUILT_PRODUCTS_DIR/sample4_unittest"
- "$BUILT_PRODUCTS_DIR/sample5_unittest"
- "$BUILT_PRODUCTS_DIR/sample6_unittest"
- "$BUILT_PRODUCTS_DIR/sample7_unittest"
- "$BUILT_PRODUCTS_DIR/sample8_unittest"
-
- "$BUILT_PRODUCTS_DIR/gtest-death-test_test"
- "$BUILT_PRODUCTS_DIR/gtest_environment_test"
- "$BUILT_PRODUCTS_DIR/gtest-filepath_test"
- "$BUILT_PRODUCTS_DIR/gtest-linked_ptr_test"
- "$BUILT_PRODUCTS_DIR/gtest_main_unittest"
- "$BUILT_PRODUCTS_DIR/gtest-message_test"
- "$BUILT_PRODUCTS_DIR/gtest_no_test_unittest"
- "$BUILT_PRODUCTS_DIR/gtest-options_test"
- "$BUILT_PRODUCTS_DIR/gtest-param-test_test"
- "$BUILT_PRODUCTS_DIR/gtest-port_test"
- "$BUILT_PRODUCTS_DIR/gtest_pred_impl_unittest"
- "$BUILT_PRODUCTS_DIR/gtest_prod_test"
- "$BUILT_PRODUCTS_DIR/gtest_repeat_test"
- "$BUILT_PRODUCTS_DIR/gtest_sole_header_test"
- "$BUILT_PRODUCTS_DIR/gtest_stress_test"
- "$BUILT_PRODUCTS_DIR/gtest_test_part_test"
- "$BUILT_PRODUCTS_DIR/gtest-typed-test_test"
+# Create some executables.
+test_executables=("$BUILT_PRODUCTS_DIR/gtest_unittest-framework"
"$BUILT_PRODUCTS_DIR/gtest_unittest"
-
- "$BUILT_PRODUCTS_DIR/gtest_break_on_failure_unittest.py"
- "$BUILT_PRODUCTS_DIR/gtest_color_test.py"
- "$BUILT_PRODUCTS_DIR/gtest_env_var_test.py"
- "$BUILT_PRODUCTS_DIR/gtest_filter_unittest.py"
- "$BUILT_PRODUCTS_DIR/gtest_list_tests_unittest.py"
- "$BUILT_PRODUCTS_DIR/gtest_output_test.py"
- "$BUILT_PRODUCTS_DIR/gtest_xml_outfiles_test.py"
- "$BUILT_PRODUCTS_DIR/gtest_xml_output_unittest.py"
- "$BUILT_PRODUCTS_DIR/gtest_uninitialized_test.py"
-)
+ "$BUILT_PRODUCTS_DIR/sample1_unittest-framework"
+ "$BUILT_PRODUCTS_DIR/sample1_unittest-static")
# Now execute each one in turn keeping track of how many succeeded and failed.
succeeded=0
@@ -60,7 +27,7 @@ for test in ${test_executables[*]}; do
fi
done
-# Report the successes and failures to the console
+# Report the successes and failures to the console.
echo "Tests complete with $succeeded successes and $failed failures."
if [ $failed -ne 0 ]; then
echo "The following tests failed:"
diff --git a/gtest/xcode/gtest.xcodeproj/project.pbxproj b/gtest/xcode/gtest.xcodeproj/project.pbxproj
index 2d55395..4234e72 100644
--- a/gtest/xcode/gtest.xcodeproj/project.pbxproj
+++ b/gtest/xcode/gtest.xcodeproj/project.pbxproj
@@ -14,70 +14,14 @@
3B238F5E0E828B5400846E11 /* ShellScript */,
);
dependencies = (
- 3B238F630E828B6100846E11 /* PBXTargetDependency */,
- 3B238F650E828B6100846E11 /* PBXTargetDependency */,
- 3B238F670E828B6100846E11 /* PBXTargetDependency */,
- 3B238F690E828B6100846E11 /* PBXTargetDependency */,
- 3B238F6B0E828B6100846E11 /* PBXTargetDependency */,
- 3B238F6D0E828B6100846E11 /* PBXTargetDependency */,
- 4539C94C0EC2823500A70F4C /* PBXTargetDependency */,
- 4539C94A0EC2823500A70F4C /* PBXTargetDependency */,
- 3B238F6F0E828B7100846E11 /* PBXTargetDependency */,
- 3B238F810E828B7100846E11 /* PBXTargetDependency */,
- 3B238F710E828B7100846E11 /* PBXTargetDependency */,
- 4539C9B10EC284C300A70F4C /* PBXTargetDependency */,
- 3B238F870E828B7100846E11 /* PBXTargetDependency */,
- 3B238F730E828B7100846E11 /* PBXTargetDependency */,
- 3B238F8B0E828B7100846E11 /* PBXTargetDependency */,
- 3B238F750E828B7100846E11 /* PBXTargetDependency */,
- 4539C95F0EC2833100A70F4C /* PBXTargetDependency */,
- 4539C9B30EC284C300A70F4C /* PBXTargetDependency */,
- 3B238F8F0E828B7100846E11 /* PBXTargetDependency */,
- 3B238F910E828B7100846E11 /* PBXTargetDependency */,
- 3B238F930E828B7100846E11 /* PBXTargetDependency */,
- 22C44F370E9EB800004F2913 /* PBXTargetDependency */,
- 3B238F950E828B7100846E11 /* PBXTargetDependency */,
- 22C44F390E9EB808004F2913 /* PBXTargetDependency */,
- 3B238F790E828B7100846E11 /* PBXTargetDependency */,
- 3B238F990E828B7100846E11 /* PBXTargetDependency */,
- 409A76D00ED73CA300E08B81 /* PBXTargetDependency */,
- 409A76D20ED73CA300E08B81 /* PBXTargetDependency */,
- 409A76D40ED73CA300E08B81 /* PBXTargetDependency */,
- 409A76D60ED73CA300E08B81 /* PBXTargetDependency */,
- 409A76D80ED73CA300E08B81 /* PBXTargetDependency */,
- 409A76DA0ED73CA300E08B81 /* PBXTargetDependency */,
- 40538A450ED71D2200AF209A /* PBXTargetDependency */,
- 409A76DC0ED73CA300E08B81 /* PBXTargetDependency */,
- 409A76DE0ED73CA300E08B81 /* PBXTargetDependency */,
+ 40899F9D0FFA740F000B29AE /* PBXTargetDependency */,
+ 40C849F7101A43440083642A /* PBXTargetDependency */,
+ 4089A0980FFAD34A000B29AE /* PBXTargetDependency */,
+ 40C849F9101A43490083642A /* PBXTargetDependency */,
);
name = Check;
productName = Check;
};
- 40538A0A0ED71AF200AF209A /* gtest_xml_outfiles_test */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = 40538A110ED71AF200AF209A /* Build configuration list for PBXAggregateTarget "gtest_xml_outfiles_test" */;
- buildPhases = (
- 40538A0F0ED71AF200AF209A /* CopyFiles */,
- );
- dependencies = (
- 40538A0B0ED71AF200AF209A /* PBXTargetDependency */,
- 40538A150ED71B1900AF209A /* PBXTargetDependency */,
- 40538A170ED71B1B00AF209A /* PBXTargetDependency */,
- );
- name = gtest_xml_outfiles_test;
- productName = gtest_output_test;
- };
- 408454310E96D39000AC66C2 /* Setup Python */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = 408454340E96D3D400AC66C2 /* Build configuration list for PBXAggregateTarget "Setup Python" */;
- buildPhases = (
- 408454300E96D39000AC66C2 /* CopyFiles */,
- );
- dependencies = (
- );
- name = "Setup Python";
- productName = "Setup Python";
- };
40C44ADC0E3798F4008FCC51 /* Version Info */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 40C44AE40E379905008FCC51 /* Build configuration list for PBXAggregateTarget "Version Info" */;
@@ -93,35 +37,7 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
- 222ECCA60E9EB47B00BEED94 /* gtest-test-part_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C0E0E7FE13C00846E11 /* gtest-test-part_test.cc */; };
- 224A12A00E9EAD8F00BD17FD /* gtest-test-part.cc in Sources */ = {isa = PBXBuildFile; fileRef = 224A129F0E9EAD8F00BD17FD /* gtest-test-part.cc */; };
224A12A30E9EADCC00BD17FD /* gtest-test-part.h in Headers */ = {isa = PBXBuildFile; fileRef = 224A12A20E9EADCC00BD17FD /* gtest-test-part.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 22A865FD0E70A35700F7AE6E /* gtest-typed-test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 22A865FC0E70A35700F7AE6E /* gtest-typed-test.cc */; };
- 22A866190E70A41000F7AE6E /* sample6_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 22A866180E70A41000F7AE6E /* sample6_unittest.cc */; };
- 3B238D1D0E8283EA00846E11 /* gtest-death-test_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BF10E7FE13B00846E11 /* gtest-death-test_test.cc */; };
- 3B238D640E8285C500846E11 /* gtest-filepath_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BF20E7FE13B00846E11 /* gtest-filepath_test.cc */; };
- 3B238D6E0E82860A00846E11 /* gtest-message_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BF30E7FE13B00846E11 /* gtest-message_test.cc */; };
- 3B238D910E8286B800846E11 /* gtest-options_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BF40E7FE13B00846E11 /* gtest-options_test.cc */; };
- 3B238F450E828AC300846E11 /* gtest-typed-test_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BF60E7FE13B00846E11 /* gtest-typed-test_test.cc */; };
- 3B238F460E828AC800846E11 /* gtest_break_on_failure_unittest_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BF90E7FE13B00846E11 /* gtest_break_on_failure_unittest_.cc */; };
- 3B238F470E828ACF00846E11 /* gtest_color_test_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BFB0E7FE13B00846E11 /* gtest_color_test_.cc */; };
- 3B238F480E828AD500846E11 /* gtest_env_var_test_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BFD0E7FE13B00846E11 /* gtest_env_var_test_.cc */; };
- 3B238F490E828ADA00846E11 /* gtest_environment_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BFE0E7FE13B00846E11 /* gtest_environment_test.cc */; };
- 3B238F4A0E828ADF00846E11 /* gtest_filter_unittest_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C000E7FE13B00846E11 /* gtest_filter_unittest_.cc */; };
- 3B238F4B0E828AE700846E11 /* gtest_list_tests_unittest_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C020E7FE13B00846E11 /* gtest_list_tests_unittest_.cc */; };
- 3B238F4C0E828AEB00846E11 /* gtest_main_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C030E7FE13B00846E11 /* gtest_main_unittest.cc */; };
- 3B238F4D0E828AF000846E11 /* gtest_nc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C040E7FE13B00846E11 /* gtest_nc.cc */; };
- 3B238F4E0E828AF400846E11 /* gtest_no_test_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C060E7FE13B00846E11 /* gtest_no_test_unittest.cc */; };
- 3B238F4F0E828AFB00846E11 /* gtest_output_test_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C080E7FE13B00846E11 /* gtest_output_test_.cc */; };
- 3B238F500E828B0000846E11 /* gtest_pred_impl_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C0B0E7FE13B00846E11 /* gtest_pred_impl_unittest.cc */; };
- 3B238F510E828B0400846E11 /* gtest_prod_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C0C0E7FE13C00846E11 /* gtest_prod_test.cc */; };
- 3B238F520E828B0800846E11 /* gtest_repeat_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C0D0E7FE13C00846E11 /* gtest_repeat_test.cc */; };
- 3B238F540E828B1700846E11 /* gtest_uninitialized_test_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C110E7FE13C00846E11 /* gtest_uninitialized_test_.cc */; };
- 3B238F550E828B1F00846E11 /* gtest_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */; };
- 3B238F560E828B2400846E11 /* gtest_xml_outfile1_test_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C130E7FE13C00846E11 /* gtest_xml_outfile1_test_.cc */; };
- 3B238F570E828B2700846E11 /* gtest_xml_outfile2_test_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C140E7FE13C00846E11 /* gtest_xml_outfile2_test_.cc */; };
- 3B238F580E828B2C00846E11 /* gtest_xml_output_unittest_.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C170E7FE13C00846E11 /* gtest_xml_output_unittest_.cc */; };
- 3B238FF90E828C7E00846E11 /* production.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C190E7FE13C00846E11 /* production.cc */; };
3BF6F2A00E79B5AD000F2EEE /* gtest-type-util.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 3BF6F29F0E79B5AD000F2EEE /* gtest-type-util.h */; };
3BF6F2A50E79B616000F2EEE /* gtest-typed-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BF6F2A40E79B616000F2EEE /* gtest-typed-test.h */; settings = {ATTRIBUTES = (Public, ); }; };
404884380E2F799B00CF7658 /* gtest-death-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DB0E2F799B00CF7658 /* gtest-death-test.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -131,11 +47,6 @@
4048843C0E2F799B00CF7658 /* gtest_pred_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883DF0E2F799B00CF7658 /* gtest_pred_impl.h */; settings = {ATTRIBUTES = (Public, ); }; };
4048843D0E2F799B00CF7658 /* gtest_prod.h in Headers */ = {isa = PBXBuildFile; fileRef = 404883E00E2F799B00CF7658 /* gtest_prod.h */; settings = {ATTRIBUTES = (Public, ); }; };
404884500E2F799B00CF7658 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 404883F60E2F799B00CF7658 /* README */; };
- 4048845F0E2F799B00CF7658 /* gtest-death-test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404884080E2F799B00CF7658 /* gtest-death-test.cc */; };
- 404884600E2F799B00CF7658 /* gtest-filepath.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404884090E2F799B00CF7658 /* gtest-filepath.cc */; };
- 404884620E2F799B00CF7658 /* gtest-port.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4048840B0E2F799B00CF7658 /* gtest-port.cc */; };
- 404884630E2F799B00CF7658 /* gtest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4048840C0E2F799B00CF7658 /* gtest.cc */; };
- 404884640E2F799B00CF7658 /* gtest_main.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4048840D0E2F799B00CF7658 /* gtest_main.cc */; };
404884A00E2F7BE600CF7658 /* gtest-death-test-internal.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E20E2F799B00CF7658 /* gtest-death-test-internal.h */; };
404884A10E2F7BE600CF7658 /* gtest-filepath.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E30E2F799B00CF7658 /* gtest-filepath.h */; };
404884A20E2F7BE600CF7658 /* gtest-internal.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 404883E40E2F799B00CF7658 /* gtest-internal.h */; };
@@ -144,591 +55,52 @@
404884AC0E2F7CD900CF7658 /* CHANGES in Resources */ = {isa = PBXBuildFile; fileRef = 404884A90E2F7CD900CF7658 /* CHANGES */; };
404884AD0E2F7CD900CF7658 /* CONTRIBUTORS in Resources */ = {isa = PBXBuildFile; fileRef = 404884AA0E2F7CD900CF7658 /* CONTRIBUTORS */; };
404884AE0E2F7CD900CF7658 /* COPYING in Resources */ = {isa = PBXBuildFile; fileRef = 404884AB0E2F7CD900CF7658 /* COPYING */; };
- 404885990E2F816100CF7658 /* sample1.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404883F80E2F799B00CF7658 /* sample1.cc */; };
- 4048859B0E2F816100CF7658 /* sample1_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404883FA0E2F799B00CF7658 /* sample1_unittest.cc */; };
- 404885CF0E2F82F000CF7658 /* sample2.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404883FB0E2F799B00CF7658 /* sample2.cc */; };
- 404885D00E2F82F000CF7658 /* sample2_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404883FD0E2F799B00CF7658 /* sample2_unittest.cc */; };
- 404886050E2F83DF00CF7658 /* sample3_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404883FF0E2F799B00CF7658 /* sample3_unittest.cc */; };
- 404886080E2F840300CF7658 /* sample4.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404884000E2F799B00CF7658 /* sample4.cc */; };
- 404886090E2F840300CF7658 /* sample4_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404884020E2F799B00CF7658 /* sample4_unittest.cc */; };
- 4048860C0E2F840E00CF7658 /* sample5_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404884030E2F799B00CF7658 /* sample5_unittest.cc */; };
- 404886140E2F849100CF7658 /* sample1.cc in Sources */ = {isa = PBXBuildFile; fileRef = 404883F80E2F799B00CF7658 /* sample1.cc */; };
- 40538A180ED71B2E00AF209A /* gtest_xml_outfiles_test.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238C150E7FE13C00846E11 /* gtest_xml_outfiles_test.py */; };
- 4060FDBF0ED5C5C6008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC00ED5C5C7008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC10ED5C5C7008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC20ED5C5C8008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC30ED5C5C8008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC40ED5C5C9008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC50ED5C5CA008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC60ED5C5CB008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC70ED5C5CB008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC80ED5C5CC008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDC90ED5C5CC008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDCA0ED5C5CD008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDCB0ED5C5CE008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDCC0ED5C5CF008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDCD0ED5C5D0008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDCE0ED5C5D0008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDCF0ED5C5D1008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDD00ED5C5D2008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDD10ED5C5D3008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDD20ED5C5D6008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDD90ED5C5ED008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDDA0ED5C5EE008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDDB0ED5C5EF008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDDC0ED5C5EF008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDDD0ED5C5F1008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDDE0ED5C5F1008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDDF0ED5C5F2008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE00ED5C5F3008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE10ED5C5F3008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE20ED5C5F4008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE30ED5C5F5008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE40ED5C5F6008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE50ED5C5F9008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE60ED5C5F9008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE70ED5C5FA008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE80ED5C5FB008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 4060FDE90ED5C5FB008BAC1E /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
- 408454350E96D3F600AC66C2 /* gtest_test_utils.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238C0F0E7FE13C00846E11 /* gtest_test_utils.py */; };
- 4084548A0E96DD8200AC66C2 /* gtest_nc_test.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238C050E7FE13B00846E11 /* gtest_nc_test.py */; };
- 4084548F0E97066B00AC66C2 /* gtest_xml_test_utils.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238C180E7FE13C00846E11 /* gtest_xml_test_utils.py */; };
- 408454BC0E97098200AC66C2 /* gtest-typed-test2_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238BF50E7FE13B00846E11 /* gtest-typed-test2_test.cc */; };
- 409A76910ED73AF200E08B81 /* gtest_uninitialized_test.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238C100E7FE13C00846E11 /* gtest_uninitialized_test.py */; };
- 409A76940ED73B0500E08B81 /* gtest_xml_output_unittest.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238C160E7FE13C00846E11 /* gtest_xml_output_unittest.py */; };
- 409A76970ED73B2500E08B81 /* gtest_output_test.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238C070E7FE13B00846E11 /* gtest_output_test.py */; };
- 409A76980ED73B2500E08B81 /* gtest_output_test_golden_lin.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238C090E7FE13B00846E11 /* gtest_output_test_golden_lin.txt */; };
- 409A769B0ED73B2E00E08B81 /* gtest_list_tests_unittest.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238C010E7FE13B00846E11 /* gtest_list_tests_unittest.py */; };
- 409A769E0ED73B3800E08B81 /* gtest_filter_unittest.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238BFF0E7FE13B00846E11 /* gtest_filter_unittest.py */; };
- 409A76A10ED73B4600E08B81 /* gtest_env_var_test.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238BFC0E7FE13B00846E11 /* gtest_env_var_test.py */; };
- 409A76A20ED73B4D00E08B81 /* gtest_color_test.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238BFA0E7FE13B00846E11 /* gtest_color_test.py */; };
- 409A76A30ED73B5500E08B81 /* gtest_break_on_failure_unittest.py in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3B238BF80E7FE13B00846E11 /* gtest_break_on_failure_unittest.py */; };
- 40D2095B0E9FFBE500191629 /* gtest_sole_header_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 40D209590E9FFBAA00191629 /* gtest_sole_header_test.cc */; };
- 40D2095C0E9FFC0700191629 /* gtest_stress_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 40D2095A0E9FFBAA00191629 /* gtest_stress_test.cc */; };
- 4539C91E0EC2800600A70F4C /* sample7_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4539C91D0EC2800600A70F4C /* sample7_unittest.cc */; };
- 4539C9200EC2801E00A70F4C /* sample8_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4539C91F0EC2801E00A70F4C /* sample8_unittest.cc */; };
+ 40899F3A0FFA70D4000B29AE /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = 224A12A10E9EADA700BD17FD /* gtest-all.cc */; };
+ 40899F500FFA7281000B29AE /* gtest-tuple.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 40899F4D0FFA7271000B29AE /* gtest-tuple.h */; };
+ 40899F530FFA72A0000B29AE /* gtest_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */; };
+ 4089A0440FFAD1BE000B29AE /* sample1.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02C0FFACF7F000B29AE /* sample1.cc */; };
+ 4089A0460FFAD1BE000B29AE /* sample1_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */; };
+ 40C848FF101A21150083642A /* gtest-all.cc in Sources */ = {isa = PBXBuildFile; fileRef = 224A12A10E9EADA700BD17FD /* gtest-all.cc */; };
+ 40C84915101A21DF0083642A /* gtest_main.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4048840D0E2F799B00CF7658 /* gtest_main.cc */; };
+ 40C84916101A235B0083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; };
+ 40C84921101A23AD0083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; };
+ 40C84978101A36540083642A /* libgtest_main.a in Resources */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; };
+ 40C84980101A36850083642A /* gtest_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3B238C120E7FE13C00846E11 /* gtest_unittest.cc */; };
+ 40C84982101A36850083642A /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C848FA101A209C0083642A /* libgtest.a */; };
+ 40C84983101A36850083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; };
+ 40C8498F101A36A60083642A /* sample1.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02C0FFACF7F000B29AE /* sample1.cc */; };
+ 40C84990101A36A60083642A /* sample1_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */; };
+ 40C84992101A36A60083642A /* libgtest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C848FA101A209C0083642A /* libgtest.a */; };
+ 40C84993101A36A60083642A /* libgtest_main.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 40C8490B101A217E0083642A /* libgtest_main.a */; };
+ 40C849A2101A37050083642A /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
+ 40C849A4101A37150083642A /* gtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4539C8FF0EC27F6400A70F4C /* gtest.framework */; };
4539C9340EC280AE00A70F4C /* gtest-param-test.h in Headers */ = {isa = PBXBuildFile; fileRef = 4539C9330EC280AE00A70F4C /* gtest-param-test.h */; settings = {ATTRIBUTES = (Public, ); }; };
4539C9380EC280E200A70F4C /* gtest-linked_ptr.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 4539C9350EC280E200A70F4C /* gtest-linked_ptr.h */; };
4539C9390EC280E200A70F4C /* gtest-param-util-generated.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 4539C9360EC280E200A70F4C /* gtest-param-util-generated.h */; };
4539C93A0EC280E200A70F4C /* gtest-param-util.h in Copy Headers Internal */ = {isa = PBXBuildFile; fileRef = 4539C9370EC280E200A70F4C /* gtest-param-util.h */; };
- 4539C95C0EC2830E00A70F4C /* gtest-param-test2_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4539C95A0EC2830E00A70F4C /* gtest-param-test2_test.cc */; };
- 4539C95D0EC2830E00A70F4C /* gtest-param-test_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4539C95B0EC2830E00A70F4C /* gtest-param-test_test.cc */; };
- 4539C9A10EC283E400A70F4C /* gtest-port_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4539C9A00EC283E400A70F4C /* gtest-port_test.cc */; };
- 4539C9AF0EC2843000A70F4C /* gtest-linked_ptr_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4539C9AE0EC2843000A70F4C /* gtest-linked_ptr_test.cc */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 222ECC910E9EB33A00BEED94 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 222ECCA40E9EB47B00BEED94 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 22A866030E70A39900F7AE6E /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 22C44F360E9EB800004F2913 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 222ECC8F0E9EB33A00BEED94;
- remoteInfo = gtest_sole_header_test;
- };
- 22C44F380E9EB808004F2913 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 222ECCA20E9EB47B00BEED94;
- remoteInfo = gtest_test_part_test;
- };
- 3B238C980E81B92000846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238D540E82855F00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238D700E82862D00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238D7E0E82869400846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E110E82887E00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E1C0E82888500846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E290E82888800846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E380E82889000846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E430E82889500846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E500E82889800846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E5D0E82889B00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E7C0E82894300846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E870E82894800846E11 /* PBXContainerItemProxy */ = {
+ 40899F9C0FFA740F000B29AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238E940E82894A00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238EA10E82894D00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238EAE0E82894F00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238EC50E8289C100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238ED00E8289C300846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238EDD0E8289C700846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238EE80E8289C900846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238EF50E8289CE00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238F0C0E828A3800846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238F170E828A3B00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238F240E828A3D00846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 3B238F620E828B6100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 404885920E2F814C00CF7658;
- remoteInfo = sample1;
- };
- 3B238F640E828B6100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 404885B00E2F82BA00CF7658;
- remoteInfo = sample2;
- };
- 3B238F660E828B6100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 404885D40E2F832A00CF7658;
- remoteInfo = sample3;
- };
- 3B238F680E828B6100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 404885E10E2F833000CF7658;
- remoteInfo = sample4;
- };
- 3B238F6A0E828B6100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 404885EE0E2F833400CF7658;
- remoteInfo = sample5;
- };
- 3B238F6C0E828B6100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 22A866010E70A39900F7AE6E;
- remoteInfo = sample6;
- };
- 3B238F6E0E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238C660E81B8B500846E11;
- remoteInfo = "gtest-death-test_test";
- };
- 3B238F700E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238D520E82855F00846E11;
- remoteInfo = "gtest-filepath_test";
- };
- 3B238F720E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238D690E8285DA00846E11;
- remoteInfo = "gtest-message_test";
- };
- 3B238F740E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238D790E82868F00846E11;
- remoteInfo = "gtest-options_test";
- };
- 3B238F780E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E0F0E82887E00846E11;
- remoteInfo = "gtest-typed-test_test";
- };
- 3B238F800E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E410E82889500846E11;
- remoteInfo = gtest_enviroment_test;
- };
- 3B238F860E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E7A0E82894300846E11;
- remoteInfo = gtest_main_unittest;
- };
- 3B238F8A0E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E920E82894A00846E11;
- remoteInfo = gtest_no_test_unittest;
- };
- 3B238F8E0E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238EAC0E82894F00846E11;
- remoteInfo = gtest_pred_impl_unittest;
- };
- 3B238F900E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238EC30E8289C100846E11;
- remoteInfo = gtest_prod_test;
- };
- 3B238F920E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238ECE0E8289C300846E11;
- remoteInfo = gtest_repeat_test;
- };
- 3B238F940E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238EDB0E8289C700846E11;
- remoteInfo = gtest_stress_test;
- };
- 3B238F980E828B7100846E11 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238EF30E8289CE00846E11;
+ remoteGlobalIDString = 40899F420FFA7184000B29AE;
remoteInfo = gtest_unittest;
};
- 404885A70E2F824900CF7658 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 404885B20E2F82BA00CF7658 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 404885D60E2F832A00CF7658 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 404885E30E2F833000CF7658 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 404885F00E2F833400CF7658 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
- };
- 40538A0C0ED71AF200AF209A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 408454310E96D39000AC66C2;
- remoteInfo = "Setup Python";
- };
- 40538A140ED71B1900AF209A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238F0A0E828A3800846E11;
- remoteInfo = gtest_xml_outfile1_test_;
- };
- 40538A160ED71B1B00AF209A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238F150E828A3B00846E11;
- remoteInfo = gtest_xml_outfile2_test_;
- };
- 40538A440ED71D2200AF209A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 40538A0A0ED71AF200AF209A;
- remoteInfo = gtest_xml_outfiles_test;
- };
- 4084546C0E96D70C00AC66C2 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 408454310E96D39000AC66C2;
- remoteInfo = "Setup Python";
- };
- 409A76530ED7393100E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 408454310E96D39000AC66C2 /* Setup Python */;
- remoteInfo = "Setup Python";
- };
- 409A76570ED7393800E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 408454310E96D39000AC66C2 /* Setup Python */;
- remoteInfo = "Setup Python";
- };
- 409A765B0ED7393D00E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 408454310E96D39000AC66C2 /* Setup Python */;
- remoteInfo = "Setup Python";
- };
- 409A765F0ED7394200E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 408454310E96D39000AC66C2 /* Setup Python */;
- remoteInfo = "Setup Python";
- };
- 409A76630ED7394500E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 408454310E96D39000AC66C2 /* Setup Python */;
- remoteInfo = "Setup Python";
- };
- 409A766F0ED7395000E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 408454310E96D39000AC66C2 /* Setup Python */;
- remoteInfo = "Setup Python";
- };
- 409A76730ED7395400E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 408454310E96D39000AC66C2 /* Setup Python */;
- remoteInfo = "Setup Python";
- };
- 409A76CF0ED73CA300E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E1A0E82888500846E11 /* gtest_break_on_failure_unittest */;
- remoteInfo = gtest_break_on_failure_unittest;
- };
- 409A76D10ED73CA300E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E270E82888800846E11 /* gtest_color_test */;
- remoteInfo = gtest_color_test;
- };
- 409A76D30ED73CA300E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E360E82889000846E11 /* gtest_env_var_test */;
- remoteInfo = gtest_env_var_test;
- };
- 409A76D50ED73CA300E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E4E0E82889800846E11 /* gtest_filter_unittest */;
- remoteInfo = gtest_filter_unittest;
- };
- 409A76D70ED73CA300E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E5B0E82889B00846E11 /* gtest_list_tests_unittest */;
- remoteInfo = gtest_list_tests_unittest;
- };
- 409A76D90ED73CA300E08B81 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 3B238E9F0E82894D00846E11 /* gtest_output_test */;
- remoteInfo = gtest_output_test;
- };
- 409A76DB0ED73CA300E08B81 /* PBXContainerItemProxy */ = {
+ 4089A0970FFAD34A000B29AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 3B238F220E828A3D00846E11 /* gtest_xml_output_unittest */;
- remoteInfo = gtest_xml_output_unittest;
+ remoteGlobalIDString = 4089A0120FFACEFC000B29AE;
+ remoteInfo = sample1_unittest;
};
- 409A76DD0ED73CA300E08B81 /* PBXContainerItemProxy */ = {
+ 408BEC0F1046CFE900DEF522 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 3B238EE60E8289C900846E11 /* gtest_uninitialized_test */;
- remoteInfo = gtest_uninitialized_test;
+ remoteGlobalIDString = 40C848F9101A209C0083642A;
+ remoteInfo = "gtest-static";
};
40C44AE50E379922008FCC51 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
@@ -737,75 +109,68 @@
remoteGlobalIDString = 40C44ADC0E3798F4008FCC51;
remoteInfo = Version.h;
};
- 4539C9070EC27FBC00A70F4C /* PBXContainerItemProxy */ = {
+ 40C8497C101A36850083642A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
+ remoteGlobalIDString = 40C848F9101A209C0083642A;
+ remoteInfo = "gtest-static";
};
- 4539C9130EC27FC000A70F4C /* PBXContainerItemProxy */ = {
+ 40C8497E101A36850083642A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
+ remoteGlobalIDString = 40C8490A101A217E0083642A;
+ remoteInfo = "gtest_main-static";
};
- 4539C9490EC2823500A70F4C /* PBXContainerItemProxy */ = {
+ 40C8498B101A36A60083642A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 4539C9110EC27FC000A70F4C;
- remoteInfo = sample8_unittest;
+ remoteGlobalIDString = 40C848F9101A209C0083642A;
+ remoteInfo = "gtest-static";
};
- 4539C94B0EC2823500A70F4C /* PBXContainerItemProxy */ = {
+ 40C8498D101A36A60083642A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 4539C9050EC27FBC00A70F4C;
- remoteInfo = sample7_unittest;
+ remoteGlobalIDString = 40C8490A101A217E0083642A;
+ remoteInfo = "gtest_main-static";
};
- 4539C94F0EC282D400A70F4C /* PBXContainerItemProxy */ = {
+ 40C8499B101A36DC0083642A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
+ remoteGlobalIDString = 40C8490A101A217E0083642A;
+ remoteInfo = "gtest_main-static";
};
- 4539C95E0EC2833100A70F4C /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 4539C94D0EC282D400A70F4C;
- remoteInfo = "gtest-param-test_test";
- };
- 4539C9950EC283A800A70F4C /* PBXContainerItemProxy */ = {
+ 40C8499D101A36E50083642A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
+ remoteInfo = "gtest-framework";
};
- 4539C9A40EC2840700A70F4C /* PBXContainerItemProxy */ = {
+ 40C8499F101A36F10083642A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0;
- remoteInfo = gtest;
+ remoteInfo = "gtest-framework";
};
- 4539C9B00EC284C300A70F4C /* PBXContainerItemProxy */ = {
+ 40C849F6101A43440083642A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 4539C9A20EC2840700A70F4C;
- remoteInfo = "gtest-linked_ptr_test";
+ remoteGlobalIDString = 40C8497A101A36850083642A;
+ remoteInfo = "gtest_unittest-static";
};
- 4539C9B20EC284C300A70F4C /* PBXContainerItemProxy */ = {
+ 40C849F8101A43490083642A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 4539C9930EC283A800A70F4C;
- remoteInfo = "gtest-port_test";
+ remoteGlobalIDString = 40C84989101A36A60083642A;
+ remoteInfo = "sample1_unittest-static";
};
/* End PBXContainerItemProxy section */
@@ -824,208 +189,19 @@
4539C93A0EC280E200A70F4C /* gtest-param-util.h in Copy Headers Internal */,
404884A30E2F7BE600CF7658 /* gtest-port.h in Copy Headers Internal */,
404884A40E2F7BE600CF7658 /* gtest-string.h in Copy Headers Internal */,
+ 40899F500FFA7281000B29AE /* gtest-tuple.h in Copy Headers Internal */,
3BF6F2A00E79B5AD000F2EEE /* gtest-type-util.h in Copy Headers Internal */,
);
name = "Copy Headers Internal";
runOnlyForDeploymentPostprocessing = 0;
};
- 40538A0F0ED71AF200AF209A /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 40538A180ED71B2E00AF209A /* gtest_xml_outfiles_test.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 408454300E96D39000AC66C2 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 408454350E96D3F600AC66C2 /* gtest_test_utils.py in CopyFiles */,
- 4084548F0E97066B00AC66C2 /* gtest_xml_test_utils.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4084548E0E96DDBD00AC66C2 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 4084548A0E96DD8200AC66C2 /* gtest_nc_test.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 409A767D0ED7398700E08B81 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 409A76A30ED73B5500E08B81 /* gtest_break_on_failure_unittest.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 409A76AA0ED73BC100E08B81 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 409A76A20ED73B4D00E08B81 /* gtest_color_test.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 409A76AB0ED73BC100E08B81 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 409A76A10ED73B4600E08B81 /* gtest_env_var_test.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 409A76AC0ED73BC100E08B81 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 409A769E0ED73B3800E08B81 /* gtest_filter_unittest.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 409A76AD0ED73BC100E08B81 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 409A769B0ED73B2E00E08B81 /* gtest_list_tests_unittest.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 409A76AE0ED73BC100E08B81 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 409A76970ED73B2500E08B81 /* gtest_output_test.py in CopyFiles */,
- 409A76980ED73B2500E08B81 /* gtest_output_test_golden_lin.txt in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 409A76AF0ED73BC100E08B81 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 409A76940ED73B0500E08B81 /* gtest_xml_output_unittest.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 409A76B00ED73BC100E08B81 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 16;
- files = (
- 409A76910ED73AF200E08B81 /* gtest_uninitialized_test.py in CopyFiles */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 222ECC990E9EB33A00BEED94 /* gtest_sole_header_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_sole_header_test; sourceTree = BUILT_PRODUCTS_DIR; };
- 222ECCAC0E9EB47B00BEED94 /* gtest_test_part_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_test_part_test; sourceTree = BUILT_PRODUCTS_DIR; };
- 224A129F0E9EAD8F00BD17FD /* gtest-test-part.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-test-part.cc"; sourceTree = "<group>"; };
224A12A10E9EADA700BD17FD /* gtest-all.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-all.cc"; sourceTree = "<group>"; };
224A12A20E9EADCC00BD17FD /* gtest-test-part.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "gtest-test-part.h"; sourceTree = "<group>"; };
- 22A865FC0E70A35700F7AE6E /* gtest-typed-test.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-typed-test.cc"; sourceTree = "<group>"; };
- 22A866180E70A41000F7AE6E /* sample6_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = sample6_unittest.cc; sourceTree = "<group>"; };
- 3B238BF10E7FE13B00846E11 /* gtest-death-test_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-death-test_test.cc"; sourceTree = "<group>"; };
- 3B238BF20E7FE13B00846E11 /* gtest-filepath_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-filepath_test.cc"; sourceTree = "<group>"; };
- 3B238BF30E7FE13B00846E11 /* gtest-message_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-message_test.cc"; sourceTree = "<group>"; };
- 3B238BF40E7FE13B00846E11 /* gtest-options_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-options_test.cc"; sourceTree = "<group>"; };
- 3B238BF50E7FE13B00846E11 /* gtest-typed-test2_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-typed-test2_test.cc"; sourceTree = "<group>"; };
- 3B238BF60E7FE13B00846E11 /* gtest-typed-test_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-typed-test_test.cc"; sourceTree = "<group>"; };
- 3B238BF70E7FE13B00846E11 /* gtest-typed-test_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-typed-test_test.h"; sourceTree = "<group>"; };
- 3B238BF80E7FE13B00846E11 /* gtest_break_on_failure_unittest.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_break_on_failure_unittest.py; sourceTree = "<group>"; };
- 3B238BF90E7FE13B00846E11 /* gtest_break_on_failure_unittest_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_break_on_failure_unittest_.cc; sourceTree = "<group>"; };
- 3B238BFA0E7FE13B00846E11 /* gtest_color_test.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_color_test.py; sourceTree = "<group>"; };
- 3B238BFB0E7FE13B00846E11 /* gtest_color_test_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_color_test_.cc; sourceTree = "<group>"; };
- 3B238BFC0E7FE13B00846E11 /* gtest_env_var_test.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_env_var_test.py; sourceTree = "<group>"; };
- 3B238BFD0E7FE13B00846E11 /* gtest_env_var_test_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_env_var_test_.cc; sourceTree = "<group>"; };
- 3B238BFE0E7FE13B00846E11 /* gtest_environment_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_environment_test.cc; sourceTree = "<group>"; };
- 3B238BFF0E7FE13B00846E11 /* gtest_filter_unittest.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_filter_unittest.py; sourceTree = "<group>"; };
- 3B238C000E7FE13B00846E11 /* gtest_filter_unittest_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_filter_unittest_.cc; sourceTree = "<group>"; };
- 3B238C010E7FE13B00846E11 /* gtest_list_tests_unittest.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_list_tests_unittest.py; sourceTree = "<group>"; };
- 3B238C020E7FE13B00846E11 /* gtest_list_tests_unittest_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_list_tests_unittest_.cc; sourceTree = "<group>"; };
- 3B238C030E7FE13B00846E11 /* gtest_main_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_main_unittest.cc; sourceTree = "<group>"; };
- 3B238C040E7FE13B00846E11 /* gtest_nc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_nc.cc; sourceTree = "<group>"; };
- 3B238C050E7FE13B00846E11 /* gtest_nc_test.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_nc_test.py; sourceTree = "<group>"; };
- 3B238C060E7FE13B00846E11 /* gtest_no_test_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_no_test_unittest.cc; sourceTree = "<group>"; };
- 3B238C070E7FE13B00846E11 /* gtest_output_test.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_output_test.py; sourceTree = "<group>"; };
- 3B238C080E7FE13B00846E11 /* gtest_output_test_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_output_test_.cc; sourceTree = "<group>"; };
- 3B238C090E7FE13B00846E11 /* gtest_output_test_golden_lin.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gtest_output_test_golden_lin.txt; sourceTree = "<group>"; };
- 3B238C0A0E7FE13B00846E11 /* gtest_output_test_golden_win.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gtest_output_test_golden_win.txt; sourceTree = "<group>"; };
- 3B238C0B0E7FE13B00846E11 /* gtest_pred_impl_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_pred_impl_unittest.cc; sourceTree = "<group>"; };
- 3B238C0C0E7FE13C00846E11 /* gtest_prod_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_prod_test.cc; sourceTree = "<group>"; };
- 3B238C0D0E7FE13C00846E11 /* gtest_repeat_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_repeat_test.cc; sourceTree = "<group>"; };
- 3B238C0E0E7FE13C00846E11 /* gtest-test-part_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-test-part_test.cc"; sourceTree = "<group>"; };
- 3B238C0F0E7FE13C00846E11 /* gtest_test_utils.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_test_utils.py; sourceTree = "<group>"; };
- 3B238C100E7FE13C00846E11 /* gtest_uninitialized_test.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_uninitialized_test.py; sourceTree = "<group>"; };
- 3B238C110E7FE13C00846E11 /* gtest_uninitialized_test_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_uninitialized_test_.cc; sourceTree = "<group>"; };
3B238C120E7FE13C00846E11 /* gtest_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_unittest.cc; sourceTree = "<group>"; };
- 3B238C130E7FE13C00846E11 /* gtest_xml_outfile1_test_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_xml_outfile1_test_.cc; sourceTree = "<group>"; };
- 3B238C140E7FE13C00846E11 /* gtest_xml_outfile2_test_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_xml_outfile2_test_.cc; sourceTree = "<group>"; };
- 3B238C150E7FE13C00846E11 /* gtest_xml_outfiles_test.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_xml_outfiles_test.py; sourceTree = "<group>"; };
- 3B238C160E7FE13C00846E11 /* gtest_xml_output_unittest.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_xml_output_unittest.py; sourceTree = "<group>"; };
- 3B238C170E7FE13C00846E11 /* gtest_xml_output_unittest_.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_xml_output_unittest_.cc; sourceTree = "<group>"; };
- 3B238C180E7FE13C00846E11 /* gtest_xml_test_utils.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = gtest_xml_test_utils.py; sourceTree = "<group>"; };
- 3B238C190E7FE13C00846E11 /* production.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = production.cc; sourceTree = "<group>"; };
- 3B238C1A0E7FE13C00846E11 /* production.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = production.h; sourceTree = "<group>"; };
- 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = InternalTestTarget.xcconfig; sourceTree = "<group>"; };
- 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = TestTarget.xcconfig; sourceTree = "<group>"; };
3B87D2100E96B92E000D1852 /* runtests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = runtests.sh; sourceTree = "<group>"; };
- 3B87D22F0E96C038000D1852 /* sample1_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sample1_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2320E96C038000D1852 /* sample3_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sample3_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2350E96C038000D1852 /* sample2_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sample2_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2380E96C038000D1852 /* sample4_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sample4_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D23B0E96C038000D1852 /* gtest_xml_output_unittest_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_xml_output_unittest_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D23E0E96C038000D1852 /* gtest_xml_outfile2_test_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_xml_outfile2_test_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2410E96C038000D1852 /* gtest_xml_outfile1_test_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_xml_outfile1_test_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2440E96C038000D1852 /* gtest_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2470E96C038000D1852 /* gtest_uninitialized_test_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_uninitialized_test_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D24A0E96C038000D1852 /* gtest_stress_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_stress_test; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D24D0E96C038000D1852 /* gtest_repeat_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_repeat_test; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2500E96C038000D1852 /* gtest_prod_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_prod_test; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2530E96C038000D1852 /* gtest_pred_impl_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_pred_impl_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2560E96C038000D1852 /* gtest_output_test_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_output_test_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2590E96C038000D1852 /* gtest_no_test_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_no_test_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D25C0E96C038000D1852 /* gtest_nc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_nc; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D25F0E96C038000D1852 /* gtest_main_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_main_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2620E96C038000D1852 /* gtest_list_tests_unittest_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_list_tests_unittest_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2650E96C039000D1852 /* gtest_filter_unittest_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_filter_unittest_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2680E96C039000D1852 /* gtest_environment_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_environment_test; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D26B0E96C039000D1852 /* gtest_env_var_test_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_env_var_test_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D26E0E96C039000D1852 /* gtest_color_test_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_color_test_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2710E96C039000D1852 /* gtest_break_on_failure_unittest_ */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_break_on_failure_unittest_; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2740E96C039000D1852 /* gtest-typed-test_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest-typed-test_test"; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D27A0E96C039000D1852 /* gtest-options_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest-options_test"; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D27D0E96C039000D1852 /* gtest-message_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest-message_test"; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2800E96C039000D1852 /* sample5_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sample5_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2830E96C039000D1852 /* sample6_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sample6_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2860E96C039000D1852 /* gtest-death-test_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest-death-test_test"; sourceTree = BUILT_PRODUCTS_DIR; };
- 3B87D2890E96C039000D1852 /* gtest-filepath_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest-filepath_test"; sourceTree = BUILT_PRODUCTS_DIR; };
3BF6F29F0E79B5AD000F2EEE /* gtest-type-util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-type-util.h"; sourceTree = "<group>"; };
3BF6F2A40E79B616000F2EEE /* gtest-typed-test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-typed-test.h"; sourceTree = "<group>"; };
403EE37C0E377822004BD1E2 /* versiongenerate.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = versiongenerate.py; sourceTree = "<group>"; };
@@ -1041,348 +217,67 @@
404883E50E2F799B00CF7658 /* gtest-port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-port.h"; sourceTree = "<group>"; };
404883E60E2F799B00CF7658 /* gtest-string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-string.h"; sourceTree = "<group>"; };
404883F60E2F799B00CF7658 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README; path = ../README; sourceTree = SOURCE_ROOT; };
- 404883F80E2F799B00CF7658 /* sample1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample1.cc; sourceTree = "<group>"; };
- 404883F90E2F799B00CF7658 /* sample1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sample1.h; sourceTree = "<group>"; };
- 404883FA0E2F799B00CF7658 /* sample1_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample1_unittest.cc; sourceTree = "<group>"; };
- 404883FB0E2F799B00CF7658 /* sample2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample2.cc; sourceTree = "<group>"; };
- 404883FC0E2F799B00CF7658 /* sample2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sample2.h; sourceTree = "<group>"; };
- 404883FD0E2F799B00CF7658 /* sample2_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample2_unittest.cc; sourceTree = "<group>"; };
- 404883FE0E2F799B00CF7658 /* sample3-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "sample3-inl.h"; sourceTree = "<group>"; };
- 404883FF0E2F799B00CF7658 /* sample3_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample3_unittest.cc; sourceTree = "<group>"; };
- 404884000E2F799B00CF7658 /* sample4.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample4.cc; sourceTree = "<group>"; };
- 404884010E2F799B00CF7658 /* sample4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sample4.h; sourceTree = "<group>"; };
- 404884020E2F799B00CF7658 /* sample4_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample4_unittest.cc; sourceTree = "<group>"; };
- 404884030E2F799B00CF7658 /* sample5_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample5_unittest.cc; sourceTree = "<group>"; };
- 404884080E2F799B00CF7658 /* gtest-death-test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-death-test.cc"; sourceTree = "<group>"; };
- 404884090E2F799B00CF7658 /* gtest-filepath.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-filepath.cc"; sourceTree = "<group>"; };
- 4048840A0E2F799B00CF7658 /* gtest-internal-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-internal-inl.h"; sourceTree = "<group>"; };
- 4048840B0E2F799B00CF7658 /* gtest-port.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-port.cc"; sourceTree = "<group>"; };
- 4048840C0E2F799B00CF7658 /* gtest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest.cc; sourceTree = "<group>"; };
4048840D0E2F799B00CF7658 /* gtest_main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_main.cc; sourceTree = "<group>"; };
404884A90E2F7CD900CF7658 /* CHANGES */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CHANGES; path = ../CHANGES; sourceTree = SOURCE_ROOT; };
404884AA0E2F7CD900CF7658 /* CONTRIBUTORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CONTRIBUTORS; path = ../CONTRIBUTORS; sourceTree = SOURCE_ROOT; };
404884AB0E2F7CD900CF7658 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = COPYING; path = ../COPYING; sourceTree = SOURCE_ROOT; };
- 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = InternalPythonTestTarget.xcconfig; sourceTree = "<group>"; };
- 40D209590E9FFBAA00191629 /* gtest_sole_header_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_sole_header_test.cc; sourceTree = "<group>"; };
- 40D2095A0E9FFBAA00191629 /* gtest_stress_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_stress_test.cc; sourceTree = "<group>"; };
+ 40899F430FFA7184000B29AE /* gtest_unittest-framework */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest_unittest-framework"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 40899F4D0FFA7271000B29AE /* gtest-tuple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-tuple.h"; sourceTree = "<group>"; };
+ 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = StaticLibraryTarget.xcconfig; sourceTree = "<group>"; };
+ 4089A0130FFACEFC000B29AE /* sample1_unittest-framework */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "sample1_unittest-framework"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4089A02C0FFACF7F000B29AE /* sample1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample1.cc; sourceTree = "<group>"; };
+ 4089A02D0FFACF7F000B29AE /* sample1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sample1.h; sourceTree = "<group>"; };
+ 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample1_unittest.cc; sourceTree = "<group>"; };
+ 40C848FA101A209C0083642A /* libgtest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtest.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 40C8490B101A217E0083642A /* libgtest_main.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgtest_main.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 40C84987101A36850083642A /* gtest_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gtest_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 40C84997101A36A60083642A /* sample1_unittest-static */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "sample1_unittest-static"; sourceTree = BUILT_PRODUCTS_DIR; };
40D4CDF10E30E07400294801 /* DebugProject.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DebugProject.xcconfig; sourceTree = "<group>"; };
40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = FrameworkTarget.xcconfig; sourceTree = "<group>"; };
40D4CDF30E30E07400294801 /* General.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = General.xcconfig; sourceTree = "<group>"; };
40D4CDF40E30E07400294801 /* ReleaseProject.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ReleaseProject.xcconfig; sourceTree = "<group>"; };
40D4CF510E30F5E200294801 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
4539C8FF0EC27F6400A70F4C /* gtest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = gtest.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 4539C90F0EC27FBC00A70F4C /* sample7_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sample7_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 4539C91B0EC27FC000A70F4C /* sample8_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sample8_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
- 4539C91D0EC2800600A70F4C /* sample7_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample7_unittest.cc; sourceTree = "<group>"; };
- 4539C91F0EC2801E00A70F4C /* sample8_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sample8_unittest.cc; sourceTree = "<group>"; };
- 4539C9210EC2805500A70F4C /* prime_tables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = prime_tables.h; sourceTree = "<group>"; };
4539C9330EC280AE00A70F4C /* gtest-param-test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-param-test.h"; sourceTree = "<group>"; };
4539C9350EC280E200A70F4C /* gtest-linked_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-linked_ptr.h"; sourceTree = "<group>"; };
4539C9360EC280E200A70F4C /* gtest-param-util-generated.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-param-util-generated.h"; sourceTree = "<group>"; };
4539C9370EC280E200A70F4C /* gtest-param-util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gtest-param-util.h"; sourceTree = "<group>"; };
- 4539C9580EC282D400A70F4C /* gtest-param-test_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest-param-test_test"; sourceTree = BUILT_PRODUCTS_DIR; };
- 4539C95A0EC2830E00A70F4C /* gtest-param-test2_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-param-test2_test.cc"; sourceTree = "<group>"; };
- 4539C95B0EC2830E00A70F4C /* gtest-param-test_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-param-test_test.cc"; sourceTree = "<group>"; };
- 4539C99E0EC283A800A70F4C /* gtest-port_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest-port_test"; sourceTree = BUILT_PRODUCTS_DIR; };
- 4539C9A00EC283E400A70F4C /* gtest-port_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-port_test.cc"; sourceTree = "<group>"; };
- 4539C9AC0EC2840700A70F4C /* gtest-linked_ptr_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gtest-linked_ptr_test"; sourceTree = BUILT_PRODUCTS_DIR; };
- 4539C9AE0EC2843000A70F4C /* gtest-linked_ptr_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-linked_ptr_test.cc"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
- 222ECC940E9EB33A00BEED94 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDD00ED5C5D2008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 222ECCA70E9EB47B00BEED94 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDCE0ED5C5D0008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 22A866070E70A39900F7AE6E /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDE40ED5C5F6008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238C650E81B8B500846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDE00ED5C5F3008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238D570E82855F00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDDF0ED5C5F2008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238D680E8285DA00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDDE0ED5C5F1008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238D780E82868F00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDDD0ED5C5F1008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E130E82887E00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDCD0ED5C5D0008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E1E0E82888500846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDC80ED5C5CC008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E2B0E82888800846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDCB0ED5C5CE008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E3A0E82889000846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDCA0ED5C5CD008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E450E82889500846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDDB0ED5C5EF008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E520E82889800846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDC90ED5C5CC008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E5F0E82889B00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDC70ED5C5CB008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E7E0E82894300846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDD90ED5C5ED008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E890E82894800846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDC20ED5C5C8008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E960E82894A00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDDA0ED5C5EE008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238EA30E82894D00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDCC0ED5C5CF008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238EB00E82894F00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDDC0ED5C5EF008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238EC70E8289C100846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDD20ED5C5D6008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238ED20E8289C300846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDD10ED5C5D3008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238EDF0E8289C700846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDCF0ED5C5D1008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238EEA0E8289C900846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDC30ED5C5C8008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238EF70E8289CE00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDE10ED5C5F3008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238F0E0E828A3800846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDC50ED5C5CA008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238F190E828A3B00846E11 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDC40ED5C5C9008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238F260E828A3D00846E11 /* Frameworks */ = {
+ 40899F410FFA7184000B29AE /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 4060FDC60ED5C5CB008BAC1E /* gtest.framework in Frameworks */,
+ 40C849A4101A37150083642A /* gtest.framework in Frameworks */,
+ 40C84916101A235B0083642A /* libgtest_main.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 404885910E2F814C00CF7658 /* Frameworks */ = {
+ 4089A0110FFACEFC000B29AE /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 4060FDE90ED5C5FB008BAC1E /* gtest.framework in Frameworks */,
+ 40C849A2101A37050083642A /* gtest.framework in Frameworks */,
+ 40C84921101A23AD0083642A /* libgtest_main.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 404885B60E2F82BA00CF7658 /* Frameworks */ = {
+ 40C84981101A36850083642A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 4060FDE80ED5C5FB008BAC1E /* gtest.framework in Frameworks */,
+ 40C84982101A36850083642A /* libgtest.a in Frameworks */,
+ 40C84983101A36850083642A /* libgtest_main.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 404885DA0E2F832A00CF7658 /* Frameworks */ = {
+ 40C84991101A36A60083642A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 4060FDE70ED5C5FA008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 404885E70E2F833000CF7658 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDE60ED5C5F9008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 404885F40E2F833400CF7658 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDE50ED5C5F9008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C90A0EC27FBC00A70F4C /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDE30ED5C5F5008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C9160EC27FC000A70F4C /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDE20ED5C5F4008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C9530EC282D400A70F4C /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDC10ED5C5C7008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C9990EC283A800A70F4C /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDC00ED5C5C7008BAC1E /* gtest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C9A70EC2840700A70F4C /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4060FDBF0ED5C5C6008BAC1E /* gtest.framework in Frameworks */,
+ 40C84992101A36A60083642A /* libgtest.a in Frameworks */,
+ 40C84993101A36A60083642A /* libgtest_main.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1393,43 +288,12 @@
isa = PBXGroup;
children = (
4539C8FF0EC27F6400A70F4C /* gtest.framework */,
- 3B87D22F0E96C038000D1852 /* sample1_unittest */,
- 3B87D2350E96C038000D1852 /* sample2_unittest */,
- 3B87D2320E96C038000D1852 /* sample3_unittest */,
- 3B87D2380E96C038000D1852 /* sample4_unittest */,
- 3B87D2800E96C039000D1852 /* sample5_unittest */,
- 3B87D2830E96C039000D1852 /* sample6_unittest */,
- 4539C90F0EC27FBC00A70F4C /* sample7_unittest */,
- 4539C91B0EC27FC000A70F4C /* sample8_unittest */,
- 3B87D2860E96C039000D1852 /* gtest-death-test_test */,
- 3B87D2680E96C039000D1852 /* gtest_environment_test */,
- 3B87D2890E96C039000D1852 /* gtest-filepath_test */,
- 4539C9AC0EC2840700A70F4C /* gtest-linked_ptr_test */,
- 3B87D25F0E96C038000D1852 /* gtest_main_unittest */,
- 3B87D27D0E96C039000D1852 /* gtest-message_test */,
- 3B87D2590E96C038000D1852 /* gtest_no_test_unittest */,
- 3B87D27A0E96C039000D1852 /* gtest-options_test */,
- 4539C9580EC282D400A70F4C /* gtest-param-test_test */,
- 4539C99E0EC283A800A70F4C /* gtest-port_test */,
- 3B87D2530E96C038000D1852 /* gtest_pred_impl_unittest */,
- 3B87D2500E96C038000D1852 /* gtest_prod_test */,
- 3B87D24D0E96C038000D1852 /* gtest_repeat_test */,
- 222ECC990E9EB33A00BEED94 /* gtest_sole_header_test */,
- 3B87D24A0E96C038000D1852 /* gtest_stress_test */,
- 222ECCAC0E9EB47B00BEED94 /* gtest_test_part_test */,
- 3B87D2740E96C039000D1852 /* gtest-typed-test_test */,
- 3B87D2440E96C038000D1852 /* gtest_unittest */,
- 3B87D2710E96C039000D1852 /* gtest_break_on_failure_unittest_ */,
- 3B87D26E0E96C039000D1852 /* gtest_color_test_ */,
- 3B87D26B0E96C039000D1852 /* gtest_env_var_test_ */,
- 3B87D2650E96C039000D1852 /* gtest_filter_unittest_ */,
- 3B87D2620E96C038000D1852 /* gtest_list_tests_unittest_ */,
- 3B87D2560E96C038000D1852 /* gtest_output_test_ */,
- 3B87D2410E96C038000D1852 /* gtest_xml_outfile1_test_ */,
- 3B87D23E0E96C038000D1852 /* gtest_xml_outfile2_test_ */,
- 3B87D23B0E96C038000D1852 /* gtest_xml_output_unittest_ */,
- 3B87D2470E96C038000D1852 /* gtest_uninitialized_test_ */,
- 3B87D25C0E96C038000D1852 /* gtest_nc */,
+ 40C848FA101A209C0083642A /* libgtest.a */,
+ 40C8490B101A217E0083642A /* libgtest_main.a */,
+ 40899F430FFA7184000B29AE /* gtest_unittest-framework */,
+ 40C84987101A36850083642A /* gtest_unittest */,
+ 4089A0130FFACEFC000B29AE /* sample1_unittest-framework */,
+ 40C84997101A36A60083642A /* sample1_unittest-static */,
);
name = Products;
sourceTree = "<group>";
@@ -1454,7 +318,7 @@
404884AB0E2F7CD900CF7658 /* COPYING */,
404883F60E2F799B00CF7658 /* README */,
404883D90E2F799B00CF7658 /* include */,
- 404883F70E2F799B00CF7658 /* samples */,
+ 4089A02F0FFACF84000B29AE /* samples */,
404884070E2F799B00CF7658 /* src */,
3B238BF00E7FE13B00846E11 /* test */,
);
@@ -1464,54 +328,7 @@
3B238BF00E7FE13B00846E11 /* test */ = {
isa = PBXGroup;
children = (
- 3B238BF10E7FE13B00846E11 /* gtest-death-test_test.cc */,
- 3B238BF20E7FE13B00846E11 /* gtest-filepath_test.cc */,
- 4539C9AE0EC2843000A70F4C /* gtest-linked_ptr_test.cc */,
- 3B238BF30E7FE13B00846E11 /* gtest-message_test.cc */,
- 3B238BF40E7FE13B00846E11 /* gtest-options_test.cc */,
- 4539C95A0EC2830E00A70F4C /* gtest-param-test2_test.cc */,
- 4539C95B0EC2830E00A70F4C /* gtest-param-test_test.cc */,
- 4539C9A00EC283E400A70F4C /* gtest-port_test.cc */,
- 3B238BF50E7FE13B00846E11 /* gtest-typed-test2_test.cc */,
- 3B238BF60E7FE13B00846E11 /* gtest-typed-test_test.cc */,
- 3B238BF70E7FE13B00846E11 /* gtest-typed-test_test.h */,
- 3B238BF80E7FE13B00846E11 /* gtest_break_on_failure_unittest.py */,
- 3B238BF90E7FE13B00846E11 /* gtest_break_on_failure_unittest_.cc */,
- 3B238BFA0E7FE13B00846E11 /* gtest_color_test.py */,
- 3B238BFB0E7FE13B00846E11 /* gtest_color_test_.cc */,
- 3B238BFC0E7FE13B00846E11 /* gtest_env_var_test.py */,
- 3B238BFD0E7FE13B00846E11 /* gtest_env_var_test_.cc */,
- 3B238BFE0E7FE13B00846E11 /* gtest_environment_test.cc */,
- 3B238BFF0E7FE13B00846E11 /* gtest_filter_unittest.py */,
- 3B238C000E7FE13B00846E11 /* gtest_filter_unittest_.cc */,
- 3B238C010E7FE13B00846E11 /* gtest_list_tests_unittest.py */,
- 3B238C020E7FE13B00846E11 /* gtest_list_tests_unittest_.cc */,
- 3B238C030E7FE13B00846E11 /* gtest_main_unittest.cc */,
- 3B238C040E7FE13B00846E11 /* gtest_nc.cc */,
- 3B238C050E7FE13B00846E11 /* gtest_nc_test.py */,
- 3B238C060E7FE13B00846E11 /* gtest_no_test_unittest.cc */,
- 3B238C070E7FE13B00846E11 /* gtest_output_test.py */,
- 3B238C080E7FE13B00846E11 /* gtest_output_test_.cc */,
- 3B238C090E7FE13B00846E11 /* gtest_output_test_golden_lin.txt */,
- 3B238C0A0E7FE13B00846E11 /* gtest_output_test_golden_win.txt */,
- 3B238C0B0E7FE13B00846E11 /* gtest_pred_impl_unittest.cc */,
- 3B238C0C0E7FE13C00846E11 /* gtest_prod_test.cc */,
- 3B238C0D0E7FE13C00846E11 /* gtest_repeat_test.cc */,
- 40D209590E9FFBAA00191629 /* gtest_sole_header_test.cc */,
- 40D2095A0E9FFBAA00191629 /* gtest_stress_test.cc */,
- 3B238C0E0E7FE13C00846E11 /* gtest-test-part_test.cc */,
- 3B238C0F0E7FE13C00846E11 /* gtest_test_utils.py */,
- 3B238C100E7FE13C00846E11 /* gtest_uninitialized_test.py */,
- 3B238C110E7FE13C00846E11 /* gtest_uninitialized_test_.cc */,
3B238C120E7FE13C00846E11 /* gtest_unittest.cc */,
- 3B238C130E7FE13C00846E11 /* gtest_xml_outfile1_test_.cc */,
- 3B238C140E7FE13C00846E11 /* gtest_xml_outfile2_test_.cc */,
- 3B238C150E7FE13C00846E11 /* gtest_xml_outfiles_test.py */,
- 3B238C160E7FE13C00846E11 /* gtest_xml_output_unittest.py */,
- 3B238C170E7FE13C00846E11 /* gtest_xml_output_unittest_.cc */,
- 3B238C180E7FE13C00846E11 /* gtest_xml_test_utils.py */,
- 3B238C190E7FE13C00846E11 /* production.cc */,
- 3B238C1A0E7FE13C00846E11 /* production.h */,
);
name = test;
path = ../test;
@@ -1563,62 +380,41 @@
4539C9370EC280E200A70F4C /* gtest-param-util.h */,
404883E50E2F799B00CF7658 /* gtest-port.h */,
404883E60E2F799B00CF7658 /* gtest-string.h */,
+ 40899F4D0FFA7271000B29AE /* gtest-tuple.h */,
3BF6F29F0E79B5AD000F2EEE /* gtest-type-util.h */,
);
path = internal;
sourceTree = "<group>";
};
- 404883F70E2F799B00CF7658 /* samples */ = {
- isa = PBXGroup;
- children = (
- 4539C9210EC2805500A70F4C /* prime_tables.h */,
- 404883F80E2F799B00CF7658 /* sample1.cc */,
- 404883F90E2F799B00CF7658 /* sample1.h */,
- 404883FA0E2F799B00CF7658 /* sample1_unittest.cc */,
- 404883FB0E2F799B00CF7658 /* sample2.cc */,
- 404883FC0E2F799B00CF7658 /* sample2.h */,
- 404883FD0E2F799B00CF7658 /* sample2_unittest.cc */,
- 404883FE0E2F799B00CF7658 /* sample3-inl.h */,
- 404883FF0E2F799B00CF7658 /* sample3_unittest.cc */,
- 404884000E2F799B00CF7658 /* sample4.cc */,
- 404884010E2F799B00CF7658 /* sample4.h */,
- 404884020E2F799B00CF7658 /* sample4_unittest.cc */,
- 404884030E2F799B00CF7658 /* sample5_unittest.cc */,
- 22A866180E70A41000F7AE6E /* sample6_unittest.cc */,
- 4539C91F0EC2801E00A70F4C /* sample8_unittest.cc */,
- 4539C91D0EC2800600A70F4C /* sample7_unittest.cc */,
- );
- name = samples;
- path = ../samples;
- sourceTree = SOURCE_ROOT;
- };
404884070E2F799B00CF7658 /* src */ = {
isa = PBXGroup;
children = (
224A12A10E9EADA700BD17FD /* gtest-all.cc */,
- 224A129F0E9EAD8F00BD17FD /* gtest-test-part.cc */,
- 404884080E2F799B00CF7658 /* gtest-death-test.cc */,
- 404884090E2F799B00CF7658 /* gtest-filepath.cc */,
- 4048840A0E2F799B00CF7658 /* gtest-internal-inl.h */,
- 4048840B0E2F799B00CF7658 /* gtest-port.cc */,
- 4048840C0E2F799B00CF7658 /* gtest.cc */,
4048840D0E2F799B00CF7658 /* gtest_main.cc */,
- 22A865FC0E70A35700F7AE6E /* gtest-typed-test.cc */,
);
name = src;
path = ../src;
sourceTree = SOURCE_ROOT;
};
+ 4089A02F0FFACF84000B29AE /* samples */ = {
+ isa = PBXGroup;
+ children = (
+ 4089A02C0FFACF7F000B29AE /* sample1.cc */,
+ 4089A02D0FFACF7F000B29AE /* sample1.h */,
+ 4089A02E0FFACF7F000B29AE /* sample1_unittest.cc */,
+ );
+ name = samples;
+ path = ../samples;
+ sourceTree = SOURCE_ROOT;
+ };
40D4CDF00E30E07400294801 /* Config */ = {
isa = PBXGroup;
children = (
40D4CDF10E30E07400294801 /* DebugProject.xcconfig */,
40D4CDF20E30E07400294801 /* FrameworkTarget.xcconfig */,
40D4CDF30E30E07400294801 /* General.xcconfig */,
- 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */,
- 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */,
40D4CDF40E30E07400294801 /* ReleaseProject.xcconfig */,
- 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */,
+ 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */,
);
path = Config;
sourceTree = "<group>";
@@ -1653,668 +449,123 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
- 222ECC8F0E9EB33A00BEED94 /* gtest_sole_header_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 222ECC960E9EB33A00BEED94 /* Build configuration list for PBXNativeTarget "gtest_sole_header_test" */;
- buildPhases = (
- 222ECC920E9EB33A00BEED94 /* Sources */,
- 222ECC940E9EB33A00BEED94 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 222ECC900E9EB33A00BEED94 /* PBXTargetDependency */,
- );
- name = gtest_sole_header_test;
- productName = TypedTest2;
- productReference = 222ECC990E9EB33A00BEED94 /* gtest_sole_header_test */;
- productType = "com.apple.product-type.tool";
- };
- 222ECCA20E9EB47B00BEED94 /* gtest_test_part_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 222ECCA90E9EB47B00BEED94 /* Build configuration list for PBXNativeTarget "gtest_test_part_test" */;
- buildPhases = (
- 222ECCA50E9EB47B00BEED94 /* Sources */,
- 222ECCA70E9EB47B00BEED94 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 222ECCA30E9EB47B00BEED94 /* PBXTargetDependency */,
- );
- name = gtest_test_part_test;
- productName = TypedTest2;
- productReference = 222ECCAC0E9EB47B00BEED94 /* gtest_test_part_test */;
- productType = "com.apple.product-type.tool";
- };
- 22A866010E70A39900F7AE6E /* sample6_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 22A866090E70A39900F7AE6E /* Build configuration list for PBXNativeTarget "sample6_unittest" */;
- buildPhases = (
- 22A866040E70A39900F7AE6E /* Sources */,
- 22A866070E70A39900F7AE6E /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 22A866020E70A39900F7AE6E /* PBXTargetDependency */,
- );
- name = sample6_unittest;
- productName = sample6;
- productReference = 3B87D2830E96C039000D1852 /* sample6_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 3B238C660E81B8B500846E11 /* gtest-death-test_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238CD20E81B94000846E11 /* Build configuration list for PBXNativeTarget "gtest-death-test_test" */;
- buildPhases = (
- 3B238C640E81B8B500846E11 /* Sources */,
- 3B238C650E81B8B500846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238C990E81B92000846E11 /* PBXTargetDependency */,
- );
- name = "gtest-death-test_test";
- productName = Test;
- productReference = 3B87D2860E96C039000D1852 /* gtest-death-test_test */;
- productType = "com.apple.product-type.tool";
- };
- 3B238D520E82855F00846E11 /* gtest-filepath_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238D590E82855F00846E11 /* Build configuration list for PBXNativeTarget "gtest-filepath_test" */;
- buildPhases = (
- 3B238D550E82855F00846E11 /* Sources */,
- 3B238D570E82855F00846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238D530E82855F00846E11 /* PBXTargetDependency */,
- );
- name = "gtest-filepath_test";
- productName = Test;
- productReference = 3B87D2890E96C039000D1852 /* gtest-filepath_test */;
- productType = "com.apple.product-type.tool";
- };
- 3B238D690E8285DA00846E11 /* gtest-message_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238D6F0E82862800846E11 /* Build configuration list for PBXNativeTarget "gtest-message_test" */;
- buildPhases = (
- 3B238D670E8285DA00846E11 /* Sources */,
- 3B238D680E8285DA00846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238D710E82862D00846E11 /* PBXTargetDependency */,
- );
- name = "gtest-message_test";
- productName = MessageTest;
- productReference = 3B87D27D0E96C039000D1852 /* gtest-message_test */;
- productType = "com.apple.product-type.tool";
- };
- 3B238D790E82868F00846E11 /* gtest-options_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238D9D0E8286ED00846E11 /* Build configuration list for PBXNativeTarget "gtest-options_test" */;
- buildPhases = (
- 3B238D770E82868F00846E11 /* Sources */,
- 3B238D780E82868F00846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238D7F0E82869400846E11 /* PBXTargetDependency */,
- );
- name = "gtest-options_test";
- productName = OptionsTest;
- productReference = 3B87D27A0E96C039000D1852 /* gtest-options_test */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E0F0E82887E00846E11 /* gtest-typed-test_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E150E82887E00846E11 /* Build configuration list for PBXNativeTarget "gtest-typed-test_test" */;
- buildPhases = (
- 3B238E120E82887E00846E11 /* Sources */,
- 3B238E130E82887E00846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238E100E82887E00846E11 /* PBXTargetDependency */,
- );
- name = "gtest-typed-test_test";
- productName = TypedTest2;
- productReference = 3B87D2740E96C039000D1852 /* gtest-typed-test_test */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E1A0E82888500846E11 /* gtest_break_on_failure_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E200E82888500846E11 /* Build configuration list for PBXNativeTarget "gtest_break_on_failure_unittest" */;
- buildPhases = (
- 3B238E1D0E82888500846E11 /* Sources */,
- 3B238E1E0E82888500846E11 /* Frameworks */,
- 409A767D0ED7398700E08B81 /* CopyFiles */,
- );
- buildRules = (
- );
- dependencies = (
- 409A76540ED7393100E08B81 /* PBXTargetDependency */,
- 3B238E1B0E82888500846E11 /* PBXTargetDependency */,
- );
- name = gtest_break_on_failure_unittest;
- productName = TypedTest2;
- productReference = 3B87D2710E96C039000D1852 /* gtest_break_on_failure_unittest_ */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E270E82888800846E11 /* gtest_color_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E2D0E82888800846E11 /* Build configuration list for PBXNativeTarget "gtest_color_test" */;
- buildPhases = (
- 3B238E2A0E82888800846E11 /* Sources */,
- 3B238E2B0E82888800846E11 /* Frameworks */,
- 409A76AA0ED73BC100E08B81 /* CopyFiles */,
- );
- buildRules = (
- );
- dependencies = (
- 409A76580ED7393800E08B81 /* PBXTargetDependency */,
- 3B238E280E82888800846E11 /* PBXTargetDependency */,
- );
- name = gtest_color_test;
- productName = TypedTest2;
- productReference = 3B87D26E0E96C039000D1852 /* gtest_color_test_ */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E360E82889000846E11 /* gtest_env_var_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E3C0E82889000846E11 /* Build configuration list for PBXNativeTarget "gtest_env_var_test" */;
- buildPhases = (
- 3B238E390E82889000846E11 /* Sources */,
- 3B238E3A0E82889000846E11 /* Frameworks */,
- 409A76AB0ED73BC100E08B81 /* CopyFiles */,
- );
- buildRules = (
- );
- dependencies = (
- 409A765C0ED7393D00E08B81 /* PBXTargetDependency */,
- 3B238E370E82889000846E11 /* PBXTargetDependency */,
- );
- name = gtest_env_var_test;
- productName = TypedTest2;
- productReference = 3B87D26B0E96C039000D1852 /* gtest_env_var_test_ */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E410E82889500846E11 /* gtest_environment_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E470E82889500846E11 /* Build configuration list for PBXNativeTarget "gtest_environment_test" */;
- buildPhases = (
- 3B238E440E82889500846E11 /* Sources */,
- 3B238E450E82889500846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238E420E82889500846E11 /* PBXTargetDependency */,
- );
- name = gtest_environment_test;
- productName = TypedTest2;
- productReference = 3B87D2680E96C039000D1852 /* gtest_environment_test */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E4E0E82889800846E11 /* gtest_filter_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E540E82889800846E11 /* Build configuration list for PBXNativeTarget "gtest_filter_unittest" */;
- buildPhases = (
- 3B238E510E82889800846E11 /* Sources */,
- 3B238E520E82889800846E11 /* Frameworks */,
- 409A76AC0ED73BC100E08B81 /* CopyFiles */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238E4F0E82889800846E11 /* PBXTargetDependency */,
- );
- name = gtest_filter_unittest;
- productName = TypedTest2;
- productReference = 3B87D2650E96C039000D1852 /* gtest_filter_unittest_ */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E5B0E82889B00846E11 /* gtest_list_tests_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E610E82889B00846E11 /* Build configuration list for PBXNativeTarget "gtest_list_tests_unittest" */;
- buildPhases = (
- 3B238E5E0E82889B00846E11 /* Sources */,
- 3B238E5F0E82889B00846E11 /* Frameworks */,
- 409A76AD0ED73BC100E08B81 /* CopyFiles */,
- );
- buildRules = (
- );
- dependencies = (
- 409A76600ED7394200E08B81 /* PBXTargetDependency */,
- 3B238E5C0E82889B00846E11 /* PBXTargetDependency */,
- );
- name = gtest_list_tests_unittest;
- productName = TypedTest2;
- productReference = 3B87D2620E96C038000D1852 /* gtest_list_tests_unittest_ */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E7A0E82894300846E11 /* gtest_main_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E800E82894300846E11 /* Build configuration list for PBXNativeTarget "gtest_main_unittest" */;
- buildPhases = (
- 3B238E7D0E82894300846E11 /* Sources */,
- 3B238E7E0E82894300846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238E7B0E82894300846E11 /* PBXTargetDependency */,
- );
- name = gtest_main_unittest;
- productName = TypedTest2;
- productReference = 3B87D25F0E96C038000D1852 /* gtest_main_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E850E82894800846E11 /* gtest_nc */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E8B0E82894800846E11 /* Build configuration list for PBXNativeTarget "gtest_nc" */;
- buildPhases = (
- 3B238E880E82894800846E11 /* Sources */,
- 3B238E890E82894800846E11 /* Frameworks */,
- 4084548E0E96DDBD00AC66C2 /* CopyFiles */,
- );
- buildRules = (
- );
- dependencies = (
- 4084546D0E96D70C00AC66C2 /* PBXTargetDependency */,
- 3B238E860E82894800846E11 /* PBXTargetDependency */,
- );
- name = gtest_nc;
- productName = TypedTest2;
- productReference = 3B87D25C0E96C038000D1852 /* gtest_nc */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E920E82894A00846E11 /* gtest_no_test_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238E980E82894A00846E11 /* Build configuration list for PBXNativeTarget "gtest_no_test_unittest" */;
- buildPhases = (
- 3B238E950E82894A00846E11 /* Sources */,
- 3B238E960E82894A00846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238E930E82894A00846E11 /* PBXTargetDependency */,
- );
- name = gtest_no_test_unittest;
- productName = TypedTest2;
- productReference = 3B87D2590E96C038000D1852 /* gtest_no_test_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 3B238E9F0E82894D00846E11 /* gtest_output_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238EA50E82894D00846E11 /* Build configuration list for PBXNativeTarget "gtest_output_test" */;
- buildPhases = (
- 3B238EA20E82894D00846E11 /* Sources */,
- 3B238EA30E82894D00846E11 /* Frameworks */,
- 409A76AE0ED73BC100E08B81 /* CopyFiles */,
- );
- buildRules = (
- );
- dependencies = (
- 409A76640ED7394500E08B81 /* PBXTargetDependency */,
- 3B238EA00E82894D00846E11 /* PBXTargetDependency */,
- );
- name = gtest_output_test;
- productName = TypedTest2;
- productReference = 3B87D2560E96C038000D1852 /* gtest_output_test_ */;
- productType = "com.apple.product-type.tool";
- };
- 3B238EAC0E82894F00846E11 /* gtest_pred_impl_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238EB20E82894F00846E11 /* Build configuration list for PBXNativeTarget "gtest_pred_impl_unittest" */;
- buildPhases = (
- 3B238EAF0E82894F00846E11 /* Sources */,
- 3B238EB00E82894F00846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238EAD0E82894F00846E11 /* PBXTargetDependency */,
- );
- name = gtest_pred_impl_unittest;
- productName = TypedTest2;
- productReference = 3B87D2530E96C038000D1852 /* gtest_pred_impl_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 3B238EC30E8289C100846E11 /* gtest_prod_test */ = {
+ 40899F420FFA7184000B29AE /* gtest_unittest-framework */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 3B238EC90E8289C100846E11 /* Build configuration list for PBXNativeTarget "gtest_prod_test" */;
+ buildConfigurationList = 40899F4A0FFA71BC000B29AE /* Build configuration list for PBXNativeTarget "gtest_unittest-framework" */;
buildPhases = (
- 3B238EC60E8289C100846E11 /* Sources */,
- 3B238EC70E8289C100846E11 /* Frameworks */,
+ 40899F400FFA7184000B29AE /* Sources */,
+ 40899F410FFA7184000B29AE /* Frameworks */,
);
buildRules = (
);
dependencies = (
- 3B238EC40E8289C100846E11 /* PBXTargetDependency */,
+ 40C849A0101A36F10083642A /* PBXTargetDependency */,
);
- name = gtest_prod_test;
- productName = TypedTest2;
- productReference = 3B87D2500E96C038000D1852 /* gtest_prod_test */;
+ name = "gtest_unittest-framework";
+ productName = gtest_unittest;
+ productReference = 40899F430FFA7184000B29AE /* gtest_unittest-framework */;
productType = "com.apple.product-type.tool";
};
- 3B238ECE0E8289C300846E11 /* gtest_repeat_test */ = {
+ 4089A0120FFACEFC000B29AE /* sample1_unittest-framework */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 3B238ED40E8289C300846E11 /* Build configuration list for PBXNativeTarget "gtest_repeat_test" */;
+ buildConfigurationList = 4089A0240FFACF01000B29AE /* Build configuration list for PBXNativeTarget "sample1_unittest-framework" */;
buildPhases = (
- 3B238ED10E8289C300846E11 /* Sources */,
- 3B238ED20E8289C300846E11 /* Frameworks */,
+ 4089A0100FFACEFC000B29AE /* Sources */,
+ 4089A0110FFACEFC000B29AE /* Frameworks */,
);
buildRules = (
);
dependencies = (
- 3B238ECF0E8289C300846E11 /* PBXTargetDependency */,
+ 40C8499E101A36E50083642A /* PBXTargetDependency */,
);
- name = gtest_repeat_test;
- productName = TypedTest2;
- productReference = 3B87D24D0E96C038000D1852 /* gtest_repeat_test */;
+ name = "sample1_unittest-framework";
+ productName = sample1_unittest;
+ productReference = 4089A0130FFACEFC000B29AE /* sample1_unittest-framework */;
productType = "com.apple.product-type.tool";
};
- 3B238EDB0E8289C700846E11 /* gtest_stress_test */ = {
+ 40C848F9101A209C0083642A /* gtest-static */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 3B238EE10E8289C700846E11 /* Build configuration list for PBXNativeTarget "gtest_stress_test" */;
+ buildConfigurationList = 40C84902101A212E0083642A /* Build configuration list for PBXNativeTarget "gtest-static" */;
buildPhases = (
- 3B238EDE0E8289C700846E11 /* Sources */,
- 3B238EDF0E8289C700846E11 /* Frameworks */,
+ 40C848F7101A209C0083642A /* Sources */,
);
buildRules = (
);
dependencies = (
- 3B238EDC0E8289C700846E11 /* PBXTargetDependency */,
);
- name = gtest_stress_test;
- productName = TypedTest2;
- productReference = 3B87D24A0E96C038000D1852 /* gtest_stress_test */;
- productType = "com.apple.product-type.tool";
+ name = "gtest-static";
+ productName = "gtest-static";
+ productReference = 40C848FA101A209C0083642A /* libgtest.a */;
+ productType = "com.apple.product-type.library.static";
};
- 3B238EE60E8289C900846E11 /* gtest_uninitialized_test */ = {
+ 40C8490A101A217E0083642A /* gtest_main-static */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 3B238EEC0E8289C900846E11 /* Build configuration list for PBXNativeTarget "gtest_uninitialized_test" */;
+ buildConfigurationList = 40C84912101A21D20083642A /* Build configuration list for PBXNativeTarget "gtest_main-static" */;
buildPhases = (
- 3B238EE90E8289C900846E11 /* Sources */,
- 3B238EEA0E8289C900846E11 /* Frameworks */,
- 409A76B00ED73BC100E08B81 /* CopyFiles */,
+ 40C84908101A217E0083642A /* Sources */,
);
buildRules = (
);
dependencies = (
- 409A76740ED7395400E08B81 /* PBXTargetDependency */,
- 3B238EE70E8289C900846E11 /* PBXTargetDependency */,
- );
- name = gtest_uninitialized_test;
- productName = TypedTest2;
- productReference = 3B87D2470E96C038000D1852 /* gtest_uninitialized_test_ */;
- productType = "com.apple.product-type.tool";
- };
- 3B238EF30E8289CE00846E11 /* gtest_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238EF90E8289CE00846E11 /* Build configuration list for PBXNativeTarget "gtest_unittest" */;
- buildPhases = (
- 3B238EF60E8289CE00846E11 /* Sources */,
- 3B238EF70E8289CE00846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238EF40E8289CE00846E11 /* PBXTargetDependency */,
- );
- name = gtest_unittest;
- productName = TypedTest2;
- productReference = 3B87D2440E96C038000D1852 /* gtest_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 3B238F0A0E828A3800846E11 /* gtest_xml_outfile1_test_ */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238F100E828A3800846E11 /* Build configuration list for PBXNativeTarget "gtest_xml_outfile1_test_" */;
- buildPhases = (
- 3B238F0D0E828A3800846E11 /* Sources */,
- 3B238F0E0E828A3800846E11 /* Frameworks */,
);
- buildRules = (
- );
- dependencies = (
- 3B238F0B0E828A3800846E11 /* PBXTargetDependency */,
- );
- name = gtest_xml_outfile1_test_;
- productName = TypedTest2;
- productReference = 3B87D2410E96C038000D1852 /* gtest_xml_outfile1_test_ */;
- productType = "com.apple.product-type.tool";
- };
- 3B238F150E828A3B00846E11 /* gtest_xml_outfile2_test_ */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 3B238F1B0E828A3B00846E11 /* Build configuration list for PBXNativeTarget "gtest_xml_outfile2_test_" */;
- buildPhases = (
- 3B238F180E828A3B00846E11 /* Sources */,
- 3B238F190E828A3B00846E11 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 3B238F160E828A3B00846E11 /* PBXTargetDependency */,
- );
- name = gtest_xml_outfile2_test_;
- productName = TypedTest2;
- productReference = 3B87D23E0E96C038000D1852 /* gtest_xml_outfile2_test_ */;
- productType = "com.apple.product-type.tool";
+ name = "gtest_main-static";
+ productName = "gtest_main-static";
+ productReference = 40C8490B101A217E0083642A /* libgtest_main.a */;
+ productType = "com.apple.product-type.library.static";
};
- 3B238F220E828A3D00846E11 /* gtest_xml_output_unittest */ = {
+ 40C8497A101A36850083642A /* gtest_unittest-static */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 3B238F280E828A3D00846E11 /* Build configuration list for PBXNativeTarget "gtest_xml_output_unittest" */;
+ buildConfigurationList = 40C84984101A36850083642A /* Build configuration list for PBXNativeTarget "gtest_unittest-static" */;
buildPhases = (
- 3B238F250E828A3D00846E11 /* Sources */,
- 3B238F260E828A3D00846E11 /* Frameworks */,
- 409A76AF0ED73BC100E08B81 /* CopyFiles */,
+ 40C8497F101A36850083642A /* Sources */,
+ 40C84981101A36850083642A /* Frameworks */,
);
buildRules = (
);
dependencies = (
- 409A76700ED7395000E08B81 /* PBXTargetDependency */,
- 3B238F230E828A3D00846E11 /* PBXTargetDependency */,
+ 40C8497B101A36850083642A /* PBXTargetDependency */,
+ 40C8497D101A36850083642A /* PBXTargetDependency */,
);
- name = gtest_xml_output_unittest;
- productName = TypedTest2;
- productReference = 3B87D23B0E96C038000D1852 /* gtest_xml_output_unittest_ */;
+ name = "gtest_unittest-static";
+ productName = gtest_unittest;
+ productReference = 40C84987101A36850083642A /* gtest_unittest */;
productType = "com.apple.product-type.tool";
};
- 404885920E2F814C00CF7658 /* sample1_unittest */ = {
+ 40C84989101A36A60083642A /* sample1_unittest-static */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 4048859E0E2F818900CF7658 /* Build configuration list for PBXNativeTarget "sample1_unittest" */;
+ buildConfigurationList = 40C84994101A36A60083642A /* Build configuration list for PBXNativeTarget "sample1_unittest-static" */;
buildPhases = (
- 404885900E2F814C00CF7658 /* Sources */,
- 404885910E2F814C00CF7658 /* Frameworks */,
+ 40C8498E101A36A60083642A /* Sources */,
+ 40C84991101A36A60083642A /* Frameworks */,
);
buildRules = (
);
dependencies = (
- 404885A80E2F824900CF7658 /* PBXTargetDependency */,
+ 40C8498A101A36A60083642A /* PBXTargetDependency */,
+ 40C8498C101A36A60083642A /* PBXTargetDependency */,
);
- name = sample1_unittest;
- productName = sample1;
- productReference = 3B87D22F0E96C038000D1852 /* sample1_unittest */;
+ name = "sample1_unittest-static";
+ productName = sample1_unittest;
+ productReference = 40C84997101A36A60083642A /* sample1_unittest-static */;
productType = "com.apple.product-type.tool";
};
- 404885B00E2F82BA00CF7658 /* sample2_unittest */ = {
+ 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 404885B80E2F82BA00CF7658 /* Build configuration list for PBXNativeTarget "sample2_unittest" */;
- buildPhases = (
- 404885B30E2F82BA00CF7658 /* Sources */,
- 404885B60E2F82BA00CF7658 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 404885B10E2F82BA00CF7658 /* PBXTargetDependency */,
- );
- name = sample2_unittest;
- productName = sample2;
- productReference = 3B87D2350E96C038000D1852 /* sample2_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 404885D40E2F832A00CF7658 /* sample3_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 404885DC0E2F832A00CF7658 /* Build configuration list for PBXNativeTarget "sample3_unittest" */;
- buildPhases = (
- 404885D70E2F832A00CF7658 /* Sources */,
- 404885DA0E2F832A00CF7658 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 404885D50E2F832A00CF7658 /* PBXTargetDependency */,
- );
- name = sample3_unittest;
- productName = sample3;
- productReference = 3B87D2320E96C038000D1852 /* sample3_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 404885E10E2F833000CF7658 /* sample4_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 404885E90E2F833000CF7658 /* Build configuration list for PBXNativeTarget "sample4_unittest" */;
- buildPhases = (
- 404885E40E2F833000CF7658 /* Sources */,
- 404885E70E2F833000CF7658 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 404885E20E2F833000CF7658 /* PBXTargetDependency */,
- );
- name = sample4_unittest;
- productName = sample4;
- productReference = 3B87D2380E96C038000D1852 /* sample4_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 404885EE0E2F833400CF7658 /* sample5_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 404885F60E2F833400CF7658 /* Build configuration list for PBXNativeTarget "sample5_unittest" */;
- buildPhases = (
- 404885F10E2F833400CF7658 /* Sources */,
- 404885F40E2F833400CF7658 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 404885EF0E2F833400CF7658 /* PBXTargetDependency */,
- );
- name = sample5_unittest;
- productName = sample5;
- productReference = 3B87D2800E96C039000D1852 /* sample5_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 4539C9050EC27FBC00A70F4C /* sample7_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 4539C90C0EC27FBC00A70F4C /* Build configuration list for PBXNativeTarget "sample7_unittest" */;
- buildPhases = (
- 4539C9080EC27FBC00A70F4C /* Sources */,
- 4539C90A0EC27FBC00A70F4C /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 4539C9060EC27FBC00A70F4C /* PBXTargetDependency */,
- );
- name = sample7_unittest;
- productName = sample6;
- productReference = 4539C90F0EC27FBC00A70F4C /* sample7_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 4539C9110EC27FC000A70F4C /* sample8_unittest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 4539C9180EC27FC000A70F4C /* Build configuration list for PBXNativeTarget "sample8_unittest" */;
- buildPhases = (
- 4539C9140EC27FC000A70F4C /* Sources */,
- 4539C9160EC27FC000A70F4C /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 4539C9120EC27FC000A70F4C /* PBXTargetDependency */,
- );
- name = sample8_unittest;
- productName = sample6;
- productReference = 4539C91B0EC27FC000A70F4C /* sample8_unittest */;
- productType = "com.apple.product-type.tool";
- };
- 4539C94D0EC282D400A70F4C /* gtest-param-test_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 4539C9550EC282D400A70F4C /* Build configuration list for PBXNativeTarget "gtest-param-test_test" */;
- buildPhases = (
- 4539C9500EC282D400A70F4C /* Sources */,
- 4539C9530EC282D400A70F4C /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 4539C94E0EC282D400A70F4C /* PBXTargetDependency */,
- );
- name = "gtest-param-test_test";
- productName = TypedTest2;
- productReference = 4539C9580EC282D400A70F4C /* gtest-param-test_test */;
- productType = "com.apple.product-type.tool";
- };
- 4539C9930EC283A800A70F4C /* gtest-port_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 4539C99B0EC283A800A70F4C /* Build configuration list for PBXNativeTarget "gtest-port_test" */;
- buildPhases = (
- 4539C9960EC283A800A70F4C /* Sources */,
- 4539C9990EC283A800A70F4C /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 4539C9940EC283A800A70F4C /* PBXTargetDependency */,
- );
- name = "gtest-port_test";
- productName = TypedTest2;
- productReference = 4539C99E0EC283A800A70F4C /* gtest-port_test */;
- productType = "com.apple.product-type.tool";
- };
- 4539C9A20EC2840700A70F4C /* gtest-linked_ptr_test */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 4539C9A90EC2840700A70F4C /* Build configuration list for PBXNativeTarget "gtest-linked_ptr_test" */;
- buildPhases = (
- 4539C9A50EC2840700A70F4C /* Sources */,
- 4539C9A70EC2840700A70F4C /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 4539C9A30EC2840700A70F4C /* PBXTargetDependency */,
- );
- name = "gtest-linked_ptr_test";
- productName = TypedTest2;
- productReference = 4539C9AC0EC2840700A70F4C /* gtest-linked_ptr_test */;
- productType = "com.apple.product-type.tool";
- };
- 8D07F2BC0486CC7A007CD1D0 /* gtest */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "gtest" */;
+ buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "gtest-framework" */;
buildPhases = (
8D07F2C10486CC7A007CD1D0 /* Sources */,
8D07F2BD0486CC7A007CD1D0 /* Headers */,
404884A50E2F7C0400CF7658 /* Copy Headers Internal */,
8D07F2BF0486CC7A007CD1D0 /* Resources */,
- 8D07F2C50486CC7A007CD1D0 /* Rez */,
);
buildRules = (
);
dependencies = (
40C44AE60E379922008FCC51 /* PBXTargetDependency */,
+ 408BEC101046CFE900DEF522 /* PBXTargetDependency */,
+ 40C8499C101A36DC0083642A /* PBXTargetDependency */,
);
- name = gtest;
+ name = "gtest-framework";
productInstallPath = "$(HOME)/Library/Frameworks";
productName = gtest;
productReference = 4539C8FF0EC27F6400A70F4C /* gtest.framework */;
@@ -2340,48 +591,15 @@
projectDirPath = "";
projectRoot = "";
targets = (
- 8D07F2BC0486CC7A007CD1D0 /* gtest */,
+ 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */,
+ 40C848F9101A209C0083642A /* gtest-static */,
+ 40C8490A101A217E0083642A /* gtest_main-static */,
+ 40899F420FFA7184000B29AE /* gtest_unittest-framework */,
+ 40C8497A101A36850083642A /* gtest_unittest-static */,
+ 4089A0120FFACEFC000B29AE /* sample1_unittest-framework */,
+ 40C84989101A36A60083642A /* sample1_unittest-static */,
3B238F5F0E828B5400846E11 /* Check */,
- 404885920E2F814C00CF7658 /* sample1_unittest */,
- 404885B00E2F82BA00CF7658 /* sample2_unittest */,
- 404885D40E2F832A00CF7658 /* sample3_unittest */,
- 404885E10E2F833000CF7658 /* sample4_unittest */,
- 404885EE0E2F833400CF7658 /* sample5_unittest */,
- 22A866010E70A39900F7AE6E /* sample6_unittest */,
- 4539C9050EC27FBC00A70F4C /* sample7_unittest */,
- 4539C9110EC27FC000A70F4C /* sample8_unittest */,
- 3B238C660E81B8B500846E11 /* gtest-death-test_test */,
- 3B238E410E82889500846E11 /* gtest_environment_test */,
- 3B238D520E82855F00846E11 /* gtest-filepath_test */,
- 4539C9A20EC2840700A70F4C /* gtest-linked_ptr_test */,
- 3B238E7A0E82894300846E11 /* gtest_main_unittest */,
- 3B238D690E8285DA00846E11 /* gtest-message_test */,
- 3B238E920E82894A00846E11 /* gtest_no_test_unittest */,
- 3B238D790E82868F00846E11 /* gtest-options_test */,
- 4539C94D0EC282D400A70F4C /* gtest-param-test_test */,
- 4539C9930EC283A800A70F4C /* gtest-port_test */,
- 3B238EAC0E82894F00846E11 /* gtest_pred_impl_unittest */,
- 3B238EC30E8289C100846E11 /* gtest_prod_test */,
- 3B238ECE0E8289C300846E11 /* gtest_repeat_test */,
- 222ECC8F0E9EB33A00BEED94 /* gtest_sole_header_test */,
- 3B238EDB0E8289C700846E11 /* gtest_stress_test */,
- 222ECCA20E9EB47B00BEED94 /* gtest_test_part_test */,
- 3B238E0F0E82887E00846E11 /* gtest-typed-test_test */,
- 3B238EF30E8289CE00846E11 /* gtest_unittest */,
- 3B238E1A0E82888500846E11 /* gtest_break_on_failure_unittest */,
- 3B238E270E82888800846E11 /* gtest_color_test */,
- 3B238E360E82889000846E11 /* gtest_env_var_test */,
- 3B238E4E0E82889800846E11 /* gtest_filter_unittest */,
- 3B238E5B0E82889B00846E11 /* gtest_list_tests_unittest */,
- 3B238E9F0E82894D00846E11 /* gtest_output_test */,
- 3B238F0A0E828A3800846E11 /* gtest_xml_outfile1_test_ */,
- 3B238F150E828A3B00846E11 /* gtest_xml_outfile2_test_ */,
- 40538A0A0ED71AF200AF209A /* gtest_xml_outfiles_test */,
- 3B238F220E828A3D00846E11 /* gtest_xml_output_unittest */,
- 3B238EE60E8289C900846E11 /* gtest_uninitialized_test */,
- 3B238E850E82894800846E11 /* gtest_nc */,
40C44ADC0E3798F4008FCC51 /* Version Info */,
- 408454310E96D39000AC66C2 /* Setup Python */,
);
};
/* End PBXProject section */
@@ -2395,21 +613,12 @@
404884AC0E2F7CD900CF7658 /* CHANGES in Resources */,
404884AD0E2F7CD900CF7658 /* CONTRIBUTORS in Resources */,
404884AE0E2F7CD900CF7658 /* COPYING in Resources */,
+ 40C84978101A36540083642A /* libgtest_main.a in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
-/* Begin PBXRezBuildPhase section */
- 8D07F2C50486CC7A007CD1D0 /* Rez */ = {
- isa = PBXRezBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXRezBuildPhase section */
-
/* Begin PBXShellScriptBuildPhase section */
3B238F5E0E828B5400846E11 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@@ -2435,315 +644,62 @@
);
name = "Generate Version.h";
outputPaths = (
- "$(DERIVED_FILE_DIR)/Version.h",
+ "$(PROJECT_TEMP_DIR)/Version.h",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/usr/bin/python Scripts/versiongenerate.py ../ $DERIVED_FILE_DIR\n";
+ shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/usr/bin/python Scripts/versiongenerate.py ../ $PROJECT_TEMP_DIR";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
- 222ECC920E9EB33A00BEED94 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 40D2095B0E9FFBE500191629 /* gtest_sole_header_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 222ECCA50E9EB47B00BEED94 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 222ECCA60E9EB47B00BEED94 /* gtest-test-part_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 22A866040E70A39900F7AE6E /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 22A866190E70A41000F7AE6E /* sample6_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238C640E81B8B500846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238D1D0E8283EA00846E11 /* gtest-death-test_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238D550E82855F00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238D640E8285C500846E11 /* gtest-filepath_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238D670E8285DA00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238D6E0E82860A00846E11 /* gtest-message_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238D770E82868F00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238D910E8286B800846E11 /* gtest-options_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E120E82887E00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F450E828AC300846E11 /* gtest-typed-test_test.cc in Sources */,
- 408454BC0E97098200AC66C2 /* gtest-typed-test2_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E1D0E82888500846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F460E828AC800846E11 /* gtest_break_on_failure_unittest_.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E2A0E82888800846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F470E828ACF00846E11 /* gtest_color_test_.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E390E82889000846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F480E828AD500846E11 /* gtest_env_var_test_.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E440E82889500846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F490E828ADA00846E11 /* gtest_environment_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E510E82889800846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F4A0E828ADF00846E11 /* gtest_filter_unittest_.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E5E0E82889B00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F4B0E828AE700846E11 /* gtest_list_tests_unittest_.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E7D0E82894300846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F4C0E828AEB00846E11 /* gtest_main_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E880E82894800846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F4D0E828AF000846E11 /* gtest_nc.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238E950E82894A00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F4E0E828AF400846E11 /* gtest_no_test_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238EA20E82894D00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F4F0E828AFB00846E11 /* gtest_output_test_.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238EAF0E82894F00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F500E828B0000846E11 /* gtest_pred_impl_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238EC60E8289C100846E11 /* Sources */ = {
+ 40899F400FFA7184000B29AE /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 3B238FF90E828C7E00846E11 /* production.cc in Sources */,
- 3B238F510E828B0400846E11 /* gtest_prod_test.cc in Sources */,
+ 40899F530FFA72A0000B29AE /* gtest_unittest.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 3B238ED10E8289C300846E11 /* Sources */ = {
+ 4089A0100FFACEFC000B29AE /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 3B238F520E828B0800846E11 /* gtest_repeat_test.cc in Sources */,
+ 4089A0440FFAD1BE000B29AE /* sample1.cc in Sources */,
+ 4089A0460FFAD1BE000B29AE /* sample1_unittest.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 3B238EDE0E8289C700846E11 /* Sources */ = {
+ 40C848F7101A209C0083642A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 40D2095C0E9FFC0700191629 /* gtest_stress_test.cc in Sources */,
+ 40C848FF101A21150083642A /* gtest-all.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 3B238EE90E8289C900846E11 /* Sources */ = {
+ 40C84908101A217E0083642A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 3B238F540E828B1700846E11 /* gtest_uninitialized_test_.cc in Sources */,
+ 40C84915101A21DF0083642A /* gtest_main.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 3B238EF60E8289CE00846E11 /* Sources */ = {
+ 40C8497F101A36850083642A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 3B238F550E828B1F00846E11 /* gtest_unittest.cc in Sources */,
+ 40C84980101A36850083642A /* gtest_unittest.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 3B238F0D0E828A3800846E11 /* Sources */ = {
+ 40C8498E101A36A60083642A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 3B238F560E828B2400846E11 /* gtest_xml_outfile1_test_.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238F180E828A3B00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F570E828B2700846E11 /* gtest_xml_outfile2_test_.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 3B238F250E828A3D00846E11 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 3B238F580E828B2C00846E11 /* gtest_xml_output_unittest_.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 404885900E2F814C00CF7658 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 404885990E2F816100CF7658 /* sample1.cc in Sources */,
- 4048859B0E2F816100CF7658 /* sample1_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 404885B30E2F82BA00CF7658 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 404885CF0E2F82F000CF7658 /* sample2.cc in Sources */,
- 404885D00E2F82F000CF7658 /* sample2_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 404885D70E2F832A00CF7658 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 404886050E2F83DF00CF7658 /* sample3_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 404885E40E2F833000CF7658 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 404886080E2F840300CF7658 /* sample4.cc in Sources */,
- 404886090E2F840300CF7658 /* sample4_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 404885F10E2F833400CF7658 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 404886140E2F849100CF7658 /* sample1.cc in Sources */,
- 4048860C0E2F840E00CF7658 /* sample5_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C9080EC27FBC00A70F4C /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4539C91E0EC2800600A70F4C /* sample7_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C9140EC27FC000A70F4C /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4539C9200EC2801E00A70F4C /* sample8_unittest.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C9500EC282D400A70F4C /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4539C95C0EC2830E00A70F4C /* gtest-param-test2_test.cc in Sources */,
- 4539C95D0EC2830E00A70F4C /* gtest-param-test_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C9960EC283A800A70F4C /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4539C9A10EC283E400A70F4C /* gtest-port_test.cc in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4539C9A50EC2840700A70F4C /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4539C9AF0EC2843000A70F4C /* gtest-linked_ptr_test.cc in Sources */,
+ 40C8498F101A36A60083642A /* sample1.cc in Sources */,
+ 40C84990101A36A60083642A /* sample1_unittest.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2751,1198 +707,81 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 4048845F0E2F799B00CF7658 /* gtest-death-test.cc in Sources */,
- 404884600E2F799B00CF7658 /* gtest-filepath.cc in Sources */,
- 404884620E2F799B00CF7658 /* gtest-port.cc in Sources */,
- 404884630E2F799B00CF7658 /* gtest.cc in Sources */,
- 404884640E2F799B00CF7658 /* gtest_main.cc in Sources */,
- 22A865FD0E70A35700F7AE6E /* gtest-typed-test.cc in Sources */,
- 224A12A00E9EAD8F00BD17FD /* gtest-test-part.cc in Sources */,
+ 40899F3A0FFA70D4000B29AE /* gtest-all.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
- 222ECC900E9EB33A00BEED94 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 222ECC910E9EB33A00BEED94 /* PBXContainerItemProxy */;
- };
- 222ECCA30E9EB47B00BEED94 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 222ECCA40E9EB47B00BEED94 /* PBXContainerItemProxy */;
- };
- 22A866020E70A39900F7AE6E /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 22A866030E70A39900F7AE6E /* PBXContainerItemProxy */;
- };
- 22C44F370E9EB800004F2913 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 222ECC8F0E9EB33A00BEED94 /* gtest_sole_header_test */;
- targetProxy = 22C44F360E9EB800004F2913 /* PBXContainerItemProxy */;
- };
- 22C44F390E9EB808004F2913 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 222ECCA20E9EB47B00BEED94 /* gtest_test_part_test */;
- targetProxy = 22C44F380E9EB808004F2913 /* PBXContainerItemProxy */;
- };
- 3B238C990E81B92000846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238C980E81B92000846E11 /* PBXContainerItemProxy */;
- };
- 3B238D530E82855F00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238D540E82855F00846E11 /* PBXContainerItemProxy */;
- };
- 3B238D710E82862D00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238D700E82862D00846E11 /* PBXContainerItemProxy */;
- };
- 3B238D7F0E82869400846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238D7E0E82869400846E11 /* PBXContainerItemProxy */;
- };
- 3B238E100E82887E00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E110E82887E00846E11 /* PBXContainerItemProxy */;
- };
- 3B238E1B0E82888500846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E1C0E82888500846E11 /* PBXContainerItemProxy */;
- };
- 3B238E280E82888800846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E290E82888800846E11 /* PBXContainerItemProxy */;
- };
- 3B238E370E82889000846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E380E82889000846E11 /* PBXContainerItemProxy */;
- };
- 3B238E420E82889500846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E430E82889500846E11 /* PBXContainerItemProxy */;
- };
- 3B238E4F0E82889800846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E500E82889800846E11 /* PBXContainerItemProxy */;
- };
- 3B238E5C0E82889B00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E5D0E82889B00846E11 /* PBXContainerItemProxy */;
- };
- 3B238E7B0E82894300846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E7C0E82894300846E11 /* PBXContainerItemProxy */;
- };
- 3B238E860E82894800846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E870E82894800846E11 /* PBXContainerItemProxy */;
- };
- 3B238E930E82894A00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238E940E82894A00846E11 /* PBXContainerItemProxy */;
- };
- 3B238EA00E82894D00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238EA10E82894D00846E11 /* PBXContainerItemProxy */;
- };
- 3B238EAD0E82894F00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238EAE0E82894F00846E11 /* PBXContainerItemProxy */;
- };
- 3B238EC40E8289C100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238EC50E8289C100846E11 /* PBXContainerItemProxy */;
- };
- 3B238ECF0E8289C300846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238ED00E8289C300846E11 /* PBXContainerItemProxy */;
- };
- 3B238EDC0E8289C700846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238EDD0E8289C700846E11 /* PBXContainerItemProxy */;
- };
- 3B238EE70E8289C900846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238EE80E8289C900846E11 /* PBXContainerItemProxy */;
- };
- 3B238EF40E8289CE00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238EF50E8289CE00846E11 /* PBXContainerItemProxy */;
- };
- 3B238F0B0E828A3800846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238F0C0E828A3800846E11 /* PBXContainerItemProxy */;
- };
- 3B238F160E828A3B00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238F170E828A3B00846E11 /* PBXContainerItemProxy */;
- };
- 3B238F230E828A3D00846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 3B238F240E828A3D00846E11 /* PBXContainerItemProxy */;
- };
- 3B238F630E828B6100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 404885920E2F814C00CF7658 /* sample1_unittest */;
- targetProxy = 3B238F620E828B6100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F650E828B6100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 404885B00E2F82BA00CF7658 /* sample2_unittest */;
- targetProxy = 3B238F640E828B6100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F670E828B6100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 404885D40E2F832A00CF7658 /* sample3_unittest */;
- targetProxy = 3B238F660E828B6100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F690E828B6100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 404885E10E2F833000CF7658 /* sample4_unittest */;
- targetProxy = 3B238F680E828B6100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F6B0E828B6100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 404885EE0E2F833400CF7658 /* sample5_unittest */;
- targetProxy = 3B238F6A0E828B6100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F6D0E828B6100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 22A866010E70A39900F7AE6E /* sample6_unittest */;
- targetProxy = 3B238F6C0E828B6100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F6F0E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238C660E81B8B500846E11 /* gtest-death-test_test */;
- targetProxy = 3B238F6E0E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F710E828B7100846E11 /* PBXTargetDependency */ = {
+ 40899F9D0FFA740F000B29AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 3B238D520E82855F00846E11 /* gtest-filepath_test */;
- targetProxy = 3B238F700E828B7100846E11 /* PBXContainerItemProxy */;
+ target = 40899F420FFA7184000B29AE /* gtest_unittest-framework */;
+ targetProxy = 40899F9C0FFA740F000B29AE /* PBXContainerItemProxy */;
};
- 3B238F730E828B7100846E11 /* PBXTargetDependency */ = {
+ 4089A0980FFAD34A000B29AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 3B238D690E8285DA00846E11 /* gtest-message_test */;
- targetProxy = 3B238F720E828B7100846E11 /* PBXContainerItemProxy */;
+ target = 4089A0120FFACEFC000B29AE /* sample1_unittest-framework */;
+ targetProxy = 4089A0970FFAD34A000B29AE /* PBXContainerItemProxy */;
};
- 3B238F750E828B7100846E11 /* PBXTargetDependency */ = {
+ 408BEC101046CFE900DEF522 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 3B238D790E82868F00846E11 /* gtest-options_test */;
- targetProxy = 3B238F740E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F790E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E0F0E82887E00846E11 /* gtest-typed-test_test */;
- targetProxy = 3B238F780E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F810E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E410E82889500846E11 /* gtest_environment_test */;
- targetProxy = 3B238F800E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F870E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E7A0E82894300846E11 /* gtest_main_unittest */;
- targetProxy = 3B238F860E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F8B0E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E920E82894A00846E11 /* gtest_no_test_unittest */;
- targetProxy = 3B238F8A0E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F8F0E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238EAC0E82894F00846E11 /* gtest_pred_impl_unittest */;
- targetProxy = 3B238F8E0E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F910E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238EC30E8289C100846E11 /* gtest_prod_test */;
- targetProxy = 3B238F900E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F930E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238ECE0E8289C300846E11 /* gtest_repeat_test */;
- targetProxy = 3B238F920E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F950E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238EDB0E8289C700846E11 /* gtest_stress_test */;
- targetProxy = 3B238F940E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 3B238F990E828B7100846E11 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238EF30E8289CE00846E11 /* gtest_unittest */;
- targetProxy = 3B238F980E828B7100846E11 /* PBXContainerItemProxy */;
- };
- 404885A80E2F824900CF7658 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 404885A70E2F824900CF7658 /* PBXContainerItemProxy */;
- };
- 404885B10E2F82BA00CF7658 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 404885B20E2F82BA00CF7658 /* PBXContainerItemProxy */;
- };
- 404885D50E2F832A00CF7658 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 404885D60E2F832A00CF7658 /* PBXContainerItemProxy */;
- };
- 404885E20E2F833000CF7658 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 404885E30E2F833000CF7658 /* PBXContainerItemProxy */;
- };
- 404885EF0E2F833400CF7658 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 404885F00E2F833400CF7658 /* PBXContainerItemProxy */;
- };
- 40538A0B0ED71AF200AF209A /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 408454310E96D39000AC66C2 /* Setup Python */;
- targetProxy = 40538A0C0ED71AF200AF209A /* PBXContainerItemProxy */;
- };
- 40538A150ED71B1900AF209A /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238F0A0E828A3800846E11 /* gtest_xml_outfile1_test_ */;
- targetProxy = 40538A140ED71B1900AF209A /* PBXContainerItemProxy */;
- };
- 40538A170ED71B1B00AF209A /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238F150E828A3B00846E11 /* gtest_xml_outfile2_test_ */;
- targetProxy = 40538A160ED71B1B00AF209A /* PBXContainerItemProxy */;
- };
- 40538A450ED71D2200AF209A /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 40538A0A0ED71AF200AF209A /* gtest_xml_outfiles_test */;
- targetProxy = 40538A440ED71D2200AF209A /* PBXContainerItemProxy */;
- };
- 4084546D0E96D70C00AC66C2 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 408454310E96D39000AC66C2 /* Setup Python */;
- targetProxy = 4084546C0E96D70C00AC66C2 /* PBXContainerItemProxy */;
- };
- 409A76540ED7393100E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 408454310E96D39000AC66C2 /* Setup Python */;
- targetProxy = 409A76530ED7393100E08B81 /* PBXContainerItemProxy */;
- };
- 409A76580ED7393800E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 408454310E96D39000AC66C2 /* Setup Python */;
- targetProxy = 409A76570ED7393800E08B81 /* PBXContainerItemProxy */;
- };
- 409A765C0ED7393D00E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 408454310E96D39000AC66C2 /* Setup Python */;
- targetProxy = 409A765B0ED7393D00E08B81 /* PBXContainerItemProxy */;
- };
- 409A76600ED7394200E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 408454310E96D39000AC66C2 /* Setup Python */;
- targetProxy = 409A765F0ED7394200E08B81 /* PBXContainerItemProxy */;
- };
- 409A76640ED7394500E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 408454310E96D39000AC66C2 /* Setup Python */;
- targetProxy = 409A76630ED7394500E08B81 /* PBXContainerItemProxy */;
- };
- 409A76700ED7395000E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 408454310E96D39000AC66C2 /* Setup Python */;
- targetProxy = 409A766F0ED7395000E08B81 /* PBXContainerItemProxy */;
- };
- 409A76740ED7395400E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 408454310E96D39000AC66C2 /* Setup Python */;
- targetProxy = 409A76730ED7395400E08B81 /* PBXContainerItemProxy */;
- };
- 409A76D00ED73CA300E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E1A0E82888500846E11 /* gtest_break_on_failure_unittest */;
- targetProxy = 409A76CF0ED73CA300E08B81 /* PBXContainerItemProxy */;
- };
- 409A76D20ED73CA300E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E270E82888800846E11 /* gtest_color_test */;
- targetProxy = 409A76D10ED73CA300E08B81 /* PBXContainerItemProxy */;
- };
- 409A76D40ED73CA300E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E360E82889000846E11 /* gtest_env_var_test */;
- targetProxy = 409A76D30ED73CA300E08B81 /* PBXContainerItemProxy */;
- };
- 409A76D60ED73CA300E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E4E0E82889800846E11 /* gtest_filter_unittest */;
- targetProxy = 409A76D50ED73CA300E08B81 /* PBXContainerItemProxy */;
- };
- 409A76D80ED73CA300E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E5B0E82889B00846E11 /* gtest_list_tests_unittest */;
- targetProxy = 409A76D70ED73CA300E08B81 /* PBXContainerItemProxy */;
- };
- 409A76DA0ED73CA300E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238E9F0E82894D00846E11 /* gtest_output_test */;
- targetProxy = 409A76D90ED73CA300E08B81 /* PBXContainerItemProxy */;
- };
- 409A76DC0ED73CA300E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238F220E828A3D00846E11 /* gtest_xml_output_unittest */;
- targetProxy = 409A76DB0ED73CA300E08B81 /* PBXContainerItemProxy */;
- };
- 409A76DE0ED73CA300E08B81 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 3B238EE60E8289C900846E11 /* gtest_uninitialized_test */;
- targetProxy = 409A76DD0ED73CA300E08B81 /* PBXContainerItemProxy */;
+ target = 40C848F9101A209C0083642A /* gtest-static */;
+ targetProxy = 408BEC0F1046CFE900DEF522 /* PBXContainerItemProxy */;
};
40C44AE60E379922008FCC51 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 40C44ADC0E3798F4008FCC51 /* Version Info */;
targetProxy = 40C44AE50E379922008FCC51 /* PBXContainerItemProxy */;
};
- 4539C9060EC27FBC00A70F4C /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 4539C9070EC27FBC00A70F4C /* PBXContainerItemProxy */;
- };
- 4539C9120EC27FC000A70F4C /* PBXTargetDependency */ = {
+ 40C8497B101A36850083642A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 4539C9130EC27FC000A70F4C /* PBXContainerItemProxy */;
+ target = 40C848F9101A209C0083642A /* gtest-static */;
+ targetProxy = 40C8497C101A36850083642A /* PBXContainerItemProxy */;
};
- 4539C94A0EC2823500A70F4C /* PBXTargetDependency */ = {
+ 40C8497D101A36850083642A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 4539C9110EC27FC000A70F4C /* sample8_unittest */;
- targetProxy = 4539C9490EC2823500A70F4C /* PBXContainerItemProxy */;
+ target = 40C8490A101A217E0083642A /* gtest_main-static */;
+ targetProxy = 40C8497E101A36850083642A /* PBXContainerItemProxy */;
};
- 4539C94C0EC2823500A70F4C /* PBXTargetDependency */ = {
+ 40C8498A101A36A60083642A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 4539C9050EC27FBC00A70F4C /* sample7_unittest */;
- targetProxy = 4539C94B0EC2823500A70F4C /* PBXContainerItemProxy */;
+ target = 40C848F9101A209C0083642A /* gtest-static */;
+ targetProxy = 40C8498B101A36A60083642A /* PBXContainerItemProxy */;
};
- 4539C94E0EC282D400A70F4C /* PBXTargetDependency */ = {
+ 40C8498C101A36A60083642A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 4539C94F0EC282D400A70F4C /* PBXContainerItemProxy */;
+ target = 40C8490A101A217E0083642A /* gtest_main-static */;
+ targetProxy = 40C8498D101A36A60083642A /* PBXContainerItemProxy */;
};
- 4539C95F0EC2833100A70F4C /* PBXTargetDependency */ = {
+ 40C8499C101A36DC0083642A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 4539C94D0EC282D400A70F4C /* gtest-param-test_test */;
- targetProxy = 4539C95E0EC2833100A70F4C /* PBXContainerItemProxy */;
+ target = 40C8490A101A217E0083642A /* gtest_main-static */;
+ targetProxy = 40C8499B101A36DC0083642A /* PBXContainerItemProxy */;
};
- 4539C9940EC283A800A70F4C /* PBXTargetDependency */ = {
+ 40C8499E101A36E50083642A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 4539C9950EC283A800A70F4C /* PBXContainerItemProxy */;
+ target = 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */;
+ targetProxy = 40C8499D101A36E50083642A /* PBXContainerItemProxy */;
};
- 4539C9A30EC2840700A70F4C /* PBXTargetDependency */ = {
+ 40C849A0101A36F10083642A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 8D07F2BC0486CC7A007CD1D0 /* gtest */;
- targetProxy = 4539C9A40EC2840700A70F4C /* PBXContainerItemProxy */;
+ target = 8D07F2BC0486CC7A007CD1D0 /* gtest-framework */;
+ targetProxy = 40C8499F101A36F10083642A /* PBXContainerItemProxy */;
};
- 4539C9B10EC284C300A70F4C /* PBXTargetDependency */ = {
+ 40C849F7101A43440083642A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 4539C9A20EC2840700A70F4C /* gtest-linked_ptr_test */;
- targetProxy = 4539C9B00EC284C300A70F4C /* PBXContainerItemProxy */;
+ target = 40C8497A101A36850083642A /* gtest_unittest-static */;
+ targetProxy = 40C849F6101A43440083642A /* PBXContainerItemProxy */;
};
- 4539C9B30EC284C300A70F4C /* PBXTargetDependency */ = {
+ 40C849F9101A43490083642A /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 4539C9930EC283A800A70F4C /* gtest-port_test */;
- targetProxy = 4539C9B20EC284C300A70F4C /* PBXContainerItemProxy */;
+ target = 40C84989101A36A60083642A /* sample1_unittest-static */;
+ targetProxy = 40C849F8101A43490083642A /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
- 222ECC970E9EB33A00BEED94 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 222ECC980E9EB33A00BEED94 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 222ECCAA0E9EB47B00BEED94 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 222ECCAB0E9EB47B00BEED94 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 22A8660A0E70A39900F7AE6E /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 22A8660B0E70A39900F7AE6E /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238C690E81B8B500846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238C6A0E81B8B500846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238D5A0E82855F00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238D5B0E82855F00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238D6C0E8285DA00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238D6D0E8285DA00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238D7C0E82869000846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238D7D0E82869000846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E160E82887E00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E170E82887E00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E210E82888500846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E220E82888500846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E2E0E82888800846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E2F0E82888800846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E3D0E82889000846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E3E0E82889000846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E480E82889500846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E490E82889500846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E550E82889800846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E560E82889800846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E620E82889B00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E630E82889B00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E810E82894300846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E820E82894300846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E8C0E82894800846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E8D0E82894800846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238E990E82894A00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238E9A0E82894A00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238EA60E82894D00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238EA70E82894D00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238EB30E82894F00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238EB40E82894F00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238ECA0E8289C100846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238ECB0E8289C100846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238ED50E8289C300846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238ED60E8289C300846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238EE20E8289C700846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238EE30E8289C700846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238EED0E8289C900846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238EEE0E8289C900846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238EFA0E8289CE00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238EFB0E8289CE00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238F110E828A3800846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238F120E828A3800846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238F1C0E828A3B00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238F1D0E828A3B00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 3B238F290E828A3D00846E11 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 3B238F2A0E828A3D00846E11 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 409A75E10ED7380300E08B81 /* InternalPythonTestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
3B238F600E828B5400846E11 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -3964,178 +803,33 @@
};
name = Release;
};
- 404885950E2F814C00CF7658 /* Debug */ = {
+ 40899F450FFA7185000B29AE /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ HEADER_SEARCH_PATHS = ../;
+ PRODUCT_NAME = "gtest_unittest-framework";
};
name = Debug;
};
- 404885960E2F814C00CF7658 /* Release */ = {
+ 40899F460FFA7185000B29AE /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ HEADER_SEARCH_PATHS = ../;
+ PRODUCT_NAME = "gtest_unittest-framework";
};
name = Release;
};
- 404885B90E2F82BA00CF7658 /* Debug */ = {
+ 4089A0150FFACEFD000B29AE /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = "sample1_unittest-framework";
};
name = Debug;
};
- 404885BA0E2F82BA00CF7658 /* Release */ = {
+ 4089A0160FFACEFD000B29AE /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 404885DD0E2F832A00CF7658 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 404885DE0E2F832A00CF7658 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 404885EA0E2F833000CF7658 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 404885EB0E2F833000CF7658 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 404885F70E2F833400CF7658 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 404885F80E2F833400CF7658 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 40538A120ED71AF200AF209A /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- PRODUCT_NAME = gtest_output_test;
- };
- name = Debug;
- };
- 40538A130ED71AF200AF209A /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- GCC_ENABLE_FIX_AND_CONTINUE = NO;
- PRODUCT_NAME = gtest_output_test;
- ZERO_LINK = NO;
- };
- name = Release;
- };
- 408454320E96D39000AC66C2 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Debug;
- };
- 408454330E96D39000AC66C2 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- PRODUCT_NAME = "$(TARGET_NAME)";
+ PRODUCT_NAME = "sample1_unittest-framework";
};
name = Release;
};
@@ -4155,143 +849,85 @@
};
name = Release;
};
- 4539C90D0EC27FBC00A70F4C /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Debug;
- };
- 4539C90E0EC27FBC00A70F4C /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
- buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
- };
- name = Release;
- };
- 4539C9190EC27FC000A70F4C /* Debug */ = {
+ 40C848FB101A209D0083642A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
+ baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
+ GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ HEADER_SEARCH_PATHS = (
+ ../,
+ ../include/,
);
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = gtest;
};
name = Debug;
};
- 4539C91A0EC27FC000A70F4C /* Release */ = {
+ 40C848FC101A209D0083642A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B23903C0E830EA800846E11 /* TestTarget.xcconfig */;
+ baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
+ GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ HEADER_SEARCH_PATHS = (
+ ../,
+ ../include/,
);
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = gtest;
};
name = Release;
};
- 4539C9560EC282D400A70F4C /* Debug */ = {
+ 40C8490E101A217F0083642A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
+ baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
+ HEADER_SEARCH_PATHS = (
+ ../,
+ ../include/,
);
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = gtest_main;
};
name = Debug;
};
- 4539C9570EC282D400A70F4C /* Release */ = {
+ 40C8490F101A217F0083642A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
+ baseConfigurationReference = 40899FB30FFA7567000B29AE /* StaticLibraryTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
+ HEADER_SEARCH_PATHS = (
+ ../,
+ ../include/,
);
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = gtest_main;
};
name = Release;
};
- 4539C99C0EC283A800A70F4C /* Debug */ = {
+ 40C84985101A36850083642A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ HEADER_SEARCH_PATHS = ../;
+ PRODUCT_NAME = gtest_unittest;
};
name = Debug;
};
- 4539C99D0EC283A800A70F4C /* Release */ = {
+ 40C84986101A36850083642A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ HEADER_SEARCH_PATHS = ../;
+ PRODUCT_NAME = gtest_unittest;
};
name = Release;
};
- 4539C9AA0EC2840700A70F4C /* Debug */ = {
+ 40C84995101A36A60083642A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = "sample1_unittest-static";
};
name = Debug;
};
- 4539C9AB0EC2840700A70F4C /* Release */ = {
+ 40C84996101A36A60083642A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 3B238D190E82837D00846E11 /* InternalTestTarget.xcconfig */;
buildSettings = {
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Debug\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/build/Debug\"";
+ PRODUCT_NAME = "sample1_unittest-static";
};
name = Release;
};
@@ -4302,11 +938,11 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
HEADER_SEARCH_PATHS = (
- ../include/,
../,
+ ../include/,
);
INFOPLIST_FILE = Resources/Info.plist;
- INFOPLIST_PREFIX_HEADER = "$(DERIVED_FILE_DIR)/Version.h";
+ INFOPLIST_PREFIX_HEADER = "$(PROJECT_TEMP_DIR)/Version.h";
INFOPLIST_PREPROCESS = YES;
PRODUCT_NAME = gtest;
VERSIONING_SYSTEM = "apple-generic";
@@ -4320,11 +956,11 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
HEADER_SEARCH_PATHS = (
- ../include/,
../,
+ ../include/,
);
INFOPLIST_FILE = Resources/Info.plist;
- INFOPLIST_PREFIX_HEADER = "$(DERIVED_FILE_DIR)/Version.h";
+ INFOPLIST_PREFIX_HEADER = "$(PROJECT_TEMP_DIR)/Version.h";
INFOPLIST_PREPROCESS = YES;
PRODUCT_NAME = gtest;
VERSIONING_SYSTEM = "apple-generic";
@@ -4348,249 +984,6 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- 222ECC960E9EB33A00BEED94 /* Build configuration list for PBXNativeTarget "gtest_sole_header_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 222ECC970E9EB33A00BEED94 /* Debug */,
- 222ECC980E9EB33A00BEED94 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 222ECCA90E9EB47B00BEED94 /* Build configuration list for PBXNativeTarget "gtest_test_part_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 222ECCAA0E9EB47B00BEED94 /* Debug */,
- 222ECCAB0E9EB47B00BEED94 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 22A866090E70A39900F7AE6E /* Build configuration list for PBXNativeTarget "sample6_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 22A8660A0E70A39900F7AE6E /* Debug */,
- 22A8660B0E70A39900F7AE6E /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238CD20E81B94000846E11 /* Build configuration list for PBXNativeTarget "gtest-death-test_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238C690E81B8B500846E11 /* Debug */,
- 3B238C6A0E81B8B500846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238D590E82855F00846E11 /* Build configuration list for PBXNativeTarget "gtest-filepath_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238D5A0E82855F00846E11 /* Debug */,
- 3B238D5B0E82855F00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238D6F0E82862800846E11 /* Build configuration list for PBXNativeTarget "gtest-message_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238D6C0E8285DA00846E11 /* Debug */,
- 3B238D6D0E8285DA00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238D9D0E8286ED00846E11 /* Build configuration list for PBXNativeTarget "gtest-options_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238D7C0E82869000846E11 /* Debug */,
- 3B238D7D0E82869000846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E150E82887E00846E11 /* Build configuration list for PBXNativeTarget "gtest-typed-test_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E160E82887E00846E11 /* Debug */,
- 3B238E170E82887E00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E200E82888500846E11 /* Build configuration list for PBXNativeTarget "gtest_break_on_failure_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E210E82888500846E11 /* Debug */,
- 3B238E220E82888500846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E2D0E82888800846E11 /* Build configuration list for PBXNativeTarget "gtest_color_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E2E0E82888800846E11 /* Debug */,
- 3B238E2F0E82888800846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E3C0E82889000846E11 /* Build configuration list for PBXNativeTarget "gtest_env_var_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E3D0E82889000846E11 /* Debug */,
- 3B238E3E0E82889000846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E470E82889500846E11 /* Build configuration list for PBXNativeTarget "gtest_environment_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E480E82889500846E11 /* Debug */,
- 3B238E490E82889500846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E540E82889800846E11 /* Build configuration list for PBXNativeTarget "gtest_filter_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E550E82889800846E11 /* Debug */,
- 3B238E560E82889800846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E610E82889B00846E11 /* Build configuration list for PBXNativeTarget "gtest_list_tests_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E620E82889B00846E11 /* Debug */,
- 3B238E630E82889B00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E800E82894300846E11 /* Build configuration list for PBXNativeTarget "gtest_main_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E810E82894300846E11 /* Debug */,
- 3B238E820E82894300846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E8B0E82894800846E11 /* Build configuration list for PBXNativeTarget "gtest_nc" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E8C0E82894800846E11 /* Debug */,
- 3B238E8D0E82894800846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238E980E82894A00846E11 /* Build configuration list for PBXNativeTarget "gtest_no_test_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238E990E82894A00846E11 /* Debug */,
- 3B238E9A0E82894A00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238EA50E82894D00846E11 /* Build configuration list for PBXNativeTarget "gtest_output_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238EA60E82894D00846E11 /* Debug */,
- 3B238EA70E82894D00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238EB20E82894F00846E11 /* Build configuration list for PBXNativeTarget "gtest_pred_impl_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238EB30E82894F00846E11 /* Debug */,
- 3B238EB40E82894F00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238EC90E8289C100846E11 /* Build configuration list for PBXNativeTarget "gtest_prod_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238ECA0E8289C100846E11 /* Debug */,
- 3B238ECB0E8289C100846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238ED40E8289C300846E11 /* Build configuration list for PBXNativeTarget "gtest_repeat_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238ED50E8289C300846E11 /* Debug */,
- 3B238ED60E8289C300846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238EE10E8289C700846E11 /* Build configuration list for PBXNativeTarget "gtest_stress_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238EE20E8289C700846E11 /* Debug */,
- 3B238EE30E8289C700846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238EEC0E8289C900846E11 /* Build configuration list for PBXNativeTarget "gtest_uninitialized_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238EED0E8289C900846E11 /* Debug */,
- 3B238EEE0E8289C900846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238EF90E8289CE00846E11 /* Build configuration list for PBXNativeTarget "gtest_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238EFA0E8289CE00846E11 /* Debug */,
- 3B238EFB0E8289CE00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238F100E828A3800846E11 /* Build configuration list for PBXNativeTarget "gtest_xml_outfile1_test_" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238F110E828A3800846E11 /* Debug */,
- 3B238F120E828A3800846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238F1B0E828A3B00846E11 /* Build configuration list for PBXNativeTarget "gtest_xml_outfile2_test_" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238F1C0E828A3B00846E11 /* Debug */,
- 3B238F1D0E828A3B00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 3B238F280E828A3D00846E11 /* Build configuration list for PBXNativeTarget "gtest_xml_output_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 3B238F290E828A3D00846E11 /* Debug */,
- 3B238F2A0E828A3D00846E11 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
3B238FA30E828BB600846E11 /* Build configuration list for PBXAggregateTarget "Check" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -4600,65 +993,20 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 4048859E0E2F818900CF7658 /* Build configuration list for PBXNativeTarget "sample1_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 404885950E2F814C00CF7658 /* Debug */,
- 404885960E2F814C00CF7658 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 404885B80E2F82BA00CF7658 /* Build configuration list for PBXNativeTarget "sample2_unittest" */ = {
+ 40899F4A0FFA71BC000B29AE /* Build configuration list for PBXNativeTarget "gtest_unittest-framework" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 404885B90E2F82BA00CF7658 /* Debug */,
- 404885BA0E2F82BA00CF7658 /* Release */,
+ 40899F450FFA7185000B29AE /* Debug */,
+ 40899F460FFA7185000B29AE /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 404885DC0E2F832A00CF7658 /* Build configuration list for PBXNativeTarget "sample3_unittest" */ = {
+ 4089A0240FFACF01000B29AE /* Build configuration list for PBXNativeTarget "sample1_unittest-framework" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 404885DD0E2F832A00CF7658 /* Debug */,
- 404885DE0E2F832A00CF7658 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 404885E90E2F833000CF7658 /* Build configuration list for PBXNativeTarget "sample4_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 404885EA0E2F833000CF7658 /* Debug */,
- 404885EB0E2F833000CF7658 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 404885F60E2F833400CF7658 /* Build configuration list for PBXNativeTarget "sample5_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 404885F70E2F833400CF7658 /* Debug */,
- 404885F80E2F833400CF7658 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 40538A110ED71AF200AF209A /* Build configuration list for PBXAggregateTarget "gtest_xml_outfiles_test" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 40538A120ED71AF200AF209A /* Debug */,
- 40538A130ED71AF200AF209A /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 408454340E96D3D400AC66C2 /* Build configuration list for PBXAggregateTarget "Setup Python" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 408454320E96D39000AC66C2 /* Debug */,
- 408454330E96D39000AC66C2 /* Release */,
+ 4089A0150FFACEFD000B29AE /* Debug */,
+ 4089A0160FFACEFD000B29AE /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
@@ -4672,52 +1020,43 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 4539C90C0EC27FBC00A70F4C /* Build configuration list for PBXNativeTarget "sample7_unittest" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 4539C90D0EC27FBC00A70F4C /* Debug */,
- 4539C90E0EC27FBC00A70F4C /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 4539C9180EC27FC000A70F4C /* Build configuration list for PBXNativeTarget "sample8_unittest" */ = {
+ 40C84902101A212E0083642A /* Build configuration list for PBXNativeTarget "gtest-static" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 4539C9190EC27FC000A70F4C /* Debug */,
- 4539C91A0EC27FC000A70F4C /* Release */,
+ 40C848FB101A209D0083642A /* Debug */,
+ 40C848FC101A209D0083642A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 4539C9550EC282D400A70F4C /* Build configuration list for PBXNativeTarget "gtest-param-test_test" */ = {
+ 40C84912101A21D20083642A /* Build configuration list for PBXNativeTarget "gtest_main-static" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 4539C9560EC282D400A70F4C /* Debug */,
- 4539C9570EC282D400A70F4C /* Release */,
+ 40C8490E101A217F0083642A /* Debug */,
+ 40C8490F101A217F0083642A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 4539C99B0EC283A800A70F4C /* Build configuration list for PBXNativeTarget "gtest-port_test" */ = {
+ 40C84984101A36850083642A /* Build configuration list for PBXNativeTarget "gtest_unittest-static" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 4539C99C0EC283A800A70F4C /* Debug */,
- 4539C99D0EC283A800A70F4C /* Release */,
+ 40C84985101A36850083642A /* Debug */,
+ 40C84986101A36850083642A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 4539C9A90EC2840700A70F4C /* Build configuration list for PBXNativeTarget "gtest-linked_ptr_test" */ = {
+ 40C84994101A36A60083642A /* Build configuration list for PBXNativeTarget "sample1_unittest-static" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 4539C9AA0EC2840700A70F4C /* Debug */,
- 4539C9AB0EC2840700A70F4C /* Release */,
+ 40C84995101A36A60083642A /* Debug */,
+ 40C84996101A36A60083642A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "gtest" */ = {
+ 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "gtest-framework" */ = {
isa = XCConfigurationList;
buildConfigurations = (
4FADC24308B4156D00ABE55E /* Debug */,