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