tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }