1 /*
2 *Any copyright is dedicated to the Public Domain.
3 * http://creativecommons.org/publicdomain/zero/1.0/
4 */
5
6 #include "storage_test_harness.h"
7 #include "mozIStorageRow.h"
8 #include "mozIStorageResultSet.h"
9
10 /**
11 * This file tests AsXXX (AsInt32, AsInt64, ...) helpers.
12 */
13
14 ////////////////////////////////////////////////////////////////////////////////
15 //// Event Loop Spinning
16
17 class Spinner : public AsyncStatementSpinner
18 {
19 public:
20 NS_DECL_ISUPPORTS_INHERITED
21 NS_DECL_ASYNCSTATEMENTSPINNER
Spinner()22 Spinner() {}
23 protected:
24 ~Spinner() override = default;
25 };
26
NS_IMPL_ISUPPORTS_INHERITED0(Spinner,AsyncStatementSpinner)27 NS_IMPL_ISUPPORTS_INHERITED0(Spinner,
28 AsyncStatementSpinner)
29
30 NS_IMETHODIMP
31 Spinner::HandleResult(mozIStorageResultSet *aResultSet)
32 {
33 nsCOMPtr<mozIStorageRow> row;
34 do_check_true(NS_SUCCEEDED(aResultSet->GetNextRow(getter_AddRefs(row))) && row);
35
36 do_check_eq(row->AsInt32(0), 0);
37 do_check_eq(row->AsInt64(0), 0);
38 do_check_eq(row->AsDouble(0), 0.0);
39
40 uint32_t len = 100;
41 do_check_eq(row->AsSharedUTF8String(0, &len), (const char*)nullptr);
42 do_check_eq(len, 0);
43 len = 100;
44 do_check_eq(row->AsSharedWString(0, &len), (const char16_t*)nullptr);
45 do_check_eq(len, 0);
46 len = 100;
47 do_check_eq(row->AsSharedBlob(0, &len), (const uint8_t*)nullptr);
48 do_check_eq(len, 0);
49
50 do_check_eq(row->IsNull(0), true);
51 return NS_OK;
52 }
53
TEST(storage_AsXXX_helpers,NULLFallback)54 TEST(storage_AsXXX_helpers, NULLFallback)
55 {
56 nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());
57
58 nsCOMPtr<mozIStorageStatement> stmt;
59 (void)db->CreateStatement(NS_LITERAL_CSTRING(
60 "SELECT NULL"
61 ), getter_AddRefs(stmt));
62
63 nsCOMPtr<mozIStorageValueArray> valueArray = do_QueryInterface(stmt);
64 do_check_true(valueArray);
65
66 bool hasMore;
67 do_check_true(NS_SUCCEEDED(stmt->ExecuteStep(&hasMore)) && hasMore);
68
69 do_check_eq(stmt->AsInt32(0), 0);
70 do_check_eq(stmt->AsInt64(0), 0);
71 do_check_eq(stmt->AsDouble(0), 0.0);
72 uint32_t len = 100;
73 do_check_eq(stmt->AsSharedUTF8String(0, &len), (const char*)nullptr);
74 do_check_eq(len, 0);
75 len = 100;
76 do_check_eq(stmt->AsSharedWString(0, &len), (const char16_t*)nullptr);
77 do_check_eq(len, 0);
78 len = 100;
79 do_check_eq(stmt->AsSharedBlob(0, &len), (const uint8_t*)nullptr);
80 do_check_eq(len, 0);
81 do_check_eq(stmt->IsNull(0), true);
82
83 do_check_eq(valueArray->AsInt32(0), 0);
84 do_check_eq(valueArray->AsInt64(0), 0);
85 do_check_eq(valueArray->AsDouble(0), 0.0);
86 len = 100;
87 do_check_eq(valueArray->AsSharedUTF8String(0, &len), (const char*)nullptr);
88 do_check_eq(len, 0);
89 len = 100;
90 do_check_eq(valueArray->AsSharedWString(0, &len), (const char16_t*)nullptr);
91 do_check_eq(len, 0);
92 len = 100;
93 do_check_eq(valueArray->AsSharedBlob(0, &len), (const uint8_t*)nullptr);
94 do_check_eq(len, 0);
95 do_check_eq(valueArray->IsNull(0), true);
96 }
97
TEST(storage_AsXXX_helpers,asyncNULLFallback)98 TEST(storage_AsXXX_helpers, asyncNULLFallback)
99 {
100 nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());
101
102 nsCOMPtr<mozIStorageAsyncStatement> stmt;
103 (void)db->CreateAsyncStatement(NS_LITERAL_CSTRING(
104 "SELECT NULL"
105 ), getter_AddRefs(stmt));
106
107 nsCOMPtr<mozIStoragePendingStatement> pendingStmt;
108 do_check_true(NS_SUCCEEDED(stmt->ExecuteAsync(nullptr, getter_AddRefs(pendingStmt))));
109 do_check_true(pendingStmt);
110 stmt->Finalize();
111 RefPtr<Spinner> asyncSpin(new Spinner());
112 db->AsyncClose(asyncSpin);
113 asyncSpin->SpinUntilCompleted();
114 }
115
116