exception_wrapper: now without undefined behavior
[folly.git] / folly / test / ExceptionWrapperTest.cpp
1 /*
2  * Copyright 2014 Facebook, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <gtest/gtest.h>
18 #include <stdexcept>
19 #include "folly/ExceptionWrapper.h"
20
21 using namespace folly;
22
23 // Tests that when we call throwException, the proper type is thrown (derived)
24 TEST(ExceptionWrapper, throw_test) {
25   std::runtime_error e("payload");
26   auto ew = make_exception_wrapper<std::runtime_error>(e);
27
28   std::vector<exception_wrapper> container;
29   container.push_back(ew);
30
31   try {
32     container[0].throwException();
33   } catch (std::runtime_error& e) {
34     std::string expected = "payload";
35     std::string actual = e.what();
36     EXPECT_EQ(expected, actual);
37   }
38 }
39
40 TEST(ExceptionWrapper, boolean) {
41   auto ew = exception_wrapper();
42   EXPECT_FALSE(bool(ew));
43   ew = make_exception_wrapper<std::runtime_error>("payload");
44   EXPECT_TRUE(bool(ew));
45 }