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
21 : NS_DECL_ASYNCSTATEMENTSPINNER
22 1 : Spinner() {}
23 : };
24 :
25 7 : NS_IMPL_ISUPPORTS_INHERITED0(Spinner,
26 : AsyncStatementSpinner)
27 :
28 : NS_IMETHODIMP
29 0 : Spinner::HandleResult(mozIStorageResultSet *aResultSet)
30 : {
31 0 : nsCOMPtr<mozIStorageRow> row;
32 0 : do_check_true(NS_SUCCEEDED(aResultSet->GetNextRow(getter_AddRefs(row))) && row);
33 :
34 0 : do_check_eq(row->AsInt32(0), 0);
35 0 : do_check_eq(row->AsInt64(0), 0);
36 0 : do_check_eq(row->AsDouble(0), 0.0);
37 :
38 0 : PRUint32 len = 100;
39 0 : do_check_eq(row->AsSharedUTF8String(0, &len), nsnull);
40 0 : do_check_eq(len, 0);
41 0 : len = 100;
42 0 : do_check_eq(row->AsSharedWString(0, &len), nsnull);
43 0 : do_check_eq(len, 0);
44 0 : len = 100;
45 0 : do_check_eq(row->AsSharedBlob(0, &len), nsnull);
46 0 : do_check_eq(len, 0);
47 :
48 0 : do_check_eq(row->IsNull(0), true);
49 0 : return NS_OK;
50 : }
51 :
52 : void
53 1 : test_NULLFallback()
54 : {
55 2 : nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());
56 :
57 2 : nsCOMPtr<mozIStorageStatement> stmt;
58 2 : (void)db->CreateStatement(NS_LITERAL_CSTRING(
59 : "SELECT NULL"
60 2 : ), getter_AddRefs(stmt));
61 :
62 2 : nsCOMPtr<mozIStorageValueArray> valueArray = do_QueryInterface(stmt);
63 1 : do_check_true(valueArray);
64 :
65 : bool hasMore;
66 1 : do_check_true(NS_SUCCEEDED(stmt->ExecuteStep(&hasMore)) && hasMore);
67 :
68 1 : do_check_eq(stmt->AsInt32(0), 0);
69 1 : do_check_eq(stmt->AsInt64(0), 0);
70 1 : do_check_eq(stmt->AsDouble(0), 0.0);
71 1 : PRUint32 len = 100;
72 1 : do_check_eq(stmt->AsSharedUTF8String(0, &len), nsnull);
73 1 : do_check_eq(len, 0);
74 1 : len = 100;
75 1 : do_check_eq(stmt->AsSharedWString(0, &len), nsnull);
76 1 : do_check_eq(len, 0);
77 1 : len = 100;
78 1 : do_check_eq(stmt->AsSharedBlob(0, &len), nsnull);
79 1 : do_check_eq(len, 0);
80 1 : do_check_eq(stmt->IsNull(0), true);
81 :
82 1 : do_check_eq(valueArray->AsInt32(0), 0);
83 1 : do_check_eq(valueArray->AsInt64(0), 0);
84 1 : do_check_eq(valueArray->AsDouble(0), 0.0);
85 1 : len = 100;
86 1 : do_check_eq(valueArray->AsSharedUTF8String(0, &len), nsnull);
87 1 : do_check_eq(len, 0);
88 1 : len = 100;
89 1 : do_check_eq(valueArray->AsSharedWString(0, &len), nsnull);
90 1 : do_check_eq(len, 0);
91 1 : len = 100;
92 1 : do_check_eq(valueArray->AsSharedBlob(0, &len), nsnull);
93 1 : do_check_eq(len, 0);
94 1 : do_check_eq(valueArray->IsNull(0), true);
95 1 : }
96 :
97 : void
98 1 : test_asyncNULLFallback()
99 : {
100 2 : nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());
101 :
102 2 : nsCOMPtr<mozIStorageAsyncStatement> stmt;
103 2 : (void)db->CreateAsyncStatement(NS_LITERAL_CSTRING(
104 : "SELECT NULL"
105 2 : ), getter_AddRefs(stmt));
106 :
107 2 : nsCOMPtr<mozIStoragePendingStatement> pendingStmt;
108 1 : do_check_true(NS_SUCCEEDED(stmt->ExecuteAsync(nsnull, getter_AddRefs(pendingStmt))));
109 1 : do_check_true(pendingStmt);
110 1 : stmt->Finalize();
111 2 : nsRefPtr<Spinner> asyncSpin(new Spinner());
112 1 : db->AsyncClose(asyncSpin);
113 1 : asyncSpin->SpinUntilCompleted();
114 :
115 1 : }
116 :
117 : void (*gTests[])(void) = {
118 : test_NULLFallback
119 : , test_asyncNULLFallback
120 : };
121 :
122 : const char *file = __FILE__;
123 : #define TEST_NAME "AsXXX helpers"
124 : #define TEST_FILE file
125 : #include "storage_test_harness_tail.h"
|