Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
3d704217
Commit
3d704217
authored
Nov 20, 2008
by
vladlosev
Browse files
Value-parameterized tests and many bugfixes
parent
b6a296d0
Changes
36
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
2014 additions
and
62 deletions
+2014
-62
src/gtest.cc
src/gtest.cc
+78
-7
test/gtest-filepath_test.cc
test/gtest-filepath_test.cc
+0
-6
test/gtest-linked_ptr_test.cc
test/gtest-linked_ptr_test.cc
+154
-0
test/gtest-param-test2_test.cc
test/gtest-param-test2_test.cc
+65
-0
test/gtest-param-test_test.cc
test/gtest-param-test_test.cc
+796
-0
test/gtest-param-test_test.h
test/gtest-param-test_test.h
+55
-0
test/gtest-port_test.cc
test/gtest-port_test.cc
+156
-0
test/gtest-typed-test_test.cc
test/gtest-typed-test_test.cc
+12
-0
test/gtest_filter_unittest.py
test/gtest_filter_unittest.py
+89
-40
test/gtest_filter_unittest_.cc
test/gtest_filter_unittest_.cc
+18
-4
test/gtest_repeat_test.cc
test/gtest_repeat_test.cc
+30
-0
test/gtest_unittest.cc
test/gtest_unittest.cc
+17
-0
xcode/Config/InternalTestTarget.xcconfig
xcode/Config/InternalTestTarget.xcconfig
+1
-1
xcode/Config/TestTarget.xcconfig
xcode/Config/TestTarget.xcconfig
+1
-0
xcode/Scripts/runtests.sh
xcode/Scripts/runtests.sh
+5
-0
xcode/gtest.xcodeproj/project.pbxproj
xcode/gtest.xcodeproj/project.pbxproj
+537
-4
No files found.
src/gtest.cc
View file @
3d704217
...
@@ -277,6 +277,9 @@ void AssertHelper::operator=(const Message& message) const {
...
@@ -277,6 +277,9 @@ void AssertHelper::operator=(const Message& message) const {
);
// NOLINT
);
// NOLINT
}
}
// Mutex for linked pointers.
Mutex
g_linked_ptr_mutex
(
Mutex
::
NO_CONSTRUCTOR_NEEDED_FOR_STATIC_MUTEX
);
// Application pathname gotten in InitGoogleTest.
// Application pathname gotten in InitGoogleTest.
String
g_executable_path
;
String
g_executable_path
;
...
@@ -830,7 +833,7 @@ static void StreamWideCharsToMessage(const wchar_t* wstr, size_t len,
...
@@ -830,7 +833,7 @@ static void StreamWideCharsToMessage(const wchar_t* wstr, size_t len,
// several other places).
// several other places).
for
(
size_t
i
=
0
;
i
!=
len
;
)
{
// NOLINT
for
(
size_t
i
=
0
;
i
!=
len
;
)
{
// NOLINT
if
(
wstr
[
i
]
!=
L'\0'
)
{
if
(
wstr
[
i
]
!=
L'\0'
)
{
*
msg
<<
WideStringToUtf8
(
wstr
+
i
,
len
-
i
);
*
msg
<<
WideStringToUtf8
(
wstr
+
i
,
static_cast
<
int
>
(
len
-
i
)
)
;
while
(
i
!=
len
&&
wstr
[
i
]
!=
L'\0'
)
while
(
i
!=
len
&&
wstr
[
i
]
!=
L'\0'
)
i
++
;
i
++
;
}
else
{
}
else
{
...
@@ -1453,7 +1456,7 @@ inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first,
...
@@ -1453,7 +1456,7 @@ inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first,
// will be encoded as individual Unicode characters from Basic Normal Plane.
// will be encoded as individual Unicode characters from Basic Normal Plane.
String
WideStringToUtf8
(
const
wchar_t
*
str
,
int
num_chars
)
{
String
WideStringToUtf8
(
const
wchar_t
*
str
,
int
num_chars
)
{
if
(
num_chars
==
-
1
)
if
(
num_chars
==
-
1
)
num_chars
=
wcslen
(
str
);
num_chars
=
static_cast
<
int
>
(
wcslen
(
str
)
)
;
StrStream
stream
;
StrStream
stream
;
for
(
int
i
=
0
;
i
<
num_chars
;
++
i
)
{
for
(
int
i
=
0
;
i
<
num_chars
;
++
i
)
{
...
@@ -2080,6 +2083,25 @@ TestInfo* MakeAndRegisterTestInfo(
...
@@ -2080,6 +2083,25 @@ TestInfo* MakeAndRegisterTestInfo(
return
test_info
;
return
test_info
;
}
}
#ifdef GTEST_HAS_PARAM_TEST
void
ReportInvalidTestCaseType
(
const
char
*
test_case_name
,
const
char
*
file
,
int
line
)
{
Message
errors
;
errors
<<
"Attempted redefinition of test case "
<<
test_case_name
<<
".
\n
"
<<
"All tests in the same test case must use the same test fixture
\n
"
<<
"class. However, in test case "
<<
test_case_name
<<
", you tried
\n
"
<<
"to define a test using a fixture class different from the one
\n
"
<<
"used earlier. This can happen if the two fixture classes are
\n
"
<<
"from different namespaces and have the same name. You should
\n
"
<<
"probably rename one of the classes to put the tests into different
\n
"
<<
"test cases."
;
fprintf
(
stderr
,
"%s %s"
,
FormatFileLocation
(
file
,
line
).
c_str
(),
errors
.
GetString
().
c_str
());
}
#endif // GTEST_HAS_PARAM_TEST
}
// namespace internal
}
// namespace internal
// Returns the test case name.
// Returns the test case name.
...
@@ -2156,6 +2178,18 @@ TestInfo * TestCase::GetTestInfo(const char* test_name) {
...
@@ -2156,6 +2178,18 @@ TestInfo * TestCase::GetTestInfo(const char* test_name) {
namespace
internal
{
namespace
internal
{
// This method expands all parameterized tests registered with macros TEST_P
// and INSTANTIATE_TEST_CASE_P into regular tests and registers those.
// This will be done just once during the program runtime.
void
UnitTestImpl
::
RegisterParameterizedTests
()
{
#ifdef GTEST_HAS_PARAM_TEST
if
(
!
parameterized_tests_registered_
)
{
parameterized_test_registry_
.
RegisterTests
();
parameterized_tests_registered_
=
true
;
}
#endif
}
// Creates the test object, runs it, records its result, and then
// Creates the test object, runs it, records its result, and then
// deletes it.
// deletes it.
void
TestInfoImpl
::
Run
()
{
void
TestInfoImpl
::
Run
()
{
...
@@ -3269,6 +3303,16 @@ const TestInfo* UnitTest::current_test_info() const {
...
@@ -3269,6 +3303,16 @@ const TestInfo* UnitTest::current_test_info() const {
return
impl_
->
current_test_info
();
return
impl_
->
current_test_info
();
}
}
#ifdef GTEST_HAS_PARAM_TEST
// Returns ParameterizedTestCaseRegistry object used to keep track of
// value-parameterized tests and instantiate and register them.
// L < mutex_
internal
::
ParameterizedTestCaseRegistry
&
UnitTest
::
parameterized_test_registry
()
{
return
impl_
->
parameterized_test_registry
();
}
#endif // GTEST_HAS_PARAM_TEST
// Creates an empty UnitTest.
// Creates an empty UnitTest.
UnitTest
::
UnitTest
()
{
UnitTest
::
UnitTest
()
{
impl_
=
new
internal
::
UnitTestImpl
(
this
);
impl_
=
new
internal
::
UnitTestImpl
(
this
);
...
@@ -3314,6 +3358,10 @@ UnitTestImpl::UnitTestImpl(UnitTest* parent)
...
@@ -3314,6 +3358,10 @@ UnitTestImpl::UnitTestImpl(UnitTest* parent)
per_thread_test_part_result_reporter_
(
per_thread_test_part_result_reporter_
(
&
default_per_thread_test_part_result_reporter_
),
&
default_per_thread_test_part_result_reporter_
),
test_cases_
(),
test_cases_
(),
#ifdef GTEST_HAS_PARAM_TEST
parameterized_test_registry_
(),
parameterized_tests_registered_
(
false
),
#endif // GTEST_HAS_PARAM_TEST
last_death_test_case_
(
NULL
),
last_death_test_case_
(
NULL
),
current_test_case_
(
NULL
),
current_test_case_
(
NULL
),
current_test_info_
(
NULL
),
current_test_info_
(
NULL
),
...
@@ -3415,6 +3463,10 @@ static void TearDownEnvironment(Environment* env) { env->TearDown(); }
...
@@ -3415,6 +3463,10 @@ static void TearDownEnvironment(Environment* env) { env->TearDown(); }
// considered to be failed, but the rest of the tests will still be
// 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
// run. (We disable exceptions on Linux and Mac OS X, so the issue
// doesn't apply there.)
// doesn't apply there.)
// When parameterized tests are enabled, it explands 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.
int
UnitTestImpl
::
RunAllTests
()
{
int
UnitTestImpl
::
RunAllTests
()
{
// Makes sure InitGoogleTest() was called.
// Makes sure InitGoogleTest() was called.
if
(
!
GTestIsInitialized
())
{
if
(
!
GTestIsInitialized
())
{
...
@@ -3424,6 +3476,8 @@ int UnitTestImpl::RunAllTests() {
...
@@ -3424,6 +3476,8 @@ int UnitTestImpl::RunAllTests() {
return
1
;
return
1
;
}
}
RegisterParameterizedTests
();
// Lists all the tests and exits if the --gtest_list_tests
// Lists all the tests and exits if the --gtest_list_tests
// flag was specified.
// flag was specified.
if
(
GTEST_FLAG
(
list_tests
))
{
if
(
GTEST_FLAG
(
list_tests
))
{
...
@@ -3639,7 +3693,7 @@ internal::TestResult* UnitTestImpl::current_test_result() {
...
@@ -3639,7 +3693,7 @@ internal::TestResult* UnitTestImpl::current_test_result() {
}
}
// TestInfoImpl constructor. The new instance assumes ownership of the test
// TestInfoImpl constructor. The new instance assumes ownership of the test
// factory o
p
bject.
// factory object.
TestInfoImpl
::
TestInfoImpl
(
TestInfo
*
parent
,
TestInfoImpl
::
TestInfoImpl
(
TestInfo
*
parent
,
const
char
*
test_case_name
,
const
char
*
test_case_name
,
const
char
*
name
,
const
char
*
name
,
...
@@ -3663,10 +3717,6 @@ TestInfoImpl::~TestInfoImpl() {
...
@@ -3663,10 +3717,6 @@ TestInfoImpl::~TestInfoImpl() {
delete
factory_
;
delete
factory_
;
}
}
}
// namespace internal
namespace
internal
{
// Parses a string as a command line flag. The string should have
// Parses a string as a command line flag. The string should have
// the format "--flag=value". When def_optional is true, the "=value"
// the format "--flag=value". When def_optional is true, the "=value"
// part can be omitted.
// part can be omitted.
...
@@ -3814,6 +3864,27 @@ void InitGoogleTestImpl(int* argc, CharType** argv) {
...
@@ -3814,6 +3864,27 @@ void InitGoogleTestImpl(int* argc, CharType** argv) {
}
}
}
}
// Returns the current OS stack trace as a String.
//
// The maximum number of stack frames to be included is specified by
// the gtest_stack_trace_depth flag. The skip_count parameter
// specifies the number of top frames to be skipped, which doesn't
// count against the number of frames to be included.
//
// 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
)
{
// We pass skip_count + 1 to skip this wrapper function in addition
// to what the user really wants to skip.
return
unit_test
->
impl
()
->
CurrentOsStackTraceExceptTop
(
skip_count
+
1
);
}
// Returns the number of failed test parts in the given test result object.
int
GetFailedPartCount
(
const
TestResult
*
result
)
{
return
result
->
failed_part_count
();
}
}
// namespace internal
}
// namespace internal
// Initializes Google Test. This must be called before calling
// Initializes Google Test. This must be called before calling
...
...
test/gtest-filepath_test.cc
View file @
3d704217
...
@@ -83,12 +83,6 @@ int _rmdir(const char* path) {
...
@@ -83,12 +83,6 @@ int _rmdir(const char* path) {
return
ret
;
return
ret
;
}
}
#elif defined(GTEST_LINUX_GOOGLE3_MODE)
// Creates a temporary directory and returns its path.
const
char
*
MakeTempDir
()
{
static
char
dir_name
[]
=
"gtest-filepath_test_tmpXXXXXX"
;
return
mkdtemp
(
dir_name
);
}
#endif // _WIN32_WCE
#endif // _WIN32_WCE
#ifndef _WIN32_WCE
#ifndef _WIN32_WCE
...
...
test/gtest-linked_ptr_test.cc
0 → 100644
View file @
3d704217
// Copyright 2003, 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.
//
// Authors: Dan Egnor (egnor@google.com)
// Ported to Windows: Vadim Berman (vadimb@google.com)
#include <gtest/internal/gtest-linked_ptr.h>
#include <stdlib.h>
#include <gtest/gtest.h>
namespace
{
using
testing
::
Message
;
using
testing
::
internal
::
linked_ptr
;
int
num
;
Message
*
history
=
NULL
;
// Class which tracks allocation/deallocation
class
A
{
public:
A
()
:
mynum
(
num
++
)
{
*
history
<<
"A"
<<
mynum
<<
" ctor
\n
"
;
}
virtual
~
A
()
{
*
history
<<
"A"
<<
mynum
<<
" dtor
\n
"
;
}
virtual
void
Use
()
{
*
history
<<
"A"
<<
mynum
<<
" use
\n
"
;
}
protected:
int
mynum
;
};
// Subclass
class
B
:
public
A
{
public:
B
()
{
*
history
<<
"B"
<<
mynum
<<
" ctor
\n
"
;
}
~
B
()
{
*
history
<<
"B"
<<
mynum
<<
" dtor
\n
"
;
}
virtual
void
Use
()
{
*
history
<<
"B"
<<
mynum
<<
" use
\n
"
;
}
};
class
LinkedPtrTest
:
public
testing
::
Test
{
public:
LinkedPtrTest
()
{
num
=
0
;
history
=
new
Message
;
}
virtual
~
LinkedPtrTest
()
{
delete
history
;
history
=
NULL
;
}
};
TEST_F
(
LinkedPtrTest
,
GeneralTest
)
{
{
linked_ptr
<
A
>
a0
,
a1
,
a2
;
a0
=
a0
;
a1
=
a2
;
ASSERT_EQ
(
a0
.
get
(),
static_cast
<
A
*>
(
NULL
));
ASSERT_EQ
(
a1
.
get
(),
static_cast
<
A
*>
(
NULL
));
ASSERT_EQ
(
a2
.
get
(),
static_cast
<
A
*>
(
NULL
));
ASSERT_TRUE
(
a0
==
NULL
);
ASSERT_TRUE
(
a1
==
NULL
);
ASSERT_TRUE
(
a2
==
NULL
);
{
linked_ptr
<
A
>
a3
(
new
A
);
a0
=
a3
;
ASSERT_TRUE
(
a0
==
a3
);
ASSERT_TRUE
(
a0
!=
NULL
);
ASSERT_TRUE
(
a0
.
get
()
==
a3
);
ASSERT_TRUE
(
a0
==
a3
.
get
());
linked_ptr
<
A
>
a4
(
a0
);
a1
=
a4
;
linked_ptr
<
A
>
a5
(
new
A
);
ASSERT_TRUE
(
a5
.
get
()
!=
a3
);
ASSERT_TRUE
(
a5
!=
a3
.
get
());
a2
=
a5
;
linked_ptr
<
B
>
b0
(
new
B
);
linked_ptr
<
A
>
a6
(
b0
);
ASSERT_TRUE
(
b0
==
a6
);
ASSERT_TRUE
(
a6
==
b0
);
ASSERT_TRUE
(
b0
!=
NULL
);
a5
=
b0
;
a5
=
b0
;
a3
->
Use
();
a4
->
Use
();
a5
->
Use
();
a6
->
Use
();
b0
->
Use
();
(
*
b0
).
Use
();
b0
.
get
()
->
Use
();
}
a0
->
Use
();
a1
->
Use
();
a2
->
Use
();
a1
=
a2
;
a2
.
reset
(
new
A
);
a0
.
reset
();
linked_ptr
<
A
>
a7
;
}
ASSERT_STREQ
(
"A0 ctor
\n
"
"A1 ctor
\n
"
"A2 ctor
\n
"
"B2 ctor
\n
"
"A0 use
\n
"
"A0 use
\n
"
"B2 use
\n
"
"B2 use
\n
"
"B2 use
\n
"
"B2 use
\n
"
"B2 use
\n
"
"B2 dtor
\n
"
"A2 dtor
\n
"
"A0 use
\n
"
"A0 use
\n
"
"A1 use
\n
"
"A3 ctor
\n
"
"A0 dtor
\n
"
"A3 dtor
\n
"
"A1 dtor
\n
"
,
history
->
GetString
().
c_str
()
);
}
}
// Unnamed namespace
test/gtest-param-test2_test.cc
0 → 100644
View file @
3d704217
// 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: vladl@google.com (Vlad Losev)
//
// Tests for Google Test itself. This verifies that the basic constructs of
// Google Test work.
#include <gtest/gtest.h>
#include "test/gtest-param-test_test.h"
#ifdef GTEST_HAS_PARAM_TEST
using
::
testing
::
Values
;
using
::
testing
::
internal
::
ParamGenerator
;
// Tests that generators defined in a different translation unit
// are functional. The test using extern_gen is defined
// in gtest-param-test_test.cc.
ParamGenerator
<
int
>
extern_gen
=
Values
(
33
);
// Tests that a parameterized test case can be defined in one translation unit
// and instantiated in another. The test is defined in gtest-param-test_test.cc
// and ExternalInstantiationTest fixture class is defined in
// gtest-param-test_test.h.
INSTANTIATE_TEST_CASE_P
(
MultiplesOf33
,
ExternalInstantiationTest
,
Values
(
33
,
66
));
// Tests that a parameterized test case can be instantiated
// in multiple translation units. Another instantiation is defined
// in gtest-param-test_test.cc and InstantiationInMultipleTranslaionUnitsTest
// fixture is defined in gtest-param-test_test.h
INSTANTIATE_TEST_CASE_P
(
Sequence2
,
InstantiationInMultipleTranslaionUnitsTest
,
Values
(
42
*
3
,
42
*
4
,
42
*
5
));
#endif // GTEST_HAS_PARAM_TEST
test/gtest-param-test_test.cc
0 → 100644
View file @
3d704217
// 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: vladl@google.com (Vlad Losev)
//
// Tests for Google Test itself. This file verifies that the parameter
// generators objects produce correct parameter sequences and that
// Google Test runtime instantiates correct tests from those sequences.
#include <gtest/gtest.h>
#ifdef GTEST_HAS_PARAM_TEST
#include <algorithm>
#include <iostream>
#include <list>
#include <vector>
#ifdef GTEST_HAS_COMBINE
#include <tr1/tuple>
#endif // GTEST_HAS_COMBINE
// To include gtest-internal-inl.h.
#define GTEST_IMPLEMENTATION
#include "src/gtest-internal-inl.h" // for UnitTestOptions
#undef GTEST_IMPLEMENTATION
#include "test/gtest-param-test_test.h"
using
::
std
::
vector
;
using
::
std
::
sort
;
using
::
testing
::
AddGlobalTestEnvironment
;
using
::
testing
::
Bool
;
using
::
testing
::
Message
;
using
::
testing
::
Range
;
using
::
testing
::
TestWithParam
;
using
::
testing
::
Values
;
using
::
testing
::
ValuesIn
;
#ifdef GTEST_HAS_COMBINE
using
::
testing
::
Combine
;
using
::
std
::
tr1
::
get
;
using
::
std
::
tr1
::
make_tuple
;
using
::
std
::
tr1
::
tuple
;
#endif // GTEST_HAS_COMBINE
using
::
testing
::
internal
::
ParamGenerator
;
using
::
testing
::
internal
::
UnitTestOptions
;
// Verifies that a sequence generated by the generator and accessed
// via the iterator object matches the expected one using Google Test
// assertions.
template
<
typename
T
,
size_t
N
>
void
VerifyGenerator
(
const
ParamGenerator
<
T
>&
generator
,
const
T
(
&
expected_values
)[
N
])
{
typename
ParamGenerator
<
T
>::
iterator
it
=
generator
.
begin
();
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
ASSERT_FALSE
(
it
==
generator
.
end
())
<<
"At element "
<<
i
<<
" when accessing via an iterator "
<<
"created with the copy constructor."
<<
std
::
endl
;
EXPECT_EQ
(
expected_values
[
i
],
*
it
)
<<
"At element "
<<
i
<<
" when accessing via an iterator "
<<
"created with the copy constructor."
<<
std
::
endl
;
it
++
;
}
EXPECT_TRUE
(
it
==
generator
.
end
())
<<
"At the presumed end of sequence when accessing via an iterator "
<<
"created with the copy constructor."
<<
std
::
endl
;
// Test the iterator assignment. The following lines verify that
// the sequence accessed via an iterator initialized via the
// assignment operator (as opposed to a copy constructor) matches
// just the same.
it
=
generator
.
begin
();
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
ASSERT_FALSE
(
it
==
generator
.
end
())
<<
"At element "
<<
i
<<
" when accessing via an iterator "
<<
"created with the assignment operator."
<<
std
::
endl
;
EXPECT_EQ
(
expected_values
[
i
],
*
it
)
<<
"At element "
<<
i
<<
" when accessing via an iterator "
<<
"created with the assignment operator."
<<
std
::
endl
;
it
++
;
}
EXPECT_TRUE
(
it
==
generator
.
end
())
<<
"At the presumed end of sequence when accessing via an iterator "
<<
"created with the assignment operator."
<<
std
::
endl
;
}
template
<
typename
T
>
void
VerifyGeneratorIsEmpty
(
const
ParamGenerator
<
T
>&
generator
)
{
typename
ParamGenerator
<
T
>::
iterator
it
=
generator
.
begin
();
EXPECT_TRUE
(
it
==
generator
.
end
());
it
=
generator
.
begin
();
EXPECT_TRUE
(
it
==
generator
.
end
());
}
// Generator tests. They test that each of the provided generator functions
// generates an expected sequence of values. The general test pattern
// instantiates a generator using one of the generator functions,
// checks the sequence produced by the generator using its iterator API,
// and then resets the iterator back to the beginning of the sequence
// and checks the sequence again.
// Tests that iterators produced by generator functions conform to the
// ForwardIterator concept.
TEST
(
IteratorTest
,
ParamIteratorConformsToForwardIteratorConcept
)
{
const
ParamGenerator
<
int
>
gen
=
Range
(
0
,
10
);
ParamGenerator
<
int
>::
iterator
it
=
gen
.
begin
();
// Verifies that iterator initialization works as expected.
ParamGenerator
<
int
>::
iterator
it2
=
it
;
EXPECT_TRUE
(
*
it
==
*
it2
)
<<
"Initialized iterators must point to the "
<<
"element same as its source points to"
;
// Verifies that iterator assignment works as expected.
it
++
;
EXPECT_FALSE
(
*
it
==
*
it2
);
it2
=
it
;
EXPECT_TRUE
(
*
it
==
*
it2
)
<<
"Assigned iterators must point to the "
<<
"element same as its source points to"
;
// Verifies that prefix operator++() returns *this.
EXPECT_EQ
(
&
it
,
&
(
++
it
))
<<
"Result of the prefix operator++ must be "
<<
"refer to the original object"
;
// Verifies that the result of the postfix operator++ points to the value
// pointed to by the original iterator.
int
original_value
=
*
it
;
// Have to compute it outside of macro call to be
// unaffected by the parameter evaluation order.
EXPECT_EQ
(
original_value
,
*
(
it
++
));
// Verifies that prefix and postfix operator++() advance an iterator
// all the same.
it2
=
it
;
it
++
;
++
it2
;
EXPECT_TRUE
(
*
it
==
*
it2
);
}
// Tests that Range() generates the expected sequence.
TEST
(
RangeTest
,
IntRangeWithDefaultStep
)
{
const
ParamGenerator
<
int
>
gen
=
Range
(
0
,
3
);
const
int
expected_values
[]
=
{
0
,
1
,
2
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Edge case. Tests that Range() generates the single element sequence
// as expected when provided with range limits that are equal.
TEST
(
RangeTest
,
IntRangeSingleValue
)
{
const
ParamGenerator
<
int
>
gen
=
Range
(
0
,
1
);
const
int
expected_values
[]
=
{
0
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Edge case. Tests that Range() with generates empty sequence when
// supplied with an empty range.
TEST
(
RangeTest
,
IntRangeEmpty
)
{
const
ParamGenerator
<
int
>
gen
=
Range
(
0
,
0
);
VerifyGeneratorIsEmpty
(
gen
);
}
// Tests that Range() with custom step (greater then one) generates
// the expected sequence.
TEST
(
RangeTest
,
IntRangeWithCustomStep
)
{
const
ParamGenerator
<
int
>
gen
=
Range
(
0
,
9
,
3
);
const
int
expected_values
[]
=
{
0
,
3
,
6
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Tests that Range() with custom step (greater then one) generates
// the expected sequence when the last element does not fall on the
// upper range limit. Sequences generated by Range() must not have
// elements beyond the range limits.
TEST
(
RangeTest
,
IntRangeWithCustomStepOverUpperBound
)
{
const
ParamGenerator
<
int
>
gen
=
Range
(
0
,
4
,
3
);
const
int
expected_values
[]
=
{
0
,
3
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Verifies that Range works with user-defined types that define
// copy constructor, operator=(), operator+(), and operator<().
class
DogAdder
{
public:
explicit
DogAdder
(
const
char
*
value
)
:
value_
(
value
)
{}
DogAdder
(
const
DogAdder
&
other
)
:
value_
(
other
.
value_
.
c_str
())
{}
DogAdder
operator
=
(
const
DogAdder
&
other
)
{
if
(
this
!=
&
other
)
value_
=
other
.
value_
;
return
*
this
;
}
DogAdder
operator
+
(
const
DogAdder
&
other
)
const
{
Message
msg
;
msg
<<
value_
.
c_str
()
<<
other
.
value_
.
c_str
();
return
DogAdder
(
msg
.
GetString
().
c_str
());
}
bool
operator
<
(
const
DogAdder
&
other
)
const
{
return
value_
<
other
.
value_
;
}
const
::
testing
::
internal
::
String
&
value
()
const
{
return
value_
;
}
private:
::
testing
::
internal
::
String
value_
;
};
TEST
(
RangeTest
,
WorksWithACustomType
)
{
const
ParamGenerator
<
DogAdder
>
gen
=
Range
(
DogAdder
(
"cat"
),
DogAdder
(
"catdogdog"
),
DogAdder
(
"dog"
));
ParamGenerator
<
DogAdder
>::
iterator
it
=
gen
.
begin
();
ASSERT_FALSE
(
it
==
gen
.
end
());
EXPECT_STREQ
(
"cat"
,
it
->
value
().
c_str
());
ASSERT_FALSE
(
++
it
==
gen
.
end
());
EXPECT_STREQ
(
"catdog"
,
it
->
value
().
c_str
());
EXPECT_TRUE
(
++
it
==
gen
.
end
());
}
class
IntWrapper
{
public:
explicit
IntWrapper
(
int
value
)
:
value_
(
value
)
{}
IntWrapper
(
const
IntWrapper
&
other
)
:
value_
(
other
.
value_
)
{}
IntWrapper
operator
=
(
const
IntWrapper
&
other
)
{
value_
=
other
.
value_
;
return
*
this
;
}
// operator+() adds a different type.
IntWrapper
operator
+
(
int
other
)
const
{
return
IntWrapper
(
value_
+
other
);
}
bool
operator
<
(
const
IntWrapper
&
other
)
const
{
return
value_
<
other
.
value_
;
}
int
value
()
const
{
return
value_
;
}
private:
int
value_
;
};
TEST
(
RangeTest
,
WorksWithACustomTypeWithDifferentIncrementType
)
{
const
ParamGenerator
<
IntWrapper
>
gen
=
Range
(
IntWrapper
(
0
),
IntWrapper
(
2
));
ParamGenerator
<
IntWrapper
>::
iterator
it
=
gen
.
begin
();
ASSERT_FALSE
(
it
==
gen
.
end
());
EXPECT_EQ
(
0
,
it
->
value
());
ASSERT_FALSE
(
++
it
==
gen
.
end
());
EXPECT_EQ
(
1
,
it
->
value
());
EXPECT_TRUE
(
++
it
==
gen
.
end
());
}
// Tests that ValuesIn() with an array parameter generates
// the expected sequence.
TEST
(
ValuesInTest
,
ValuesInArray
)
{
int
array
[]
=
{
3
,
5
,
8
};
const
ParamGenerator
<
int
>
gen
=
ValuesIn
(
array
);
VerifyGenerator
(
gen
,
array
);
}
// Tests that ValuesIn() with a const array parameter generates
// the expected sequence.
TEST
(
ValuesInTest
,
ValuesInConstArray
)
{
const
int
array
[]
=
{
3
,
5
,
8
};
const
ParamGenerator
<
int
>
gen
=
ValuesIn
(
array
);
VerifyGenerator
(
gen
,
array
);
}
// Edge case. Tests that ValuesIn() with an array parameter containing a
// single element generates the single element sequence.
TEST
(
ValuesInTest
,
ValuesInSingleElementArray
)
{
int
array
[]
=
{
42
};
const
ParamGenerator
<
int
>
gen
=
ValuesIn
(
array
);
VerifyGenerator
(
gen
,
array
);
}
// Tests that ValuesIn() generates the expected sequence for an STL
// container (vector).
TEST
(
ValuesInTest
,
ValuesInVector
)
{
typedef
::
std
::
vector
<
int
>
ContainerType
;
ContainerType
values
;
values
.
push_back
(
3
);
values
.
push_back
(
5
);
values
.
push_back
(
8
);
const
ParamGenerator
<
int
>
gen
=
ValuesIn
(
values
);
const
int
expected_values
[]
=
{
3
,
5
,
8
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Tests that ValuesIn() generates the expected sequence.
TEST
(
ValuesInTest
,
ValuesInIteratorRange
)
{
typedef
::
std
::
vector
<
int
>
ContainerType
;
ContainerType
values
;
values
.
push_back
(
3
);
values
.
push_back
(
5
);
values
.
push_back
(
8
);
const
ParamGenerator
<
int
>
gen
=
ValuesIn
(
values
.
begin
(),
values
.
end
());
const
int
expected_values
[]
=
{
3
,
5
,
8
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Edge case. Tests that ValuesIn() provided with an iterator range specifying a
// single value generates a single-element sequence.
TEST
(
ValuesInTest
,
ValuesInSingleElementIteratorRange
)
{
typedef
::
std
::
vector
<
int
>
ContainerType
;
ContainerType
values
;
values
.
push_back
(
42
);
const
ParamGenerator
<
int
>
gen
=
ValuesIn
(
values
.
begin
(),
values
.
end
());
const
int
expected_values
[]
=
{
42
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Edge case. Tests that ValuesIn() provided with an empty iterator range
// generates an empty sequence.
TEST
(
ValuesInTest
,
ValuesInEmptyIteratorRange
)
{
typedef
::
std
::
vector
<
int
>
ContainerType
;
ContainerType
values
;
const
ParamGenerator
<
int
>
gen
=
ValuesIn
(
values
.
begin
(),
values
.
end
());
VerifyGeneratorIsEmpty
(
gen
);
}
// Tests that the Values() generates the expected sequence.
TEST
(
ValuesTest
,
ValuesWorks
)
{
const
ParamGenerator
<
int
>
gen
=
Values
(
3
,
5
,
8
);
const
int
expected_values
[]
=
{
3
,
5
,
8
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Tests that Values() generates the expected sequences from elements of
// different types convertible to ParamGenerator's parameter type.
TEST
(
ValuesTest
,
ValuesWorksForValuesOfCompatibleTypes
)
{
const
ParamGenerator
<
double
>
gen
=
Values
(
3
,
5.0
f
,
8.0
);
const
double
expected_values
[]
=
{
3.0
,
5.0
,
8.0
};
VerifyGenerator
(
gen
,
expected_values
);
}
TEST
(
ValuesTest
,
ValuesWorksForMaxLengthList
)
{
const
ParamGenerator
<
int
>
gen
=
Values
(
10
,
20
,
30
,
40
,
50
,
60
,
70
,
80
,
90
,
100
,
110
,
120
,
130
,
140
,
150
,
160
,
170
,
180
,
190
,
200
,
210
,
220
,
230
,
240
,
250
,
260
,
270
,
280
,
290
,
300
,
310
,
320
,
330
,
340
,
350
,
360
,
370
,
380
,
390
,
400
,
410
,
420
,
430
,
440
,
450
,
460
,
470
,
480
,
490
,
500
);
const
int
expected_values
[]
=
{
10
,
20
,
30
,
40
,
50
,
60
,
70
,
80
,
90
,
100
,
110
,
120
,
130
,
140
,
150
,
160
,
170
,
180
,
190
,
200
,
210
,
220
,
230
,
240
,
250
,
260
,
270
,
280
,
290
,
300
,
310
,
320
,
330
,
340
,
350
,
360
,
370
,
380
,
390
,
400
,
410
,
420
,
430
,
440
,
450
,
460
,
470
,
480
,
490
,
500
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Edge case test. Tests that single-parameter Values() generates the sequence
// with the single value.
TEST
(
ValuesTest
,
ValuesWithSingleParameter
)
{
const
ParamGenerator
<
int
>
gen
=
Values
(
42
);
const
int
expected_values
[]
=
{
42
};
VerifyGenerator
(
gen
,
expected_values
);
}
// Tests that Bool() generates sequence (false, true).
TEST
(
BoolTest
,
BoolWorks
)
{
const
ParamGenerator
<
bool
>
gen
=
Bool
();
const
bool
expected_values
[]
=
{
false
,
true
};
VerifyGenerator
(
gen
,
expected_values
);
}
#ifdef GTEST_HAS_COMBINE
template
<
typename
T1
,
typename
T2
>
::
std
::
ostream
&
operator
<<
(
::
std
::
ostream
&
stream
,
const
tuple
<
T1
,
T2
>&
value
)
{
stream
<<
"("
<<
get
<
0
>
(
value
)
<<
", "
<<
get
<
1
>
(
value
)
<<
")"
;
return
stream
;
}
template
<
typename
T1
,
typename
T2
,
typename
T3
>
::
std
::
ostream
&
operator
<<
(
::
std
::
ostream
&
stream
,
const
tuple
<
T1
,
T2
,
T3
>&
value
)
{
stream
<<
"("
<<
get
<
0
>
(
value
)
<<
", "
<<
get
<
1
>
(
value
)
<<
", "
<<
get
<
2
>
(
value
)
<<
")"
;
return
stream
;
}
template
<
typename
T1
,
typename
T2
,
typename
T3
,
typename
T4
,
typename
T5
,
typename
T6
,
typename
T7
,
typename
T8
,
typename
T9
,
typename
T10
>
::
std
::
ostream
&
operator
<<
(
::
std
::
ostream
&
stream
,
const
tuple
<
T1
,
T2
,
T3
,
T4
,
T5
,
T6
,
T7
,
T8
,
T9
,
T10
>&
value
)
{
stream
<<
"("
<<
get
<
0
>
(
value
)
<<
", "
<<
get
<
1
>
(
value
)
<<
", "
<<
get
<
2
>
(
value
)
<<
", "
<<
get
<
3
>
(
value
)
<<
", "
<<
get
<
4
>
(
value
)
<<
", "
<<
get
<
5
>
(
value
)
<<
", "
<<
get
<
6
>
(
value
)
<<
", "
<<
get
<
7
>
(
value
)
<<
", "
<<
get
<
8
>
(
value
)
<<
", "
<<
get
<
9
>
(
value
)
<<
")"
;
return
stream
;
}
// Tests that Combine() with two parameters generates the expected sequence.
TEST
(
CombineTest
,
CombineWithTwoParameters
)
{
const
char
*
foo
=
"foo"
;
const
char
*
bar
=
"bar"
;
const
ParamGenerator
<
tuple
<
const
char
*
,
int
>
>
gen
=
Combine
(
Values
(
foo
,
bar
),
Values
(
3
,
4
));
tuple
<
const
char
*
,
int
>
expected_values
[]
=
{
make_tuple
(
foo
,
3
),
make_tuple
(
foo
,
4
),
make_tuple
(
bar
,
3
),
make_tuple
(
bar
,
4
)};
VerifyGenerator
(
gen
,
expected_values
);
}
// Tests that Combine() with three parameters generates the expected sequence.
TEST
(
CombineTest
,
CombineWithThreeParameters
)
{
const
ParamGenerator
<
tuple
<
int
,
int
,
int
>
>
gen
=
Combine
(
Values
(
0
,
1
),
Values
(
3
,
4
),
Values
(
5
,
6
));
tuple
<
int
,
int
,
int
>
expected_values
[]
=
{
make_tuple
(
0
,
3
,
5
),
make_tuple
(
0
,
3
,
6
),
make_tuple
(
0
,
4
,
5
),
make_tuple
(
0
,
4
,
6
),
make_tuple
(
1
,
3
,
5
),
make_tuple
(
1
,
3
,
6
),
make_tuple
(
1
,
4
,
5
),
make_tuple
(
1
,
4
,
6
)};
VerifyGenerator
(
gen
,
expected_values
);
}
// Tests that the Combine() with the first parameter generating a single value
// sequence generates a sequence with the number of elements equal to the
// number of elements in the sequence generated by the second parameter.
TEST
(
CombineTest
,
CombineWithFirstParameterSingleValue
)
{
const
ParamGenerator
<
tuple
<
int
,
int
>
>
gen
=
Combine
(
Values
(
42
),
Values
(
0
,
1
));
tuple
<
int
,
int
>
expected_values
[]
=
{
make_tuple
(
42
,
0
),
make_tuple
(
42
,
1
)};
VerifyGenerator
(
gen
,
expected_values
);
}
// Tests that the Combine() with the second parameter generating a single value
// sequence generates a sequence with the number of elements equal to the
// number of elements in the sequence generated by the first parameter.
TEST
(
CombineTest
,
CombineWithSecondParameterSingleValue
)
{
const
ParamGenerator
<
tuple
<
int
,
int
>
>
gen
=
Combine
(
Values
(
0
,
1
),
Values
(
42
));
tuple
<
int
,
int
>
expected_values
[]
=
{
make_tuple
(
0
,
42
),
make_tuple
(
1
,
42
)};
VerifyGenerator
(
gen
,
expected_values
);
}
// Tests that when the first parameter produces an empty sequence,
// Combine() produces an empty sequence, too.
TEST
(
CombineTest
,
CombineWithFirstParameterEmptyRange
)
{
const
ParamGenerator
<
tuple
<
int
,
int
>
>
gen
=
Combine
(
Range
(
0
,
0
),
Values
(
0
,
1
));
VerifyGeneratorIsEmpty
(
gen
);
}
// Tests that when the second parameter produces an empty sequence,
// Combine() produces an empty sequence, too.
TEST
(
CombineTest
,
CombineWithSecondParameterEmptyRange
)
{
const
ParamGenerator
<
tuple
<
int
,
int
>
>
gen
=
Combine
(
Values
(
0
,
1
),
Range
(
1
,
1
));
VerifyGeneratorIsEmpty
(
gen
);
}
// Edge case. Tests that combine works with the maximum number
// of parameters supported by Google Test (currently 10).
TEST
(
CombineTest
,
CombineWithMaxNumberOfParameters
)
{
const
char
*
foo
=
"foo"
;
const
char
*
bar
=
"bar"
;
const
ParamGenerator
<
tuple
<
const
char
*
,
int
,
int
,
int
,
int
,
int
,
int
,
int
,
int
,
int
>
>
gen
=
Combine
(
Values
(
foo
,
bar
),
Values
(
1
),
Values
(
2
),
Values
(
3
),
Values
(
4
),
Values
(
5
),
Values
(
6
),
Values
(
7
),
Values
(
8
),
Values
(
9
));
tuple
<
const
char
*
,
int
,
int
,
int
,
int
,
int
,
int
,
int
,
int
,
int
>
expected_values
[]
=
{
make_tuple
(
foo
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
),
make_tuple
(
bar
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
)};
VerifyGenerator
(
gen
,
expected_values
);
}
#endif // GTEST_HAS_COMBINE
// Tests that an generator produces correct sequence after being
// assigned from another generator.
TEST
(
ParamGeneratorTest
,
AssignmentWorks
)
{
ParamGenerator
<
int
>
gen
=
Values
(
1
,
2
);
const
ParamGenerator
<
int
>
gen2
=
Values
(
3
,
4
);
gen
=
gen2
;
const
int
expected_values
[]
=
{
3
,
4
};
VerifyGenerator
(
gen
,
expected_values
);
}
// This test verifies that the tests are expanded and run as specified:
// one test per element from the sequence produced by the generator
// specified in INSTANTIATE_TEST_CASE_P. It also verifies that the test's
// fixture constructor, SetUp(), and TearDown() have run and have been
// supplied with the correct parameters.
// The use of environment object allows detection of the case where no test
// case functionality is run at all. In this case TestCaseTearDown will not
// be able to detect missing tests, naturally.
template
<
int
kExpectedCalls
>
class
TestGenerationEnvironment
:
public
::
testing
::
Environment
{
public:
static
TestGenerationEnvironment
*
Instance
()
{
static
TestGenerationEnvironment
*
instance
=
new
TestGenerationEnvironment
;
return
instance
;
}
void
FixtureConstructorExecuted
()
{
fixture_constructor_count_
++
;
}
void
SetUpExecuted
()
{
set_up_count_
++
;
}
void
TearDownExecuted
()
{
tear_down_count_
++
;
}
void
TestBodyExecuted
()
{
test_body_count_
++
;
}
virtual
void
TearDown
()
{
// If all MultipleTestGenerationTest tests have been de-selected
// by the filter flag, the following checks make no sense.
bool
perform_check
=
false
;
for
(
int
i
=
0
;
i
<
kExpectedCalls
;
++
i
)
{
Message
msg
;
msg
<<
"TestsExpandedAndRun/"
<<
i
;
if
(
UnitTestOptions
::
FilterMatchesTest
(
"TestExpansionModule/MultipleTestGenerationTest"
,
msg
.
GetString
().
c_str
()))
{
perform_check
=
true
;
}
}
if
(
perform_check
)
{
EXPECT_EQ
(
kExpectedCalls
,
fixture_constructor_count_
)
<<
"Fixture constructor of ParamTestGenerationTest test case "
<<
"has not been run as expected."
;
EXPECT_EQ
(
kExpectedCalls
,
set_up_count_
)
<<
"Fixture SetUp method of ParamTestGenerationTest test case "
<<
"has not been run as expected."
;
EXPECT_EQ
(
kExpectedCalls
,
tear_down_count_
)
<<
"Fixture TearDown method of ParamTestGenerationTest test case "
<<
"has not been run as expected."
;
EXPECT_EQ
(
kExpectedCalls
,
test_body_count_
)
<<
"Test in ParamTestGenerationTest test case "
<<
"has not been run as expected."
;
}
}
private:
TestGenerationEnvironment
()
:
fixture_constructor_count_
(
0
),
set_up_count_
(
0
),
tear_down_count_
(
0
),
test_body_count_
(
0
)
{}
int
fixture_constructor_count_
;
int
set_up_count_
;
int
tear_down_count_
;
int
test_body_count_
;
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
TestGenerationEnvironment
);
};
const
int
test_generation_params
[]
=
{
36
,
42
,
72
};
class
TestGenerationTest
:
public
TestWithParam
<
int
>
{
public:
enum
{
PARAMETER_COUNT
=
sizeof
(
test_generation_params
)
/
sizeof
(
test_generation_params
[
0
])
};
typedef
TestGenerationEnvironment
<
PARAMETER_COUNT
>
Environment
;
TestGenerationTest
()
{
Environment
::
Instance
()
->
FixtureConstructorExecuted
();
current_parameter_
=
GetParam
();
}
virtual
void
SetUp
()
{
Environment
::
Instance
()
->
SetUpExecuted
();
EXPECT_EQ
(
current_parameter_
,
GetParam
());
}
virtual
void
TearDown
()
{
Environment
::
Instance
()
->
TearDownExecuted
();
EXPECT_EQ
(
current_parameter_
,
GetParam
());
}
static
void
SetUpTestCase
()
{
bool
all_tests_in_test_case_selected
=
true
;
for
(
int
i
=
0
;
i
<
PARAMETER_COUNT
;
++
i
)
{
Message
test_name
;
test_name
<<
"TestsExpandedAndRun/"
<<
i
;
if
(
!
UnitTestOptions
::
FilterMatchesTest
(
"TestExpansionModule/MultipleTestGenerationTest"
,
test_name
.
GetString
()))
{
all_tests_in_test_case_selected
=
false
;
}
}
EXPECT_TRUE
(
all_tests_in_test_case_selected
)
<<
"When running the TestGenerationTest test case all of its tests
\n
"
<<
"must be selected by the filter flag for the test case to pass.
\n
"
<<
"If not all of them are enabled, we can't reliably conclude
\n
"
<<
"that the correct number of tests have been generated."
;
collected_parameters_
.
clear
();
}
static
void
TearDownTestCase
()
{
vector
<
int
>
expected_values
(
test_generation_params
,
test_generation_params
+
PARAMETER_COUNT
);
// Test execution order is not guaranteed by Google Test,
// so the order of values in collected_parameters_ can be
// different and we have to sort to compare.
sort
(
expected_values
.
begin
(),
expected_values
.
end
());
sort
(
collected_parameters_
.
begin
(),
collected_parameters_
.
end
());
EXPECT_TRUE
(
collected_parameters_
==
expected_values
);
}
protected:
int
current_parameter_
;
static
vector
<
int
>
collected_parameters_
;
private:
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
TestGenerationTest
);
};
vector
<
int
>
TestGenerationTest
::
collected_parameters_
;
TEST_P
(
TestGenerationTest
,
TestsExpandedAndRun
)
{
Environment
::
Instance
()
->
TestBodyExecuted
();
EXPECT_EQ
(
current_parameter_
,
GetParam
());
collected_parameters_
.
push_back
(
GetParam
());
}
INSTANTIATE_TEST_CASE_P
(
TestExpansionModule
,
TestGenerationTest
,
ValuesIn
(
test_generation_params
));
// This test verifies that the element sequence (third parameter of
// INSTANTIATE_TEST_CASE_P) is evaluated in RUN_ALL_TESTS and not at the call
// site of INSTANTIATE_TEST_CASE_P.
// For that, we declare param_value_ to be a static member of
// GeneratorEvaluationTest and initialize it to 0. We set it to 1 in main(),
// just before invocation of RUN_ALL_TESTS. If the sequence is evaluated
// before that moment, INSTANTIATE_TEST_CASE_P will create a test with
// parameter 0, and the test body will fail the assertion.
class
GeneratorEvaluationTest
:
public
TestWithParam
<
int
>
{
public:
static
int
param_value
()
{
return
param_value_
;
}
static
void
set_param_value
(
int
param_value
)
{
param_value_
=
param_value
;
}
private:
static
int
param_value_
;
};
int
GeneratorEvaluationTest
::
param_value_
=
0
;
TEST_P
(
GeneratorEvaluationTest
,
GeneratorsEvaluatedInMain
)
{
EXPECT_EQ
(
1
,
GetParam
());
}
INSTANTIATE_TEST_CASE_P
(
GenEvalModule
,
GeneratorEvaluationTest
,
Values
(
GeneratorEvaluationTest
::
param_value
()));
// Tests that generators defined in a different translation unit are
// functional. Generator extern_gen is defined in gtest-param-test_test2.cc.
extern
ParamGenerator
<
int
>
extern_gen
;
class
ExternalGeneratorTest
:
public
TestWithParam
<
int
>
{};
TEST_P
(
ExternalGeneratorTest
,
ExternalGenerator
)
{
// Sequence produced by extern_gen contains only a single value
// which we verify here.
EXPECT_EQ
(
GetParam
(),
33
);
}
INSTANTIATE_TEST_CASE_P
(
ExternalGeneratorModule
,
ExternalGeneratorTest
,
extern_gen
);
// Tests that a parameterized test case can be defined in one translation
// unit and instantiated in another. This test will be instantiated in
// gtest-param-test_test2.cc. ExternalInstantiationTest fixture class is
// defined in gtest-param-test_test.h.
TEST_P
(
ExternalInstantiationTest
,
IsMultipleOf33
)
{
EXPECT_EQ
(
0
,
GetParam
()
%
33
);
}
// Tests that a parameterized test case can be instantiated with multiple
// generators.
class
MultipleInstantiationTest
:
public
TestWithParam
<
int
>
{};
TEST_P
(
MultipleInstantiationTest
,
AllowsMultipleInstances
)
{
}
INSTANTIATE_TEST_CASE_P
(
Sequence1
,
MultipleInstantiationTest
,
Values
(
1
,
2
));
INSTANTIATE_TEST_CASE_P
(
Sequence2
,
MultipleInstantiationTest
,
Range
(
3
,
5
));
// Tests that a parameterized test case can be instantiated
// in multiple translation units. This test will be instantiated
// here and in gtest-param-test_test2.cc.
// InstantiationInMultipleTranslationUnitsTest fixture class
// is defined in gtest-param-test_test.h.
TEST_P
(
InstantiationInMultipleTranslaionUnitsTest
,
IsMultipleOf42
)
{
EXPECT_EQ
(
0
,
GetParam
()
%
42
);
}
INSTANTIATE_TEST_CASE_P
(
Sequence1
,
InstantiationInMultipleTranslaionUnitsTest
,
Values
(
42
,
42
*
2
));
// Tests that each iteration of parameterized test runs in a separate test
// object.
class
SeparateInstanceTest
:
public
TestWithParam
<
int
>
{
public:
SeparateInstanceTest
()
:
count_
(
0
)
{}
static
void
TearDownTestCase
()
{
EXPECT_GE
(
global_count_
,
2
)
<<
"If some (but not all) SeparateInstanceTest tests have been "
<<
"filtered out this test will fail. Make sure that all "
<<
"GeneratorEvaluationTest are selected or de-selected together "
<<
"by the test filter."
;
}
protected:
int
count_
;
static
int
global_count_
;
};
int
SeparateInstanceTest
::
global_count_
=
0
;
TEST_P
(
SeparateInstanceTest
,
TestsRunInSeparateInstances
)
{
EXPECT_EQ
(
0
,
count_
++
);
global_count_
++
;
}
INSTANTIATE_TEST_CASE_P
(
FourElemSequence
,
SeparateInstanceTest
,
Range
(
1
,
4
));
// Tests that all instantiations of a test have named appropriately. Test
// defined with TEST_P(TestCaseName, TestName) and instantiated with
// INSTANTIATE_TEST_CASE_P(SequenceName, TestCaseName, generator) must be named
// SequenceName/TestCaseName.TestName/i, where i is the 0-based index of the
// sequence element used to instantiate the test.
class
NamingTest
:
public
TestWithParam
<
int
>
{};
TEST_P
(
NamingTest
,
TestsAreNamedAppropriately
)
{
const
::
testing
::
TestInfo
*
const
test_info
=
::
testing
::
UnitTest
::
GetInstance
()
->
current_test_info
();
EXPECT_STREQ
(
"ZeroToFiveSequence/NamingTest"
,
test_info
->
test_case_name
());
Message
msg
;
msg
<<
"TestsAreNamedAppropriately/"
<<
GetParam
();
EXPECT_STREQ
(
msg
.
GetString
().
c_str
(),
test_info
->
name
());
}
INSTANTIATE_TEST_CASE_P
(
ZeroToFiveSequence
,
NamingTest
,
Range
(
0
,
5
));
#endif // GTEST_HAS_PARAM_TEST
TEST
(
CompileTest
,
CombineIsDefinedOnlyWhenGtestHasParamTestIsDefined
)
{
#if defined(GTEST_HAS_COMBINE) && !defined(GTEST_HAS_PARAM_TEST)
FAIL
()
<<
"GTEST_HAS_COMBINE is defined while GTEST_HAS_PARAM_TEST is not
\n
"
#endif
}
int
main
(
int
argc
,
char
**
argv
)
{
#ifdef GTEST_HAS_PARAM_TEST
// Used in TestGenerationTest test case.
AddGlobalTestEnvironment
(
TestGenerationTest
::
Environment
::
Instance
());
// Used in GeneratorEvaluationTest test case.
GeneratorEvaluationTest
::
set_param_value
(
1
);
#endif // GTEST_HAS_PARAM_TEST
testing
::
InitGoogleTest
(
&
argc
,
argv
);
return
RUN_ALL_TESTS
();
}
test/gtest-param-test_test.h
0 → 100644
View file @
3d704217
// 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.
//
// Authors: vladl@google.com (Vlad Losev)
//
// The Google C++ Testing Framework (Google Test)
//
// This header file provides classes and functions used internally
// for testing Google Test itself.
#ifndef GTEST_TEST_GTEST_PARAM_TEST_TEST_H_
#define GTEST_TEST_GTEST_PARAM_TEST_TEST_H_
#include <gtest/gtest.h>
#ifdef GTEST_HAS_PARAM_TEST
// Test fixture for testing definition and instantiation of a test
// in separate translation units.
class
ExternalInstantiationTest
:
public
::
testing
::
TestWithParam
<
int
>
{};
// Test fixture for testing instantiation of a test in multiple
// translation units.
class
InstantiationInMultipleTranslaionUnitsTest
:
public
::
testing
::
TestWithParam
<
int
>
{};
#endif // GTEST_HAS_PARAM_TEST
#endif // GTEST_TEST_GTEST_PARAM_TEST_TEST_H_
test/gtest-port_test.cc
0 → 100644
View file @
3d704217
// 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: vladl@google.com (Vlad Losev)
//
// This file tests the internal cross-platform support utilities.
#include <gtest/internal/gtest-port.h>
#include <gtest/gtest.h>
#include <gtest/gtest-spi.h>
TEST
(
GtestCheckSyntaxTest
,
BehavesLikeASingleStatement
)
{
if
(
false
)
GTEST_CHECK_
(
false
)
<<
"This should never be executed; "
"It's a compilation test only."
;
if
(
true
)
GTEST_CHECK_
(
true
);
else
;
// NOLINT
if
(
false
)
;
// NOLINT
else
GTEST_CHECK_
(
true
)
<<
""
;
}
TEST
(
GtestCheckSyntaxTest
,
WorksWithSwitch
)
{
switch
(
0
)
{
case
1
:
break
;
default:
GTEST_CHECK_
(
true
);
}
switch
(
0
)
case
0
:
GTEST_CHECK_
(
true
)
<<
"Check failed in switch case"
;
}
#ifdef GTEST_HAS_DEATH_TEST
TEST
(
GtestCheckDeathTest
,
DiesWithCorrectOutputOnFailure
)
{
const
bool
a_false_condition
=
false
;
EXPECT_DEATH
(
GTEST_CHECK_
(
a_false_condition
)
<<
"Extra info"
,
#ifdef _MSC_VER
"gtest-port_test
\\
.cc
\\
([0-9]+
\\
):"
#else
"gtest-port_test
\\
.cc:[0-9]+"
#endif // _MSC_VER
".*a_false_condition.*Extra info.*"
);
}
TEST
(
GtestCheckDeathTest
,
LivesSilentlyOnSuccess
)
{
EXPECT_EXIT
({
GTEST_CHECK_
(
true
)
<<
"Extra info"
;
::
std
::
cerr
<<
"Success
\n
"
;
exit
(
0
);
},
::
testing
::
ExitedWithCode
(
0
),
"Success"
);
}
#endif // GTEST_HAS_DEATH_TEST
#ifdef GTEST_USES_POSIX_RE
using
::
testing
::
internal
::
RE
;
template
<
typename
Str
>
class
RETest
:
public
::
testing
::
Test
{};
// Defines StringTypes as the list of all string types that class RE
// supports.
typedef
testing
::
Types
<
#if GTEST_HAS_STD_STRING
::
std
::
string
,
#endif // GTEST_HAS_STD_STRING
#if GTEST_HAS_GLOBAL_STRING
::
string
,
#endif // GTEST_HAS_GLOBAL_STRING
const
char
*>
StringTypes
;
TYPED_TEST_CASE
(
RETest
,
StringTypes
);
// Tests RE's implicit constructors.
TYPED_TEST
(
RETest
,
ImplicitConstructorWorks
)
{
const
RE
empty
=
TypeParam
(
""
);
EXPECT_STREQ
(
""
,
empty
.
pattern
());
const
RE
simple
=
TypeParam
(
"hello"
);
EXPECT_STREQ
(
"hello"
,
simple
.
pattern
());
const
RE
normal
=
TypeParam
(
".*(
\\
w+)"
);
EXPECT_STREQ
(
".*(
\\
w+)"
,
normal
.
pattern
());
}
// Tests that RE's constructors reject invalid regular expressions.
TYPED_TEST
(
RETest
,
RejectsInvalidRegex
)
{
EXPECT_NONFATAL_FAILURE
({
const
RE
invalid
=
TypeParam
(
"?"
);
},
"
\"
?
\"
is not a valid POSIX Extended regular expression."
);
}
// Tests RE::FullMatch().
TYPED_TEST
(
RETest
,
FullMatchWorks
)
{
const
RE
empty
=
TypeParam
(
""
);
EXPECT_TRUE
(
RE
::
FullMatch
(
TypeParam
(
""
),
empty
));
EXPECT_FALSE
(
RE
::
FullMatch
(
TypeParam
(
"a"
),
empty
));
const
RE
re
=
TypeParam
(
"a.*z"
);
EXPECT_TRUE
(
RE
::
FullMatch
(
TypeParam
(
"az"
),
re
));
EXPECT_TRUE
(
RE
::
FullMatch
(
TypeParam
(
"axyz"
),
re
));
EXPECT_FALSE
(
RE
::
FullMatch
(
TypeParam
(
"baz"
),
re
));
EXPECT_FALSE
(
RE
::
FullMatch
(
TypeParam
(
"azy"
),
re
));
}
// Tests RE::PartialMatch().
TYPED_TEST
(
RETest
,
PartialMatchWorks
)
{
const
RE
empty
=
TypeParam
(
""
);
EXPECT_TRUE
(
RE
::
PartialMatch
(
TypeParam
(
""
),
empty
));
EXPECT_TRUE
(
RE
::
PartialMatch
(
TypeParam
(
"a"
),
empty
));
const
RE
re
=
TypeParam
(
"a.*z"
);
EXPECT_TRUE
(
RE
::
PartialMatch
(
TypeParam
(
"az"
),
re
));
EXPECT_TRUE
(
RE
::
PartialMatch
(
TypeParam
(
"axyz"
),
re
));
EXPECT_TRUE
(
RE
::
PartialMatch
(
TypeParam
(
"baz"
),
re
));
EXPECT_TRUE
(
RE
::
PartialMatch
(
TypeParam
(
"azy"
),
re
));
EXPECT_FALSE
(
RE
::
PartialMatch
(
TypeParam
(
"zza"
),
re
));
}
#endif // GTEST_USES_POSIX_RE
test/gtest-typed-test_test.cc
View file @
3d704217
...
@@ -348,3 +348,15 @@ INSTANTIATE_TYPED_TEST_CASE_P(My, NumericTest, NumericTypes);
...
@@ -348,3 +348,15 @@ INSTANTIATE_TYPED_TEST_CASE_P(My, NumericTest, NumericTypes);
}
// namespace library2
}
// namespace library2
#endif // GTEST_HAS_TYPED_TEST_P
#endif // GTEST_HAS_TYPED_TEST_P
#if !defined(GTEST_HAS_TYPED_TEST) && !defined(GTEST_HAS_TYPED_TEST_P)
// Google Test doesn't support type-parameterized tests on some platforms
// and compilers, such as MSVC 7.1. If we use conditional compilation to
// compile out all code referring to the gtest_main library, MSVC linker
// will not link that library at all and consequently complain about
// missing entry point defined in that library (fatal error LNK1561:
// entry point must be defined). This dummy test keeps gtest_main linked in.
TEST
(
DummyTest
,
TypedTestsAreNotSupportedOnThisPlatform
)
{}
#endif // #if !defined(GTEST_HAS_TYPED_TEST) && !defined(GTEST_HAS_TYPED_TEST_P)
test/gtest_filter_unittest.py
View file @
3d704217
...
@@ -43,6 +43,7 @@ __author__ = 'wan@google.com (Zhanyong Wan)'
...
@@ -43,6 +43,7 @@ __author__ = 'wan@google.com (Zhanyong Wan)'
import
gtest_test_utils
import
gtest_test_utils
import
os
import
os
import
re
import
re
import
sets
import
sys
import
sys
import
unittest
import
unittest
...
@@ -58,26 +59,41 @@ FILTER_FLAG = 'gtest_filter'
...
@@ -58,26 +59,41 @@ FILTER_FLAG = 'gtest_filter'
COMMAND
=
os
.
path
.
join
(
gtest_test_utils
.
GetBuildDir
(),
COMMAND
=
os
.
path
.
join
(
gtest_test_utils
.
GetBuildDir
(),
'gtest_filter_unittest_'
)
'gtest_filter_unittest_'
)
# Regex for determining whether parameterized tests are enabled in the binary.
PARAM_TEST_REGEX
=
re
.
compile
(
r
'/ParamTest'
)
# Regex for parsing test case names from Google Test's output.
# Regex for parsing test case names from Google Test's output.
TEST_CASE_REGEX
=
re
.
compile
(
r
'^\[\-+\] \d+ test
.*
from (\w+)'
)
TEST_CASE_REGEX
=
re
.
compile
(
r
'^\[\-+\] \d+ test
s?
from (\w+
(/\w+)?
)'
)
# Regex for parsing test names from Google Test's output.
# Regex for parsing test names from Google Test's output.
TEST_REGEX
=
re
.
compile
(
r
'^\[\s*RUN\s*\].*\.(\w+)'
)
TEST_REGEX
=
re
.
compile
(
r
'^\[\s*RUN\s*\].*\.(\w+
(/\w+)?
)'
)
# Full names of all tests in gtest_filter_unittests_.
# Full names of all tests in gtest_filter_unittests_.
PARAM_TESTS
=
[
'SeqP/ParamTest.TestX/0'
,
'SeqP/ParamTest.TestX/1'
,
'SeqP/ParamTest.TestY/0'
,
'SeqP/ParamTest.TestY/1'
,
'SeqQ/ParamTest.TestX/0'
,
'SeqQ/ParamTest.TestX/1'
,
'SeqQ/ParamTest.TestY/0'
,
'SeqQ/ParamTest.TestY/1'
,
]
ALL_TESTS
=
[
ALL_TESTS
=
[
'FooTest.Abc'
,
'FooTest.Abc'
,
'FooTest.Xyz'
,
'FooTest.Xyz'
,
'BarTest.Test
1
'
,
'BarTest.Test
One
'
,
'BarTest.Test
2
'
,
'BarTest.Test
Two
'
,
'BarTest.Test
3
'
,
'BarTest.Test
Three
'
,
'BazTest.Test
1
'
,
'BazTest.Test
One
'
,
'BazTest.TestA'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
'BazTest.TestB'
,
]
]
+
PARAM_TESTS
param_tests_present
=
None
# Utilities.
# Utilities.
...
@@ -136,6 +152,11 @@ class GTestFilterUnitTest(unittest.TestCase):
...
@@ -136,6 +152,11 @@ class GTestFilterUnitTest(unittest.TestCase):
"""Runs gtest_flag_unittest_ with the given filter, and verifies
"""Runs gtest_flag_unittest_ with the given filter, and verifies
that the right set of tests were run.
that the right set of tests were run.
"""
"""
# Adjust tests_to_run in case value parameterized tests are disabled
# in the binary.
global
param_tests_present
if
not
param_tests_present
:
tests_to_run
=
list
(
sets
.
Set
(
tests_to_run
)
-
sets
.
Set
(
PARAM_TESTS
))
# First, tests using GTEST_FILTER.
# First, tests using GTEST_FILTER.
...
@@ -155,6 +176,15 @@ class GTestFilterUnitTest(unittest.TestCase):
...
@@ -155,6 +176,15 @@ class GTestFilterUnitTest(unittest.TestCase):
tests_run
=
Run
(
command
)
tests_run
=
Run
(
command
)
self
.
AssertSetEqual
(
tests_run
,
tests_to_run
)
self
.
AssertSetEqual
(
tests_run
,
tests_to_run
)
def
setUp
(
self
):
"""Sets up test case. Determines whether value-parameterized tests are
enabled in the binary and sets flags accordingly.
"""
global
param_tests_present
if
param_tests_present
is
None
:
param_tests_present
=
PARAM_TEST_REGEX
.
search
(
'
\n
'
.
join
(
os
.
popen
(
COMMAND
,
'r'
).
readlines
()))
is
not
None
def
testDefaultBehavior
(
self
):
def
testDefaultBehavior
(
self
):
"""Tests the behavior of not specifying the filter."""
"""Tests the behavior of not specifying the filter."""
...
@@ -189,20 +219,19 @@ class GTestFilterUnitTest(unittest.TestCase):
...
@@ -189,20 +219,19 @@ class GTestFilterUnitTest(unittest.TestCase):
def
testFilterByTest
(
self
):
def
testFilterByTest
(
self
):
"""Tests filtering by test name."""
"""Tests filtering by test name."""
self
.
RunAndVerify
(
'*.Test
1
'
,
[
'BarTest.Test
1
'
,
'BazTest.Test
1
'
])
self
.
RunAndVerify
(
'*.Test
One
'
,
[
'BarTest.Test
One
'
,
'BazTest.Test
One
'
])
def
testWildcardInTestCaseName
(
self
):
def
testWildcardInTestCaseName
(
self
):
"""Tests using wildcard in the test case name."""
"""Tests using wildcard in the test case name."""
self
.
RunAndVerify
(
'*a*.*'
,
[
self
.
RunAndVerify
(
'*a*.*'
,
[
'BarTest.Test
1
'
,
'BarTest.Test
One
'
,
'BarTest.Test
2
'
,
'BarTest.Test
Two
'
,
'BarTest.Test
3
'
,
'BarTest.Test
Three
'
,
'BazTest.Test
1
'
,
'BazTest.Test
One
'
,
'BazTest.TestA'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
'BazTest.TestB'
,]
+
PARAM_TESTS
)
])
def
testWildcardInTestName
(
self
):
def
testWildcardInTestName
(
self
):
"""Tests using wildcard in the test name."""
"""Tests using wildcard in the test name."""
...
@@ -215,7 +244,7 @@ class GTestFilterUnitTest(unittest.TestCase):
...
@@ -215,7 +244,7 @@ class GTestFilterUnitTest(unittest.TestCase):
self
.
RunAndVerify
(
'*z*'
,
[
self
.
RunAndVerify
(
'*z*'
,
[
'FooTest.Xyz'
,
'FooTest.Xyz'
,
'BazTest.Test
1
'
,
'BazTest.Test
One
'
,
'BazTest.TestA'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
'BazTest.TestB'
,
])
])
...
@@ -236,24 +265,24 @@ class GTestFilterUnitTest(unittest.TestCase):
...
@@ -236,24 +265,24 @@ class GTestFilterUnitTest(unittest.TestCase):
def
testThreePatterns
(
self
):
def
testThreePatterns
(
self
):
"""Tests filters that consist of three patterns."""
"""Tests filters that consist of three patterns."""
self
.
RunAndVerify
(
'*oo*:*A*:*
1
'
,
[
self
.
RunAndVerify
(
'*oo*:*A*:*
One
'
,
[
'FooTest.Abc'
,
'FooTest.Abc'
,
'FooTest.Xyz'
,
'FooTest.Xyz'
,
'BarTest.Test
1
'
,
'BarTest.Test
One
'
,
'BazTest.Test
1
'
,
'BazTest.Test
One
'
,
'BazTest.TestA'
,
'BazTest.TestA'
,
])
])
# The 2nd pattern is empty.
# The 2nd pattern is empty.
self
.
RunAndVerify
(
'*oo*::*
1
'
,
[
self
.
RunAndVerify
(
'*oo*::*
One
'
,
[
'FooTest.Abc'
,
'FooTest.Abc'
,
'FooTest.Xyz'
,
'FooTest.Xyz'
,
'BarTest.Test
1
'
,
'BarTest.Test
One
'
,
'BazTest.Test
1
'
,
'BazTest.Test
One
'
,
])
])
# The last 2 patterns are empty.
# The last 2 patterns are empty.
...
@@ -266,49 +295,69 @@ class GTestFilterUnitTest(unittest.TestCase):
...
@@ -266,49 +295,69 @@ class GTestFilterUnitTest(unittest.TestCase):
self
.
RunAndVerify
(
'*-FooTest.Abc'
,
[
self
.
RunAndVerify
(
'*-FooTest.Abc'
,
[
'FooTest.Xyz'
,
'FooTest.Xyz'
,
'BarTest.Test
1
'
,
'BarTest.Test
One
'
,
'BarTest.Test
2
'
,
'BarTest.Test
Two
'
,
'BarTest.Test
3
'
,
'BarTest.Test
Three
'
,
'BazTest.Test
1
'
,
'BazTest.Test
One
'
,
'BazTest.TestA'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
'BazTest.TestB'
,
])
]
+
PARAM_TESTS
)
self
.
RunAndVerify
(
'*-FooTest.Abc:BazTest.*'
,
[
self
.
RunAndVerify
(
'*-FooTest.Abc:BazTest.*'
,
[
'FooTest.Xyz'
,
'FooTest.Xyz'
,
'BarTest.Test
1
'
,
'BarTest.Test
One
'
,
'BarTest.Test
2
'
,
'BarTest.Test
Two
'
,
'BarTest.Test
3
'
,
'BarTest.Test
Three
'
,
])
]
+
PARAM_TESTS
)
self
.
RunAndVerify
(
'BarTest.*-BarTest.Test
1
'
,
[
self
.
RunAndVerify
(
'BarTest.*-BarTest.Test
One
'
,
[
'BarTest.Test
2
'
,
'BarTest.Test
Two
'
,
'BarTest.Test
3
'
,
'BarTest.Test
Three
'
,
])
])
# Tests without leading '*'.
# Tests without leading '*'.
self
.
RunAndVerify
(
'-FooTest.Abc:FooTest.Xyz'
,
[
self
.
RunAndVerify
(
'-FooTest.Abc:FooTest.Xyz'
,
[
'BarTest.Test
1
'
,
'BarTest.Test
One
'
,
'BarTest.Test
2
'
,
'BarTest.Test
Two
'
,
'BarTest.Test
3
'
,
'BarTest.Test
Three
'
,
'BazTest.Test
1
'
,
'BazTest.Test
One
'
,
'BazTest.TestA'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
'BazTest.TestB'
,
]
+
PARAM_TESTS
)
# Value parameterized tests.
self
.
RunAndVerify
(
'*/*'
,
PARAM_TESTS
)
# Value parameterized tests filtering by the sequence name.
self
.
RunAndVerify
(
'SeqP/*'
,
[
'SeqP/ParamTest.TestX/0'
,
'SeqP/ParamTest.TestX/1'
,
'SeqP/ParamTest.TestY/0'
,
'SeqP/ParamTest.TestY/1'
,
])
# Value parameterized tests filtering by the test name.
self
.
RunAndVerify
(
'*/0'
,
[
'SeqP/ParamTest.TestX/0'
,
'SeqP/ParamTest.TestY/0'
,
'SeqQ/ParamTest.TestX/0'
,
'SeqQ/ParamTest.TestY/0'
,
])
])
def
testFlagOverridesEnvVar
(
self
):
def
testFlagOverridesEnvVar
(
self
):
"""Tests that the --gtest_filter flag overrides the GTEST_FILTER
"""Tests that the --gtest_filter flag overrides the GTEST_FILTER
environment variable."""
environment variable.
"""
SetEnvVar
(
FILTER_ENV_VAR
,
'Foo*'
)
SetEnvVar
(
FILTER_ENV_VAR
,
'Foo*'
)
command
=
'%s --%s=%s'
%
(
COMMAND
,
FILTER_FLAG
,
'*
1
'
)
command
=
'%s --%s=%s'
%
(
COMMAND
,
FILTER_FLAG
,
'*
One
'
)
tests_run
=
Run
(
command
)
tests_run
=
Run
(
command
)
SetEnvVar
(
FILTER_ENV_VAR
,
None
)
SetEnvVar
(
FILTER_ENV_VAR
,
None
)
self
.
AssertSetEqual
(
tests_run
,
[
'BarTest.Test
1
'
,
'BazTest.Test
1
'
])
self
.
AssertSetEqual
(
tests_run
,
[
'BarTest.Test
One
'
,
'BazTest.Test
One
'
])
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
...
...
test/gtest_filter_unittest_.cc
View file @
3d704217
...
@@ -58,19 +58,19 @@ TEST_F(FooTest, Xyz) {
...
@@ -58,19 +58,19 @@ TEST_F(FooTest, Xyz) {
// Test case BarTest.
// Test case BarTest.
TEST
(
BarTest
,
Test
1
)
{
TEST
(
BarTest
,
Test
One
)
{
}
}
TEST
(
BarTest
,
Test
2
)
{
TEST
(
BarTest
,
Test
Two
)
{
}
}
TEST
(
BarTest
,
Test
3
)
{
TEST
(
BarTest
,
Test
Three
)
{
}
}
// Test case BazTest.
// Test case BazTest.
TEST
(
BazTest
,
Test
1
)
{
TEST
(
BazTest
,
Test
One
)
{
FAIL
()
<<
"Expected failure."
;
FAIL
()
<<
"Expected failure."
;
}
}
...
@@ -80,6 +80,20 @@ TEST(BazTest, TestA) {
...
@@ -80,6 +80,20 @@ TEST(BazTest, TestA) {
TEST
(
BazTest
,
TestB
)
{
TEST
(
BazTest
,
TestB
)
{
}
}
#ifdef GTEST_HAS_PARAM_TEST
class
ParamTest
:
public
testing
::
TestWithParam
<
int
>
{
};
TEST_P
(
ParamTest
,
TestX
)
{
}
TEST_P
(
ParamTest
,
TestY
)
{
}
INSTANTIATE_TEST_CASE_P
(
SeqP
,
ParamTest
,
testing
::
Values
(
1
,
2
));
INSTANTIATE_TEST_CASE_P
(
SeqQ
,
ParamTest
,
testing
::
Values
(
5
,
6
));
#endif // GTEST_HAS_PARAM_TEST
}
// namespace
}
// namespace
...
...
test/gtest_repeat_test.cc
View file @
3d704217
...
@@ -121,6 +121,24 @@ TEST(BarDeathTest, ThreadSafeAndFast) {
...
@@ -121,6 +121,24 @@ TEST(BarDeathTest, ThreadSafeAndFast) {
#endif // GTEST_HAS_DEATH_TEST
#endif // GTEST_HAS_DEATH_TEST
}
}
#ifdef GTEST_HAS_PARAM_TEST
int
g_param_test_count
=
0
;
const
int
kNumberOfParamTests
=
10
;
class
MyParamTest
:
public
testing
::
TestWithParam
<
int
>
{};
TEST_P
(
MyParamTest
,
ShouldPass
)
{
// TODO(vladl@google.com): Make parameter value checking robust
// WRT order of tests.
GTEST_CHECK_INT_EQ_
(
g_param_test_count
%
kNumberOfParamTests
,
GetParam
());
g_param_test_count
++
;
}
INSTANTIATE_TEST_CASE_P
(
MyParamSequence
,
MyParamTest
,
testing
::
Range
(
0
,
kNumberOfParamTests
));
#endif // GTEST_HAS_PARAM_TEST
// Resets the count for each test.
// Resets the count for each test.
void
ResetCounts
()
{
void
ResetCounts
()
{
g_environment_set_up_count
=
0
;
g_environment_set_up_count
=
0
;
...
@@ -128,6 +146,9 @@ void ResetCounts() {
...
@@ -128,6 +146,9 @@ void ResetCounts() {
g_should_fail_count
=
0
;
g_should_fail_count
=
0
;
g_should_pass_count
=
0
;
g_should_pass_count
=
0
;
g_death_test_count
=
0
;
g_death_test_count
=
0
;
#ifdef GTEST_HAS_PARAM_TEST
g_param_test_count
=
0
;
#endif // GTEST_HAS_PARAM_TEST
}
}
// Checks that the count for each test is expected.
// Checks that the count for each test is expected.
...
@@ -137,6 +158,9 @@ void CheckCounts(int expected) {
...
@@ -137,6 +158,9 @@ void CheckCounts(int expected) {
GTEST_CHECK_INT_EQ_
(
expected
,
g_should_fail_count
);
GTEST_CHECK_INT_EQ_
(
expected
,
g_should_fail_count
);
GTEST_CHECK_INT_EQ_
(
expected
,
g_should_pass_count
);
GTEST_CHECK_INT_EQ_
(
expected
,
g_should_pass_count
);
GTEST_CHECK_INT_EQ_
(
expected
,
g_death_test_count
);
GTEST_CHECK_INT_EQ_
(
expected
,
g_death_test_count
);
#ifdef GTEST_HAS_PARAM_TEST
GTEST_CHECK_INT_EQ_
(
expected
*
kNumberOfParamTests
,
g_param_test_count
);
#endif // GTEST_HAS_PARAM_TEST
}
}
// Tests the behavior of Google Test when --gtest_repeat is not specified.
// Tests the behavior of Google Test when --gtest_repeat is not specified.
...
@@ -179,6 +203,9 @@ void TestRepeatWithFilterForSuccessfulTests(int repeat) {
...
@@ -179,6 +203,9 @@ void TestRepeatWithFilterForSuccessfulTests(int repeat) {
GTEST_CHECK_INT_EQ_
(
0
,
g_should_fail_count
);
GTEST_CHECK_INT_EQ_
(
0
,
g_should_fail_count
);
GTEST_CHECK_INT_EQ_
(
repeat
,
g_should_pass_count
);
GTEST_CHECK_INT_EQ_
(
repeat
,
g_should_pass_count
);
GTEST_CHECK_INT_EQ_
(
repeat
,
g_death_test_count
);
GTEST_CHECK_INT_EQ_
(
repeat
,
g_death_test_count
);
#ifdef GTEST_HAS_PARAM_TEST
GTEST_CHECK_INT_EQ_
(
repeat
*
kNumberOfParamTests
,
g_param_test_count
);
#endif // GTEST_HAS_PARAM_TEST
}
}
// Tests using --gtest_repeat when --gtest_filter specifies a set of
// Tests using --gtest_repeat when --gtest_filter specifies a set of
...
@@ -194,6 +221,9 @@ void TestRepeatWithFilterForFailedTests(int repeat) {
...
@@ -194,6 +221,9 @@ void TestRepeatWithFilterForFailedTests(int repeat) {
GTEST_CHECK_INT_EQ_
(
repeat
,
g_should_fail_count
);
GTEST_CHECK_INT_EQ_
(
repeat
,
g_should_fail_count
);
GTEST_CHECK_INT_EQ_
(
0
,
g_should_pass_count
);
GTEST_CHECK_INT_EQ_
(
0
,
g_should_pass_count
);
GTEST_CHECK_INT_EQ_
(
0
,
g_death_test_count
);
GTEST_CHECK_INT_EQ_
(
0
,
g_death_test_count
);
#ifdef GTEST_HAS_PARAM_TEST
GTEST_CHECK_INT_EQ_
(
0
,
g_param_test_count
);
#endif // GTEST_HAS_PARAM_TEST
}
}
}
// namespace
}
// namespace
...
...
test/gtest_unittest.cc
View file @
3d704217
...
@@ -109,6 +109,8 @@ using testing::internal::AppendUserMessage;
...
@@ -109,6 +109,8 @@ using testing::internal::AppendUserMessage;
using
testing
::
internal
::
CodePointToUtf8
;
using
testing
::
internal
::
CodePointToUtf8
;
using
testing
::
internal
::
EqFailure
;
using
testing
::
internal
::
EqFailure
;
using
testing
::
internal
::
FloatingPoint
;
using
testing
::
internal
::
FloatingPoint
;
using
testing
::
internal
::
GetCurrentOsStackTraceExceptTop
;
using
testing
::
internal
::
GetFailedPartCount
;
using
testing
::
internal
::
GTestFlagSaver
;
using
testing
::
internal
::
GTestFlagSaver
;
using
testing
::
internal
::
Int32
;
using
testing
::
internal
::
Int32
;
using
testing
::
internal
::
List
;
using
testing
::
internal
::
List
;
...
@@ -899,6 +901,13 @@ TEST_F(TestResultTest, failed_part_count) {
...
@@ -899,6 +901,13 @@ TEST_F(TestResultTest, failed_part_count) {
ASSERT_EQ
(
1u
,
r2
->
failed_part_count
());
ASSERT_EQ
(
1u
,
r2
->
failed_part_count
());
}
}
// Tests testing::internal::GetFailedPartCount().
TEST_F
(
TestResultTest
,
GetFailedPartCount
)
{
ASSERT_EQ
(
0u
,
GetFailedPartCount
(
r0
));
ASSERT_EQ
(
0u
,
GetFailedPartCount
(
r1
));
ASSERT_EQ
(
1u
,
GetFailedPartCount
(
r2
));
}
// Tests TestResult::total_part_count()
// Tests TestResult::total_part_count()
TEST_F
(
TestResultTest
,
total_part_count
)
{
TEST_F
(
TestResultTest
,
total_part_count
)
{
ASSERT_EQ
(
0u
,
r0
->
total_part_count
());
ASSERT_EQ
(
0u
,
r0
->
total_part_count
());
...
@@ -4914,6 +4923,14 @@ TEST(ThreadLocalTest, Init) {
...
@@ -4914,6 +4923,14 @@ TEST(ThreadLocalTest, Init) {
EXPECT_EQ
(
&
i
,
t2
.
get
());
EXPECT_EQ
(
&
i
,
t2
.
get
());
}
}
TEST
(
GetCurrentOsStackTraceExceptTopTest
,
ReturnsTheStackTrace
)
{
testing
::
UnitTest
*
const
unit_test
=
testing
::
UnitTest
::
GetInstance
();
// We don't have a stack walker in Google Test yet.
EXPECT_STREQ
(
""
,
GetCurrentOsStackTraceExceptTop
(
unit_test
,
0
).
c_str
());
EXPECT_STREQ
(
""
,
GetCurrentOsStackTraceExceptTop
(
unit_test
,
1
).
c_str
());
}
#ifndef GTEST_OS_SYMBIAN
#ifndef GTEST_OS_SYMBIAN
// We will want to integrate running the unittests to a different
// We will want to integrate running the unittests to a different
// main application on Symbian.
// main application on Symbian.
...
...
xcode/Config/InternalTestTarget.xcconfig
View file @
3d704217
...
@@ -5,4 +5,4 @@
...
@@ -5,4 +5,4 @@
// is set in the "Based On:" dropdown in the "Target" info dialog.
// is set in the "Based On:" dropdown in the "Target" info dialog.
PRODUCT_NAME = $(TARGET_NAME)
PRODUCT_NAME = $(TARGET_NAME)
HEADER_SEARCH_PATHS = "../"
HEADER_SEARCH_PATHS = ../ ../include
\ No newline at end of file
xcode/Config/TestTarget.xcconfig
View file @
3d704217
...
@@ -5,3 +5,4 @@
...
@@ -5,3 +5,4 @@
// is set in the "Based On:" dropdown in the "Target" info dialog.
// is set in the "Based On:" dropdown in the "Target" info dialog.
PRODUCT_NAME = $(TARGET_NAME)
PRODUCT_NAME = $(TARGET_NAME)
HEADER_SEARCH_PATHS = ../include
xcode/Scripts/runtests.sh
View file @
3d704217
...
@@ -12,6 +12,8 @@ test_executables=("$BUILT_PRODUCTS_DIR/sample1_unittest"
...
@@ -12,6 +12,8 @@ test_executables=("$BUILT_PRODUCTS_DIR/sample1_unittest"
"
$BUILT_PRODUCTS_DIR
/sample4_unittest"
"
$BUILT_PRODUCTS_DIR
/sample4_unittest"
"
$BUILT_PRODUCTS_DIR
/sample5_unittest"
"
$BUILT_PRODUCTS_DIR
/sample5_unittest"
"
$BUILT_PRODUCTS_DIR
/sample6_unittest"
"
$BUILT_PRODUCTS_DIR
/sample6_unittest"
"
$BUILT_PRODUCTS_DIR
/sample7_unittest"
"
$BUILT_PRODUCTS_DIR
/sample8_unittest"
"
$BUILT_PRODUCTS_DIR
/gtest_unittest"
"
$BUILT_PRODUCTS_DIR
/gtest_unittest"
"
$BUILT_PRODUCTS_DIR
/gtest-death-test_test"
"
$BUILT_PRODUCTS_DIR
/gtest-death-test_test"
...
@@ -28,6 +30,9 @@ test_executables=("$BUILT_PRODUCTS_DIR/sample1_unittest"
...
@@ -28,6 +30,9 @@ test_executables=("$BUILT_PRODUCTS_DIR/sample1_unittest"
"
$BUILT_PRODUCTS_DIR
/gtest_stress_test"
"
$BUILT_PRODUCTS_DIR
/gtest_stress_test"
"
$BUILT_PRODUCTS_DIR
/gtest_test_part_test"
"
$BUILT_PRODUCTS_DIR
/gtest_test_part_test"
"
$BUILT_PRODUCTS_DIR
/gtest-typed-test_test"
"
$BUILT_PRODUCTS_DIR
/gtest-typed-test_test"
"
$BUILT_PRODUCTS_DIR
/gtest-param-test_test"
"
$BUILT_PRODUCTS_DIR
/gtest-linked_ptr_test"
"
$BUILT_PRODUCTS_DIR
/gtest-port_test"
"
$BUILT_PRODUCTS_DIR
/gtest_output_test.py"
"
$BUILT_PRODUCTS_DIR
/gtest_output_test.py"
"
$BUILT_PRODUCTS_DIR
/gtest_color_test.py"
"
$BUILT_PRODUCTS_DIR
/gtest_color_test.py"
...
...
xcode/gtest.xcodeproj/project.pbxproj
View file @
3d704217
...
@@ -20,11 +20,14 @@
...
@@ -20,11 +20,14 @@
3B238F690E828B6100846E11
/* PBXTargetDependency */
,
3B238F690E828B6100846E11
/* PBXTargetDependency */
,
3B238F6B0E828B6100846E11
/* PBXTargetDependency */
,
3B238F6B0E828B6100846E11
/* PBXTargetDependency */
,
3B238F6D0E828B6100846E11
/* PBXTargetDependency */
,
3B238F6D0E828B6100846E11
/* PBXTargetDependency */
,
4539C94C0EC2823500A70F4C
/* PBXTargetDependency */
,
4539C94A0EC2823500A70F4C
/* PBXTargetDependency */
,
3B238F6F0E828B7100846E11
/* PBXTargetDependency */
,
3B238F6F0E828B7100846E11
/* PBXTargetDependency */
,
3B238F710E828B7100846E11
/* PBXTargetDependency */
,
3B238F710E828B7100846E11
/* PBXTargetDependency */
,
3B238F730E828B7100846E11
/* PBXTargetDependency */
,
3B238F730E828B7100846E11
/* PBXTargetDependency */
,
3B238F750E828B7100846E11
/* PBXTargetDependency */
,
3B238F750E828B7100846E11
/* PBXTargetDependency */
,
3B238F790E828B7100846E11
/* PBXTargetDependency */
,
3B238F790E828B7100846E11
/* PBXTargetDependency */
,
4539C95F0EC2833100A70F4C
/* PBXTargetDependency */
,
3B238F7B0E828B7100846E11
/* PBXTargetDependency */
,
3B238F7B0E828B7100846E11
/* PBXTargetDependency */
,
3B238F7D0E828B7100846E11
/* PBXTargetDependency */
,
3B238F7D0E828B7100846E11
/* PBXTargetDependency */
,
3B238F7F0E828B7100846E11
/* PBXTargetDependency */
,
3B238F7F0E828B7100846E11
/* PBXTargetDependency */
,
...
@@ -46,6 +49,8 @@
...
@@ -46,6 +49,8 @@
3B238F9B0E828B7100846E11
/* PBXTargetDependency */
,
3B238F9B0E828B7100846E11
/* PBXTargetDependency */
,
3B238F9D0E828B7100846E11
/* PBXTargetDependency */
,
3B238F9D0E828B7100846E11
/* PBXTargetDependency */
,
3B238F9F0E828B7100846E11
/* PBXTargetDependency */
,
3B238F9F0E828B7100846E11
/* PBXTargetDependency */
,
4539C9B30EC284C300A70F4C
/* PBXTargetDependency */
,
4539C9B10EC284C300A70F4C
/* PBXTargetDependency */
,
);
);
name
=
Check
;
name
=
Check
;
productName
=
Check
;
productName
=
Check
;
...
@@ -184,6 +189,21 @@
...
@@ -184,6 +189,21 @@
408454BC0E97098200AC66C2
/* gtest-typed-test2_test.cc in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
3B238BF50E7FE13B00846E11
/* gtest-typed-test2_test.cc */
;
};
408454BC0E97098200AC66C2
/* gtest-typed-test2_test.cc in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
3B238BF50E7FE13B00846E11
/* gtest-typed-test2_test.cc */
;
};
40D2095B0E9FFBE500191629
/* gtest_sole_header_test.cc in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
40D209590E9FFBAA00191629
/* gtest_sole_header_test.cc */
;
};
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 */
;
};
40D2095C0E9FFC0700191629
/* gtest_stress_test.cc in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
40D2095A0E9FFBAA00191629
/* gtest_stress_test.cc */
;
};
4539C90B0EC27FBC00A70F4C
/* gtest.framework in Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
3B87D22D0E96C038000D1852
/* gtest.framework */
;
};
4539C9170EC27FC000A70F4C
/* gtest.framework in Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
3B87D22D0E96C038000D1852
/* gtest.framework */
;
};
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 */
;
};
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 */
;
};
4539C9540EC282D400A70F4C
/* gtest.framework in Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
3B87D22D0E96C038000D1852
/* gtest.framework */
;
};
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 */
;
};
4539C99A0EC283A800A70F4C
/* gtest.framework in Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
3B87D22D0E96C038000D1852
/* gtest.framework */
;
};
4539C9A10EC283E400A70F4C
/* gtest-port_test.cc in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
4539C9A00EC283E400A70F4C
/* gtest-port_test.cc */
;
};
4539C9A80EC2840700A70F4C
/* gtest.framework in Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
3B87D22D0E96C038000D1852
/* gtest.framework */
;
};
4539C9AF0EC2843000A70F4C
/* gtest-linked_ptr_test.cc in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
4539C9AE0EC2843000A70F4C
/* gtest-linked_ptr_test.cc */
;
};
/* End PBXBuildFile section */
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
/* Begin PBXContainerItemProxy section */
...
@@ -733,6 +753,76 @@
...
@@ -733,6 +753,76 @@
remoteGlobalIDString
=
40C44ADC0E3798F4008FCC51
;
remoteGlobalIDString
=
40C44ADC0E3798F4008FCC51
;
remoteInfo
=
Version.h
;
remoteInfo
=
Version.h
;
};
};
4539C9070EC27FBC00A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
8D07F2BC0486CC7A007CD1D0
;
remoteInfo
=
gtest
;
};
4539C9130EC27FC000A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
8D07F2BC0486CC7A007CD1D0
;
remoteInfo
=
gtest
;
};
4539C9490EC2823500A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
4539C9110EC27FC000A70F4C
;
remoteInfo
=
sample8_unittest
;
};
4539C94B0EC2823500A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
4539C9050EC27FBC00A70F4C
;
remoteInfo
=
sample7_unittest
;
};
4539C94F0EC282D400A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
8D07F2BC0486CC7A007CD1D0
;
remoteInfo
=
gtest
;
};
4539C95E0EC2833100A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
4539C94D0EC282D400A70F4C
;
remoteInfo
=
"gtest-param-test_test"
;
};
4539C9950EC283A800A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
8D07F2BC0486CC7A007CD1D0
;
remoteInfo
=
gtest
;
};
4539C9A40EC2840700A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
8D07F2BC0486CC7A007CD1D0
;
remoteInfo
=
gtest
;
};
4539C9B00EC284C300A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
4539C9A20EC2840700A70F4C
;
remoteInfo
=
"gtest-linked_ptr_test"
;
};
4539C9B20EC284C300A70F4C
/* PBXContainerItemProxy */
=
{
isa
=
PBXContainerItemProxy
;
containerPortal
=
0867D690FE84028FC02AAC07
/* Project object */
;
proxyType
=
1
;
remoteGlobalIDString
=
4539C9930EC283A800A70F4C
;
remoteInfo
=
"gtest-port_test"
;
};
/* End PBXContainerItemProxy section */
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
/* Begin PBXCopyFilesBuildPhase section */
...
@@ -745,6 +835,9 @@
...
@@ -745,6 +835,9 @@
404884A00E2F7BE600CF7658
/* gtest-death-test-internal.h in Copy Headers Internal */
,
404884A00E2F7BE600CF7658
/* gtest-death-test-internal.h in Copy Headers Internal */
,
404884A10E2F7BE600CF7658
/* gtest-filepath.h in Copy Headers Internal */
,
404884A10E2F7BE600CF7658
/* gtest-filepath.h in Copy Headers Internal */
,
404884A20E2F7BE600CF7658
/* gtest-internal.h in Copy Headers Internal */
,
404884A20E2F7BE600CF7658
/* gtest-internal.h in Copy Headers Internal */
,
4539C9380EC280E200A70F4C
/* gtest-linked_ptr.h in Copy Headers Internal */
,
4539C9390EC280E200A70F4C
/* gtest-param-util-generated.h in Copy Headers Internal */
,
4539C93A0EC280E200A70F4C
/* gtest-param-util.h in Copy Headers Internal */
,
404884A30E2F7BE600CF7658
/* gtest-port.h in Copy Headers Internal */
,
404884A30E2F7BE600CF7658
/* gtest-port.h in Copy Headers Internal */
,
404884A40E2F7BE600CF7658
/* gtest-string.h in Copy Headers Internal */
,
404884A40E2F7BE600CF7658
/* gtest-string.h in Copy Headers Internal */
,
3BF6F2A00E79B5AD000F2EEE
/* gtest-type-util.h in Copy Headers Internal */
,
3BF6F2A00E79B5AD000F2EEE
/* gtest-type-util.h in Copy Headers Internal */
,
...
@@ -986,7 +1079,6 @@
...
@@ -986,7 +1079,6 @@
404884A90E2F7CD900CF7658
/* CHANGES */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
text
;
name
=
CHANGES
;
path
=
../CHANGES
;
sourceTree
=
SOURCE_ROOT
;
};
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
;
};
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
;
};
404884AB0E2F7CD900CF7658
/* COPYING */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
text
;
name
=
COPYING
;
path
=
../COPYING
;
sourceTree
=
SOURCE_ROOT
;
};
408453CD0E96CE0700AC66C2
/* gtest.framework */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.framework
;
includeInIndex
=
0
;
name
=
gtest.framework
;
path
=
/Volumes/Work/Repository/perforce/gtest/src/depot/branches/open_gtest_branch/google3/third_party/gtest/xcode/build/Debug/gtest.framework
;
sourceTree
=
"<absolute>"
;
};
40D209590E9FFBAA00191629
/* gtest_sole_header_test.cc */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.cpp.cpp
;
path
=
gtest_sole_header_test.cc
;
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>"
;
};
40D2095A0E9FFBAA00191629
/* gtest_stress_test.cc */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.cpp.cpp
;
path
=
gtest_stress_test.cc
;
sourceTree
=
"<group>"
;
};
40D4CDF10E30E07400294801
/* DebugProject.xcconfig */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
text.xcconfig
;
path
=
DebugProject.xcconfig
;
sourceTree
=
"<group>"
;
};
40D4CDF10E30E07400294801
/* DebugProject.xcconfig */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
text.xcconfig
;
path
=
DebugProject.xcconfig
;
sourceTree
=
"<group>"
;
};
...
@@ -994,6 +1086,23 @@
...
@@ -994,6 +1086,23 @@
40D4CDF30E30E07400294801
/* General.xcconfig */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
text.xcconfig
;
path
=
General.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>"
;
};
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>"
;
};
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 */
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
/* Begin PBXFrameworksBuildPhase section */
...
@@ -1253,6 +1362,46 @@
...
@@ -1253,6 +1362,46 @@
);
);
runOnlyForDeploymentPostprocessing
=
0
;
runOnlyForDeploymentPostprocessing
=
0
;
};
};
4539C90A0EC27FBC00A70F4C
/* Frameworks */
=
{
isa
=
PBXFrameworksBuildPhase
;
buildActionMask
=
2147483647
;
files
=
(
4539C90B0EC27FBC00A70F4C
/* gtest.framework in Frameworks */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
4539C9160EC27FC000A70F4C
/* Frameworks */
=
{
isa
=
PBXFrameworksBuildPhase
;
buildActionMask
=
2147483647
;
files
=
(
4539C9170EC27FC000A70F4C
/* gtest.framework in Frameworks */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
4539C9530EC282D400A70F4C
/* Frameworks */
=
{
isa
=
PBXFrameworksBuildPhase
;
buildActionMask
=
2147483647
;
files
=
(
4539C9540EC282D400A70F4C
/* gtest.framework in Frameworks */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
4539C9990EC283A800A70F4C
/* Frameworks */
=
{
isa
=
PBXFrameworksBuildPhase
;
buildActionMask
=
2147483647
;
files
=
(
4539C99A0EC283A800A70F4C
/* gtest.framework in Frameworks */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
4539C9A70EC2840700A70F4C
/* Frameworks */
=
{
isa
=
PBXFrameworksBuildPhase
;
buildActionMask
=
2147483647
;
files
=
(
4539C9A80EC2840700A70F4C
/* gtest.framework in Frameworks */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
/* End PBXFrameworksBuildPhase section */
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
/* Begin PBXGroup section */
...
@@ -1261,11 +1410,13 @@
...
@@ -1261,11 +1410,13 @@
children
=
(
children
=
(
3B87D22D0E96C038000D1852
/* gtest.framework */
,
3B87D22D0E96C038000D1852
/* gtest.framework */
,
3B87D22F0E96C038000D1852
/* sample1_unittest */
,
3B87D22F0E96C038000D1852
/* sample1_unittest */
,
3B87D2320E96C038000D1852
/* sample3_unittest */
,
3B87D2350E96C038000D1852
/* sample2_unittest */
,
3B87D2350E96C038000D1852
/* sample2_unittest */
,
3B87D2320E96C038000D1852
/* sample3_unittest */
,
3B87D2380E96C038000D1852
/* sample4_unittest */
,
3B87D2380E96C038000D1852
/* sample4_unittest */
,
3B87D2800E96C039000D1852
/* sample5_unittest */
,
3B87D2800E96C039000D1852
/* sample5_unittest */
,
3B87D2830E96C039000D1852
/* sample6_unittest */
,
3B87D2830E96C039000D1852
/* sample6_unittest */
,
4539C90F0EC27FBC00A70F4C
/* sample7_unittest */
,
4539C91B0EC27FC000A70F4C
/* sample8_unittest */
,
3B87D23B0E96C038000D1852
/* gtest_xml_output_unittest_ */
,
3B87D23B0E96C038000D1852
/* gtest_xml_output_unittest_ */
,
3B87D23E0E96C038000D1852
/* gtest_xml_outfile2_test_ */
,
3B87D23E0E96C038000D1852
/* gtest_xml_outfile2_test_ */
,
3B87D2410E96C038000D1852
/* gtest_xml_outfile1_test_ */
,
3B87D2410E96C038000D1852
/* gtest_xml_outfile1_test_ */
,
...
@@ -1292,6 +1443,10 @@
...
@@ -1292,6 +1443,10 @@
3B87D27D0E96C039000D1852
/* gtest-message_test */
,
3B87D27D0E96C039000D1852
/* gtest-message_test */
,
3B87D2860E96C039000D1852
/* gtest-death-test_test */
,
3B87D2860E96C039000D1852
/* gtest-death-test_test */
,
3B87D2890E96C039000D1852
/* gtest-filepath_test */
,
3B87D2890E96C039000D1852
/* gtest-filepath_test */
,
4539C9580EC282D400A70F4C
/* gtest-param-test_test */
,
4539C99E0EC283A800A70F4C
/* gtest-port_test */
,
4539C9AC0EC2840700A70F4C
/* gtest-linked_ptr_test */
,
4539C8FF0EC27F6400A70F4C
/* gtest.framework */
,
);
);
name
=
Products
;
name
=
Products
;
sourceTree
=
"<group>"
;
sourceTree
=
"<group>"
;
...
@@ -1328,8 +1483,12 @@
...
@@ -1328,8 +1483,12 @@
children
=
(
children
=
(
3B238BF10E7FE13B00846E11
/* gtest-death-test_test.cc */
,
3B238BF10E7FE13B00846E11
/* gtest-death-test_test.cc */
,
3B238BF20E7FE13B00846E11
/* gtest-filepath_test.cc */
,
3B238BF20E7FE13B00846E11
/* gtest-filepath_test.cc */
,
4539C9AE0EC2843000A70F4C
/* gtest-linked_ptr_test.cc */
,
3B238BF30E7FE13B00846E11
/* gtest-message_test.cc */
,
3B238BF30E7FE13B00846E11
/* gtest-message_test.cc */
,
3B238BF40E7FE13B00846E11
/* gtest-options_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 */
,
3B238BF50E7FE13B00846E11
/* gtest-typed-test2_test.cc */
,
3B238BF60E7FE13B00846E11
/* gtest-typed-test_test.cc */
,
3B238BF60E7FE13B00846E11
/* gtest-typed-test_test.cc */
,
3B238BF70E7FE13B00846E11
/* gtest-typed-test_test.h */
,
3B238BF70E7FE13B00846E11
/* gtest-typed-test_test.h */
,
...
@@ -1396,14 +1555,15 @@
...
@@ -1396,14 +1555,15 @@
404883DA0E2F799B00CF7658
/* gtest */
=
{
404883DA0E2F799B00CF7658
/* gtest */
=
{
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
404883E10E2F799B00CF7658
/* internal */
,
224A12A20E9EADCC00BD17FD
/* gtest-test-part.h */
,
224A12A20E9EADCC00BD17FD
/* gtest-test-part.h */
,
404883DB0E2F799B00CF7658
/* gtest-death-test.h */
,
404883DB0E2F799B00CF7658
/* gtest-death-test.h */
,
404883DC0E2F799B00CF7658
/* gtest-message.h */
,
404883DC0E2F799B00CF7658
/* gtest-message.h */
,
4539C9330EC280AE00A70F4C
/* gtest-param-test.h */
,
404883DD0E2F799B00CF7658
/* gtest-spi.h */
,
404883DD0E2F799B00CF7658
/* gtest-spi.h */
,
404883DE0E2F799B00CF7658
/* gtest.h */
,
404883DE0E2F799B00CF7658
/* gtest.h */
,
404883DF0E2F799B00CF7658
/* gtest_pred_impl.h */
,
404883DF0E2F799B00CF7658
/* gtest_pred_impl.h */
,
404883E00E2F799B00CF7658
/* gtest_prod.h */
,
404883E00E2F799B00CF7658
/* gtest_prod.h */
,
404883E10E2F799B00CF7658
/* internal */
,
3BF6F2A40E79B616000F2EEE
/* gtest-typed-test.h */
,
3BF6F2A40E79B616000F2EEE
/* gtest-typed-test.h */
,
);
);
path
=
gtest
;
path
=
gtest
;
...
@@ -1415,6 +1575,9 @@
...
@@ -1415,6 +1575,9 @@
404883E20E2F799B00CF7658
/* gtest-death-test-internal.h */
,
404883E20E2F799B00CF7658
/* gtest-death-test-internal.h */
,
404883E30E2F799B00CF7658
/* gtest-filepath.h */
,
404883E30E2F799B00CF7658
/* gtest-filepath.h */
,
404883E40E2F799B00CF7658
/* gtest-internal.h */
,
404883E40E2F799B00CF7658
/* gtest-internal.h */
,
4539C9350EC280E200A70F4C
/* gtest-linked_ptr.h */
,
4539C9360EC280E200A70F4C
/* gtest-param-util-generated.h */
,
4539C9370EC280E200A70F4C
/* gtest-param-util.h */
,
404883E50E2F799B00CF7658
/* gtest-port.h */
,
404883E50E2F799B00CF7658
/* gtest-port.h */
,
404883E60E2F799B00CF7658
/* gtest-string.h */
,
404883E60E2F799B00CF7658
/* gtest-string.h */
,
3BF6F29F0E79B5AD000F2EEE
/* gtest-type-util.h */
,
3BF6F29F0E79B5AD000F2EEE
/* gtest-type-util.h */
,
...
@@ -1425,6 +1588,7 @@
...
@@ -1425,6 +1588,7 @@
404883F70E2F799B00CF7658
/* samples */
=
{
404883F70E2F799B00CF7658
/* samples */
=
{
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
4539C9210EC2805500A70F4C
/* prime_tables.h */
,
404883F80E2F799B00CF7658
/* sample1.cc */
,
404883F80E2F799B00CF7658
/* sample1.cc */
,
404883F90E2F799B00CF7658
/* sample1.h */
,
404883F90E2F799B00CF7658
/* sample1.h */
,
404883FA0E2F799B00CF7658
/* sample1_unittest.cc */
,
404883FA0E2F799B00CF7658
/* sample1_unittest.cc */
,
...
@@ -1438,6 +1602,8 @@
...
@@ -1438,6 +1602,8 @@
404884020E2F799B00CF7658
/* sample4_unittest.cc */
,
404884020E2F799B00CF7658
/* sample4_unittest.cc */
,
404884030E2F799B00CF7658
/* sample5_unittest.cc */
,
404884030E2F799B00CF7658
/* sample5_unittest.cc */
,
22A866180E70A41000F7AE6E
/* sample6_unittest.cc */
,
22A866180E70A41000F7AE6E
/* sample6_unittest.cc */
,
4539C91F0EC2801E00A70F4C
/* sample8_unittest.cc */
,
4539C91D0EC2800600A70F4C
/* sample7_unittest.cc */
,
);
);
name
=
samples
;
name
=
samples
;
path
=
../samples
;
path
=
../samples
;
...
@@ -1490,6 +1656,7 @@
...
@@ -1490,6 +1656,7 @@
files
=
(
files
=
(
404884380E2F799B00CF7658
/* gtest-death-test.h in Headers */
,
404884380E2F799B00CF7658
/* gtest-death-test.h in Headers */
,
404884390E2F799B00CF7658
/* gtest-message.h in Headers */
,
404884390E2F799B00CF7658
/* gtest-message.h in Headers */
,
4539C9340EC280AE00A70F4C
/* gtest-param-test.h in Headers */
,
3BF6F2A50E79B616000F2EEE
/* gtest-typed-test.h in Headers */
,
3BF6F2A50E79B616000F2EEE
/* gtest-typed-test.h in Headers */
,
4048843A0E2F799B00CF7658
/* gtest-spi.h in Headers */
,
4048843A0E2F799B00CF7658
/* gtest-spi.h in Headers */
,
4048843B0E2F799B00CF7658
/* gtest.h in Headers */
,
4048843B0E2F799B00CF7658
/* gtest.h in Headers */
,
...
@@ -2069,6 +2236,91 @@
...
@@ -2069,6 +2236,91 @@
productReference
=
3B87D2800E96C039000D1852
/* sample5_unittest */
;
productReference
=
3B87D2800E96C039000D1852
/* sample5_unittest */
;
productType
=
"com.apple.product-type.tool"
;
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 */
=
{
8D07F2BC0486CC7A007CD1D0
/* gtest */
=
{
isa
=
PBXNativeTarget
;
isa
=
PBXNativeTarget
;
buildConfigurationList
=
4FADC24208B4156D00ABE55E
/* Build configuration list for PBXNativeTarget "gtest" */
;
buildConfigurationList
=
4FADC24208B4156D00ABE55E
/* Build configuration list for PBXNativeTarget "gtest" */
;
...
@@ -2087,7 +2339,7 @@
...
@@ -2087,7 +2339,7 @@
name
=
gtest
;
name
=
gtest
;
productInstallPath
=
"$(HOME)/Library/Frameworks"
;
productInstallPath
=
"$(HOME)/Library/Frameworks"
;
productName
=
gtest
;
productName
=
gtest
;
productReference
=
4
08453CD0E96CE0700AC66C2
/* gtest.framework */
;
productReference
=
4
539C8FF0EC27F6400A70F4C
/* gtest.framework */
;
productType
=
"com.apple.product-type.framework"
;
productType
=
"com.apple.product-type.framework"
;
};
};
/* End PBXNativeTarget section */
/* End PBXNativeTarget section */
...
@@ -2118,6 +2370,8 @@
...
@@ -2118,6 +2370,8 @@
404885E10E2F833000CF7658
/* sample4_unittest */
,
404885E10E2F833000CF7658
/* sample4_unittest */
,
404885EE0E2F833400CF7658
/* sample5_unittest */
,
404885EE0E2F833400CF7658
/* sample5_unittest */
,
22A866010E70A39900F7AE6E
/* sample6_unittest */
,
22A866010E70A39900F7AE6E
/* sample6_unittest */
,
4539C9050EC27FBC00A70F4C
/* sample7_unittest */
,
4539C9110EC27FC000A70F4C
/* sample8_unittest */
,
3B238EF30E8289CE00846E11
/* gtest_unittest */
,
3B238EF30E8289CE00846E11
/* gtest_unittest */
,
3B238C660E81B8B500846E11
/* gtest-death-test_test */
,
3B238C660E81B8B500846E11
/* gtest-death-test_test */
,
3B238D520E82855F00846E11
/* gtest-filepath_test */
,
3B238D520E82855F00846E11
/* gtest-filepath_test */
,
...
@@ -2144,6 +2398,9 @@
...
@@ -2144,6 +2398,9 @@
3B238F150E828A3B00846E11
/* gtest_xml_outfile2_test_ */
,
3B238F150E828A3B00846E11
/* gtest_xml_outfile2_test_ */
,
3B238EE60E8289C900846E11
/* gtest_uninitialized_test_ */
,
3B238EE60E8289C900846E11
/* gtest_uninitialized_test_ */
,
3B238E850E82894800846E11
/* gtest_nc */
,
3B238E850E82894800846E11
/* gtest_nc */
,
4539C94D0EC282D400A70F4C
/* gtest-param-test_test */
,
4539C9930EC283A800A70F4C
/* gtest-port_test */
,
4539C9A20EC2840700A70F4C
/* gtest-linked_ptr_test */
,
40C44ADC0E3798F4008FCC51
/* Version Info */
,
40C44ADC0E3798F4008FCC51
/* Version Info */
,
408454310E96D39000AC66C2
/* Setup Python */
,
408454310E96D39000AC66C2
/* Setup Python */
,
);
);
...
@@ -2470,6 +2727,47 @@
...
@@ -2470,6 +2727,47 @@
);
);
runOnlyForDeploymentPostprocessing
=
0
;
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 */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
8D07F2C10486CC7A007CD1D0
/* Sources */
=
{
8D07F2C10486CC7A007CD1D0
/* Sources */
=
{
isa
=
PBXSourcesBuildPhase
;
isa
=
PBXSourcesBuildPhase
;
buildActionMask
=
2147483647
;
buildActionMask
=
2147483647
;
...
@@ -2877,6 +3175,56 @@
...
@@ -2877,6 +3175,56 @@
target
=
40C44ADC0E3798F4008FCC51
/* Version Info */
;
target
=
40C44ADC0E3798F4008FCC51
/* Version Info */
;
targetProxy
=
40C44AE50E379922008FCC51
/* PBXContainerItemProxy */
;
targetProxy
=
40C44AE50E379922008FCC51
/* PBXContainerItemProxy */
;
};
};
4539C9060EC27FBC00A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
8D07F2BC0486CC7A007CD1D0
/* gtest */
;
targetProxy
=
4539C9070EC27FBC00A70F4C
/* PBXContainerItemProxy */
;
};
4539C9120EC27FC000A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
8D07F2BC0486CC7A007CD1D0
/* gtest */
;
targetProxy
=
4539C9130EC27FC000A70F4C
/* PBXContainerItemProxy */
;
};
4539C94A0EC2823500A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
4539C9110EC27FC000A70F4C
/* sample8_unittest */
;
targetProxy
=
4539C9490EC2823500A70F4C
/* PBXContainerItemProxy */
;
};
4539C94C0EC2823500A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
4539C9050EC27FBC00A70F4C
/* sample7_unittest */
;
targetProxy
=
4539C94B0EC2823500A70F4C
/* PBXContainerItemProxy */
;
};
4539C94E0EC282D400A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
8D07F2BC0486CC7A007CD1D0
/* gtest */
;
targetProxy
=
4539C94F0EC282D400A70F4C
/* PBXContainerItemProxy */
;
};
4539C95F0EC2833100A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
4539C94D0EC282D400A70F4C
/* gtest-param-test_test */
;
targetProxy
=
4539C95E0EC2833100A70F4C
/* PBXContainerItemProxy */
;
};
4539C9940EC283A800A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
8D07F2BC0486CC7A007CD1D0
/* gtest */
;
targetProxy
=
4539C9950EC283A800A70F4C
/* PBXContainerItemProxy */
;
};
4539C9A30EC2840700A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
8D07F2BC0486CC7A007CD1D0
/* gtest */
;
targetProxy
=
4539C9A40EC2840700A70F4C
/* PBXContainerItemProxy */
;
};
4539C9B10EC284C300A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
4539C9A20EC2840700A70F4C
/* gtest-linked_ptr_test */
;
targetProxy
=
4539C9B00EC284C300A70F4C
/* PBXContainerItemProxy */
;
};
4539C9B30EC284C300A70F4C
/* PBXTargetDependency */
=
{
isa
=
PBXTargetDependency
;
target
=
4539C9930EC283A800A70F4C
/* gtest-port_test */
;
targetProxy
=
4539C9B20EC284C300A70F4C
/* PBXContainerItemProxy */
;
};
/* End PBXTargetDependency section */
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
/* Begin XCBuildConfiguration section */
...
@@ -3827,6 +4175,146 @@
...
@@ -3827,6 +4175,146 @@
};
};
name
=
Release
;
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 */
=
{
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
;
};
4539C91A0EC27FC000A70F4C
/* 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
;
};
4539C9560EC282D400A70F4C
/* 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
;
};
4539C9570EC282D400A70F4C
/* 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
;
};
4539C99C0EC283A800A70F4C
/* 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
;
};
4539C99D0EC283A800A70F4C
/* 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
;
};
4539C9AA0EC2840700A70F4C
/* 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
;
};
4539C9AB0EC2840700A70F4C
/* 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
;
};
4FADC24308B4156D00ABE55E
/* Debug */
=
{
4FADC24308B4156D00ABE55E
/* Debug */
=
{
isa
=
XCBuildConfiguration
;
isa
=
XCBuildConfiguration
;
baseConfigurationReference
=
40D4CDF20E30E07400294801
/* FrameworkTarget.xcconfig */
;
baseConfigurationReference
=
40D4CDF20E30E07400294801
/* FrameworkTarget.xcconfig */
;
...
@@ -4195,6 +4683,51 @@
...
@@ -4195,6 +4683,51 @@
defaultConfigurationIsVisible
=
0
;
defaultConfigurationIsVisible
=
0
;
defaultConfigurationName
=
Release
;
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" */
=
{
isa
=
XCConfigurationList
;
buildConfigurations
=
(
4539C9190EC27FC000A70F4C
/* Debug */
,
4539C91A0EC27FC000A70F4C
/* Release */
,
);
defaultConfigurationIsVisible
=
0
;
defaultConfigurationName
=
Release
;
};
4539C9550EC282D400A70F4C
/* Build configuration list for PBXNativeTarget "gtest-param-test_test" */
=
{
isa
=
XCConfigurationList
;
buildConfigurations
=
(
4539C9560EC282D400A70F4C
/* Debug */
,
4539C9570EC282D400A70F4C
/* Release */
,
);
defaultConfigurationIsVisible
=
0
;
defaultConfigurationName
=
Release
;
};
4539C99B0EC283A800A70F4C
/* Build configuration list for PBXNativeTarget "gtest-port_test" */
=
{
isa
=
XCConfigurationList
;
buildConfigurations
=
(
4539C99C0EC283A800A70F4C
/* Debug */
,
4539C99D0EC283A800A70F4C
/* Release */
,
);
defaultConfigurationIsVisible
=
0
;
defaultConfigurationName
=
Release
;
};
4539C9A90EC2840700A70F4C
/* Build configuration list for PBXNativeTarget "gtest-linked_ptr_test" */
=
{
isa
=
XCConfigurationList
;
buildConfigurations
=
(
4539C9AA0EC2840700A70F4C
/* Debug */
,
4539C9AB0EC2840700A70F4C
/* Release */
,
);
defaultConfigurationIsVisible
=
0
;
defaultConfigurationName
=
Release
;
};
4FADC24208B4156D00ABE55E
/* Build configuration list for PBXNativeTarget "gtest" */
=
{
4FADC24208B4156D00ABE55E
/* Build configuration list for PBXNativeTarget "gtest" */
=
{
isa
=
XCConfigurationList
;
isa
=
XCConfigurationList
;
buildConfigurations
=
(
buildConfigurations
=
(
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment