Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
googletest
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
googletest
Commits
62dbaa29
Commit
62dbaa29
authored
Jan 10, 2018
by
Gennadiy Civil
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
revert
parent
d630a8bd
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
9 additions
and
68 deletions
+9
-68
gtest-internal.h
googletest/include/gtest/internal/gtest-internal.h
+9
-68
No files found.
googletest/include/gtest/internal/gtest-internal.h
View file @
62dbaa29
...
@@ -27,6 +27,7 @@
...
@@ -27,6 +27,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//
// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)
//
//
// The Google C++ Testing Framework (Google Test)
// The Google C++ Testing Framework (Google Test)
//
//
...
@@ -60,8 +61,8 @@
...
@@ -60,8 +61,8 @@
#include <vector>
#include <vector>
#include "gtest/gtest-message.h"
#include "gtest/gtest-message.h"
#include "gtest/internal/gtest-filepath.h"
#include "gtest/internal/gtest-string.h"
#include "gtest/internal/gtest-string.h"
#include "gtest/internal/gtest-filepath.h"
#include "gtest/internal/gtest-type-util.h"
#include "gtest/internal/gtest-type-util.h"
// Due to C++ preprocessor weirdness, we need double indirection to
// Due to C++ preprocessor weirdness, we need double indirection to
...
@@ -156,28 +157,7 @@ class GTEST_API_ ScopedTrace {
...
@@ -156,28 +157,7 @@ class GTEST_API_ ScopedTrace {
public
:
public
:
// The c'tor pushes the given source file location and message onto
// The c'tor pushes the given source file location and message onto
// a trace stack maintained by Google Test.
// a trace stack maintained by Google Test.
ScopedTrace
(
const
char
*
file
,
int
line
,
const
Message
&
message
);
// Template version. Uses Message() to convert the values into strings.
// Slow, but flexible.
template
<
typename
T
>
ScopedTrace
(
const
char
*
file
,
int
line
,
const
T
&
message
)
{
PushTrace
(
file
,
line
,
(
Message
()
<<
message
).
GetString
());
}
// Optimize for some known types.
ScopedTrace
(
const
char
*
file
,
int
line
,
const
char
*
message
)
{
PushTrace
(
file
,
line
,
message
?
message
:
"(null)"
);
}
#if GTEST_HAS_GLOBAL_STRING
ScopedTrace
(
const
char
*
file
,
int
line
,
const
::
string
&
message
)
{
PushTrace
(
file
,
line
,
message
);
}
#endif
ScopedTrace
(
const
char
*
file
,
int
line
,
const
std
::
string
&
message
)
{
PushTrace
(
file
,
line
,
message
);
}
// The d'tor pops the info pushed by the c'tor.
// The d'tor pops the info pushed by the c'tor.
//
//
...
@@ -186,8 +166,6 @@ class GTEST_API_ ScopedTrace {
...
@@ -186,8 +166,6 @@ class GTEST_API_ ScopedTrace {
~
ScopedTrace
();
~
ScopedTrace
();
private
:
private
:
void
PushTrace
(
const
char
*
file
,
int
line
,
std
::
string
message
);
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
ScopedTrace
);
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
ScopedTrace
);
}
GTEST_ATTRIBUTE_UNUSED_
;
// A ScopedTrace object does its job in its
}
GTEST_ATTRIBUTE_UNUSED_
;
// A ScopedTrace object does its job in its
// c'tor and d'tor. Therefore it doesn't
// c'tor and d'tor. Therefore it doesn't
...
@@ -197,7 +175,7 @@ namespace edit_distance {
...
@@ -197,7 +175,7 @@ namespace edit_distance {
// Returns the optimal edits to go from 'left' to 'right'.
// Returns the optimal edits to go from 'left' to 'right'.
// All edits cost the same, with replace having lower priority than
// All edits cost the same, with replace having lower priority than
// add/remove.
// add/remove.
// Simple implementation of the Wagner
–
Fischer algorithm.
// Simple implementation of the Wagner
-
Fischer algorithm.
// See http://en.wikipedia.org/wiki/Wagner-Fischer_algorithm
// See http://en.wikipedia.org/wiki/Wagner-Fischer_algorithm
enum
EditType
{
kMatch
,
kAdd
,
kRemove
,
kReplace
};
enum
EditType
{
kMatch
,
kAdd
,
kRemove
,
kReplace
};
GTEST_API_
std
::
vector
<
EditType
>
CalculateOptimalEdits
(
GTEST_API_
std
::
vector
<
EditType
>
CalculateOptimalEdits
(
...
@@ -650,7 +628,7 @@ class TypeParameterizedTest {
...
@@ -650,7 +628,7 @@ class TypeParameterizedTest {
// Types). Valid values for 'index' are [0, N - 1] where N is the
// Types). Valid values for 'index' are [0, N - 1] where N is the
// length of Types.
// length of Types.
static
bool
Register
(
const
char
*
prefix
,
static
bool
Register
(
const
char
*
prefix
,
const
CodeLocation
&
code_location
,
CodeLocation
code_location
,
const
char
*
case_name
,
const
char
*
test_names
,
const
char
*
case_name
,
const
char
*
test_names
,
int
index
)
{
int
index
)
{
typedef
typename
Types
::
Head
Type
;
typedef
typename
Types
::
Head
Type
;
...
@@ -681,7 +659,7 @@ class TypeParameterizedTest {
...
@@ -681,7 +659,7 @@ class TypeParameterizedTest {
template
<
GTEST_TEMPLATE_
Fixture
,
class
TestSel
>
template
<
GTEST_TEMPLATE_
Fixture
,
class
TestSel
>
class
TypeParameterizedTest
<
Fixture
,
TestSel
,
Types0
>
{
class
TypeParameterizedTest
<
Fixture
,
TestSel
,
Types0
>
{
public
:
public
:
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
static
bool
Register
(
const
char
*
/*prefix*/
,
CodeLocation
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
,
int
/*index*/
)
{
int
/*index*/
)
{
return
true
;
return
true
;
...
@@ -727,7 +705,7 @@ class TypeParameterizedTestCase {
...
@@ -727,7 +705,7 @@ class TypeParameterizedTestCase {
template
<
GTEST_TEMPLATE_
Fixture
,
typename
Types
>
template
<
GTEST_TEMPLATE_
Fixture
,
typename
Types
>
class
TypeParameterizedTestCase
<
Fixture
,
Templates0
,
Types
>
{
class
TypeParameterizedTestCase
<
Fixture
,
Templates0
,
Types
>
{
public
:
public
:
static
bool
Register
(
const
char
*
/*prefix*/
,
const
CodeLocation
&
,
static
bool
Register
(
const
char
*
/*prefix*/
,
CodeLocation
,
const
TypedTestCasePState
*
/*state*/
,
const
TypedTestCasePState
*
/*state*/
,
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
)
{
const
char
*
/*case_name*/
,
const
char
*
/*test_names*/
)
{
return
true
;
return
true
;
...
@@ -940,11 +918,8 @@ struct IsAProtocolMessage
...
@@ -940,11 +918,8 @@ struct IsAProtocolMessage
// a container class by checking the type of IsContainerTest<C>(0).
// a container class by checking the type of IsContainerTest<C>(0).
// The value of the expression is insignificant.
// The value of the expression is insignificant.
//
//
// In C++11 mode we check the existence of a const_iterator and that an
// Note that we look for both C::iterator and C::const_iterator. The
// iterator is properly implemented for the container.
// reason is that C++ injects the name of a class as a member of the
//
// For pre-C++11 that we look for both C::iterator and C::const_iterator.
// The reason is that C++ injects the name of a class as a member of the
// class itself (e.g. you can refer to class iterator as either
// class itself (e.g. you can refer to class iterator as either
// 'iterator' or 'iterator::iterator'). If we look for C::iterator
// 'iterator' or 'iterator::iterator'). If we look for C::iterator
// only, for example, we would mistakenly think that a class named
// only, for example, we would mistakenly think that a class named
...
@@ -954,51 +929,17 @@ struct IsAProtocolMessage
...
@@ -954,51 +929,17 @@ struct IsAProtocolMessage
// IsContainerTest(typename C::const_iterator*) and
// IsContainerTest(typename C::const_iterator*) and
// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++.
// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++.
typedef
int
IsContainer
;
typedef
int
IsContainer
;
#if GTEST_LANG_CXX11
template
<
class
C
,
class
Iterator
=
decltype
(
::
std
::
declval
<
const
C
&>
().
begin
()),
class
=
decltype
(
::
std
::
declval
<
const
C
&>
().
end
()),
class
=
decltype
(
++::
std
::
declval
<
Iterator
&>
()),
class
=
decltype
(
*::
std
::
declval
<
Iterator
>
()),
class
=
typename
C
::
const_iterator
>
IsContainer
IsContainerTest
(
int
/* dummy */
)
{
return
0
;
}
#else
template
<
class
C
>
template
<
class
C
>
IsContainer
IsContainerTest
(
int
/* dummy */
,
IsContainer
IsContainerTest
(
int
/* dummy */
,
typename
C
::
iterator
*
/* it */
=
NULL
,
typename
C
::
iterator
*
/* it */
=
NULL
,
typename
C
::
const_iterator
*
/* const_it */
=
NULL
)
{
typename
C
::
const_iterator
*
/* const_it */
=
NULL
)
{
return
0
;
return
0
;
}
}
#endif // GTEST_LANG_CXX11
typedef
char
IsNotContainer
;
typedef
char
IsNotContainer
;
template
<
class
C
>
template
<
class
C
>
IsNotContainer
IsContainerTest
(
long
/* dummy */
)
{
return
'\0'
;
}
IsNotContainer
IsContainerTest
(
long
/* dummy */
)
{
return
'\0'
;
}
// Trait to detect whether a type T is a hash table.
// The heuristic used is that the type contains an inner type `hasher` and does
// not contain an inner type `reverse_iterator`.
// If the container is iterable in reverse, then order might actually matter.
template
<
typename
T
>
struct
IsHashTable
{
private
:
template
<
typename
U
>
static
char
test
(
typename
U
::
hasher
*
,
typename
U
::
reverse_iterator
*
);
template
<
typename
U
>
static
int
test
(
typename
U
::
hasher
*
,
...);
template
<
typename
U
>
static
char
test
(...);
public
:
static
const
bool
value
=
sizeof
(
test
<
T
>
(
0
,
0
))
==
sizeof
(
int
);
};
template
<
typename
T
>
const
bool
IsHashTable
<
T
>::
value
;
template
<
typename
C
,
bool
=
template
<
typename
C
,
bool
=
sizeof
(
IsContainerTest
<
C
>
(
0
))
==
sizeof
(
IsContainer
)
sizeof
(
IsContainerTest
<
C
>
(
0
))
==
sizeof
(
IsContainer
)
>
>
...
...
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