| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/dom_storage/dom_storage_database.h" | 5 #include "webkit/dom_storage/dom_storage_database.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 // as far as the DOM Storage db is concerned. | 47 // as far as the DOM Storage db is concerned. |
| 48 ASSERT_TRUE(db->is_open()); | 48 ASSERT_TRUE(db->is_open()); |
| 49 ASSERT_TRUE(db->Execute("DROP TABLE IF EXISTS ItemTable")); | 49 ASSERT_TRUE(db->Execute("DROP TABLE IF EXISTS ItemTable")); |
| 50 ASSERT_TRUE(db->Execute( | 50 ASSERT_TRUE(db->Execute( |
| 51 "CREATE TABLE IF NOT EXISTS ItemTable (" | 51 "CREATE TABLE IF NOT EXISTS ItemTable (" |
| 52 "key TEXT UNIQUE ON CONFLICT REPLACE, " | 52 "key TEXT UNIQUE ON CONFLICT REPLACE, " |
| 53 "value FLOAT NOT NULL ON CONFLICT FAIL)")); | 53 "value FLOAT NOT NULL ON CONFLICT FAIL)")); |
| 54 } | 54 } |
| 55 | 55 |
| 56 void InsertDataV1(sql::Connection* db, | 56 void InsertDataV1(sql::Connection* db, |
| 57 const string16& key, | 57 const base::string16& key, |
| 58 const string16& value) { | 58 const base::string16& value) { |
| 59 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, | 59 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, |
| 60 "INSERT INTO ItemTable VALUES (?,?)")); | 60 "INSERT INTO ItemTable VALUES (?,?)")); |
| 61 statement.BindString16(0, key); | 61 statement.BindString16(0, key); |
| 62 statement.BindString16(1, value); | 62 statement.BindString16(1, value); |
| 63 ASSERT_TRUE(statement.is_valid()); | 63 ASSERT_TRUE(statement.is_valid()); |
| 64 statement.Run(); | 64 statement.Run(); |
| 65 } | 65 } |
| 66 | 66 |
| 67 void CheckValuesMatch(DomStorageDatabase* db, | 67 void CheckValuesMatch(DomStorageDatabase* db, |
| 68 const ValuesMap& expected) { | 68 const ValuesMap& expected) { |
| 69 ValuesMap values_read; | 69 ValuesMap values_read; |
| 70 db->ReadAllValues(&values_read); | 70 db->ReadAllValues(&values_read); |
| 71 EXPECT_EQ(expected.size(), values_read.size()); | 71 EXPECT_EQ(expected.size(), values_read.size()); |
| 72 | 72 |
| 73 ValuesMap::const_iterator it = values_read.begin(); | 73 ValuesMap::const_iterator it = values_read.begin(); |
| 74 for (; it != values_read.end(); ++it) { | 74 for (; it != values_read.end(); ++it) { |
| 75 string16 key = it->first; | 75 base::string16 key = it->first; |
| 76 NullableString16 value = it->second; | 76 NullableString16 value = it->second; |
| 77 NullableString16 expected_value = expected.find(key)->second; | 77 NullableString16 expected_value = expected.find(key)->second; |
| 78 EXPECT_EQ(expected_value.string(), value.string()); | 78 EXPECT_EQ(expected_value.string(), value.string()); |
| 79 EXPECT_EQ(expected_value.is_null(), value.is_null()); | 79 EXPECT_EQ(expected_value.is_null(), value.is_null()); |
| 80 } | 80 } |
| 81 } | 81 } |
| 82 | 82 |
| 83 void CreateMapWithValues(ValuesMap* values) { | 83 void CreateMapWithValues(ValuesMap* values) { |
| 84 string16 kCannedKeys[] = { | 84 base::string16 kCannedKeys[] = { |
| 85 ASCIIToUTF16("test"), | 85 ASCIIToUTF16("test"), |
| 86 ASCIIToUTF16("company"), | 86 ASCIIToUTF16("company"), |
| 87 ASCIIToUTF16("date"), | 87 ASCIIToUTF16("date"), |
| 88 ASCIIToUTF16("empty") | 88 ASCIIToUTF16("empty") |
| 89 }; | 89 }; |
| 90 NullableString16 kCannedValues[] = { | 90 NullableString16 kCannedValues[] = { |
| 91 NullableString16(ASCIIToUTF16("123"), false), | 91 NullableString16(ASCIIToUTF16("123"), false), |
| 92 NullableString16(ASCIIToUTF16("Google"), false), | 92 NullableString16(ASCIIToUTF16("Google"), false), |
| 93 NullableString16(ASCIIToUTF16("18-01-2012"), false), | 93 NullableString16(ASCIIToUTF16("18-01-2012"), false), |
| 94 NullableString16(string16(), false) | 94 NullableString16(base::string16(), false) |
| 95 }; | 95 }; |
| 96 for (unsigned i = 0; i < sizeof(kCannedKeys) / sizeof(kCannedKeys[0]); i++) | 96 for (unsigned i = 0; i < sizeof(kCannedKeys) / sizeof(kCannedKeys[0]); i++) |
| 97 (*values)[kCannedKeys[i]] = kCannedValues[i]; | 97 (*values)[kCannedKeys[i]] = kCannedValues[i]; |
| 98 } | 98 } |
| 99 | 99 |
| 100 TEST(DomStorageDatabaseTest, SimpleOpenAndClose) { | 100 TEST(DomStorageDatabaseTest, SimpleOpenAndClose) { |
| 101 DomStorageDatabase db; | 101 DomStorageDatabase db; |
| 102 EXPECT_FALSE(db.IsOpen()); | 102 EXPECT_FALSE(db.IsOpen()); |
| 103 ASSERT_TRUE(db.LazyOpen(true)); | 103 ASSERT_TRUE(db.LazyOpen(true)); |
| 104 EXPECT_TRUE(db.IsOpen()); | 104 EXPECT_TRUE(db.IsOpen()); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 ASSERT_TRUE(db.CommitChanges(true, storage)); | 252 ASSERT_TRUE(db.CommitChanges(true, storage)); |
| 253 CheckValuesMatch(&db, storage); | 253 CheckValuesMatch(&db, storage); |
| 254 | 254 |
| 255 // Now clear the values without inserting any new ones. | 255 // Now clear the values without inserting any new ones. |
| 256 storage.clear(); | 256 storage.clear(); |
| 257 ASSERT_TRUE(db.CommitChanges(true, storage)); | 257 ASSERT_TRUE(db.CommitChanges(true, storage)); |
| 258 CheckValuesMatch(&db, storage); | 258 CheckValuesMatch(&db, storage); |
| 259 } | 259 } |
| 260 | 260 |
| 261 TEST(DomStorageDatabaseTest, UpgradeFromV1ToV2WithData) { | 261 TEST(DomStorageDatabaseTest, UpgradeFromV1ToV2WithData) { |
| 262 const string16 kCannedKey = ASCIIToUTF16("foo"); | 262 const base::string16 kCannedKey = ASCIIToUTF16("foo"); |
| 263 const NullableString16 kCannedValue(ASCIIToUTF16("bar"), false); | 263 const NullableString16 kCannedValue(ASCIIToUTF16("bar"), false); |
| 264 ValuesMap expected; | 264 ValuesMap expected; |
| 265 expected[kCannedKey] = kCannedValue; | 265 expected[kCannedKey] = kCannedValue; |
| 266 | 266 |
| 267 DomStorageDatabase db; | 267 DomStorageDatabase db; |
| 268 db.db_.reset(new sql::Connection()); | 268 db.db_.reset(new sql::Connection()); |
| 269 ASSERT_TRUE(db.db_->OpenInMemory()); | 269 ASSERT_TRUE(db.db_->OpenInMemory()); |
| 270 CreateV1Table(db.db_.get()); | 270 CreateV1Table(db.db_.get()); |
| 271 InsertDataV1(db.db_.get(), kCannedKey, kCannedValue.string()); | 271 InsertDataV1(db.db_.get(), kCannedKey, kCannedValue.string()); |
| 272 | 272 |
| 273 ASSERT_TRUE(db.UpgradeVersion1To2()); | 273 ASSERT_TRUE(db.UpgradeVersion1To2()); |
| 274 | 274 |
| 275 EXPECT_EQ(DomStorageDatabase::V2, db.DetectSchemaVersion()); | 275 EXPECT_EQ(DomStorageDatabase::V2, db.DetectSchemaVersion()); |
| 276 | 276 |
| 277 CheckValuesMatch(&db, expected); | 277 CheckValuesMatch(&db, expected); |
| 278 } | 278 } |
| 279 | 279 |
| 280 TEST(DomStorageDatabaseTest, TestSimpleRemoveOneValue) { | 280 TEST(DomStorageDatabaseTest, TestSimpleRemoveOneValue) { |
| 281 DomStorageDatabase db; | 281 DomStorageDatabase db; |
| 282 | 282 |
| 283 ASSERT_TRUE(db.LazyOpen(true)); | 283 ASSERT_TRUE(db.LazyOpen(true)); |
| 284 const string16 kCannedKey = ASCIIToUTF16("test"); | 284 const base::string16 kCannedKey = ASCIIToUTF16("test"); |
| 285 const NullableString16 kCannedValue(ASCIIToUTF16("data"), false); | 285 const NullableString16 kCannedValue(ASCIIToUTF16("data"), false); |
| 286 ValuesMap expected; | 286 ValuesMap expected; |
| 287 expected[kCannedKey] = kCannedValue; | 287 expected[kCannedKey] = kCannedValue; |
| 288 | 288 |
| 289 // First write some data into the database. | 289 // First write some data into the database. |
| 290 ASSERT_TRUE(db.CommitChanges(false, expected)); | 290 ASSERT_TRUE(db.CommitChanges(false, expected)); |
| 291 CheckValuesMatch(&db, expected); | 291 CheckValuesMatch(&db, expected); |
| 292 | 292 |
| 293 ValuesMap values; | 293 ValuesMap values; |
| 294 // A null string in the map should mean that that key gets | 294 // A null string in the map should mean that that key gets |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 | 367 |
| 368 db.ReadAllValues(&values); | 368 db.ReadAllValues(&values); |
| 369 EXPECT_EQ(0u, values.size()); | 369 EXPECT_EQ(0u, values.size()); |
| 370 EXPECT_FALSE(db.IsOpen()); | 370 EXPECT_FALSE(db.IsOpen()); |
| 371 | 371 |
| 372 EXPECT_TRUE(file_util::PathExists(temp_dir.path())); | 372 EXPECT_TRUE(file_util::PathExists(temp_dir.path())); |
| 373 } | 373 } |
| 374 } | 374 } |
| 375 | 375 |
| 376 } // namespace dom_storage | 376 } // namespace dom_storage |
| OLD | NEW |