test_AsXXX_helpers.cpp (3300B)
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 #include "nsComponentManagerUtils.h" 10 11 /** 12 * This file tests AsXXX (AsInt32, AsInt64, ...) helpers. 13 */ 14 15 //////////////////////////////////////////////////////////////////////////////// 16 //// Event Loop Spinning 17 18 class Spinner : public AsyncStatementSpinner { 19 public: 20 NS_DECL_ISUPPORTS_INHERITED 21 NS_DECL_ASYNCSTATEMENTSPINNER 22 Spinner() {} 23 24 protected: 25 ~Spinner() override = default; 26 }; 27 28 NS_IMPL_ISUPPORTS_INHERITED0(Spinner, AsyncStatementSpinner) 29 30 NS_IMETHODIMP 31 Spinner::HandleResult(mozIStorageResultSet* aResultSet) { 32 nsCOMPtr<mozIStorageRow> row; 33 do_check_true(NS_SUCCEEDED(aResultSet->GetNextRow(getter_AddRefs(row))) && 34 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 54 TEST(storage_AsXXX_helpers, NULLFallback) 55 { 56 nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase()); 57 58 nsCOMPtr<mozIStorageStatement> stmt; 59 (void)db->CreateStatement("SELECT NULL"_ns, getter_AddRefs(stmt)); 60 61 nsCOMPtr<mozIStorageValueArray> valueArray = do_QueryInterface(stmt); 62 do_check_true(valueArray); 63 64 bool hasMore; 65 do_check_true(NS_SUCCEEDED(stmt->ExecuteStep(&hasMore)) && hasMore); 66 67 do_check_eq(stmt->AsInt32(0), 0); 68 do_check_eq(stmt->AsInt64(0), 0); 69 do_check_eq(stmt->AsDouble(0), 0.0); 70 uint32_t len = 100; 71 do_check_eq(stmt->AsSharedUTF8String(0, &len), (const char*)nullptr); 72 do_check_eq(len, 0); 73 len = 100; 74 do_check_eq(stmt->AsSharedWString(0, &len), (const char16_t*)nullptr); 75 do_check_eq(len, 0); 76 len = 100; 77 do_check_eq(stmt->AsSharedBlob(0, &len), (const uint8_t*)nullptr); 78 do_check_eq(len, 0); 79 do_check_eq(stmt->IsNull(0), true); 80 81 do_check_eq(valueArray->AsInt32(0), 0); 82 do_check_eq(valueArray->AsInt64(0), 0); 83 do_check_eq(valueArray->AsDouble(0), 0.0); 84 len = 100; 85 do_check_eq(valueArray->AsSharedUTF8String(0, &len), (const char*)nullptr); 86 do_check_eq(len, 0); 87 len = 100; 88 do_check_eq(valueArray->AsSharedWString(0, &len), (const char16_t*)nullptr); 89 do_check_eq(len, 0); 90 len = 100; 91 do_check_eq(valueArray->AsSharedBlob(0, &len), (const uint8_t*)nullptr); 92 do_check_eq(len, 0); 93 do_check_eq(valueArray->IsNull(0), true); 94 } 95 96 TEST(storage_AsXXX_helpers, asyncNULLFallback) 97 { 98 nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase()); 99 100 nsCOMPtr<mozIStorageAsyncStatement> stmt; 101 (void)db->CreateAsyncStatement("SELECT NULL"_ns, getter_AddRefs(stmt)); 102 103 nsCOMPtr<mozIStoragePendingStatement> pendingStmt; 104 do_check_true( 105 NS_SUCCEEDED(stmt->ExecuteAsync(nullptr, getter_AddRefs(pendingStmt)))); 106 do_check_true(pendingStmt); 107 stmt->Finalize(); 108 RefPtr<Spinner> asyncSpin(new Spinner()); 109 db->AsyncClose(asyncSpin); 110 asyncSpin->SpinUntilCompleted(); 111 }