storage/test/test_AsXXX_helpers.cpp
author B2G Bumper Bot <release+b2gbumper@mozilla.com>
Wed, 27 Aug 2014 20:25:29 -0700
changeset 202062 b6d16bdb7c1d70e00e481906704356a172d04c4d
parent 193935 6a60d23f9bfd6c141470933b79596109f4a44a59
child 266353 91d4539e00cecb658604e021675a923c60ef3235
permissions -rw-r--r--
Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/2c168dab2546 Author: Rudy Lu <me@rudy.lu> Desc: Merge pull request #23359 from RudyLu/keyboard/Bug1019472 Bug 1019472 - [Keyboard] [ZhuYin] ZhuYin Keyboard should follow the reco... r=rudylu. ======== https://hg.mozilla.org/integration/gaia-central/rev/773aac4df6bc Author: dxue <dxue@mozilla.com> Desc: Bug 1019472 - [Keyboard] [ZhuYin] ZhuYin Keyboard should follow the recommendation

/*
 *Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

#include "storage_test_harness.h"
#include "mozIStorageRow.h"
#include "mozIStorageResultSet.h"

/**
 * This file tests AsXXX (AsInt32, AsInt64, ...) helpers.
 */

////////////////////////////////////////////////////////////////////////////////
//// Event Loop Spinning

class Spinner : public AsyncStatementSpinner
{
public:
  NS_DECL_ISUPPORTS_INHERITED
  NS_DECL_ASYNCSTATEMENTSPINNER
  Spinner() {}
protected:
  virtual ~Spinner() {}
};

NS_IMPL_ISUPPORTS_INHERITED0(Spinner,
                             AsyncStatementSpinner)

NS_IMETHODIMP
Spinner::HandleResult(mozIStorageResultSet *aResultSet)
{
  nsCOMPtr<mozIStorageRow> row;
  do_check_true(NS_SUCCEEDED(aResultSet->GetNextRow(getter_AddRefs(row))) && row);

  do_check_eq(row->AsInt32(0), 0);
  do_check_eq(row->AsInt64(0), 0);
  do_check_eq(row->AsDouble(0), 0.0);

  uint32_t len = 100;
  do_check_eq(row->AsSharedUTF8String(0, &len), (const char*)nullptr);
  do_check_eq(len, 0);
  len = 100;
  do_check_eq(row->AsSharedWString(0, &len), (const char16_t*)nullptr);
  do_check_eq(len, 0);
  len = 100;
  do_check_eq(row->AsSharedBlob(0, &len), (const uint8_t*)nullptr);
  do_check_eq(len, 0);

  do_check_eq(row->IsNull(0), true);
  return NS_OK;
}

void
test_NULLFallback()
{
  nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());

  nsCOMPtr<mozIStorageStatement> stmt;
  (void)db->CreateStatement(NS_LITERAL_CSTRING(
    "SELECT NULL"
  ), getter_AddRefs(stmt));

  nsCOMPtr<mozIStorageValueArray> valueArray = do_QueryInterface(stmt);
  do_check_true(valueArray);

  bool hasMore;
  do_check_true(NS_SUCCEEDED(stmt->ExecuteStep(&hasMore)) && hasMore);

  do_check_eq(stmt->AsInt32(0), 0);
  do_check_eq(stmt->AsInt64(0), 0);
  do_check_eq(stmt->AsDouble(0), 0.0);
  uint32_t len = 100;
  do_check_eq(stmt->AsSharedUTF8String(0, &len), (const char*)nullptr);
  do_check_eq(len, 0);
  len = 100;
  do_check_eq(stmt->AsSharedWString(0, &len), (const char16_t*)nullptr);
  do_check_eq(len, 0);
  len = 100;
  do_check_eq(stmt->AsSharedBlob(0, &len), (const uint8_t*)nullptr);
  do_check_eq(len, 0);
  do_check_eq(stmt->IsNull(0), true);

  do_check_eq(valueArray->AsInt32(0), 0);
  do_check_eq(valueArray->AsInt64(0), 0);
  do_check_eq(valueArray->AsDouble(0), 0.0);
  len = 100;
  do_check_eq(valueArray->AsSharedUTF8String(0, &len), (const char*)nullptr);
  do_check_eq(len, 0);
  len = 100;
  do_check_eq(valueArray->AsSharedWString(0, &len), (const char16_t*)nullptr);
  do_check_eq(len, 0);
  len = 100;
  do_check_eq(valueArray->AsSharedBlob(0, &len), (const uint8_t*)nullptr);
  do_check_eq(len, 0);
  do_check_eq(valueArray->IsNull(0), true);
}

void
test_asyncNULLFallback()
{
  nsCOMPtr<mozIStorageConnection> db(getMemoryDatabase());

  nsCOMPtr<mozIStorageAsyncStatement> stmt;
  (void)db->CreateAsyncStatement(NS_LITERAL_CSTRING(
    "SELECT NULL"
  ), getter_AddRefs(stmt));

  nsCOMPtr<mozIStoragePendingStatement> pendingStmt;
  do_check_true(NS_SUCCEEDED(stmt->ExecuteAsync(nullptr, getter_AddRefs(pendingStmt))));
  do_check_true(pendingStmt);
  stmt->Finalize();
  nsRefPtr<Spinner> asyncSpin(new Spinner());
  db->AsyncClose(asyncSpin);
  asyncSpin->SpinUntilCompleted();

}

void (*gTests[])(void) = {
  test_NULLFallback
, test_asyncNULLFallback
};

const char *file = __FILE__;
#define TEST_NAME "AsXXX helpers"
#define TEST_FILE file
#include "storage_test_harness_tail.h"