1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Copyright 2013 The Chromium Authors. All rights reserved.
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Use of this source code is governed by a BSD-style license that can be
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// found in the LICENSE file.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include <vector>
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "base/basictypes.h"
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/memory/scoped_vector.h"
90716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com#include "base/strings/string16.h"
10c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com#include "content/common/indexed_db/indexed_db_key.h"
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "testing/gtest/include/gtest/gtest.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
134991b8f23482afc1494fd17647421ce68de53331robertphillips@google.comnamespace content {
144991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com
150716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.comnamespace {
160716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com
170456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.comTEST(IndexedDBKeyTest, KeySizeEstimates) {
180456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com  std::vector<IndexedDBKey> keys;
190716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com  std::vector<size_t> estimates;
20a8282ef8f9e63e60c5665af0cdfc8fdd11c089f6mike@reedtribe.org
21a8282ef8f9e63e60c5665af0cdfc8fdd11c089f6mike@reedtribe.org  keys.push_back(IndexedDBKey());
220716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com  estimates.push_back(16u);  // Overhead.
230716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com
240716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com  keys.push_back(IndexedDBKey(blink::WebIDBKeyTypeNull));
250716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com  estimates.push_back(16u);
268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
273c898186c9082c535e589807752a0a9dc5d28aa0vandebo@chromium.org  double number = 3.14159;
283c898186c9082c535e589807752a0a9dc5d28aa0vandebo@chromium.org  keys.push_back(IndexedDBKey(number, blink::WebIDBKeyTypeNumber));
293c898186c9082c535e589807752a0a9dc5d28aa0vandebo@chromium.org  estimates.push_back(24u);  // Overhead + sizeof(double).
303c898186c9082c535e589807752a0a9dc5d28aa0vandebo@chromium.org
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  double date = 1370884329.0;
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  keys.push_back(IndexedDBKey(date, blink::WebIDBKeyTypeDate));
338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  estimates.push_back(24u);  // Overhead + sizeof(double).
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  const base::string16 string(1024, static_cast<base::char16>('X'));
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  keys.push_back(IndexedDBKey(string));
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Overhead + string length * sizeof(base::char16).
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  estimates.push_back(2064u);
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  const size_t array_size = 1024;
410716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com  IndexedDBKey::KeyArray array;
420716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com  double value = 123.456;
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  for (size_t i = 0; i < array_size; ++i) {
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    array.push_back(IndexedDBKey(value, blink::WebIDBKeyTypeNumber));
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  }
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  keys.push_back(IndexedDBKey(array));
470716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com  // Overhead + array length * (Overhead + sizeof(double)).
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  estimates.push_back(24592u);
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  ASSERT_EQ(keys.size(), estimates.size());
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  for (size_t i = 0; i < keys.size(); ++i) {
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    EXPECT_EQ(estimates[i], keys[i].size_estimate());
53a8282ef8f9e63e60c5665af0cdfc8fdd11c089f6mike@reedtribe.org  }
540716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com}
550716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com
560716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com}  // namespace
57a8282ef8f9e63e60c5665af0cdfc8fdd11c089f6mike@reedtribe.org
580716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com}  // namespace content
590716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com