Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F76462335
gtest_catch_exceptions_test_.cc
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Aug 8, 02:49
Size
8 KB
Mime Type
text/x-c
Expires
Sat, Aug 10, 02:49 (2 d)
Engine
blob
Format
Raw Data
Handle
19718372
Attached To
R9484 sp4e-homework-lars-bertil
gtest_catch_exceptions_test_.cc
View Options
// Copyright 2010, 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. Tests in this file throw C++ or SEH
// exceptions, and the output is verified by gtest_catch_exceptions_test.py.
#include <gtest/gtest.h>
#include <stdio.h>
// NOLINT
#if GTEST_HAS_SEH
#include <windows.h>
#endif
#if GTEST_HAS_EXCEPTIONS
#include <stdexcept>
#endif
using
testing
::
Test
;
using
testing
::
GTEST_FLAG
(
catch_exceptions
);
#if GTEST_HAS_SEH
class
SehExceptionInConstructorTest
:
public
Test
{
public
:
SehExceptionInConstructorTest
()
{
RaiseException
(
42
,
0
,
0
,
NULL
);
}
};
TEST_F
(
SehExceptionInConstructorTest
,
ThrowsExceptionInConstructor
)
{}
class
SehExceptionInDestructorTest
:
public
Test
{
public
:
~
SehExceptionInDestructorTest
()
{
RaiseException
(
42
,
0
,
0
,
NULL
);
}
};
TEST_F
(
SehExceptionInDestructorTest
,
ThrowsExceptionInDestructor
)
{}
class
SehExceptionInSetUpTestCaseTest
:
public
Test
{
public
:
static
void
SetUpTestCase
()
{
RaiseException
(
42
,
0
,
0
,
NULL
);
}
};
TEST_F
(
SehExceptionInSetUpTestCaseTest
,
ThrowsExceptionInSetUpTestCase
)
{}
class
SehExceptionInTearDownTestCaseTest
:
public
Test
{
public
:
static
void
TearDownTestCase
()
{
RaiseException
(
42
,
0
,
0
,
NULL
);
}
};
TEST_F
(
SehExceptionInTearDownTestCaseTest
,
ThrowsExceptionInTearDownTestCase
)
{}
class
SehExceptionInSetUpTest
:
public
Test
{
protected
:
virtual
void
SetUp
()
{
RaiseException
(
42
,
0
,
0
,
NULL
);
}
};
TEST_F
(
SehExceptionInSetUpTest
,
ThrowsExceptionInSetUp
)
{}
class
SehExceptionInTearDownTest
:
public
Test
{
protected
:
virtual
void
TearDown
()
{
RaiseException
(
42
,
0
,
0
,
NULL
);
}
};
TEST_F
(
SehExceptionInTearDownTest
,
ThrowsExceptionInTearDown
)
{}
TEST
(
SehExceptionTest
,
ThrowsSehException
)
{
RaiseException
(
42
,
0
,
0
,
NULL
);
}
#endif
// GTEST_HAS_SEH
#if GTEST_HAS_EXCEPTIONS
class
CxxExceptionInConstructorTest
:
public
Test
{
public
:
CxxExceptionInConstructorTest
()
{
// Without this macro VC++ complains about unreachable code at the end of
// the constructor.
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_
(
throw
std
::
runtime_error
(
"Standard C++ exception"
));
}
static
void
TearDownTestCase
()
{
printf
(
"%s"
,
"CxxExceptionInConstructorTest::TearDownTestCase() "
"called as expected.
\n
"
);
}
protected
:
~
CxxExceptionInConstructorTest
()
{
ADD_FAILURE
()
<<
"CxxExceptionInConstructorTest destructor "
<<
"called unexpectedly."
;
}
virtual
void
SetUp
()
{
ADD_FAILURE
()
<<
"CxxExceptionInConstructorTest::SetUp() "
<<
"called unexpectedly."
;
}
virtual
void
TearDown
()
{
ADD_FAILURE
()
<<
"CxxExceptionInConstructorTest::TearDown() "
<<
"called unexpectedly."
;
}
};
TEST_F
(
CxxExceptionInConstructorTest
,
ThrowsExceptionInConstructor
)
{
ADD_FAILURE
()
<<
"CxxExceptionInConstructorTest test body "
<<
"called unexpectedly."
;
}
class
CxxExceptionInDestructorTest
:
public
Test
{
public
:
static
void
TearDownTestCase
()
{
printf
(
"%s"
,
"CxxExceptionInDestructorTest::TearDownTestCase() "
"called as expected.
\n
"
);
}
protected
:
~
CxxExceptionInDestructorTest
()
{
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_
(
throw
std
::
runtime_error
(
"Standard C++ exception"
));
}
};
TEST_F
(
CxxExceptionInDestructorTest
,
ThrowsExceptionInDestructor
)
{}
class
CxxExceptionInSetUpTestCaseTest
:
public
Test
{
public
:
CxxExceptionInSetUpTestCaseTest
()
{
printf
(
"%s"
,
"CxxExceptionInSetUpTestCaseTest constructor "
"called as expected.
\n
"
);
}
static
void
SetUpTestCase
()
{
throw
std
::
runtime_error
(
"Standard C++ exception"
);
}
static
void
TearDownTestCase
()
{
printf
(
"%s"
,
"CxxExceptionInSetUpTestCaseTest::TearDownTestCase() "
"called as expected.
\n
"
);
}
protected
:
~
CxxExceptionInSetUpTestCaseTest
()
{
printf
(
"%s"
,
"CxxExceptionInSetUpTestCaseTest destructor "
"called as expected.
\n
"
);
}
virtual
void
SetUp
()
{
printf
(
"%s"
,
"CxxExceptionInSetUpTestCaseTest::SetUp() "
"called as expected.
\n
"
);
}
virtual
void
TearDown
()
{
printf
(
"%s"
,
"CxxExceptionInSetUpTestCaseTest::TearDown() "
"called as expected.
\n
"
);
}
};
TEST_F
(
CxxExceptionInSetUpTestCaseTest
,
ThrowsExceptionInSetUpTestCase
)
{
printf
(
"%s"
,
"CxxExceptionInSetUpTestCaseTest test body "
"called as expected.
\n
"
);
}
class
CxxExceptionInTearDownTestCaseTest
:
public
Test
{
public
:
static
void
TearDownTestCase
()
{
throw
std
::
runtime_error
(
"Standard C++ exception"
);
}
};
TEST_F
(
CxxExceptionInTearDownTestCaseTest
,
ThrowsExceptionInTearDownTestCase
)
{}
class
CxxExceptionInSetUpTest
:
public
Test
{
public
:
static
void
TearDownTestCase
()
{
printf
(
"%s"
,
"CxxExceptionInSetUpTest::TearDownTestCase() "
"called as expected.
\n
"
);
}
protected
:
~
CxxExceptionInSetUpTest
()
{
printf
(
"%s"
,
"CxxExceptionInSetUpTest destructor "
"called as expected.
\n
"
);
}
virtual
void
SetUp
()
{
throw
std
::
runtime_error
(
"Standard C++ exception"
);
}
virtual
void
TearDown
()
{
printf
(
"%s"
,
"CxxExceptionInSetUpTest::TearDown() "
"called as expected.
\n
"
);
}
};
TEST_F
(
CxxExceptionInSetUpTest
,
ThrowsExceptionInSetUp
)
{
ADD_FAILURE
()
<<
"CxxExceptionInSetUpTest test body "
<<
"called unexpectedly."
;
}
class
CxxExceptionInTearDownTest
:
public
Test
{
public
:
static
void
TearDownTestCase
()
{
printf
(
"%s"
,
"CxxExceptionInTearDownTest::TearDownTestCase() "
"called as expected.
\n
"
);
}
protected
:
~
CxxExceptionInTearDownTest
()
{
printf
(
"%s"
,
"CxxExceptionInTearDownTest destructor "
"called as expected.
\n
"
);
}
virtual
void
TearDown
()
{
throw
std
::
runtime_error
(
"Standard C++ exception"
);
}
};
TEST_F
(
CxxExceptionInTearDownTest
,
ThrowsExceptionInTearDown
)
{}
class
CxxExceptionInTestBodyTest
:
public
Test
{
public
:
static
void
TearDownTestCase
()
{
printf
(
"%s"
,
"CxxExceptionInTestBodyTest::TearDownTestCase() "
"called as expected.
\n
"
);
}
protected
:
~
CxxExceptionInTestBodyTest
()
{
printf
(
"%s"
,
"CxxExceptionInTestBodyTest destructor "
"called as expected.
\n
"
);
}
virtual
void
TearDown
()
{
printf
(
"%s"
,
"CxxExceptionInTestBodyTest::TearDown() "
"called as expected.
\n
"
);
}
};
TEST_F
(
CxxExceptionInTestBodyTest
,
ThrowsStdCxxException
)
{
throw
std
::
runtime_error
(
"Standard C++ exception"
);
}
TEST
(
CxxExceptionTest
,
ThrowsNonStdCxxException
)
{
throw
"C-string"
;
}
#endif
// GTEST_HAS_EXCEPTIONS
int
main
(
int
argc
,
char
**
argv
)
{
#if GTEST_HAS_SEH
// Tells Google Test to catch SEH-style exceptions on Windows.
GTEST_FLAG
(
catch_exceptions
)
=
true
;
#endif
testing
::
InitGoogleTest
(
&
argc
,
argv
);
return
RUN_ALL_TESTS
();
}
Event Timeline
Log In to Comment