17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <vector>
67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/basictypes.h"
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/scoped_vector.h"
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h"
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/common/indexed_db/indexed_db_key.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace content {
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace {
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST(IndexedDBKeyTest, KeySizeEstimates) {
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  std::vector<IndexedDBKey> keys;
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  std::vector<size_t> estimates;
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  keys.push_back(IndexedDBKey());
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  estimates.push_back(16u);  // Overhead.
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  keys.push_back(IndexedDBKey(blink::WebIDBKeyTypeNull));
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  estimates.push_back(16u);
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  double number = 3.14159;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  keys.push_back(IndexedDBKey(number, blink::WebIDBKeyTypeNumber));
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  estimates.push_back(24u);  // Overhead + sizeof(double).
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  double date = 1370884329.0;
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  keys.push_back(IndexedDBKey(date, blink::WebIDBKeyTypeDate));
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  estimates.push_back(24u);  // Overhead + sizeof(double).
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16 string(1024, static_cast<base::char16>('X'));
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  keys.push_back(IndexedDBKey(string));
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Overhead + string length * sizeof(base::char16).
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  estimates.push_back(2064u);
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  const size_t array_size = 1024;
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  IndexedDBKey::KeyArray array;
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  double value = 123.456;
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  for (size_t i = 0; i < array_size; ++i) {
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    array.push_back(IndexedDBKey(value, blink::WebIDBKeyTypeNumber));
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  keys.push_back(IndexedDBKey(array));
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Overhead + array length * (Overhead + sizeof(double)).
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  estimates.push_back(24592u);
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_EQ(keys.size(), estimates.size());
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  for (size_t i = 0; i < keys.size(); ++i) {
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    EXPECT_EQ(estimates[i], keys[i].size_estimate());
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace content
59