summaryrefslogtreecommitdiffstats
path: root/xpcom/tests/gtest/TestMozPromise.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xpcom/tests/gtest/TestMozPromise.cpp')
-rw-r--r--xpcom/tests/gtest/TestMozPromise.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/xpcom/tests/gtest/TestMozPromise.cpp b/xpcom/tests/gtest/TestMozPromise.cpp
index bb7273cc1f..9b06304139 100644
--- a/xpcom/tests/gtest/TestMozPromise.cpp
+++ b/xpcom/tests/gtest/TestMozPromise.cpp
@@ -753,4 +753,54 @@ TEST(MozPromise, ChainToDirectTaskDispatch)
NS_ProcessPendingEvents(nullptr);
}
+TEST(MozPromise, Map)
+{
+ int value = 0;
+ bool ran_err = false;
+
+ InvokeAsync(GetCurrentSerialEventTarget(), "test",
+ [&]() { return TestPromise::CreateAndResolve(18, "test"); })
+ ->Map(GetCurrentSerialEventTarget(), "test",
+ [](int val) { return val + 0x18; })
+ ->MapErr(GetCurrentSerialEventTarget(), "test",
+ [&](double val) {
+ ran_err = true;
+ return Ok{};
+ })
+ ->Map(GetCurrentSerialEventTarget(), "test", [&](int val) {
+ value = val;
+ return Ok{};
+ });
+
+ NS_ProcessPendingEvents(nullptr);
+
+ EXPECT_EQ(value, 42);
+ EXPECT_EQ(ran_err, false);
+}
+
+TEST(MozPromise, MapErr)
+{
+ bool ran_ok = false;
+ double result = 0.0;
+
+ InvokeAsync(GetCurrentSerialEventTarget(), "test",
+ [&]() { return TestPromise::CreateAndReject(1.0, "test"); })
+ ->Map(GetCurrentSerialEventTarget(), "test",
+ [&](int val) {
+ ran_ok = true;
+ return 1;
+ })
+ ->MapErr(GetCurrentSerialEventTarget(), "test",
+ [](double val) { return val * 2; })
+ ->MapErr(GetCurrentSerialEventTarget(), "test", [&](double val) {
+ result = val;
+ return Ok{};
+ });
+
+ NS_ProcessPendingEvents(nullptr);
+
+ EXPECT_EQ(result, 2.0);
+ EXPECT_EQ(ran_ok, false);
+}
+
#undef DO_FAIL