1 | /* |
2 | * Copyright 2015-present 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 <folly/futures/Future.h> |
18 | #include <folly/portability/GTest.h> |
19 | |
20 | using namespace folly; |
21 | |
22 | // A simple scenario for the unwrap call, when the promise was fulfilled |
23 | // before calling to unwrap. |
24 | TEST(Unwrap, simpleScenario) { |
25 | Future<int> encapsulated_future = makeFuture(5484); |
26 | Future<Future<int>> future = makeFuture(std::move(encapsulated_future)); |
27 | EXPECT_EQ(5484, std::move(future).unwrap().value()); |
28 | } |
29 | |
30 | // Makes sure that unwrap() works when chaning Future's commands. |
31 | TEST(Unwrap, chainCommands) { |
32 | Future<Future<int>> future = makeFuture(makeFuture(5484)); |
33 | auto unwrapped = |
34 | std::move(future).unwrap().thenValue([](int i) { return i; }); |
35 | EXPECT_EQ(5484, unwrapped.value()); |
36 | } |
37 | |
38 | // Makes sure that the unwrap call also works when the promise was not yet |
39 | // fulfilled, and that the returned Future<T> becomes ready once the promise |
40 | // is fulfilled. |
41 | TEST(Unwrap, futureNotReady) { |
42 | Promise<Future<int>> p; |
43 | Future<Future<int>> future = p.getFuture(); |
44 | Future<int> unwrapped = std::move(future).unwrap(); |
45 | // Sanity - should not be ready before the promise is fulfilled. |
46 | ASSERT_FALSE(unwrapped.isReady()); |
47 | // Fulfill the promise and make sure the unwrapped future is now ready. |
48 | p.setValue(makeFuture(5484)); |
49 | ASSERT_TRUE(unwrapped.isReady()); |
50 | EXPECT_EQ(5484, unwrapped.value()); |
51 | } |
52 | |