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
3896e3b5
Commit
3896e3b5
authored
Oct 29, 2018
by
Jerry Turcios
Browse files
Merge branch 'master' of
https://github.com/google/googletest
parents
b8a03c80
b9347b31
Changes
36
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
180 additions
and
591 deletions
+180
-591
googletest/include/gtest/gtest.h
googletest/include/gtest/gtest.h
+7
-0
googletest/include/gtest/internal/gtest-death-test-internal.h
...letest/include/gtest/internal/gtest-death-test-internal.h
+31
-31
googletest/include/gtest/internal/gtest-internal.h
googletest/include/gtest/internal/gtest-internal.h
+22
-22
googletest/include/gtest/internal/gtest-linked_ptr.h
googletest/include/gtest/internal/gtest-linked_ptr.h
+0
-243
googletest/include/gtest/internal/gtest-param-util-generated.h
...etest/include/gtest/internal/gtest-param-util-generated.h
+13
-9
googletest/include/gtest/internal/gtest-param-util-generated.h.pump
.../include/gtest/internal/gtest-param-util-generated.h.pump
+5
-1
googletest/include/gtest/internal/gtest-param-util.h
googletest/include/gtest/internal/gtest-param-util.h
+6
-7
googletest/include/gtest/internal/gtest-port.h
googletest/include/gtest/internal/gtest-port.h
+5
-5
googletest/src/gtest-death-test.cc
googletest/src/gtest-death-test.cc
+24
-27
googletest/src/gtest-filepath.cc
googletest/src/gtest-filepath.cc
+5
-5
googletest/src/gtest-port.cc
googletest/src/gtest-port.cc
+38
-38
googletest/src/gtest.cc
googletest/src/gtest.cc
+17
-23
googletest/test/googletest-linked-ptr-test.cc
googletest/test/googletest-linked-ptr-test.cc
+0
-151
googletest/test/googletest-test-part-test.cc
googletest/test/googletest-test-part-test.cc
+1
-1
googletest/test/gtest_all_test.cc
googletest/test/gtest_all_test.cc
+0
-1
googletest/test/gtest_unittest.cc
googletest/test/gtest_unittest.cc
+6
-27
No files found.
googletest/include/gtest/gtest.h
View file @
3896e3b5
...
...
@@ -1449,6 +1449,13 @@ AssertionResult CmpHelperEQFailure(const char* lhs_expression,
false
);
}
// This block of code defines operator==/!=
// to block lexical scope lookup.
// It prevents using invalid operator==/!= defined at namespace scope.
struct
faketype
{};
inline
bool
operator
==
(
faketype
,
faketype
)
{
return
true
;
}
inline
bool
operator
!=
(
faketype
,
faketype
)
{
return
false
;
}
// The helper function for {ASSERT|EXPECT}_EQ.
template
<
typename
T1
,
typename
T2
>
AssertionResult
CmpHelperEQ
(
const
char
*
lhs_expression
,
...
...
googletest/include/gtest/internal/gtest-death-test-internal.h
View file @
3896e3b5
...
...
@@ -186,38 +186,38 @@ GTEST_API_ bool ExitedUnsuccessfully(int exit_status);
// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*,
// ASSERT_EXIT*, and EXPECT_EXIT*.
#
define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
if (::testing::internal::AlwaysTrue()) { \
const ::testing::internal::RE& gtest_regex = (regex); \
::testing::internal::DeathTest* gtest_dt; \
if (!::testing::internal::DeathTest::Create(
#statement, >est_regex,
\
__FILE__, __LINE__, >est_dt)) { \
goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
} \
if (gtest_dt !=
NULL) {
\
::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \
gtest_dt_ptr(gtest_dt); \
switch (gtest_dt->AssumeRole()) { \
case ::testing::internal::DeathTest::OVERSEE_TEST: \
if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \
goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
} \
break; \
case ::testing::internal::DeathTest::EXECUTE_TEST: { \
::testing::internal::DeathTest::ReturnSentinel \
gtest_
sentinel(gtest_dt);
\
GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \
#define GTEST_DEATH_TEST_(statement, predicate, regex, fail)
\
GTEST_AMBIGUOUS_ELSE_BLOCKER_
\
if (::testing::internal::AlwaysTrue()) {
\
const ::testing::internal::RE& gtest_regex = (regex);
\
::testing::internal::DeathTest* gtest_dt;
\
if (!::testing::internal::DeathTest::Create(
\
#statement, >est_regex,
__FILE__, __LINE__, >est_dt)) {
\
goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__);
\
}
\
if (gtest_dt !=
nullptr) {
\
::testing::internal::scoped_ptr< ::testing::internal::DeathTest>
\
gtest_dt_ptr(gtest_dt);
\
switch (gtest_dt->AssumeRole()) {
\
case ::testing::internal::DeathTest::OVERSEE_TEST:
\
if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) {
\
goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__);
\
}
\
break;
\
case ::testing::internal::DeathTest::EXECUTE_TEST: {
\
::testing::internal::DeathTest::ReturnSentinel
gtest_sentinel(
\
gtest_
dt);
\
GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt);
\
gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \
break; \
} \
default: \
break; \
} \
} \
} else \
GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__)
:
\
fail(::testing::internal::DeathTest::LastMessage())
break;
\
}
\
default:
\
break;
\
}
\
}
\
} else
\
GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__)
\
:
fail(::testing::internal::DeathTest::LastMessage())
// The symbol "fail" here expands to something into which a message
// can be streamed.
...
...
googletest/include/gtest/internal/gtest-internal.h
View file @
3896e3b5
...
...
@@ -1400,27 +1400,27 @@ class FlatTuple
test_case_name##_##test_name##_Test
// Helper macro for defining tests.
#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name)
: public parent_class {
\
public:
\
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}
\
private:
\
virtual void TestBody();
\
static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;
\
GTEST_DISALLOW_COPY_AND_ASSIGN_(
\
GTEST_TEST_CLASS_NAME_(test_case_name, test_name));
\
};
\
\
::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)
\
::test_info_ =
\
::testing::
internal::MakeAndRegisterTestInfo(
\
#test_case
_name
, #
test_
name, NULL, NULL,
\
::testing::internal::
CodeLocation(__FILE__, __LINE__),
\
(parent_id),
\
parent_class::SetUpTestCase
, \
parent_class::TearDownTestCase, \
new ::testing::internal::TestFactoryImpl<\
GTEST_TEST_CLASS_NAME_(
test_case_name, test_name)>);\
void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)
\
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name)
\
: public parent_class {
\
public:
\
GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}
\
\
private:
\
virtual void TestBody();
\
static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;
\
GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_case_name,
\
test_name));
\
};
\
\
::testing::
TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name,
\
test
_name
)::
test_
info_ =
\
::testing::internal::
MakeAndRegisterTestInfo(
\
#test_case_name, #test_name, nullptr, nullptr,
\
::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id)
, \
parent_class::SetUpTestCase,
parent_class::TearDownTestCase,
\
new ::testing::internal::TestFactoryImpl<
GTEST_TEST_CLASS_NAME_(
\
test_case_name, test_name)>);
\
void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
googletest/include/gtest/internal/gtest-linked_ptr.h
deleted
100644 → 0
View file @
b8a03c80
// 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.
//
// A "smart" pointer type with reference tracking. Every pointer to a
// particular object is kept on a circular linked list. When the last pointer
// to an object is destroyed or reassigned, the object is deleted.
//
// Used properly, this deletes the object when the last reference goes away.
// There are several caveats:
// - Like all reference counting schemes, cycles lead to leaks.
// - Each smart pointer is actually two pointers (8 bytes instead of 4).
// - Every time a pointer is assigned, the entire list of pointers to that
// object is traversed. This class is therefore NOT SUITABLE when there
// will often be more than two or three pointers to a particular object.
// - References are only tracked as long as linked_ptr<> objects are copied.
// If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS
// will happen (double deletion).
//
// A good use of this class is storing object references in STL containers.
// You can safely put linked_ptr<> in a vector<>.
// Other uses may not be as good.
//
// Note: If you use an incomplete type with linked_ptr<>, the class
// *containing* linked_ptr<> must have a constructor and destructor (even
// if they do nothing!).
//
// Bill Gibbons suggested we use something like this.
//
// Thread Safety:
// Unlike other linked_ptr implementations, in this implementation
// a linked_ptr object is thread-safe in the sense that:
// - it's safe to copy linked_ptr objects concurrently,
// - it's safe to copy *from* a linked_ptr and read its underlying
// raw pointer (e.g. via get()) concurrently, and
// - it's safe to write to two linked_ptrs that point to the same
// shared object concurrently.
// FIXME: rename this to safe_linked_ptr to avoid
// confusion with normal linked_ptr.
// GOOGLETEST_CM0001 DO NOT DELETE
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
#include <stdlib.h>
#include <assert.h>
#include "gtest/internal/gtest-port.h"
namespace
testing
{
namespace
internal
{
// Protects copying of all linked_ptr objects.
GTEST_API_
GTEST_DECLARE_STATIC_MUTEX_
(
g_linked_ptr_mutex
);
// This is used internally by all instances of linked_ptr<>. It needs to be
// a non-template class because different types of linked_ptr<> can refer to
// the same object (linked_ptr<Superclass>(obj) vs linked_ptr<Subclass>(obj)).
// So, it needs to be possible for different types of linked_ptr to participate
// in the same circular linked list, so we need a single class type here.
//
// DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr<T>.
class
linked_ptr_internal
{
public:
// Create a new circle that includes only this instance.
void
join_new
()
{
next_
=
this
;
}
// Many linked_ptr operations may change p.link_ for some linked_ptr
// variable p in the same circle as this object. Therefore we need
// to prevent two such operations from occurring concurrently.
//
// Note that different types of linked_ptr objects can coexist in a
// circle (e.g. linked_ptr<Base>, linked_ptr<Derived1>, and
// linked_ptr<Derived2>). Therefore we must use a single mutex to
// protect all linked_ptr objects. This can create serious
// contention in production code, but is acceptable in a testing
// framework.
// Join an existing circle.
void
join
(
linked_ptr_internal
const
*
ptr
)
GTEST_LOCK_EXCLUDED_
(
g_linked_ptr_mutex
)
{
MutexLock
lock
(
&
g_linked_ptr_mutex
);
linked_ptr_internal
const
*
p
=
ptr
;
while
(
p
->
next_
!=
ptr
)
{
assert
(
p
->
next_
!=
this
&&
"Trying to join() a linked ring we are already in. "
"Is GMock thread safety enabled?"
);
p
=
p
->
next_
;
}
p
->
next_
=
this
;
next_
=
ptr
;
}
// Leave whatever circle we're part of. Returns true if we were the
// last member of the circle. Once this is done, you can join() another.
bool
depart
()
GTEST_LOCK_EXCLUDED_
(
g_linked_ptr_mutex
)
{
MutexLock
lock
(
&
g_linked_ptr_mutex
);
if
(
next_
==
this
)
return
true
;
linked_ptr_internal
const
*
p
=
next_
;
while
(
p
->
next_
!=
this
)
{
assert
(
p
->
next_
!=
next_
&&
"Trying to depart() a linked ring we are not in. "
"Is GMock thread safety enabled?"
);
p
=
p
->
next_
;
}
p
->
next_
=
next_
;
return
false
;
}
private:
mutable
linked_ptr_internal
const
*
next_
;
};
template
<
typename
T
>
class
linked_ptr
{
public:
typedef
T
element_type
;
// Take over ownership of a raw pointer. This should happen as soon as
// possible after the object is created.
explicit
linked_ptr
(
T
*
ptr
=
nullptr
)
{
capture
(
ptr
);
}
~
linked_ptr
()
{
depart
();
}
// Copy an existing linked_ptr<>, adding ourselves to the list of references.
template
<
typename
U
>
linked_ptr
(
linked_ptr
<
U
>
const
&
ptr
)
{
copy
(
&
ptr
);
}
linked_ptr
(
linked_ptr
const
&
ptr
)
{
// NOLINT
assert
(
&
ptr
!=
this
);
copy
(
&
ptr
);
}
// Assignment releases the old value and acquires the new.
template
<
typename
U
>
linked_ptr
&
operator
=
(
linked_ptr
<
U
>
const
&
ptr
)
{
depart
();
copy
(
&
ptr
);
return
*
this
;
}
linked_ptr
&
operator
=
(
linked_ptr
const
&
ptr
)
{
if
(
&
ptr
!=
this
)
{
depart
();
copy
(
&
ptr
);
}
return
*
this
;
}
// Smart pointer members.
void
reset
(
T
*
ptr
=
nullptr
)
{
depart
();
capture
(
ptr
);
}
T
*
get
()
const
{
return
value_
;
}
T
*
operator
->
()
const
{
return
value_
;
}
T
&
operator
*
()
const
{
return
*
value_
;
}
bool
operator
==
(
T
*
p
)
const
{
return
value_
==
p
;
}
bool
operator
!=
(
T
*
p
)
const
{
return
value_
!=
p
;
}
template
<
typename
U
>
bool
operator
==
(
linked_ptr
<
U
>
const
&
ptr
)
const
{
return
value_
==
ptr
.
get
();
}
template
<
typename
U
>
bool
operator
!=
(
linked_ptr
<
U
>
const
&
ptr
)
const
{
return
value_
!=
ptr
.
get
();
}
private:
template
<
typename
U
>
friend
class
linked_ptr
;
T
*
value_
;
linked_ptr_internal
link_
;
void
depart
()
{
if
(
link_
.
depart
())
delete
value_
;
}
void
capture
(
T
*
ptr
)
{
value_
=
ptr
;
link_
.
join_new
();
}
template
<
typename
U
>
void
copy
(
linked_ptr
<
U
>
const
*
ptr
)
{
value_
=
ptr
->
get
();
if
(
value_
)
link_
.
join
(
&
ptr
->
link_
);
else
link_
.
join_new
();
}
};
template
<
typename
T
>
inline
bool
operator
==
(
T
*
ptr
,
const
linked_ptr
<
T
>&
x
)
{
return
ptr
==
x
.
get
();
}
template
<
typename
T
>
inline
bool
operator
!=
(
T
*
ptr
,
const
linked_ptr
<
T
>&
x
)
{
return
ptr
!=
x
.
get
();
}
// A function to convert T* into linked_ptr<T>
// Doing e.g. make_linked_ptr(new FooBarBaz<type>(arg)) is a shorter notation
// for linked_ptr<FooBarBaz<type> >(new FooBarBaz<type>(arg))
template
<
typename
T
>
linked_ptr
<
T
>
make_linked_ptr
(
T
*
ptr
)
{
return
linked_ptr
<
T
>
(
ptr
);
}
}
// namespace internal
}
// namespace testing
#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
googletest/include/gtest/internal/gtest-param-util-generated.h
View file @
3896e3b5
...
...
@@ -47,6 +47,10 @@
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#include <cassert>
#include <memory>
#include "gtest/internal/gtest-param-util.h"
#include "gtest/internal/gtest-port.h"
...
...
@@ -162,7 +166,7 @@ class CartesianProductGenerator2
const
typename
ParamGenerator
<
T2
>::
iterator
begin2_
;
const
typename
ParamGenerator
<
T2
>::
iterator
end2_
;
typename
ParamGenerator
<
T2
>::
iterator
current2_
;
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator2::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -293,7 +297,7 @@ class CartesianProductGenerator3
const
typename
ParamGenerator
<
T3
>::
iterator
begin3_
;
const
typename
ParamGenerator
<
T3
>::
iterator
end3_
;
typename
ParamGenerator
<
T3
>::
iterator
current3_
;
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator3::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -443,7 +447,7 @@ class CartesianProductGenerator4
const
typename
ParamGenerator
<
T4
>::
iterator
begin4_
;
const
typename
ParamGenerator
<
T4
>::
iterator
end4_
;
typename
ParamGenerator
<
T4
>::
iterator
current4_
;
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator4::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -609,7 +613,7 @@ class CartesianProductGenerator5
const
typename
ParamGenerator
<
T5
>::
iterator
begin5_
;
const
typename
ParamGenerator
<
T5
>::
iterator
end5_
;
typename
ParamGenerator
<
T5
>::
iterator
current5_
;
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator5::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -793,7 +797,7 @@ class CartesianProductGenerator6
const
typename
ParamGenerator
<
T6
>::
iterator
begin6_
;
const
typename
ParamGenerator
<
T6
>::
iterator
end6_
;
typename
ParamGenerator
<
T6
>::
iterator
current6_
;
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator6::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -995,7 +999,7 @@ class CartesianProductGenerator7
const
typename
ParamGenerator
<
T7
>::
iterator
begin7_
;
const
typename
ParamGenerator
<
T7
>::
iterator
end7_
;
typename
ParamGenerator
<
T7
>::
iterator
current7_
;
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator7::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -1216,7 +1220,7 @@ class CartesianProductGenerator8
const
typename
ParamGenerator
<
T8
>::
iterator
begin8_
;
const
typename
ParamGenerator
<
T8
>::
iterator
end8_
;
typename
ParamGenerator
<
T8
>::
iterator
current8_
;
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator8::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -1454,7 +1458,7 @@ class CartesianProductGenerator9
const
typename
ParamGenerator
<
T9
>::
iterator
begin9_
;
const
typename
ParamGenerator
<
T9
>::
iterator
end9_
;
typename
ParamGenerator
<
T9
>::
iterator
current9_
;
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator9::Iterator
// No implementation - assignment is unsupported.
...
...
@@ -1709,7 +1713,7 @@ class CartesianProductGenerator10
const
typename
ParamGenerator
<
T10
>::
iterator
begin10_
;
const
typename
ParamGenerator
<
T10
>::
iterator
end10_
;
typename
ParamGenerator
<
T10
>::
iterator
current10_
;
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator10::Iterator
// No implementation - assignment is unsupported.
...
...
googletest/include/gtest/internal/gtest-param-util-generated.h.pump
View file @
3896e3b5
...
...
@@ -43,6 +43,10 @@ $var maxtuple = 10 $$ Maximum number of Combine arguments we want to support.
// GOOGLETEST_CM0001 DO NOT DELETE
#include <assert.h>
#include <memory>
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
...
...
@@ -173,7 +177,7 @@ $for j [[
typename
ParamGenerator
<
T
$
j
>::
iterator
current
$
(
j
)
_
;
]]
link
ed_ptr
<
ParamType
>
current_value_
;
std
::
shar
ed_ptr
<
ParamType
>
current_value_
;
};
// class CartesianProductGenerator$i::Iterator
// No implementation - assignment is unsupported.
...
...
googletest/include/gtest/internal/gtest-param-util.h
View file @
3896e3b5
...
...
@@ -38,13 +38,13 @@
#include <ctype.h>
#include <iterator>
#include <memory>
#include <set>
#include <tuple>
#include <utility>
#include <vector>
#include "gtest/internal/gtest-internal.h"
#include "gtest/internal/gtest-linked_ptr.h"
#include "gtest/internal/gtest-port.h"
#include "gtest/gtest-printers.h"
...
...
@@ -193,7 +193,7 @@ class ParamGenerator {
iterator
end
()
const
{
return
iterator
(
impl_
->
End
());
}
private:
link
ed_ptr
<
const
ParamGeneratorInterface
<
T
>
>
impl_
;
std
::
shar
ed_ptr
<
const
ParamGeneratorInterface
<
T
>
>
impl_
;
};
// Generates values from a range of two comparable values. Can be used to
...
...
@@ -519,9 +519,8 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase {
void
AddTestPattern
(
const
char
*
test_case_name
,
const
char
*
test_base_name
,
TestMetaFactoryBase
<
ParamType
>*
meta_factory
)
{
tests_
.
push_back
(
linked_ptr
<
TestInfo
>
(
new
TestInfo
(
test_case_name
,
test_base_name
,
meta_factory
)));
tests_
.
push_back
(
std
::
shared_ptr
<
TestInfo
>
(
new
TestInfo
(
test_case_name
,
test_base_name
,
meta_factory
)));
}
// INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information
// about a generator.
...
...
@@ -541,7 +540,7 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase {
virtual
void
RegisterTests
()
{
for
(
typename
TestInfoContainer
::
iterator
test_it
=
tests_
.
begin
();
test_it
!=
tests_
.
end
();
++
test_it
)
{
link
ed_ptr
<
TestInfo
>
test_info
=
*
test_it
;
std
::
shar
ed_ptr
<
TestInfo
>
test_info
=
*
test_it
;
for
(
typename
InstantiationContainer
::
iterator
gen_it
=
instantiations_
.
begin
();
gen_it
!=
instantiations_
.
end
();
++
gen_it
)
{
...
...
@@ -605,7 +604,7 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase {
const
std
::
string
test_base_name
;
const
scoped_ptr
<
TestMetaFactoryBase
<
ParamType
>
>
test_meta_factory
;
};
typedef
::
std
::
vector
<
link
ed_ptr
<
TestInfo
>
>
TestInfoContainer
;
using
TestInfoContainer
=
::
std
::
vector
<
std
::
shar
ed_ptr
<
TestInfo
>
>
;
// Records data received from INSTANTIATE_TEST_CASE_P macros:
// <Instantiation name, Sequence generator creation function,
// Name generator function, Source file, Source line>
...
...
googletest/include/gtest/internal/gtest-port.h
View file @
3896e3b5
...
...
@@ -1305,13 +1305,13 @@ inline To DownCast_(From* f) { // so we only accept pointers
GTEST_INTENTIONAL_CONST_COND_PUSH_
()
if
(
false
)
{
GTEST_INTENTIONAL_CONST_COND_POP_
()
const
To
to
=
NULL
;
::
testing
::
internal
::
ImplicitCast_
<
From
*>
(
to
);
const
To
to
=
nullptr
;
::
testing
::
internal
::
ImplicitCast_
<
From
*>
(
to
);
}
#if GTEST_HAS_RTTI
// RTTI: debug mode only!
GTEST_CHECK_
(
f
==
nullptr
||
dynamic_cast
<
To
>
(
f
)
!=
NULL
);
GTEST_CHECK_
(
f
==
nullptr
||
dynamic_cast
<
To
>
(
f
)
!=
nullptr
);
#endif
return
static_cast
<
To
>
(
f
);
}
...
...
@@ -2334,12 +2334,12 @@ inline const char* GetEnv(const char* name) {
#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT
// We are on Windows CE, which has no environment variables.
static_cast
<
void
>
(
name
);
// To prevent 'unused argument' warning.
return
NULL
;
return
nullptr
;
#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)
// Environment variables which we programmatically clear will be set to the
// empty string rather than unset (NULL). Handle that case.
const
char
*
const
env
=
getenv
(
name
);
return
(
env
!=
NULL
&&
env
[
0
]
!=
'\0'
)
?
env
:
NULL
;
return
(
env
!=
nullptr
&&
env
[
0
]
!=
'\0'
)
?
env
:
nullptr
;
#else
return
getenv
(
name
);
#endif
...
...
googletest/src/gtest-death-test.cc
View file @
3896e3b5
...
...
@@ -731,7 +731,7 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() {
const
TestInfo
*
const
info
=
impl
->
current_test_info
();
const
int
death_test_index
=
info
->
result
()
->
death_test_count
();
if
(
flag
!=
NULL
)
{
if
(
flag
!=
nullptr
)
{
// ParseInternalRunDeathTestFlag() has performed all the necessary
// processing.
set_write_fd
(
flag
->
write_fd
());
...
...
@@ -740,8 +740,8 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() {
// WindowsDeathTest uses an anonymous pipe to communicate results of
// a death test.
SECURITY_ATTRIBUTES
handles_are_inheritable
=
{
sizeof
(
SECURITY_ATTRIBUTES
),
NULL
,
TRUE
};
SECURITY_ATTRIBUTES
handles_are_inheritable
=
{
sizeof
(
SECURITY_ATTRIBUTES
),
nullptr
,
TRUE
};
HANDLE
read_handle
,
write_handle
;
GTEST_DEATH_TEST_CHECK_
(
::
CreatePipe
(
&
read_handle
,
&
write_handle
,
&
handles_are_inheritable
,
...
...
@@ -752,10 +752,10 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() {
write_handle_
.
Reset
(
write_handle
);
event_handle_
.
Reset
(
::
CreateEvent
(
&
handles_are_inheritable
,
TRUE
,
// The event will automatically reset to non-signaled state.
FALSE
,
// The initial state is non-signalled.
NULL
));
// The even is unnamed.
GTEST_DEATH_TEST_CHECK_
(
event_handle_
.
Get
()
!=
NULL
);
TRUE
,
// The event will automatically reset to non-signaled state.
FALSE
,
// The initial state is non-signalled.
nullptr
));
// The even is unnamed.
GTEST_DEATH_TEST_CHECK_
(
event_handle_
.
Get
()
!=
nullptr
);
const
std
::
string
filter_flag
=
std
::
string
(
"--"
)
+
GTEST_FLAG_PREFIX_
+
kFilterFlag
+
"="
+
info
->
test_case_name
()
+
"."
+
info
->
name
();
...
...
@@ -771,10 +771,9 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() {
"|"
+
StreamableToString
(
reinterpret_cast
<
size_t
>
(
event_handle_
.
Get
()));
char
executable_path
[
_MAX_PATH
+
1
];
// NOLINT
GTEST_DEATH_TEST_CHECK_
(
_MAX_PATH
+
1
!=
::
GetModuleFileNameA
(
NULL
,
executable_path
,
_MAX_PATH
));
GTEST_DEATH_TEST_CHECK_
(
_MAX_PATH
+
1
!=
::
GetModuleFileNameA
(
nullptr
,
executable_path
,
_MAX_PATH
));
std
::
string
command_line
=
std
::
string
(
::
GetCommandLineA
())
+
" "
+
filter_flag
+
"
\"
"
+
...
...
@@ -795,17 +794,16 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() {
startup_info
.
hStdError
=
::
GetStdHandle
(
STD_ERROR_HANDLE
);
PROCESS_INFORMATION
process_info
;
GTEST_DEATH_TEST_CHECK_
(
::
CreateProcessA
(
executable_path
,
const_cast
<
char
*>
(
command_line
.
c_str
()),
NULL
,
// Retuned process handle is not inheritable.
NULL
,
// Retuned thread handle is not inheritable.
TRUE
,
// Child inherits all inheritable handles (for write_handle_).
0x0
,
// Default creation flags.
NULL
,
// Inherit the parent's environment.
UnitTest
::
GetInstance
()
->
original_working_dir
(),
&
startup_info
,
&
process_info
)
!=
FALSE
);
GTEST_DEATH_TEST_CHECK_
(
::
CreateProcessA
(
executable_path
,
const_cast
<
char
*>
(
command_line
.
c_str
()),
nullptr
,
// Retuned process handle is not inheritable.
nullptr
,
// Retuned thread handle is not inheritable.
TRUE
,
// Child inherits all inheritable handles (for write_handle_).
0x0
,
// Default creation flags.
nullptr
,
// Inherit the parent's environment.
UnitTest
::
GetInstance
()
->
original_working_dir
(),
&
startup_info
,
&
process_info
)
!=
FALSE
);
child_handle_
.
Reset
(
process_info
.
hProcess
);
::
CloseHandle
(
process_info
.
hThread
);
set_spawned
(
true
);
...
...
@@ -842,9 +840,7 @@ class FuchsiaDeathTest : public DeathTestImpl {
// Utility class for accumulating command-line arguments.
class
Arguments
{
public:
Arguments
()
{
args_
.
push_back
(
NULL
);
}
Arguments
()
{
args_
.
push_back
(
nullptr
);
}
~
Arguments
()
{
for
(
std
::
vector
<
char
*>::
iterator
i
=
args_
.
begin
();
i
!=
args_
.
end
();
...
...
@@ -967,7 +963,7 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() {
const
TestInfo
*
const
info
=
impl
->
current_test_info
();
const
int
death_test_index
=
info
->
result
()
->
death_test_count
();
if
(
flag
!=
NULL
)
{
if
(
flag
!=
nullptr
)
{
// ParseInternalRunDeathTestFlag() has performed all the necessary
// processing.
set_write_fd
(
kFuchsiaReadPipeFd
);
...
...
@@ -1316,7 +1312,8 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) {
fd_flags
|
FD_CLOEXEC
));
struct
inheritance
inherit
=
{
0
};
// spawn is a system call.
child_pid
=
spawn
(
args
.
argv
[
0
],
0
,
NULL
,
&
inherit
,
args
.
argv
,
GetEnviron
());
child_pid
=
spawn
(
args
.
argv
[
0
],
0
,
nullptr
,
&
inherit
,
args
.
argv
,
GetEnviron
());
// Restores the current working directory.
GTEST_DEATH_TEST_CHECK_
(
fchdir
(
cwd_fd
)
!=
-
1
);
GTEST_DEATH_TEST_CHECK_SYSCALL_
(
close
(
cwd_fd
));
...
...
googletest/src/gtest-filepath.cc
View file @
3896e3b5
...
...
@@ -101,7 +101,7 @@ FilePath FilePath::GetCurrentDir() {
return
FilePath
(
kCurrentDirectoryString
);
#elif GTEST_OS_WINDOWS
char
cwd
[
GTEST_PATH_MAX_
+
1
]
=
{
'\0'
};
return
FilePath
(
_getcwd
(
cwd
,
sizeof
(
cwd
))
==
NULL
?
""
:
cwd
);
return
FilePath
(
_getcwd
(
cwd
,
sizeof
(
cwd
))
==
nullptr
?
""
:
cwd
);
#else
char
cwd
[
GTEST_PATH_MAX_
+
1
]
=
{
'\0'
};
char
*
result
=
getcwd
(
cwd
,
sizeof
(
cwd
));
...
...
@@ -109,7 +109,7 @@ FilePath FilePath::GetCurrentDir() {
// getcwd will likely fail in NaCl due to the sandbox, so return something
// reasonable. The user may have provided a shim implementation for getcwd,
// however, so fallback only when failure is detected.
return
FilePath
(
result
==
NULL
?
kCurrentDirectoryString
:
cwd
);
return
FilePath
(
result
==
nullptr
?
kCurrentDirectoryString
:
cwd
);
# endif // GTEST_OS_NACL
return
FilePath
(
result
==
nullptr
?
""
:
cwd
);
#endif // GTEST_OS_WINDOWS_MOBILE
...
...
@@ -136,8 +136,8 @@ const char* FilePath::FindLastPathSeparator() const {
#if GTEST_HAS_ALT_PATH_SEP_
const
char
*
const
last_alt_sep
=
strrchr
(
c_str
(),
kAlternatePathSeparator
);
// Comparing two pointers of which only one is NULL is undefined.
if
(
last_alt_sep
!=
NULL
&&
(
last_sep
==
NULL
||
last_alt_sep
>
last_sep
))
{
if
(
last_alt_sep
!=
nullptr
&&
(
last_sep
==
nullptr
||
last_alt_sep
>
last_sep
))
{
return
last_alt_sep
;
}
#endif
...
...
@@ -324,7 +324,7 @@ bool FilePath::CreateFolder() const {
#if GTEST_OS_WINDOWS_MOBILE
FilePath
removed_sep
(
this
->
RemoveTrailingPathSeparator
());
LPCWSTR
unicode
=
String
::
AnsiToUtf16
(
removed_sep
.
c_str
());
int
result
=
CreateDirectory
(
unicode
,
NULL
)
?
0
:
-
1
;
int
result
=
CreateDirectory
(
unicode
,
nullptr
)
?
0
:
-
1
;
delete
[]
unicode
;
#elif GTEST_OS_WINDOWS
int
result
=
_mkdir
(
pathname_
.
c_str
());
...
...
googletest/src/gtest-port.cc
View file @
3896e3b5
...
...
@@ -31,10 +31,11 @@
#include "gtest/internal/gtest-port.h"
#include <limits.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <memory>
#if GTEST_OS_WINDOWS
# include <windows.h>
...
...
@@ -141,7 +142,7 @@ size_t GetThreadCount() {
}
procfs_info
process_info
;
const
int
status
=
devctl
(
fd
,
DCMD_PROC_INFO
,
&
process_info
,
sizeof
(
process_info
),
NULL
);
devctl
(
fd
,
DCMD_PROC_INFO
,
&
process_info
,
sizeof
(
process_info
),
nullptr
);
close
(
fd
);
if
(
status
==
EOK
)
{
return
static_cast
<
size_t
>
(
process_info
.
num_threads
);
...
...
@@ -155,7 +156,7 @@ size_t GetThreadCount() {
size_t
GetThreadCount
()
{
struct
procentry64
entry
;
pid_t
pid
=
getpid
();
int
status
=
getprocs64
(
&
entry
,
sizeof
(
entry
),
NULL
,
0
,
&
pid
,
1
);
int
status
=
getprocs64
(
&
entry
,
sizeof
(
entry
),
nullptr
,
0
,
&
pid
,
1
);
if
(
status
==
1
)
{
return
entry
.
pi_thcount
;
}
else
{
...
...
@@ -233,15 +234,15 @@ void AutoHandle::Reset(HANDLE handle) {
bool
AutoHandle
::
IsCloseable
()
const
{
// Different Windows APIs may use either of these values to represent an
// invalid handle.
return
handle_
!=
NULL
&&
handle_
!=
INVALID_HANDLE_VALUE
;
return
handle_
!=
nullptr
&&
handle_
!=
INVALID_HANDLE_VALUE
;
}
Notification
::
Notification
()
:
event_
(
::
CreateEvent
(
NULL
,
// Default security attributes.
TRUE
,
// Do not reset automatically.
FALSE
,
// Initially unset.
NULL
))
{
// Anonymous event.
GTEST_CHECK_
(
event_
.
Get
()
!=
NULL
);
:
event_
(
::
CreateEvent
(
nullptr
,
// Default security attributes.
TRUE
,
// Do not reset automatically.
FALSE
,
// Initially unset.
nullptr
))
{
// Anonymous event.
GTEST_CHECK_
(
event_
.
Get
()
!=
nullptr
);
}
void
Notification
::
Notify
()
{
...
...
@@ -270,7 +271,7 @@ Mutex::~Mutex() {
if
(
type_
==
kDynamic
)
{
::
DeleteCriticalSection
(
critical_section_
);
delete
critical_section_
;
critical_section_
=
NULL
;
critical_section_
=
nullptr
;
}
}
...
...
@@ -389,15 +390,15 @@ class ThreadWithParamSupport : public ThreadWithParamBase {
DWORD
thread_id
;
// FIXME: Consider to use _beginthreadex instead.
HANDLE
thread_handle
=
::
CreateThread
(
NULL
,
// Default security.
0
,
// Default stack size.
nullptr
,
// Default security.
0
,
// Default stack size.
&
ThreadWithParamSupport
::
ThreadMain
,
param
,
// Parameter to ThreadMainStatic
0x0
,
// Default creation flags.
param
,
// Parameter to ThreadMainStatic
0x0
,
// Default creation flags.
&
thread_id
);
// Need a valid pointer for the call to work under Win98.
GTEST_CHECK_
(
thread_handle
!=
NULL
)
<<
"CreateThread failed with error "
<<
::
GetLastError
()
<<
"."
;
if
(
thread_handle
==
NULL
)
{
GTEST_CHECK_
(
thread_handle
!=
nullptr
)
<<
"CreateThread failed with error "
<<
::
GetLastError
()
<<
"."
;
if
(
thread_handle
==
nullptr
)
{
delete
param
;
}
return
thread_handle
;
...
...
@@ -417,7 +418,7 @@ class ThreadWithParamSupport : public ThreadWithParamBase {
static
DWORD
WINAPI
ThreadMain
(
void
*
ptr
)
{
// Transfers ownership.
scoped_ptr
<
ThreadMainParam
>
param
(
static_cast
<
ThreadMainParam
*>
(
ptr
));
if
(
param
->
thread_can_start_
!=
NULL
)
if
(
param
->
thread_can_start_
!=
nullptr
)
param
->
thread_can_start_
->
WaitForNotification
();
param
->
runnable_
->
Run
();
return
0
;
...
...
@@ -475,7 +476,7 @@ class ThreadLocalRegistryImpl {
thread_local_values
.
insert
(
std
::
make_pair
(
thread_local_instance
,
link
ed_ptr
<
ThreadLocalValueHolderBase
>
(
std
::
shar
ed_ptr
<
ThreadLocalValueHolderBase
>
(
thread_local_instance
->
NewValueForCurrentThread
())))
.
first
;
}
...
...
@@ -484,7 +485,7 @@ class ThreadLocalRegistryImpl {
static
void
OnThreadLocalDestroyed
(
const
ThreadLocalBase
*
thread_local_instance
)
{
std
::
vector
<
link
ed_ptr
<
ThreadLocalValueHolderBase
>
>
value_holders
;
std
::
vector
<
std
::
shar
ed_ptr
<
ThreadLocalValueHolderBase
>
>
value_holders
;
// Clean up the ThreadLocalValues data structure while holding the lock, but
// defer the destruction of the ThreadLocalValueHolderBases.
{
...
...
@@ -512,7 +513,7 @@ class ThreadLocalRegistryImpl {
static
void
OnThreadExit
(
DWORD
thread_id
)
{
GTEST_CHECK_
(
thread_id
!=
0
)
<<
::
GetLastError
();
std
::
vector
<
link
ed_ptr
<
ThreadLocalValueHolderBase
>
>
value_holders
;
std
::
vector
<
std
::
shar
ed_ptr
<
ThreadLocalValueHolderBase
>
>
value_holders
;
// Clean up the ThreadIdToThreadLocals data structure while holding the
// lock, but defer the destruction of the ThreadLocalValueHolderBases.
{
...
...
@@ -539,7 +540,8 @@ class ThreadLocalRegistryImpl {
private:
// In a particular thread, maps a ThreadLocal object to its value.
typedef
std
::
map
<
const
ThreadLocalBase
*
,
linked_ptr
<
ThreadLocalValueHolderBase
>
>
ThreadLocalValues
;
std
::
shared_ptr
<
ThreadLocalValueHolderBase
>
>
ThreadLocalValues
;
// Stores all ThreadIdToThreadLocals having values in a thread, indexed by
// thread's ID.
typedef
std
::
map
<
DWORD
,
ThreadLocalValues
>
ThreadIdToThreadLocals
;
...
...
@@ -554,18 +556,17 @@ class ThreadLocalRegistryImpl {
HANDLE
thread
=
::
OpenThread
(
SYNCHRONIZE
|
THREAD_QUERY_INFORMATION
,
FALSE
,
thread_id
);
GTEST_CHECK_
(
thread
!=
NULL
);
GTEST_CHECK_
(
thread
!=
nullptr
);
// We need to pass a valid thread ID pointer into CreateThread for it
// to work correctly under Win98.
DWORD
watcher_thread_id
;
HANDLE
watcher_thread
=
::
CreateThread
(
NULL
,
// Default security.
0
,
// Default stack size
nullptr
,
// Default security.
0
,
// Default stack size
&
ThreadLocalRegistryImpl
::
WatcherThreadFunc
,
reinterpret_cast
<
LPVOID
>
(
new
ThreadIdAndHandle
(
thread_id
,
thread
)),
CREATE_SUSPENDED
,
&
watcher_thread_id
);
GTEST_CHECK_
(
watcher_thread
!=
NULL
);
CREATE_SUSPENDED
,
&
watcher_thread_id
);
GTEST_CHECK_
(
watcher_thread
!=
nullptr
);
// Give the watcher thread the same priority as ours to avoid being
// blocked by it.
::
SetThreadPriority
(
watcher_thread
,
...
...
@@ -685,7 +686,7 @@ void RE::Init(const char* regex) {
// Returns true iff ch appears anywhere in str (excluding the
// terminating '\0' character).
bool
IsInSet
(
char
ch
,
const
char
*
str
)
{
return
ch
!=
'\0'
&&
strchr
(
str
,
ch
)
!=
NULL
;
return
ch
!=
'\0'
&&
strchr
(
str
,
ch
)
!=
nullptr
;
}
// Returns true iff ch belongs to the given classification. Unlike
...
...
@@ -739,7 +740,7 @@ static std::string FormatRegexSyntaxError(const char* regex, int index) {
// Generates non-fatal failures and returns false if regex is invalid;
// otherwise returns true.
bool
ValidateRegex
(
const
char
*
regex
)
{
if
(
regex
==
NULL
)
{
if
(
regex
==
nullptr
)
{
// FIXME: fix the source file location in the
// assertion failures to match where the regex is used in user
// code.
...
...
@@ -865,8 +866,7 @@ bool MatchRegexAtHead(const char* regex, const char* str) {
// exponential with respect to the regex length + the string length,
// but usually it's must faster (often close to linear).
bool
MatchRegexAnywhere
(
const
char
*
regex
,
const
char
*
str
)
{
if
(
regex
==
NULL
||
str
==
NULL
)
return
false
;
if
(
regex
==
nullptr
||
str
==
nullptr
)
return
false
;
if
(
*
regex
==
'^'
)
return
MatchRegexAtHead
(
regex
+
1
,
str
);
...
...
@@ -899,8 +899,8 @@ bool RE::PartialMatch(const char* str, const RE& re) {
// Initializes an RE from its string representation.
void
RE
::
Init
(
const
char
*
regex
)
{
pattern_
=
full_pattern_
=
NULL
;
if
(
regex
!=
NULL
)
{
pattern_
=
full_pattern_
=
nullptr
;
if
(
regex
!=
nullptr
)
{
pattern_
=
posix
::
StrDup
(
regex
);
}
...
...
@@ -1257,8 +1257,8 @@ bool BoolFromGTestEnv(const char* flag, bool default_value) {
#else
const
std
::
string
env_var
=
FlagToEnvVar
(
flag
);
const
char
*
const
string_value
=
posix
::
GetEnv
(
env_var
.
c_str
());
return
string_value
==
NULL
?
default_value
:
strcmp
(
string_value
,
"0"
)
!=
0
;
return
string_value
==
nullptr
?
default_value
:
strcmp
(
string_value
,
"0"
)
!=
0
;
#endif // defined(GTEST_GET_BOOL_FROM_ENV_)
}
...
...
@@ -1271,7 +1271,7 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) {
#else
const
std
::
string
env_var
=
FlagToEnvVar
(
flag
);
const
char
*
const
string_value
=
posix
::
GetEnv
(
env_var
.
c_str
());
if
(
string_value
==
NULL
)
{
if
(
string_value
==
nullptr
)
{
// The environment variable is not set.
return
default_value
;
}
...
...
@@ -1314,7 +1314,7 @@ const char* StringFromGTestEnv(const char* flag, const char* default_value) {
#else
const
std
::
string
env_var
=
FlagToEnvVar
(
flag
);
const
char
*
const
value
=
posix
::
GetEnv
(
env_var
.
c_str
());
return
value
==
NULL
?
default_value
:
value
;
return
value
==
nullptr
?
default_value
:
value
;
#endif // defined(GTEST_GET_STRING_FROM_ENV_)
}
...
...
googletest/src/gtest.cc
View file @
3896e3b5
...
...
@@ -423,9 +423,6 @@ void AssertHelper::operator=(const Message& message) const {
);
// NOLINT
}
// Mutex for linked pointers.
GTEST_API_
GTEST_DEFINE_STATIC_MUTEX_
(
g_linked_ptr_mutex
);
// A copy of all command line arguments. Set by InitGoogleTest().
static
::
std
::
vector
<
std
::
string
>
g_argvs
;
...
...
@@ -905,11 +902,10 @@ TimeInMillis GetTimeInMillis() {
// value using delete[]. Returns the wide string, or NULL if the
// input is NULL.
LPCWSTR
String
::
AnsiToUtf16
(
const
char
*
ansi
)
{
if
(
!
ansi
)
return
NULL
;
if
(
!
ansi
)
return
nullptr
;
const
int
length
=
strlen
(
ansi
);
const
int
unicode_length
=
MultiByteToWideChar
(
CP_ACP
,
0
,
ansi
,
length
,
NULL
,
0
);
MultiByteToWideChar
(
CP_ACP
,
0
,
ansi
,
length
,
nullptr
,
0
);
WCHAR
*
unicode
=
new
WCHAR
[
unicode_length
+
1
];
MultiByteToWideChar
(
CP_ACP
,
0
,
ansi
,
length
,
unicode
,
unicode_length
);
...
...
@@ -922,13 +918,12 @@ LPCWSTR String::AnsiToUtf16(const char* ansi) {
// value using delete[]. Returns the ANSI string, or NULL if the
// input is NULL.
const
char
*
String
::
Utf16ToAnsi
(
LPCWSTR
utf16_str
)
{
if
(
!
utf16_str
)
return
NULL
;
const
int
ansi_length
=
WideCharToMultiByte
(
CP_ACP
,
0
,
utf16_str
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
if
(
!
utf16_str
)
return
nullptr
;
const
int
ansi_length
=
WideCharToMultiByte
(
CP_ACP
,
0
,
utf16_str
,
-
1
,
nullptr
,
0
,
nullptr
,
nullptr
);
char
*
ansi
=
new
char
[
ansi_length
+
1
];
WideCharToMultiByte
(
CP_ACP
,
0
,
utf16_str
,
-
1
,
ansi
,
ansi_length
,
NULL
,
NULL
);
WideCharToMultiByte
(
CP_ACP
,
0
,
utf16_str
,
-
1
,
ansi
,
ansi_length
,
nullptr
,
nullptr
);
ansi
[
ansi_length
]
=
0
;
return
ansi
;
}
...
...
@@ -1725,12 +1720,12 @@ AssertionResult HRESULTFailureHelper(const char* expr,
// Gets the system's human readable message string for this HRESULT.
char
error_text
[
kBufSize
]
=
{
'\0'
};
DWORD
message_length
=
::
FormatMessageA
(
kFlags
,
0
,
// no source, we're asking system
0
,
// no source, we're asking system
hr
,
// the error
0
,
// no line width restrictions
0
,
// no line width restrictions
error_text
,
// output buffer
kBufSize
,
// buf size
NULL
);
// no arguments for inserts
kBufSize
,
// buf size
nullptr
);
// no arguments for inserts
// Trims tailing white space (FormatMessage leaves a trailing CR-LF)
for
(;
message_length
&&
IsSpace
(
error_text
[
message_length
-
1
]);
--
message_length
)
{
...
...
@@ -2402,7 +2397,7 @@ namespace internal {
static
std
::
string
FormatCxxExceptionMessage
(
const
char
*
description
,
const
char
*
location
)
{
Message
message
;
if
(
description
!=
NULL
)
{
if
(
description
!=
nullptr
)
{
message
<<
"C++ exception with description
\"
"
<<
description
<<
"
\"
"
;
}
else
{
message
<<
"Unknown C++ exception"
;
...
...
@@ -2500,7 +2495,7 @@ Result HandleExceptionsInMethodIfSupported(
}
catch
(...)
{
// NOLINT
internal
::
ReportFailureInUnknownLocation
(
TestPartResult
::
kFatalFailure
,
FormatCxxExceptionMessage
(
NULL
,
location
));
FormatCxxExceptionMessage
(
nullptr
,
location
));
}
return
static_cast
<
Result
>
(
0
);
#else
...
...
@@ -3676,8 +3671,7 @@ static bool PortableLocaltime(time_t seconds, struct tm* out) {
// MINGW <time.h> provides neither localtime_r nor localtime_s, but uses
// Windows' localtime(), which has a thread-local tm buffer.
struct
tm
*
tm_ptr
=
localtime
(
&
seconds
);
// NOLINT
if
(
tm_ptr
==
NULL
)
return
false
;
if
(
tm_ptr
==
nullptr
)
return
false
;
*
out
=
*
tm_ptr
;
return
true
;
#else
...
...
@@ -4732,11 +4726,11 @@ void UnitTest::AddTestPartResult(
// with clang/gcc we can achieve the same effect on x86 by invoking int3
asm
(
"int3"
);
#else
// Dereference
NULL
through a volatile pointer to prevent the compiler
// Dereference
nullptr
through a volatile pointer to prevent the compiler
// from removing. We use this rather than abort() or __builtin_trap() for
// portability: Symbian doesn't implement abort() well, and some debuggers
// don't correctly trap abort().
*
static_cast
<
volatile
int
*>
(
NULL
)
=
1
;
*
static_cast
<
volatile
int
*>
(
nullptr
)
=
1
;
#endif // GTEST_OS_WINDOWS
}
else
if
(
GTEST_FLAG
(
throw_on_failure
))
{
#if GTEST_HAS_EXCEPTIONS
...
...
@@ -6028,7 +6022,7 @@ std::string TempDir() {
return
"
\\
temp
\\
"
;
#elif GTEST_OS_WINDOWS
const
char
*
temp_dir
=
internal
::
posix
::
GetEnv
(
"TEMP"
);
if
(
temp_dir
==
NULL
||
temp_dir
[
0
]
==
'\0'
)
if
(
temp_dir
==
nullptr
||
temp_dir
[
0
]
==
'\0'
)
return
"
\\
temp
\\
"
;
else
if
(
temp_dir
[
strlen
(
temp_dir
)
-
1
]
==
'\\'
)
return
temp_dir
;
...
...
googletest/test/googletest-linked-ptr-test.cc
deleted
100644 → 0
View file @
b8a03c80
// 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.
#include <stdlib.h>
#include "gtest/internal/gtest-linked_ptr.h"
#include "gtest/gtest.h"
namespace
{
using
testing
::
Message
;
using
testing
::
internal
::
linked_ptr
;
int
num
;
Message
*
history
=
nullptr
;
// 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
=
nullptr
;
}
};
TEST_F
(
LinkedPtrTest
,
GeneralTest
)
{
{
linked_ptr
<
A
>
a0
,
a1
,
a2
;
// Use explicit function call notation here to suppress self-assign warning.
a0
.
operator
=
(
a0
);
a1
=
a2
;
ASSERT_EQ
(
a0
.
get
(),
static_cast
<
A
*>
(
nullptr
));
ASSERT_EQ
(
a1
.
get
(),
static_cast
<
A
*>
(
nullptr
));
ASSERT_EQ
(
a2
.
get
(),
static_cast
<
A
*>
(
nullptr
));
ASSERT_TRUE
(
a0
==
nullptr
);
ASSERT_TRUE
(
a1
==
nullptr
);
ASSERT_TRUE
(
a2
==
nullptr
);
{
linked_ptr
<
A
>
a3
(
new
A
);
a0
=
a3
;
ASSERT_TRUE
(
a0
==
a3
);
ASSERT_TRUE
(
a0
!=
nullptr
);
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
!=
nullptr
);
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
googletest/test/googletest-test-part-test.cc
View file @
3896e3b5
...
...
@@ -121,7 +121,7 @@ TEST_F(TestPartResultTest, type) {
// Tests TestPartResult::file_name().
TEST_F
(
TestPartResultTest
,
file_name
)
{
EXPECT_STREQ
(
"foo/bar.cc"
,
r1_
.
file_name
());
EXPECT_STREQ
(
NULL
,
r3_
.
file_name
());
EXPECT_STREQ
(
nullptr
,
r3_
.
file_name
());
EXPECT_STREQ
(
"foo/bar.cc"
,
r4_
.
file_name
());
}
...
...
googletest/test/gtest_all_test.cc
View file @
3896e3b5
...
...
@@ -33,7 +33,6 @@
// Sometimes it's desirable to build most of Google Test's own tests
// by compiling a single file. This file serves this purpose.
#include "test/googletest-filepath-test.cc"
#include "test/googletest-linked-ptr-test.cc"
#include "test/googletest-message-test.cc"
#include "test/googletest-options-test.cc"
#include "test/googletest-port-test.cc"
...
...
googletest/test/gtest_unittest.cc
View file @
3896e3b5
...
...
@@ -6181,16 +6181,9 @@ TEST_F(FlagfileTest, Empty) {
std
::
string
flagfile_flag
=
std
::
string
(
"--"
GTEST_FLAG_PREFIX_
"flagfile="
)
+
flagfile_path
.
c_str
();
const
char
*
argv
[]
=
{
"foo.exe"
,
flagfile_flag
.
c_str
(),
NULL
};
const
char
*
argv
[]
=
{
"foo.exe"
,
flagfile_flag
.
c_str
(),
nullptr
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
NULL
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
nullptr
};
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
(),
false
);
}
...
...
@@ -6202,16 +6195,9 @@ TEST_F(FlagfileTest, FilterNonEmpty) {
std
::
string
flagfile_flag
=
std
::
string
(
"--"
GTEST_FLAG_PREFIX_
"flagfile="
)
+
flagfile_path
.
c_str
();
const
char
*
argv
[]
=
{
"foo.exe"
,
flagfile_flag
.
c_str
(),
NULL
};
const
char
*
argv
[]
=
{
"foo.exe"
,
flagfile_flag
.
c_str
(),
nullptr
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
NULL
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
nullptr
};
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
::
Filter
(
"abc"
),
false
);
}
...
...
@@ -6225,16 +6211,9 @@ TEST_F(FlagfileTest, SeveralFlags) {
std
::
string
flagfile_flag
=
std
::
string
(
"--"
GTEST_FLAG_PREFIX_
"flagfile="
)
+
flagfile_path
.
c_str
();
const
char
*
argv
[]
=
{
"foo.exe"
,
flagfile_flag
.
c_str
(),
NULL
};
const
char
*
argv
[]
=
{
"foo.exe"
,
flagfile_flag
.
c_str
(),
nullptr
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
NULL
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
nullptr
};
Flags
expected_flags
;
expected_flags
.
break_on_failure
=
true
;
...
...
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