1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 #include "mozilla/KeyValueStorage.h"
7
8 #include "gmock/gmock.h"
9 #include "gtest/gtest-printers.h"
10 #include "gtest/gtest.h"
11
12 #include "GMPTestMonitor.h"
13
14 using ::testing::Return;
15 using namespace mozilla;
16
TEST(TestKeyValueStorage,BasicPutGet)17 TEST(TestKeyValueStorage, BasicPutGet)
18 {
19 auto kvs = MakeRefPtr<KeyValueStorage>();
20
21 nsCString name("database_name");
22 nsCString key("key1");
23 int32_t value = 100;
24
25 GMPTestMonitor mon;
26
27 kvs->Put(name, key, value)
28 ->Then(
29 GetCurrentThreadSerialEventTarget(), __func__,
30 [&](bool) { return kvs->Get(name, key); },
31 [](nsresult rv) {
32 EXPECT_TRUE(false) << "Put promise has been rejected";
33 return KeyValueStorage::GetPromise::CreateAndReject(rv, __func__);
34 })
35 ->Then(
36 GetCurrentThreadSerialEventTarget(), __func__,
37 [&](int32_t aValue) {
38 EXPECT_EQ(aValue, value) << "Values are the same";
39 mon.SetFinished();
40 },
41 [&](nsresult rv) {
42 EXPECT_TRUE(false) << "Get Promise has been rejected";
43 mon.SetFinished();
44 });
45
46 mon.AwaitFinished();
47 }
48
TEST(TestKeyValueStorage,GetNonExistedKey)49 TEST(TestKeyValueStorage, GetNonExistedKey)
50 {
51 auto kvs = MakeRefPtr<KeyValueStorage>();
52
53 nsCString name("database_name");
54 nsCString key("NonExistedKey");
55
56 GMPTestMonitor mon;
57
58 kvs->Get(name, key)->Then(
59 GetCurrentThreadSerialEventTarget(), __func__,
60 [&mon](int32_t aValue) {
61 EXPECT_EQ(aValue, -1) << "When key does not exist return -1";
62 mon.SetFinished();
63 },
64 [&mon](nsresult rv) {
65 EXPECT_TRUE(false) << "Get Promise has been rejected";
66 mon.SetFinished();
67 });
68
69 mon.AwaitFinished();
70 }
71
TEST(TestKeyValueStorage,Clear)72 TEST(TestKeyValueStorage, Clear)
73 {
74 auto kvs = MakeRefPtr<KeyValueStorage>();
75
76 nsCString name("database_name");
77 nsCString key("key1");
78 int32_t value = 100;
79
80 GMPTestMonitor mon;
81
82 kvs->Put(name, key, value)
83 ->Then(
84 GetCurrentThreadSerialEventTarget(), __func__,
85 [&](bool) { return kvs->Clear(name); },
86 [](nsresult rv) {
87 EXPECT_TRUE(false) << "Put promise has been rejected";
88 return GenericPromise::CreateAndReject(rv, __func__);
89 })
90 ->Then(
91 GetCurrentThreadSerialEventTarget(), __func__,
92 [&](bool) { return kvs->Get(name, key); },
93 [](nsresult rv) {
94 EXPECT_TRUE(false) << "Clear promise has been rejected";
95 return KeyValueStorage::GetPromise::CreateAndReject(rv, __func__);
96 })
97 ->Then(
98 GetCurrentThreadSerialEventTarget(), __func__,
99 [&](int32_t aValue) {
100 EXPECT_EQ(aValue, -1) << "After clear the key does not exist";
101 mon.SetFinished();
102 },
103 [&](nsresult rv) {
104 EXPECT_TRUE(false) << "Get Promise has been rejected";
105 mon.SetFinished();
106 });
107
108 mon.AwaitFinished();
109 }
110