Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
F
fmt
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
fmt
Commits
5434b028
Commit
5434b028
authored
May 05, 2014
by
Victor Zverovich
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Don't die on Windows.
parent
3555341a
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
20 deletions
+33
-20
test/gtest-extra-test.cc
test/gtest-extra-test.cc
+31
-19
test/gtest-extra.h
test/gtest-extra.h
+2
-1
No files found.
test/gtest-extra-test.cc
View file @
5434b028
...
...
@@ -175,10 +175,23 @@ TEST(ErrorCodeTest, Ctor) {
EXPECT_EQ
(
42
,
ErrorCode
(
42
).
get
());
}
TEST
(
BufferedFileTest
,
DefaultCtor
)
{
BufferedFile
f
;
EXPECT_TRUE
(
f
.
get
()
==
0
);
}
class
BufferedFileTest
:
public
::
testing
::
Test
{
#ifdef _WIN32
private:
_invalid_parameter_handler
original_handler_
;
static
void
InvalidParameterHandler
(
const
wchar_t
*
,
const
wchar_t
*
,
const
wchar_t
*
,
unsigned
,
uintptr_t
)
{}
public:
BufferedFileTest
()
:
original_handler_
(
_set_invalid_parameter_handler
(
InvalidParameterHandler
))
{
}
~
BufferedFileTest
()
{
_set_invalid_parameter_handler
(
original_handler_
);
}
#endif // _WIN32
};
BufferedFile
OpenFile
(
const
char
*
name
,
FILE
**
fp
=
0
)
{
BufferedFile
f
=
File
(
".travis.yml"
,
File
::
RDONLY
).
fdopen
(
"r"
);
...
...
@@ -187,7 +200,12 @@ BufferedFile OpenFile(const char *name, FILE **fp = 0) {
return
f
;
}
TEST
(
BufferedFileTest
,
MoveCtor
)
{
TEST_F
(
BufferedFileTest
,
DefaultCtor
)
{
BufferedFile
f
;
EXPECT_TRUE
(
f
.
get
()
==
0
);
}
TEST_F
(
BufferedFileTest
,
MoveCtor
)
{
BufferedFile
bf
=
OpenFile
(
".travis.yml"
);
FILE
*
fp
=
bf
.
get
();
EXPECT_TRUE
(
fp
!=
0
);
...
...
@@ -196,7 +214,7 @@ TEST(BufferedFileTest, MoveCtor) {
EXPECT_TRUE
(
bf
.
get
()
==
0
);
}
TEST
(
BufferedFileTest
,
MoveAssignment
)
{
TEST
_F
(
BufferedFileTest
,
MoveAssignment
)
{
BufferedFile
bf
=
OpenFile
(
".travis.yml"
);
FILE
*
fp
=
bf
.
get
();
EXPECT_TRUE
(
fp
!=
0
);
...
...
@@ -206,7 +224,7 @@ TEST(BufferedFileTest, MoveAssignment) {
EXPECT_TRUE
(
bf
.
get
()
==
0
);
}
TEST
(
BufferedFileTest
,
MoveAssignmentClosesFile
)
{
TEST
_F
(
BufferedFileTest
,
MoveAssignmentClosesFile
)
{
BufferedFile
bf
=
OpenFile
(
".travis.yml"
);
BufferedFile
bf2
=
OpenFile
(
"CMakeLists.txt"
);
int
old_fd
=
fileno
(
bf2
.
get
());
...
...
@@ -214,27 +232,27 @@ TEST(BufferedFileTest, MoveAssignmentClosesFile) {
EXPECT_CLOSED
(
old_fd
);
}
TEST
(
BufferedFileTest
,
MoveFromTemporaryInCtor
)
{
TEST
_F
(
BufferedFileTest
,
MoveFromTemporaryInCtor
)
{
FILE
*
fp
=
0
;
BufferedFile
f
(
OpenFile
(
".travis.yml"
,
&
fp
));
EXPECT_EQ
(
fp
,
f
.
get
());
}
TEST
(
BufferedFileTest
,
MoveFromTemporaryInAssignment
)
{
TEST
_F
(
BufferedFileTest
,
MoveFromTemporaryInAssignment
)
{
FILE
*
fp
=
0
;
BufferedFile
f
;
f
=
OpenFile
(
".travis.yml"
,
&
fp
);
EXPECT_EQ
(
fp
,
f
.
get
());
}
TEST
(
BufferedFileTest
,
MoveFromTemporaryInAssignmentClosesFile
)
{
TEST
_F
(
BufferedFileTest
,
MoveFromTemporaryInAssignmentClosesFile
)
{
BufferedFile
f
=
OpenFile
(
".travis.yml"
);
int
old_fd
=
fileno
(
f
.
get
());
f
=
OpenFile
(
".travis.yml"
);
EXPECT_CLOSED
(
old_fd
);
}
TEST
(
BufferedFileTest
,
CloseFileInDtor
)
{
TEST
_F
(
BufferedFileTest
,
CloseFileInDtor
)
{
int
fd
=
0
;
{
BufferedFile
f
=
OpenFile
(
".travis.yml"
);
...
...
@@ -243,20 +261,14 @@ TEST(BufferedFileTest, CloseFileInDtor) {
EXPECT_CLOSED
(
fd
);
}
TEST
(
BufferedFileTest
,
CloseErrorInDtor
)
{
TEST
_F
(
BufferedFileTest
,
CloseErrorInDtor
)
{
BufferedFile
*
f
=
new
BufferedFile
(
OpenFile
(
".travis.yml"
));
#ifndef _WIN32
// The close function must be called inside EXPECT_STDERR, otherwise
// the system may recycle closed file descriptor when redirecting the
// output in EXPECT_STDERR and the second close will break output
// redirection.
EXPECT_STDERR
(
close
(
fileno
(
f
->
get
()));
delete
f
,
FormatSystemErrorMessage
(
EBADF
,
"cannot close file"
)
+
"
\n
"
);
#else
FMT_POSIX
(
close
(
fileno
(
f
->
get
())));
// Closing file twice causes death on Windows.
EXPECT_DEATH
(
delete
f
,
""
);
#endif
}
TEST
(
FileTest
,
DefaultCtor
)
{
...
...
@@ -591,7 +603,7 @@ TEST(OutputRedirectTest, ErrorInDtor) {
// TODO: test EXPECT_STDOUT and EXPECT_STDERR
// TODO: compile both
with
C++11 & C++98 mode
// TODO: compile both
in
C++11 & C++98 mode
#endif
}
// namespace
test/gtest-extra.h
View file @
5434b028
...
...
@@ -188,7 +188,8 @@ class BufferedFile {
// Methods that are not declared with FMT_NOEXCEPT(true) may throw
// fmt::SystemError in case of failure. Note that some errors such as
// closing the file multiple times will cause a crash on Windows rather
// than an exception.
// than an exception. You can get standard behavior by overriding the
// invalid parameter handler with _set_invalid_parameter_handler.
class
File
{
private:
int
fd_
;
// File descriptor.
...
...
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