michael@0: /* michael@0: *Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: #include "storage_test_harness.h" michael@0: #include "mozIStorageRow.h" michael@0: #include "mozIStorageResultSet.h" michael@0: michael@0: /** michael@0: * This file tests AsXXX (AsInt32, AsInt64, ...) helpers. michael@0: */ michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: //// Event Loop Spinning michael@0: michael@0: class Spinner : public AsyncStatementSpinner michael@0: { michael@0: public: michael@0: NS_DECL_ISUPPORTS michael@0: NS_DECL_ASYNCSTATEMENTSPINNER michael@0: Spinner() {} michael@0: }; michael@0: michael@0: NS_IMPL_ISUPPORTS_INHERITED0(Spinner, michael@0: AsyncStatementSpinner) michael@0: michael@0: NS_IMETHODIMP michael@0: Spinner::HandleResult(mozIStorageResultSet *aResultSet) michael@0: { michael@0: nsCOMPtr row; michael@0: do_check_true(NS_SUCCEEDED(aResultSet->GetNextRow(getter_AddRefs(row))) && row); michael@0: michael@0: do_check_eq(row->AsInt32(0), 0); michael@0: do_check_eq(row->AsInt64(0), 0); michael@0: do_check_eq(row->AsDouble(0), 0.0); michael@0: michael@0: uint32_t len = 100; michael@0: do_check_eq(row->AsSharedUTF8String(0, &len), (const char*)nullptr); michael@0: do_check_eq(len, 0); michael@0: len = 100; michael@0: do_check_eq(row->AsSharedWString(0, &len), (const char16_t*)nullptr); michael@0: do_check_eq(len, 0); michael@0: len = 100; michael@0: do_check_eq(row->AsSharedBlob(0, &len), (const uint8_t*)nullptr); michael@0: do_check_eq(len, 0); michael@0: michael@0: do_check_eq(row->IsNull(0), true); michael@0: return NS_OK; michael@0: } michael@0: michael@0: void michael@0: test_NULLFallback() michael@0: { michael@0: nsCOMPtr db(getMemoryDatabase()); michael@0: michael@0: nsCOMPtr stmt; michael@0: (void)db->CreateStatement(NS_LITERAL_CSTRING( michael@0: "SELECT NULL" michael@0: ), getter_AddRefs(stmt)); michael@0: michael@0: nsCOMPtr valueArray = do_QueryInterface(stmt); michael@0: do_check_true(valueArray); michael@0: michael@0: bool hasMore; michael@0: do_check_true(NS_SUCCEEDED(stmt->ExecuteStep(&hasMore)) && hasMore); michael@0: michael@0: do_check_eq(stmt->AsInt32(0), 0); michael@0: do_check_eq(stmt->AsInt64(0), 0); michael@0: do_check_eq(stmt->AsDouble(0), 0.0); michael@0: uint32_t len = 100; michael@0: do_check_eq(stmt->AsSharedUTF8String(0, &len), (const char*)nullptr); michael@0: do_check_eq(len, 0); michael@0: len = 100; michael@0: do_check_eq(stmt->AsSharedWString(0, &len), (const char16_t*)nullptr); michael@0: do_check_eq(len, 0); michael@0: len = 100; michael@0: do_check_eq(stmt->AsSharedBlob(0, &len), (const uint8_t*)nullptr); michael@0: do_check_eq(len, 0); michael@0: do_check_eq(stmt->IsNull(0), true); michael@0: michael@0: do_check_eq(valueArray->AsInt32(0), 0); michael@0: do_check_eq(valueArray->AsInt64(0), 0); michael@0: do_check_eq(valueArray->AsDouble(0), 0.0); michael@0: len = 100; michael@0: do_check_eq(valueArray->AsSharedUTF8String(0, &len), (const char*)nullptr); michael@0: do_check_eq(len, 0); michael@0: len = 100; michael@0: do_check_eq(valueArray->AsSharedWString(0, &len), (const char16_t*)nullptr); michael@0: do_check_eq(len, 0); michael@0: len = 100; michael@0: do_check_eq(valueArray->AsSharedBlob(0, &len), (const uint8_t*)nullptr); michael@0: do_check_eq(len, 0); michael@0: do_check_eq(valueArray->IsNull(0), true); michael@0: } michael@0: michael@0: void michael@0: test_asyncNULLFallback() michael@0: { michael@0: nsCOMPtr db(getMemoryDatabase()); michael@0: michael@0: nsCOMPtr stmt; michael@0: (void)db->CreateAsyncStatement(NS_LITERAL_CSTRING( michael@0: "SELECT NULL" michael@0: ), getter_AddRefs(stmt)); michael@0: michael@0: nsCOMPtr pendingStmt; michael@0: do_check_true(NS_SUCCEEDED(stmt->ExecuteAsync(nullptr, getter_AddRefs(pendingStmt)))); michael@0: do_check_true(pendingStmt); michael@0: stmt->Finalize(); michael@0: nsRefPtr asyncSpin(new Spinner()); michael@0: db->AsyncClose(asyncSpin); michael@0: asyncSpin->SpinUntilCompleted(); michael@0: michael@0: } michael@0: michael@0: void (*gTests[])(void) = { michael@0: test_NULLFallback michael@0: , test_asyncNULLFallback michael@0: }; michael@0: michael@0: const char *file = __FILE__; michael@0: #define TEST_NAME "AsXXX helpers" michael@0: #define TEST_FILE file michael@0: #include "storage_test_harness_tail.h"