1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/storage/test/test_AsXXX_helpers.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,125 @@ 1.4 +/* 1.5 + *Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.7 + */ 1.8 + 1.9 +#include "storage_test_harness.h" 1.10 +#include "mozIStorageRow.h" 1.11 +#include "mozIStorageResultSet.h" 1.12 + 1.13 +/** 1.14 + * This file tests AsXXX (AsInt32, AsInt64, ...) helpers. 1.15 + */ 1.16 + 1.17 +//////////////////////////////////////////////////////////////////////////////// 1.18 +//// Event Loop Spinning 1.19 + 1.20 +class Spinner : public AsyncStatementSpinner 1.21 +{ 1.22 +public: 1.23 + NS_DECL_ISUPPORTS 1.24 + NS_DECL_ASYNCSTATEMENTSPINNER 1.25 + Spinner() {} 1.26 +}; 1.27 + 1.28 +NS_IMPL_ISUPPORTS_INHERITED0(Spinner, 1.29 + AsyncStatementSpinner) 1.30 + 1.31 +NS_IMETHODIMP 1.32 +Spinner::HandleResult(mozIStorageResultSet *aResultSet) 1.33 +{ 1.34 + nsCOMPtr<mozIStorageRow> row; 1.35 + do_check_true(NS_SUCCEEDED(aResultSet->GetNextRow(getter_AddRefs(row))) && row); 1.36 + 1.37 + do_check_eq(row->AsInt32(0), 0); 1.38 + do_check_eq(row->AsInt64(0), 0); 1.39 + do_check_eq(row->AsDouble(0), 0.0); 1.40 + 1.41 + uint32_t len = 100; 1.42 + do_check_eq(row->AsSharedUTF8String(0, &len), (const char*)nullptr); 1.43 + do_check_eq(len, 0); 1.44 + len = 100; 1.45 + do_check_eq(row->AsSharedWString(0, &len), (const char16_t*)nullptr); 1.46 + do_check_eq(len, 0); 1.47 + len = 100; 1.48 + do_check_eq(row->AsSharedBlob(0, &len), (const uint8_t*)nullptr); 1.49 + do_check_eq(len, 0); 1.50 + 1.51 + do_check_eq(row->IsNull(0), true); 1.52 + return NS_OK; 1.53 +} 1.54 + 1.55 +void 1.56 +test_NULLFallback() 1.57 +{ 1.58 + nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase()); 1.59 + 1.60 + nsCOMPtr<mozIStorageStatement> stmt; 1.61 + (void)db->CreateStatement(NS_LITERAL_CSTRING( 1.62 + "SELECT NULL" 1.63 + ), getter_AddRefs(stmt)); 1.64 + 1.65 + nsCOMPtr<mozIStorageValueArray> valueArray = do_QueryInterface(stmt); 1.66 + do_check_true(valueArray); 1.67 + 1.68 + bool hasMore; 1.69 + do_check_true(NS_SUCCEEDED(stmt->ExecuteStep(&hasMore)) && hasMore); 1.70 + 1.71 + do_check_eq(stmt->AsInt32(0), 0); 1.72 + do_check_eq(stmt->AsInt64(0), 0); 1.73 + do_check_eq(stmt->AsDouble(0), 0.0); 1.74 + uint32_t len = 100; 1.75 + do_check_eq(stmt->AsSharedUTF8String(0, &len), (const char*)nullptr); 1.76 + do_check_eq(len, 0); 1.77 + len = 100; 1.78 + do_check_eq(stmt->AsSharedWString(0, &len), (const char16_t*)nullptr); 1.79 + do_check_eq(len, 0); 1.80 + len = 100; 1.81 + do_check_eq(stmt->AsSharedBlob(0, &len), (const uint8_t*)nullptr); 1.82 + do_check_eq(len, 0); 1.83 + do_check_eq(stmt->IsNull(0), true); 1.84 + 1.85 + do_check_eq(valueArray->AsInt32(0), 0); 1.86 + do_check_eq(valueArray->AsInt64(0), 0); 1.87 + do_check_eq(valueArray->AsDouble(0), 0.0); 1.88 + len = 100; 1.89 + do_check_eq(valueArray->AsSharedUTF8String(0, &len), (const char*)nullptr); 1.90 + do_check_eq(len, 0); 1.91 + len = 100; 1.92 + do_check_eq(valueArray->AsSharedWString(0, &len), (const char16_t*)nullptr); 1.93 + do_check_eq(len, 0); 1.94 + len = 100; 1.95 + do_check_eq(valueArray->AsSharedBlob(0, &len), (const uint8_t*)nullptr); 1.96 + do_check_eq(len, 0); 1.97 + do_check_eq(valueArray->IsNull(0), true); 1.98 +} 1.99 + 1.100 +void 1.101 +test_asyncNULLFallback() 1.102 +{ 1.103 + nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase()); 1.104 + 1.105 + nsCOMPtr<mozIStorageAsyncStatement> stmt; 1.106 + (void)db->CreateAsyncStatement(NS_LITERAL_CSTRING( 1.107 + "SELECT NULL" 1.108 + ), getter_AddRefs(stmt)); 1.109 + 1.110 + nsCOMPtr<mozIStoragePendingStatement> pendingStmt; 1.111 + do_check_true(NS_SUCCEEDED(stmt->ExecuteAsync(nullptr, getter_AddRefs(pendingStmt)))); 1.112 + do_check_true(pendingStmt); 1.113 + stmt->Finalize(); 1.114 + nsRefPtr<Spinner> asyncSpin(new Spinner()); 1.115 + db->AsyncClose(asyncSpin); 1.116 + asyncSpin->SpinUntilCompleted(); 1.117 + 1.118 +} 1.119 + 1.120 +void (*gTests[])(void) = { 1.121 + test_NULLFallback 1.122 +, test_asyncNULLFallback 1.123 +}; 1.124 + 1.125 +const char *file = __FILE__; 1.126 +#define TEST_NAME "AsXXX helpers" 1.127 +#define TEST_FILE file 1.128 +#include "storage_test_harness_tail.h"