14ee2ad04344446e610172a0e73949212923014dfSebastian Redl// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// Use of this source code is governed by a BSD-style license that can be 32cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// found in the LICENSE file. 42cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 52cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "content/browser/indexed_db/indexed_db_leveldb_coding.h" 62cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 72cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include <limits> 82cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include <vector> 92cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 10a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl#include "base/basictypes.h" 112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "base/strings/string16.h" 122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "base/strings/string_piece.h" 132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "base/strings/utf_string_conversions.h" 147faa2ec03a7ef120ac165bb45b6c70a8b20c9f1cSebastian Redl#include "content/common/indexed_db/indexed_db_key.h" 150eca89e9890db4d8336ce762a5b359a1d58ca02bArgyrios Kyrtzidis#include "content/common/indexed_db/indexed_db_key_path.h" 16e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor#include "testing/gtest/include/gtest/gtest.h" 17e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor 182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorusing base::ASCIIToUTF16; 192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorusing base::StringPiece; 202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorusing blink::WebIDBKeyTypeDate; 212a7fb27913999d132cf9e10e03dc5271faa2e9d3John McCallusing blink::WebIDBKeyTypeNumber; 220b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor 237a1fad38256eb4c5129359be85ba1ea1678eb5c9John McCallnamespace content { 242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 25a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCallnamespace { 266ab7cd853e9c15cf986a8a7c3db1f8d20e275409Sebastian Redl 277c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattnerstatic IndexedDBKey CreateArrayIDBKey() { 286a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor return IndexedDBKey(IndexedDBKey::KeyArray()); 297c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner} 3083d63c78810556d26b62ac4cbae2eda6cdd2570cSteve Naroff 3114f79002e58556798e86168c63e48d533287eda5Douglas Gregorstatic IndexedDBKey CreateArrayIDBKey(const IndexedDBKey& key1) { 323251ceb90b3fec68e86d6dcfa58836e20a7205c3Douglas Gregor IndexedDBKey::KeyArray array; 3314f79002e58556798e86168c63e48d533287eda5Douglas Gregor array.push_back(key1); 34bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor return IndexedDBKey(array); 352bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor} 36ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor 3717fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregorstatic IndexedDBKey CreateArrayIDBKey(const IndexedDBKey& key1, 3817fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor const IndexedDBKey& key2) { 392596e429a61602312bdd149786045b8a90cd2d10Daniel Dunbar IndexedDBKey::KeyArray array; 402cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor array.push_back(key1); 4114f79002e58556798e86168c63e48d533287eda5Douglas Gregor array.push_back(key2); 42b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor return IndexedDBKey(array); 433c304bd9ec2b4611572d4cbae9e1727bbecb5dc9Chris Lattner} 442cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 458538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redlstatic std::string WrappedEncodeByte(char value) { 462cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string buffer; 47ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl EncodeByte(value, &buffer); 48ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl return buffer; 49ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl} 50ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl 51ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian RedlTEST(IndexedDBLevelDBCodingTest, EncodeByte) { 52ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl std::string expected; 53ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl expected.push_back(0); 54ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl unsigned char c; 55ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl 562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor c = 0; 572cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor expected[0] = c; 582cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(expected, WrappedEncodeByte(c)); 5912b1c7615d4f9a2edc544be499f895f16ac100edChris Lattner 602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor c = 1; 613397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl expected[0] = c; 62a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl EXPECT_EQ(expected, WrappedEncodeByte(c)); 63a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl 642cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor c = 255; 652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor expected[0] = c; 662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(expected, WrappedEncodeByte(c)); 678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl} 682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 693397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlTEST(IndexedDBLevelDBCodingTest, DecodeByte) { 708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl std::vector<unsigned char> test_cases; 712cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor test_cases.push_back(0); 722cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor test_cases.push_back(1); 732cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor test_cases.push_back(255); 742cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 752cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor for (size_t i = 0; i < test_cases.size(); ++i) { 762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor unsigned char n = test_cases[i]; 772cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string v; 782cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EncodeByte(n, &v); 792cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 802cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor unsigned char res; 812cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor ASSERT_GT(v.size(), 0u); 823397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl StringPiece slice(v); 832cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_TRUE(DecodeByte(&slice, &res)); 842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(n, res); 852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_TRUE(slice.empty()); 863397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 888538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl { 892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor StringPiece slice; 902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor unsigned char value; 913397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_FALSE(DecodeByte(&slice, &value)); 922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 938538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl} 942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 952cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorstatic std::string WrappedEncodeBool(bool value) { 963397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl std::string buffer; 971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EncodeBool(value, &buffer); 988538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl return buffer; 992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 1002cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1013397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlTEST(IndexedDBLevelDBCodingTest, EncodeBool) { 1022cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor { 1038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl std::string expected; 1042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor expected.push_back(1); 1052cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(expected, WrappedEncodeBool(true)); 1063397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 1072cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor { 1088538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl std::string expected; 1092cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor expected.push_back(0); 1102cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(expected, WrappedEncodeBool(false)); 1113397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 1121eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump} 1131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1148538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redlstatic int CompareKeys(const std::string& a, const std::string& b) { 1152cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor DCHECK(!a.empty()); 1162cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor DCHECK(!b.empty()); 1173397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor StringPiece slice_a(a); 1192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor StringPiece slice_b(b); 1200953e767ff7817f97b3ab20896b229891eeff45bJohn McCall bool ok; 1212cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor int result = CompareEncodedIDBKeys(&slice_a, &slice_b, &ok); 1222cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_TRUE(ok); 1233397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl return result; 1242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 1252cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1268538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlTEST(IndexedDBLevelDBCodingTest, MaxIDBKey) { 1272cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string max_key = MaxIDBKey(); 1282cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1293397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl std::string min_key = MinIDBKey(); 1302cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string array_key; 1318538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EncodeIDBKey(IndexedDBKey(IndexedDBKey::KeyArray()), &array_key); 1322cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string binary_key; 1332cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EncodeIDBKey(IndexedDBKey(std::string("\x00\x01\x02")), &binary_key); 1343397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl std::string string_key; 1352cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EncodeIDBKey(IndexedDBKey(ASCIIToUTF16("Hello world")), &string_key); 1367e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor std::string number_key; 1377e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor EncodeIDBKey(IndexedDBKey(3.14, WebIDBKeyTypeNumber), &number_key); 138c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor std::string date_key; 1398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EncodeIDBKey(IndexedDBKey(1000000, WebIDBKeyTypeDate), &date_key); 1402cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1412cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_GT(CompareKeys(max_key, min_key), 0); 1423397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_GT(CompareKeys(max_key, array_key), 0); 1432cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_GT(CompareKeys(max_key, binary_key), 0); 1442cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_GT(CompareKeys(max_key, string_key), 0); 145788b0fd67e1992f23555454efcdb16a19dfefac3Chris Lattner EXPECT_GT(CompareKeys(max_key, number_key), 0); 1468538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_GT(CompareKeys(max_key, date_key), 0); 1472cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 1482cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1493397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlTEST(IndexedDBLevelDBCodingTest, MinIDBKey) { 1502cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string min_key = MinIDBKey(); 1518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 1522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string max_key = MaxIDBKey(); 1532cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string array_key; 1543397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EncodeIDBKey(IndexedDBKey(IndexedDBKey::KeyArray()), &array_key); 1552cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string binary_key; 156264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola EncodeIDBKey(IndexedDBKey(std::string("\x00\x01\x02")), &binary_key); 157264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola std::string string_key; 158425ef72306d4ff6b3698b744353e5f0e56b4b884Rafael Espindola EncodeIDBKey(IndexedDBKey(ASCIIToUTF16("Hello world")), &string_key); 159ab8bbf4ebd3e3e6eab913cb044772a62b7581941Douglas Gregor std::string number_key; 160264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola EncodeIDBKey(IndexedDBKey(3.14, WebIDBKeyTypeNumber), &number_key); 1612cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string date_key; 1622cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EncodeIDBKey(IndexedDBKey(1000000, WebIDBKeyTypeDate), &date_key); 1633397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1642cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_LT(CompareKeys(min_key, max_key), 0); 1658538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_LT(CompareKeys(min_key, array_key), 0); 1662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_LT(CompareKeys(min_key, binary_key), 0); 1672cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_LT(CompareKeys(min_key, string_key), 0); 1683397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_LT(CompareKeys(min_key, number_key), 0); 1692cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_LT(CompareKeys(min_key, date_key), 0); 1702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} 1712cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1722cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorstatic std::string WrappedEncodeInt(int64 value) { 1732cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string buffer; 1742cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EncodeInt(value, &buffer); 175465226e23a3008bd68973513dda1f9e3cd27dbddSebastian Redl return buffer; 176465226e23a3008bd68973513dda1f9e3cd27dbddSebastian Redl} 177465226e23a3008bd68973513dda1f9e3cd27dbddSebastian Redl 178465226e23a3008bd68973513dda1f9e3cd27dbddSebastian RedlTEST(IndexedDBLevelDBCodingTest, EncodeInt) { 179465226e23a3008bd68973513dda1f9e3cd27dbddSebastian Redl EXPECT_EQ(1u, WrappedEncodeInt(0).size()); 1808538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_EQ(1u, WrappedEncodeInt(1).size()); 1812cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(1u, WrappedEncodeInt(255).size()); 1822cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(2u, WrappedEncodeInt(256).size()); 1833397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_EQ(4u, WrappedEncodeInt(0xffffffff).size()); 184ed97649e9574b9d854fa4d6109c9333ae0993554John McCall#ifdef NDEBUG 1858538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_EQ(8u, WrappedEncodeInt(-1).size()); 186ed97649e9574b9d854fa4d6109c9333ae0993554John McCall#endif 187ed97649e9574b9d854fa4d6109c9333ae0993554John McCall} 1883397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorTEST(IndexedDBLevelDBCodingTest, DecodeBool) { 1909763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis { 1919763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis std::string encoded; 1928538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl encoded.push_back(1); 1932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor StringPiece slice(encoded); 1942cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor bool value; 1953397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_TRUE(DecodeBool(&slice, &value)); 196c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor EXPECT_TRUE(value); 1978538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_TRUE(slice.empty()); 1982cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 1992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor { 2003397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl std::string encoded; 2012cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor encoded.push_back(0); 2028538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl StringPiece slice(encoded); 2032cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor bool value; 2042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_TRUE(DecodeBool(&slice, &value)); 2053397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_FALSE(value); 206395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson EXPECT_TRUE(slice.empty()); 2078538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 208395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson { 209395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson StringPiece slice; 2103397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl bool value; 211be191100e034b23a3e13053757a57b7f5068c24aArgyrios Kyrtzidis EXPECT_FALSE(DecodeBool(&slice, &value)); 2122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 2131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump} 2142cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 2152cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas GregorTEST(IndexedDBLevelDBCodingTest, DecodeInt) { 2162cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::vector<int64> test_cases; 2173397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl test_cases.push_back(0); 2182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor test_cases.push_back(1); 2198538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl test_cases.push_back(255); 2202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor test_cases.push_back(256); 2212cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor test_cases.push_back(65535); 2223397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl test_cases.push_back(655536); 2232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor test_cases.push_back(7711192431755665792ll); 2248538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl test_cases.push_back(0x7fffffffffffffffll); 2252cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#ifdef NDEBUG 2262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor test_cases.push_back(-3); 2271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#endif 2283397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 22949a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall for (size_t i = 0; i < test_cases.size(); ++i) { 23049a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall int64 n = test_cases[i]; 23149a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall std::string v = WrappedEncodeInt(n); 2328538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl ASSERT_GT(v.size(), 0u); 23349a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall StringPiece slice(v); 23449a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall int64 value; 23549a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall EXPECT_TRUE(DecodeInt(&slice, &value)); 2363397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_EQ(n, value); 2372cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_TRUE(slice.empty()); 238be191100e034b23a3e13053757a57b7f5068c24aArgyrios Kyrtzidis 23990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis // Verify decoding at an offset, to detect unaligned memory access. 24090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis v.insert(v.begin(), 1u, static_cast<char>(0)); 24190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis slice = StringPiece(&*v.begin() + 1, v.size() - 1); 24290b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_TRUE(DecodeInt(&slice, &value)); 24390b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(n, value); 2449763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis EXPECT_TRUE(slice.empty()); 2459763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis } 2469763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis { 2478538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl StringPiece slice; 24890b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis int64 value; 24990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_FALSE(DecodeInt(&slice, &value)); 25090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis } 2513397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl} 252ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis 253ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidisstatic std::string WrappedEncodeVarInt(int64 value) { 254ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis std::string buffer; 2558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EncodeVarInt(value, &buffer); 25690b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis return buffer; 25790b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis} 25890b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 2593397c5570369f19b2d6c52e898f708d75ceede1fSebastian RedlTEST(IndexedDBLevelDBCodingTest, EncodeVarInt) { 26090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(1u, WrappedEncodeVarInt(0).size()); 26190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(1u, WrappedEncodeVarInt(1).size()); 26290b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(2u, WrappedEncodeVarInt(255).size()); 26390b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(2u, WrappedEncodeVarInt(256).size()); 26490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(5u, WrappedEncodeVarInt(0xffffffff).size()); 26590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(8u, WrappedEncodeVarInt(0xfffffffffffffLL).size()); 2663397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_EQ(9u, WrappedEncodeVarInt(0x7fffffffffffffffLL).size()); 26790b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis#ifdef NDEBUG 26890b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(10u, WrappedEncodeVarInt(-100).size()); 26990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis#endif 27090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis} 2718538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 27290b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios KyrtzidisTEST(IndexedDBLevelDBCodingTest, DecodeVarInt) { 27390b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis std::vector<int64> test_cases; 27490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis test_cases.push_back(0); 2753397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl test_cases.push_back(1); 2768dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis test_cases.push_back(255); 2778dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis test_cases.push_back(256); 2788dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis test_cases.push_back(65535); 279f48d45e3e36c132bdee3373beec4e8b19ae3f9c4Argyrios Kyrtzidis test_cases.push_back(655536); 280f48d45e3e36c132bdee3373beec4e8b19ae3f9c4Argyrios Kyrtzidis test_cases.push_back(7711192431755665792ll); 281f48d45e3e36c132bdee3373beec4e8b19ae3f9c4Argyrios Kyrtzidis test_cases.push_back(0x7fffffffffffffffll); 2828538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl#ifdef NDEBUG 28390b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis test_cases.push_back(-3); 28490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis#endif 28590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 2863397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl for (size_t i = 0; i < test_cases.size(); ++i) { 28790b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis int64 n = test_cases[i]; 2883acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis std::string v = WrappedEncodeVarInt(n); 2893acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis ASSERT_GT(v.size(), 0u); 2903acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis StringPiece slice(v); 2913acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis int64 res; 2923acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis EXPECT_TRUE(DecodeVarInt(&slice, &res)); 2933acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis EXPECT_EQ(n, res); 2943acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis EXPECT_TRUE(slice.empty()); 2958538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 2962cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor slice = StringPiece(&*v.begin(), v.size() - 1); 2972cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_FALSE(DecodeVarInt(&slice, &res)); 2983397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 299465d41b92b2c862f3062c412a0538db65c6a2661Abramo Bagnara slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); 3003acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis EXPECT_FALSE(DecodeVarInt(&slice, &res)); 3013acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis 3028538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl // Verify decoding at an offset, to detect unaligned memory access. 3032cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor v.insert(v.begin(), 1u, static_cast<char>(0)); 3042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor slice = StringPiece(&*v.begin() + 1, v.size() - 1); 3053397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_TRUE(DecodeVarInt(&slice, &res)); 3063cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall EXPECT_EQ(n, res); 30731f17ecbef57b5679c017c375db330546b7b5145John McCall EXPECT_TRUE(slice.empty()); 3088538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 3093cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall} 3103cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall 3113397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redlstatic std::string WrappedEncodeString(base::string16 value) { 312deacbdca554298ccdf636f19c6094a8825ec6b34Douglas Gregor std::string buffer; 3138538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EncodeString(value, &buffer); 314c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall return buffer; 315c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall} 3163397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 317c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCallTEST(IndexedDBLevelDBCodingTest, EncodeString) { 3182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor const base::char16 test_string_a[] = {'f', 'o', 'o', '\0'}; 319c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall const base::char16 test_string_b[] = {0xdead, 0xbeef, '\0'}; 320446ee4eb4fc4c705a59365252df7a5c253daafa1Steve Naroff 321446ee4eb4fc4c705a59365252df7a5c253daafa1Steve Naroff EXPECT_EQ(0u, WrappedEncodeString(ASCIIToUTF16("")).size()); 3228538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_EQ(2u, WrappedEncodeString(ASCIIToUTF16("a")).size()); 3232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(6u, WrappedEncodeString(ASCIIToUTF16("foo")).size()); 3242cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(6u, WrappedEncodeString(base::string16(test_string_a)).size()); 325d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve Naroff EXPECT_EQ(4u, WrappedEncodeString(base::string16(test_string_b)).size()); 3263397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl} 3271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 3288538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlTEST(IndexedDBLevelDBCodingTest, DecodeString) { 3292cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor const base::char16 test_string_a[] = {'f', 'o', 'o', '\0'}; 3302cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor const base::char16 test_string_b[] = {0xdead, 0xbeef, '\0'}; 331a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 332a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall std::vector<base::string16> test_cases; 333a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall test_cases.push_back(base::string16()); 334a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl test_cases.push_back(ASCIIToUTF16("a")); 335a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl test_cases.push_back(ASCIIToUTF16("foo")); 336a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall test_cases.push_back(test_string_a); 337a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall test_cases.push_back(test_string_b); 338a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl 339a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall for (size_t i = 0; i < test_cases.size(); ++i) { 340a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall const base::string16& test_case = test_cases[i]; 34151bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::string v = WrappedEncodeString(test_case); 342a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 34351bd803fbdade51d674598ed45da3d54190a656cJohn McCall StringPiece slice; 344a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall if (v.size()) { 345a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall slice = StringPiece(&*v.begin(), v.size()); 34651bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 34751bd803fbdade51d674598ed45da3d54190a656cJohn McCall 348a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall base::string16 result; 349a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall EXPECT_TRUE(DecodeString(&slice, &result)); 350a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall EXPECT_EQ(test_case, result); 351a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall EXPECT_TRUE(slice.empty()); 35251bd803fbdade51d674598ed45da3d54190a656cJohn McCall 35351bd803fbdade51d674598ed45da3d54190a656cJohn McCall // Verify decoding at an offset, to detect unaligned memory access. 35451bd803fbdade51d674598ed45da3d54190a656cJohn McCall v.insert(v.begin(), 1u, static_cast<char>(0)); 35551bd803fbdade51d674598ed45da3d54190a656cJohn McCall slice = StringPiece(&*v.begin() + 1, v.size() - 1); 356ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor EXPECT_TRUE(DecodeString(&slice, &result)); 357ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor EXPECT_EQ(test_case, result); 358ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor EXPECT_TRUE(slice.empty()); 359ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor } 360ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor} 361ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor 362ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregorstatic std::string WrappedEncodeStringWithLength(base::string16 value) { 36351bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::string buffer; 36451bd803fbdade51d674598ed45da3d54190a656cJohn McCall EncodeStringWithLength(value, &buffer); 36551bd803fbdade51d674598ed45da3d54190a656cJohn McCall return buffer; 36651bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 36751bd803fbdade51d674598ed45da3d54190a656cJohn McCall 36851bd803fbdade51d674598ed45da3d54190a656cJohn McCallTEST(IndexedDBLevelDBCodingTest, EncodeStringWithLength) { 36951bd803fbdade51d674598ed45da3d54190a656cJohn McCall const base::char16 test_string_a[] = {'f', 'o', 'o', '\0'}; 37051bd803fbdade51d674598ed45da3d54190a656cJohn McCall const base::char16 test_string_b[] = {0xdead, 0xbeef, '\0'}; 37151bd803fbdade51d674598ed45da3d54190a656cJohn McCall 37251bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ(1u, WrappedEncodeStringWithLength(base::string16()).size()); 37351bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ(3u, WrappedEncodeStringWithLength(ASCIIToUTF16("a")).size()); 37451bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ( 37551bd803fbdade51d674598ed45da3d54190a656cJohn McCall 7u, WrappedEncodeStringWithLength(base::string16(test_string_a)).size()); 37651bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ( 37751bd803fbdade51d674598ed45da3d54190a656cJohn McCall 5u, WrappedEncodeStringWithLength(base::string16(test_string_b)).size()); 37851bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 37951bd803fbdade51d674598ed45da3d54190a656cJohn McCall 38051bd803fbdade51d674598ed45da3d54190a656cJohn McCallTEST(IndexedDBLevelDBCodingTest, DecodeStringWithLength) { 38151bd803fbdade51d674598ed45da3d54190a656cJohn McCall const base::char16 test_string_a[] = {'f', 'o', 'o', '\0'}; 38251bd803fbdade51d674598ed45da3d54190a656cJohn McCall const base::char16 test_string_b[] = {0xdead, 0xbeef, '\0'}; 38351bd803fbdade51d674598ed45da3d54190a656cJohn McCall 38451bd803fbdade51d674598ed45da3d54190a656cJohn McCall const int kLongStringLen = 1234; 38551bd803fbdade51d674598ed45da3d54190a656cJohn McCall base::char16 long_string[kLongStringLen + 1]; 38651bd803fbdade51d674598ed45da3d54190a656cJohn McCall for (int i = 0; i < kLongStringLen; ++i) 38751bd803fbdade51d674598ed45da3d54190a656cJohn McCall long_string[i] = i; 38851bd803fbdade51d674598ed45da3d54190a656cJohn McCall long_string[kLongStringLen] = 0; 38951bd803fbdade51d674598ed45da3d54190a656cJohn McCall 39051bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::vector<base::string16> test_cases; 39151bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(ASCIIToUTF16("")); 39251bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(ASCIIToUTF16("a")); 39351bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(ASCIIToUTF16("foo")); 39451bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(base::string16(test_string_a)); 39551bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(base::string16(test_string_b)); 39651bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(base::string16(long_string)); 39751bd803fbdade51d674598ed45da3d54190a656cJohn McCall 39851bd803fbdade51d674598ed45da3d54190a656cJohn McCall for (size_t i = 0; i < test_cases.size(); ++i) { 39951bd803fbdade51d674598ed45da3d54190a656cJohn McCall base::string16 s = test_cases[i]; 40051bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::string v = WrappedEncodeStringWithLength(s); 40151bd803fbdade51d674598ed45da3d54190a656cJohn McCall ASSERT_GT(v.size(), 0u); 40251bd803fbdade51d674598ed45da3d54190a656cJohn McCall StringPiece slice(v); 40351bd803fbdade51d674598ed45da3d54190a656cJohn McCall base::string16 res; 40451bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_TRUE(DecodeStringWithLength(&slice, &res)); 40551bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ(s, res); 40651bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_TRUE(slice.empty()); 40751bd803fbdade51d674598ed45da3d54190a656cJohn McCall 40851bd803fbdade51d674598ed45da3d54190a656cJohn McCall slice = StringPiece(&*v.begin(), v.size() - 1); 40951bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_FALSE(DecodeStringWithLength(&slice, &res)); 41051bd803fbdade51d674598ed45da3d54190a656cJohn McCall 41151bd803fbdade51d674598ed45da3d54190a656cJohn McCall slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); 41251bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_FALSE(DecodeStringWithLength(&slice, &res)); 41351bd803fbdade51d674598ed45da3d54190a656cJohn McCall 41451bd803fbdade51d674598ed45da3d54190a656cJohn McCall // Verify decoding at an offset, to detect unaligned memory access. 415dab60ad68a3a98d687305941a3852e793705f945Douglas Gregor v.insert(v.begin(), 1u, static_cast<char>(0)); 41651bd803fbdade51d674598ed45da3d54190a656cJohn McCall slice = StringPiece(&*v.begin() + 1, v.size() - 1); 41751bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_TRUE(DecodeStringWithLength(&slice, &res)); 41851bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ(s, res); 41951bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_TRUE(slice.empty()); 42051bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 42151bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 42251bd803fbdade51d674598ed45da3d54190a656cJohn McCall 42351bd803fbdade51d674598ed45da3d54190a656cJohn McCallstatic int CompareStrings(const std::string& p, const std::string& q) { 42451bd803fbdade51d674598ed45da3d54190a656cJohn McCall bool ok; 425ed97649e9574b9d854fa4d6109c9333ae0993554John McCall DCHECK(!p.empty()); 426ed97649e9574b9d854fa4d6109c9333ae0993554John McCall DCHECK(!q.empty()); 427ed97649e9574b9d854fa4d6109c9333ae0993554John McCall StringPiece slice_p(p); 42851bd803fbdade51d674598ed45da3d54190a656cJohn McCall StringPiece slice_q(q); 42951bd803fbdade51d674598ed45da3d54190a656cJohn McCall int result = CompareEncodedStringsWithLength(&slice_p, &slice_q, &ok); 43051bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_TRUE(ok); 43151bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_TRUE(slice_p.empty()); 432cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall EXPECT_TRUE(slice_q.empty()); 433cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall return result; 434cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall} 43551bd803fbdade51d674598ed45da3d54190a656cJohn McCall 43651bd803fbdade51d674598ed45da3d54190a656cJohn McCallTEST(IndexedDBLevelDBCodingTest, CompareEncodedStringsWithLength) { 437cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall const base::char16 test_string_a[] = {0x1000, 0x1000, '\0'}; 438cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall const base::char16 test_string_b[] = {0x1000, 0x1000, 0x1000, '\0'}; 439cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall const base::char16 test_string_c[] = {0x1000, 0x1000, 0x1001, '\0'}; 440cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall const base::char16 test_string_d[] = {0x1001, 0x1000, 0x1000, '\0'}; 44151bd803fbdade51d674598ed45da3d54190a656cJohn McCall const base::char16 test_string_e[] = {0xd834, 0xdd1e, '\0'}; 44251bd803fbdade51d674598ed45da3d54190a656cJohn McCall const base::char16 test_string_f[] = {0xfffd, '\0'}; 44351bd803fbdade51d674598ed45da3d54190a656cJohn McCall 444a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall std::vector<base::string16> test_cases; 44551bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(ASCIIToUTF16("")); 44651bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(ASCIIToUTF16("a")); 447a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall test_cases.push_back(ASCIIToUTF16("b")); 44851bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(ASCIIToUTF16("baaa")); 44951bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(ASCIIToUTF16("baab")); 450a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall test_cases.push_back(ASCIIToUTF16("c")); 45151bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(base::string16(test_string_a)); 45251bd803fbdade51d674598ed45da3d54190a656cJohn McCall test_cases.push_back(base::string16(test_string_b)); 453a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall test_cases.push_back(base::string16(test_string_c)); 45449a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall test_cases.push_back(base::string16(test_string_d)); 45549a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall test_cases.push_back(base::string16(test_string_e)); 45649a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall test_cases.push_back(base::string16(test_string_f)); 45749a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall 45851bd803fbdade51d674598ed45da3d54190a656cJohn McCall for (size_t i = 0; i < test_cases.size() - 1; ++i) { 45951bd803fbdade51d674598ed45da3d54190a656cJohn McCall base::string16 a = test_cases[i]; 460833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall base::string16 b = test_cases[i + 1]; 461833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall 462833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall EXPECT_LT(a.compare(b), 0); 463833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall EXPECT_GT(b.compare(a), 0); 46444f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis EXPECT_EQ(a.compare(a), 0); 46544f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis EXPECT_EQ(b.compare(b), 0); 466a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 467465d41b92b2c862f3062c412a0538db65c6a2661Abramo Bagnara std::string encoded_a = WrappedEncodeStringWithLength(a); 468e4da7a034a2fcf4b14d0bcc28d05de0878159061Abramo Bagnara EXPECT_TRUE(encoded_a.size()); 469e4da7a034a2fcf4b14d0bcc28d05de0878159061Abramo Bagnara std::string encoded_b = WrappedEncodeStringWithLength(b); 470a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall EXPECT_TRUE(encoded_a.size()); 4713cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall 4723cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall EXPECT_LT(CompareStrings(encoded_a, encoded_b), 0); 4733cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall EXPECT_GT(CompareStrings(encoded_b, encoded_a), 0); 4744714c12a1ab759156b78be8f109ea4c12213af57Douglas Gregor EXPECT_EQ(CompareStrings(encoded_a, encoded_a), 0); 475e4da7a034a2fcf4b14d0bcc28d05de0878159061Abramo Bagnara EXPECT_EQ(CompareStrings(encoded_b, encoded_b), 0); 476e4da7a034a2fcf4b14d0bcc28d05de0878159061Abramo Bagnara } 47751bd803fbdade51d674598ed45da3d54190a656cJohn McCall} 478a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 47933500955d731c73717af52088b7fc0e7a85681e7John McCallstatic std::string WrappedEncodeBinary(std::string value) { 48033500955d731c73717af52088b7fc0e7a85681e7John McCall std::string buffer; 48133500955d731c73717af52088b7fc0e7a85681e7John McCall EncodeBinary(value, &buffer); 48233500955d731c73717af52088b7fc0e7a85681e7John McCall return buffer; 48333500955d731c73717af52088b7fc0e7a85681e7John McCall} 48433500955d731c73717af52088b7fc0e7a85681e7John McCall 48533500955d731c73717af52088b7fc0e7a85681e7John McCallTEST(IndexedDBLevelDBCodingTest, EncodeBinary) { 48633500955d731c73717af52088b7fc0e7a85681e7John McCall const unsigned char binary_data[] = {0x00, 0x01, 0xfe, 0xff}; 48744f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis EXPECT_EQ( 48844f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis 1u, 48933500955d731c73717af52088b7fc0e7a85681e7John McCall WrappedEncodeBinary(std::string(binary_data, binary_data + 0)).size()); 49051bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ( 49151bd803fbdade51d674598ed45da3d54190a656cJohn McCall 2u, 492c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall WrappedEncodeBinary(std::string(binary_data, binary_data + 1)).size()); 493c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall EXPECT_EQ( 494c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall 5u, 49554e14c4db764c0636160d26c5bbf491637c83a76John McCall WrappedEncodeBinary(std::string(binary_data, binary_data + 4)).size()); 49654e14c4db764c0636160d26c5bbf491637c83a76John McCall} 49754e14c4db764c0636160d26c5bbf491637c83a76John McCall 49854e14c4db764c0636160d26c5bbf491637c83a76John McCallTEST(IndexedDBLevelDBCodingTest, DecodeBinary) { 499a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall const unsigned char binary_data[] = { 0x00, 0x01, 0xfe, 0xff }; 50051bd803fbdade51d674598ed45da3d54190a656cJohn McCall 50151bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::vector<std::string> test_cases; 502a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall test_cases.push_back(std::string(binary_data, binary_data + 0)); 503a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall test_cases.push_back(std::string(binary_data, binary_data + 1)); 5044dcf151a555ff51e4d643e8e6eeb80f121d11d1bChris Lattner test_cases.push_back(std::string(binary_data, binary_data + 4)); 505a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl 5062cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor for (size_t i = 0; i < test_cases.size(); ++i) { 5072cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string value = test_cases[i]; 508b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string v = WrappedEncodeBinary(value); 509b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner ASSERT_GT(v.size(), 0u); 510a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl StringPiece slice(v); 511b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string result; 512b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_TRUE(DecodeBinary(&slice, &result)); 513b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(value, result); 514b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_TRUE(slice.empty()); 515b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 516b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner slice = StringPiece(&*v.begin(), v.size() - 1); 517b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_FALSE(DecodeBinary(&slice, &result)); 518b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 519b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); 520b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_FALSE(DecodeBinary(&slice, &result)); 521b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 522b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner // Verify decoding at an offset, to detect unaligned memory access. 523b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner v.insert(v.begin(), 1u, static_cast<char>(0)); 524b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner slice = StringPiece(&*v.begin() + 1, v.size() - 1); 525a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl EXPECT_TRUE(DecodeBinary(&slice, &result)); 526b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(value, result); 527b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_TRUE(slice.empty()); 528b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner } 529b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 530b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 5310558df2da807646e65d4fa290f4e92114af1a746Chris Lattnerstatic std::string WrappedEncodeDouble(double value) { 5320558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::string buffer; 5330558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EncodeDouble(value, &buffer); 534a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl return buffer; 5358538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl} 5360558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5370558df2da807646e65d4fa290f4e92114af1a746Chris LattnerTEST(IndexedDBLevelDBCodingTest, EncodeDouble) { 5380558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(8u, WrappedEncodeDouble(0).size()); 5390558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(8u, WrappedEncodeDouble(3.14).size()); 5400558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 5410558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5420558df2da807646e65d4fa290f4e92114af1a746Chris LattnerTEST(IndexedDBLevelDBCodingTest, DecodeDouble) { 5430558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::vector<double> test_cases; 5440558df2da807646e65d4fa290f4e92114af1a746Chris Lattner test_cases.push_back(3.14); 5450558df2da807646e65d4fa290f4e92114af1a746Chris Lattner test_cases.push_back(-3.14); 5460558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5470558df2da807646e65d4fa290f4e92114af1a746Chris Lattner for (size_t i = 0; i < test_cases.size(); ++i) { 5480558df2da807646e65d4fa290f4e92114af1a746Chris Lattner double value = test_cases[i]; 5490558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::string v = WrappedEncodeDouble(value); 5500558df2da807646e65d4fa290f4e92114af1a746Chris Lattner ASSERT_GT(v.size(), 0u); 5510558df2da807646e65d4fa290f4e92114af1a746Chris Lattner StringPiece slice(v); 5520558df2da807646e65d4fa290f4e92114af1a746Chris Lattner double result; 5530558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_TRUE(DecodeDouble(&slice, &result)); 5540558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(value, result); 5550558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_TRUE(slice.empty()); 5560558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5570558df2da807646e65d4fa290f4e92114af1a746Chris Lattner slice = StringPiece(&*v.begin(), v.size() - 1); 5580558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_FALSE(DecodeDouble(&slice, &result)); 5590558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5600558df2da807646e65d4fa290f4e92114af1a746Chris Lattner slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); 5610558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_FALSE(DecodeDouble(&slice, &result)); 5620558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5630558df2da807646e65d4fa290f4e92114af1a746Chris Lattner // Verify decoding at an offset, to detect unaligned memory access. 5640558df2da807646e65d4fa290f4e92114af1a746Chris Lattner v.insert(v.begin(), 1u, static_cast<char>(0)); 5650558df2da807646e65d4fa290f4e92114af1a746Chris Lattner slice = StringPiece(&*v.begin() + 1, v.size() - 1); 5660558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_TRUE(DecodeDouble(&slice, &result)); 5670558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(value, result); 5680558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_TRUE(slice.empty()); 5690558df2da807646e65d4fa290f4e92114af1a746Chris Lattner } 5700558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 5710558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5720558df2da807646e65d4fa290f4e92114af1a746Chris LattnerTEST(IndexedDBLevelDBCodingTest, EncodeDecodeIDBKey) { 5730558df2da807646e65d4fa290f4e92114af1a746Chris Lattner IndexedDBKey expected_key; 5740558df2da807646e65d4fa290f4e92114af1a746Chris Lattner scoped_ptr<IndexedDBKey> decoded_key; 5750558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::string v; 5760558df2da807646e65d4fa290f4e92114af1a746Chris Lattner StringPiece slice; 5770558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5780558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::vector<IndexedDBKey> test_cases; 5790558df2da807646e65d4fa290f4e92114af1a746Chris Lattner test_cases.push_back(IndexedDBKey(1234, WebIDBKeyTypeNumber)); 5800558df2da807646e65d4fa290f4e92114af1a746Chris Lattner test_cases.push_back(IndexedDBKey(7890, WebIDBKeyTypeDate)); 5810558df2da807646e65d4fa290f4e92114af1a746Chris Lattner test_cases.push_back(IndexedDBKey(ASCIIToUTF16("Hello World!"))); 5820558df2da807646e65d4fa290f4e92114af1a746Chris Lattner test_cases.push_back(IndexedDBKey(std::string("\x01\x02"))); 5830558df2da807646e65d4fa290f4e92114af1a746Chris Lattner test_cases.push_back(IndexedDBKey(IndexedDBKey::KeyArray())); 5840558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5850558df2da807646e65d4fa290f4e92114af1a746Chris Lattner IndexedDBKey::KeyArray array; 5860558df2da807646e65d4fa290f4e92114af1a746Chris Lattner array.push_back(IndexedDBKey(1234, WebIDBKeyTypeNumber)); 5870558df2da807646e65d4fa290f4e92114af1a746Chris Lattner array.push_back(IndexedDBKey(7890, WebIDBKeyTypeDate)); 5880558df2da807646e65d4fa290f4e92114af1a746Chris Lattner array.push_back(IndexedDBKey(ASCIIToUTF16("Hello World!"))); 5890558df2da807646e65d4fa290f4e92114af1a746Chris Lattner array.push_back(IndexedDBKey(std::string("\x01\x02"))); 5900558df2da807646e65d4fa290f4e92114af1a746Chris Lattner array.push_back(IndexedDBKey(IndexedDBKey::KeyArray())); 5910558df2da807646e65d4fa290f4e92114af1a746Chris Lattner test_cases.push_back(IndexedDBKey(array)); 5920558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 5930558df2da807646e65d4fa290f4e92114af1a746Chris Lattner for (size_t i = 0; i < test_cases.size(); ++i) { 5940558df2da807646e65d4fa290f4e92114af1a746Chris Lattner expected_key = test_cases[i]; 5950558df2da807646e65d4fa290f4e92114af1a746Chris Lattner v.clear(); 5960558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EncodeIDBKey(expected_key, &v); 5970558df2da807646e65d4fa290f4e92114af1a746Chris Lattner slice = StringPiece(&*v.begin(), v.size()); 5980558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_TRUE(DecodeIDBKey(&slice, &decoded_key)); 5990558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_TRUE(decoded_key->Equals(expected_key)); 6000558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_TRUE(slice.empty()); 601eb7f96141f754150a92433286fa385910a22f494Sam Weinig 602eb7f96141f754150a92433286fa385910a22f494Sam Weinig slice = StringPiece(&*v.begin(), v.size() - 1); 603eb7f96141f754150a92433286fa385910a22f494Sam Weinig EXPECT_FALSE(DecodeIDBKey(&slice, &decoded_key)); 604eb7f96141f754150a92433286fa385910a22f494Sam Weinig 605eb7f96141f754150a92433286fa385910a22f494Sam Weinig slice = StringPiece(&*v.begin(), static_cast<size_t>(0)); 606eb7f96141f754150a92433286fa385910a22f494Sam Weinig EXPECT_FALSE(DecodeIDBKey(&slice, &decoded_key)); 607eb7f96141f754150a92433286fa385910a22f494Sam Weinig } 608eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 609eb7f96141f754150a92433286fa385910a22f494Sam Weinig 6100558df2da807646e65d4fa290f4e92114af1a746Chris Lattnerstatic std::string WrappedEncodeIDBKeyPath(const IndexedDBKeyPath& value) { 611b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string buffer; 6121eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EncodeIDBKeyPath(value, &buffer); 613a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl return buffer; 614b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 615b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 6161eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpTEST(IndexedDBLevelDBCodingTest, EncodeDecodeIDBKeyPath) { 6178538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl std::vector<IndexedDBKeyPath> key_paths; 6188538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl std::vector<std::string> encoded_paths; 6191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 6203397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl { 621f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl key_paths.push_back(IndexedDBKeyPath()); 62251e774d42269e3b22d746184c0b9076fc13b32e6Zhongxing Xu char expected[] = {0, 0, // Header 623b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 0 // Type is null 624b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner }; 625b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner encoded_paths.push_back( 626ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor std::string(expected, expected + arraysize(expected))); 627b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner } 628b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 629b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner { 630b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner key_paths.push_back(IndexedDBKeyPath(base::string16())); 631b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner char expected[] = {0, 0, // Header 632b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 1, // Type is string 63349b96d1a382ae9f31456166f1a734d3f7f30b992Argyrios Kyrtzidis 0 // Length is 0 634b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner }; 635b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner encoded_paths.push_back( 636b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string(expected, expected + arraysize(expected))); 637b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner } 6387f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 6397f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor { 6404fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor key_paths.push_back(IndexedDBKeyPath(ASCIIToUTF16("foo"))); 641b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor char expected[] = {0, 0, // Header 6425b4ec636637c9d876102240127cc0dca9280e83aTed Kremenek 1, // Type is string 6436a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor 3, 0, 'f', 0, 'o', 0, 'o' // String length 3, UTF-16BE 644a93e3b5bde9f0a7b59215f19f176f7d69881b81cSebastian Redl }; 645320198303df7c16950d83ae79c3f702b84badcf7Fariborz Jahanian encoded_paths.push_back( 6466a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor std::string(expected, expected + arraysize(expected))); 647b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner } 6482f4efd10c805cb779618c1a22a35eb07b5043c4eChris Lattner 649b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner { 650b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner key_paths.push_back(IndexedDBKeyPath(ASCIIToUTF16("foo.bar"))); 651b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner char expected[] = {0, 0, // Header 652b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 1, // Type is string 653b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 7, 0, 'f', 0, 'o', 0, 'o', 0, '.', 0, 'b', 0, 'a', 0, 6541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 'r' // String length 7, UTF-16BE 655b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner }; 6562f4efd10c805cb779618c1a22a35eb07b5043c4eChris Lattner encoded_paths.push_back( 657b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string(expected, expected + arraysize(expected))); 658b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner } 659b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 6606a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor { 6616a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor std::vector<base::string16> array; 6626a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor array.push_back(base::string16()); 66361d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor array.push_back(ASCIIToUTF16("foo")); 66461d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor array.push_back(ASCIIToUTF16("foo.bar")); 665b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 666b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner key_paths.push_back(IndexedDBKeyPath(array)); 667b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner char expected[] = {0, 0, // Header 668b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 2, 3, // Type is array, length is 3 669b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 0, // Member 1 (String length 0) 670b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 3, 0, 'f', 0, 'o', 0, 'o', // Member 2 (String length 3) 671b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 7, 0, 'f', 0, 'o', 0, 'o', 0, '.', 0, 'b', 0, 'a', 0, 672b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 'r' // Member 3 (String length 7) 673b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner }; 674b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner encoded_paths.push_back( 675b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string(expected, expected + arraysize(expected))); 676b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner } 677b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 678b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner ASSERT_EQ(key_paths.size(), encoded_paths.size()); 679b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner for (size_t i = 0; i < key_paths.size(); ++i) { 680b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner IndexedDBKeyPath key_path = key_paths[i]; 681b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string encoded = encoded_paths[i]; 682b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 683b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string v = WrappedEncodeIDBKeyPath(key_path); 684b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(encoded, v); 685a53d2cbe37e4be0d95b9d3e09f74eafae31fc940John McCall 686d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve Naroff StringPiece slice(encoded); 6870ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner IndexedDBKeyPath decoded; 6880ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner EXPECT_TRUE(DecodeIDBKeyPath(&slice, &decoded)); 6890ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner EXPECT_EQ(key_path, decoded); 6900ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner EXPECT_TRUE(slice.empty()); 6910ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner } 6920ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner} 6930ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 6940ff8cda4442cff571aba1be91dd16f64a0bf16aaChris LattnerTEST(IndexedDBLevelDBCodingTest, EncodeDecodeBlobJournal) { 6950ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner std::vector<IndexedDBKeyPath> key_paths; 6960ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner std::vector<std::string> encoded_paths; 6970ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 6980ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner std::vector<BlobJournalType> journals; 6990ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 7000ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner { // Empty journal 7010ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner BlobJournalType journal; 7020ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner journals.push_back(journal); 7030ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner } 7040ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 7050ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner { // One item 7060ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner BlobJournalType journal; 707b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner journal.push_back(std::make_pair(4, 7)); 708b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner journals.push_back(journal); 7090ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner } 710b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 7110ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner { // kAllBlobsKey 7120ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner BlobJournalType journal; 7130ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner journal.push_back(std::make_pair(5, DatabaseMetaDataKey::kAllBlobsKey)); 7140ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner journals.push_back(journal); 71561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor } 7160558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 717b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner { // A bunch of items 718b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner BlobJournalType journal; 719b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner journal.push_back(std::make_pair(4, 7)); 720b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner journal.push_back(std::make_pair(5, 6)); 721b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner journal.push_back(std::make_pair(4, 5)); 722e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor journal.push_back(std::make_pair(4, 4)); 723e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor journal.push_back(std::make_pair(1, 12)); 7241eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump journal.push_back(std::make_pair(4, 3)); 725e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor journal.push_back(std::make_pair(15, 14)); 726e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor journals.push_back(journal); 727e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor } 728e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 729e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor std::vector<BlobJournalType>::const_iterator journal_iter; 730e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor for (journal_iter = journals.begin(); journal_iter != journals.end(); 731e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor ++journal_iter) { 7321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump std::string encoding; 733e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EncodeBlobJournal(*journal_iter, &encoding); 734e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor StringPiece slice(encoding); 7351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump BlobJournalType journal_out; 736e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_TRUE(DecodeBlobJournal(&slice, &journal_out)); 737e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(*journal_iter, journal_out); 7381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 739e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 740e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor journals.clear(); 741e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 742e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor { // Illegal database id 743e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor BlobJournalType journal; 7441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump journal.push_back(std::make_pair(0, 3)); 745e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor journals.push_back(journal); 746e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor } 747e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 7481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump { // Illegal blob id 749e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor BlobJournalType journal; 750e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor journal.push_back(std::make_pair(4, 0)); 751e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor journals.push_back(journal); 752e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor } 753e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 7541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump for (journal_iter = journals.begin(); journal_iter != journals.end(); 755e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor ++journal_iter) { 756e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor std::string encoding; 757b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EncodeBlobJournal(*journal_iter, &encoding); 7583397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl StringPiece slice(encoding); 759a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl BlobJournalType journal_out; 7602bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor EXPECT_FALSE(DecodeBlobJournal(&slice, &journal_out)); 761b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor } 762e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor} 763e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 764e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas GregorTEST(IndexedDBLevelDBCodingTest, DecodeLegacyIDBKeyPath) { 76577f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl // Legacy encoding of string key paths. 7668538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl std::vector<IndexedDBKeyPath> key_paths; 7673397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl std::vector<std::string> encoded_paths; 7683397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 769e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor { 770e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor key_paths.push_back(IndexedDBKeyPath(base::string16())); 771e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor encoded_paths.push_back(std::string()); 77277f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl } 77377f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl { 774e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor key_paths.push_back(IndexedDBKeyPath(ASCIIToUTF16("foo"))); 7751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump char expected[] = {0, 'f', 0, 'o', 0, 'o'}; 776e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor encoded_paths.push_back(std::string(expected, arraysize(expected))); 7778538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 7788538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl { 7798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl key_paths.push_back(IndexedDBKeyPath(ASCIIToUTF16("foo.bar"))); 780e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor char expected[] = {0, 'f', 0, 'o', 0, 'o', 0, '.', 0, 'b', 0, 'a', 0, 'r'}; 781e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor encoded_paths.push_back(std::string(expected, arraysize(expected))); 782e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor } 78377f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl 78477f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl ASSERT_EQ(key_paths.size(), encoded_paths.size()); 78577f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl for (size_t i = 0; i < key_paths.size(); ++i) { 7861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump IndexedDBKeyPath key_path = key_paths[i]; 787b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor std::string encoded = encoded_paths[i]; 788b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor 789b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor StringPiece slice(encoded); 790b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor IndexedDBKeyPath decoded; 7918538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_TRUE(DecodeIDBKeyPath(&slice, &decoded)); 792b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor EXPECT_EQ(key_path, decoded); 793b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor EXPECT_TRUE(slice.empty()); 794b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor } 795b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor} 7961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 79711a18f115e8974ef24e8d5bb549ed3289871efa4Kovarththanan RajaratnamTEST(IndexedDBLevelDBCodingTest, ExtractAndCompareIDBKeys) { 798b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor std::vector<IndexedDBKey> keys; 799aba54a95e9d5e4dc9056abec6bb70ea777c4a7bcKovarththanan Rajaratnam 8001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump keys.push_back(IndexedDBKey(-10, WebIDBKeyTypeNumber)); 801e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor keys.push_back(IndexedDBKey(0, WebIDBKeyTypeNumber)); 802b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor keys.push_back(IndexedDBKey(3.14, WebIDBKeyTypeNumber)); 8038538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 804ec312a1f0557b1d27f3eb6cf49acbf7e72696422Daniel Dunbar keys.push_back(IndexedDBKey(0, WebIDBKeyTypeDate)); 805b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor keys.push_back(IndexedDBKey(100, WebIDBKeyTypeDate)); 80611a18f115e8974ef24e8d5bb549ed3289871efa4Kovarththanan Rajaratnam keys.push_back(IndexedDBKey(100000, WebIDBKeyTypeDate)); 807f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek 808f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek keys.push_back(IndexedDBKey(ASCIIToUTF16(""))); 8098538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl keys.push_back(IndexedDBKey(ASCIIToUTF16("a"))); 810f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek keys.push_back(IndexedDBKey(ASCIIToUTF16("b"))); 811f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek keys.push_back(IndexedDBKey(ASCIIToUTF16("baaa"))); 812445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor keys.push_back(IndexedDBKey(ASCIIToUTF16("baab"))); 8138538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl keys.push_back(IndexedDBKey(ASCIIToUTF16("c"))); 814f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek 815f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek keys.push_back(IndexedDBKey(std::string())); 8162bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor keys.push_back(IndexedDBKey(std::string("\x01"))); 8172bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor keys.push_back(IndexedDBKey(std::string("\x01\x01"))); 8182bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor keys.push_back(IndexedDBKey(std::string("\x01\x02"))); 819a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl keys.push_back(IndexedDBKey(std::string("\x02"))); 8200a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(IndexedDBKey(std::string("\x02\x01"))); 8210a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(IndexedDBKey(std::string("\x02\x02"))); 8220a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(IndexedDBKey(std::string("\xff"))); 8230a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 8240a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(CreateArrayIDBKey()); 8250a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(CreateArrayIDBKey(IndexedDBKey(0, WebIDBKeyTypeNumber))); 826eb5d7b752651283de5abfcc2f91df7227582a08dChandler Carruth keys.push_back(CreateArrayIDBKey(IndexedDBKey(0, WebIDBKeyTypeNumber), 8270a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor IndexedDBKey(3.14, WebIDBKeyTypeNumber))); 8280a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(CreateArrayIDBKey(IndexedDBKey(0, WebIDBKeyTypeDate))); 8290a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(CreateArrayIDBKey(IndexedDBKey(0, WebIDBKeyTypeDate), 8300a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor IndexedDBKey(0, WebIDBKeyTypeDate))); 8310a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(CreateArrayIDBKey(IndexedDBKey(ASCIIToUTF16("")))); 8320a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(CreateArrayIDBKey(IndexedDBKey(ASCIIToUTF16("")), 8330a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor IndexedDBKey(ASCIIToUTF16("a")))); 8340a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(CreateArrayIDBKey(CreateArrayIDBKey())); 8351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump keys.push_back(CreateArrayIDBKey(CreateArrayIDBKey(), CreateArrayIDBKey())); 8360a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(CreateArrayIDBKey(CreateArrayIDBKey(CreateArrayIDBKey()))); 8370a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(CreateArrayIDBKey( 83811a18f115e8974ef24e8d5bb549ed3289871efa4Kovarththanan Rajaratnam CreateArrayIDBKey(CreateArrayIDBKey(CreateArrayIDBKey())))); 839412e798941ca64e2e6b084323915fa9aa5f6bdf3Fariborz Jahanian 84011a18f115e8974ef24e8d5bb549ed3289871efa4Kovarththanan Rajaratnam for (size_t i = 0; i < keys.size() - 1; ++i) { 841412e798941ca64e2e6b084323915fa9aa5f6bdf3Fariborz Jahanian const IndexedDBKey& key_a = keys[i]; 8424c9d8d0eca5ca635d9a30222f690db9140e98325Fariborz Jahanian const IndexedDBKey& key_b = keys[i + 1]; 8431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 8440a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_TRUE(key_a.IsLessThan(key_b)); 8450a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 8460a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor std::string encoded_a; 847b9e7e63ae2098bc02e79c032df0a3124d09a4b4eNate Begeman EncodeIDBKey(key_a, &encoded_a); 8480a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_TRUE(encoded_a.size()); 84973482884560be041d86eccbd7dd5a6918677393bDaniel Dunbar std::string encoded_b; 8500a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EncodeIDBKey(key_b, &encoded_b); 8510a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_TRUE(encoded_b.size()); 8520a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 8530a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor std::string extracted_a; 8540a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor std::string extracted_b; 855ea5ce4705df0743093925585d8edc80e0d8fe3ffChris Lattner StringPiece slice; 856ea5ce4705df0743093925585d8edc80e0d8fe3ffChris Lattner 857972d954bd216c86a961bb7f81c53af85de17c2f0Douglas Gregor slice = StringPiece(encoded_a); 8580a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_TRUE(ExtractEncodedIDBKey(&slice, &extracted_a)); 8590a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_TRUE(slice.empty()); 8600a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(encoded_a, extracted_a); 8610a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 8620a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor slice = StringPiece(encoded_b); 8630a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_TRUE(ExtractEncodedIDBKey(&slice, &extracted_b)); 864a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner EXPECT_TRUE(slice.empty()); 865a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner EXPECT_EQ(encoded_b, extracted_b); 8660a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 8670a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_LT(CompareKeys(extracted_a, extracted_b), 0); 8681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EXPECT_GT(CompareKeys(extracted_b, extracted_a), 0); 8690a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(CompareKeys(extracted_a, extracted_a), 0); 8700a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(CompareKeys(extracted_b, extracted_b), 0); 8710a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 8720a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor slice = StringPiece(&*encoded_a.begin(), encoded_a.size() - 1); 8730a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_FALSE(ExtractEncodedIDBKey(&slice, &extracted_a)); 8740a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor } 8750a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor} 8760a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 877a33d9b4ebf732a5da6d56fd7319ff6c020789b1cAnders CarlssonTEST(IndexedDBLevelDBCodingTest, ComparisonTest) { 878a33d9b4ebf732a5da6d56fd7319ff6c020789b1cAnders Carlsson std::vector<std::string> keys; 87915b91764d08e886391c865c4a444d7b51141c284Eli Friedman keys.push_back(SchemaVersionKey::Encode()); 88015b91764d08e886391c865c4a444d7b51141c284Eli Friedman keys.push_back(MaxDatabaseIdKey::Encode()); 881a6fda124bf380479529d6a80b84b62cacd3cb707John Thompson keys.push_back(DatabaseFreeListKey::Encode(0)); 8820a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(DatabaseFreeListKey::EncodeMaxKey()); 8830a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(DatabaseNameKey::Encode("", ASCIIToUTF16(""))); 884ab8e281b32a3d3b9b18257d26844362bf806ecdcDaniel Dunbar keys.push_back(DatabaseNameKey::Encode("", ASCIIToUTF16("a"))); 8850a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back(DatabaseNameKey::Encode("a", ASCIIToUTF16("a"))); 886b9e7e63ae2098bc02e79c032df0a3124d09a4b4eNate Begeman keys.push_back( 8879c276ae0f24d4cee8f7954069d4b8eae45d0447dMike Stump DatabaseMetaDataKey::Encode(1, DatabaseMetaDataKey::ORIGIN_NAME)); 88892f5822df6a0d7571df44b5d279ed4f017fbb0e6Anders Carlsson keys.push_back( 889a0068fc64351db9c47916566e3b85ab733cd8d6dDouglas Gregor DatabaseMetaDataKey::Encode(1, DatabaseMetaDataKey::DATABASE_NAME)); 8908538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl keys.push_back( 8910a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor DatabaseMetaDataKey::Encode(1, DatabaseMetaDataKey::USER_VERSION)); 8920a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor keys.push_back( 89314f79002e58556798e86168c63e48d533287eda5Douglas Gregor DatabaseMetaDataKey::Encode(1, DatabaseMetaDataKey::MAX_OBJECT_STORE_ID)); 8944fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back( 8954fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor DatabaseMetaDataKey::Encode(1, DatabaseMetaDataKey::USER_INT_VERSION)); 8964fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back( 8974fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor ObjectStoreMetaDataKey::Encode(1, 1, ObjectStoreMetaDataKey::NAME)); 8984fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back( 8993397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl ObjectStoreMetaDataKey::Encode(1, 1, ObjectStoreMetaDataKey::KEY_PATH)); 9004fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreMetaDataKey::Encode( 9014fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 1, 1, ObjectStoreMetaDataKey::AUTO_INCREMENT)); 9024fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back( 9031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump ObjectStoreMetaDataKey::Encode(1, 1, ObjectStoreMetaDataKey::EVICTABLE)); 9044fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreMetaDataKey::Encode( 9054fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 1, 1, ObjectStoreMetaDataKey::LAST_VERSION)); 9064fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreMetaDataKey::Encode( 9074fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 1, 1, ObjectStoreMetaDataKey::MAX_INDEX_ID)); 9082596e429a61602312bdd149786045b8a90cd2d10Daniel Dunbar keys.push_back(ObjectStoreMetaDataKey::Encode( 9094fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 1, 1, ObjectStoreMetaDataKey::HAS_KEY_PATH)); 9101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump keys.push_back(ObjectStoreMetaDataKey::Encode( 9111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1, 1, ObjectStoreMetaDataKey::KEY_GENERATOR_CURRENT_NUMBER)); 9124fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreMetaDataKey::EncodeMaxKey(1, 1)); 9134fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreMetaDataKey::EncodeMaxKey(1, 2)); 9144fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreMetaDataKey::EncodeMaxKey(1)); 9154fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexMetaDataKey::Encode(1, 1, 30, IndexMetaDataKey::NAME)); 9164fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexMetaDataKey::Encode(1, 1, 30, IndexMetaDataKey::UNIQUE)); 9174fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back( 9184fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor IndexMetaDataKey::Encode(1, 1, 30, IndexMetaDataKey::KEY_PATH)); 9194fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back( 9204fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor IndexMetaDataKey::Encode(1, 1, 30, IndexMetaDataKey::MULTI_ENTRY)); 9214fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexMetaDataKey::Encode(1, 1, 31, 0)); 9221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump keys.push_back(IndexMetaDataKey::Encode(1, 1, 31, 1)); 9234fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexMetaDataKey::EncodeMaxKey(1, 1, 31)); 9244fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexMetaDataKey::EncodeMaxKey(1, 1, 32)); 9254fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexMetaDataKey::EncodeMaxKey(1, 1)); 9261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump keys.push_back(IndexMetaDataKey::EncodeMaxKey(1, 2)); 9274fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreFreeListKey::Encode(1, 1)); 9284fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreFreeListKey::EncodeMaxKey(1)); 9294fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexFreeListKey::Encode(1, 1, kMinimumIndexId)); 9304fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexFreeListKey::EncodeMaxKey(1, 1)); 9311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump keys.push_back(IndexFreeListKey::Encode(1, 2, kMinimumIndexId)); 9324fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexFreeListKey::EncodeMaxKey(1, 2)); 9334fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreNamesKey::Encode(1, ASCIIToUTF16(""))); 9341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump keys.push_back(ObjectStoreNamesKey::Encode(1, ASCIIToUTF16("a"))); 9354fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexNamesKey::Encode(1, 1, ASCIIToUTF16(""))); 9364fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexNamesKey::Encode(1, 1, ASCIIToUTF16("a"))); 9374fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexNamesKey::Encode(1, 2, ASCIIToUTF16("a"))); 9384fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreDataKey::Encode(1, 1, std::string())); 9394fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreDataKey::Encode(1, 1, MinIDBKey())); 9404fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ObjectStoreDataKey::Encode(1, 1, MaxIDBKey())); 9414fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ExistsEntryKey::Encode(1, 1, std::string())); 9424fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ExistsEntryKey::Encode(1, 1, MinIDBKey())); 9434fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(ExistsEntryKey::Encode(1, 1, MaxIDBKey())); 9444fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexDataKey::Encode(1, 1, 30, MinIDBKey(), std::string(), 0)); 9454fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexDataKey::Encode(1, 1, 30, MinIDBKey(), MinIDBKey(), 0)); 9464fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexDataKey::Encode(1, 1, 30, MinIDBKey(), MinIDBKey(), 1)); 9474fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexDataKey::Encode(1, 1, 30, MinIDBKey(), MaxIDBKey(), 0)); 9483397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl keys.push_back(IndexDataKey::Encode(1, 1, 30, MinIDBKey(), MaxIDBKey(), 1)); 949a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MinIDBKey(), 0)); 9504fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MinIDBKey(), 1)); 9514fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MaxIDBKey(), 0)); 9523397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl keys.push_back(IndexDataKey::Encode(1, 1, 30, MaxIDBKey(), MaxIDBKey(), 1)); 9534fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back(IndexDataKey::Encode(1, 1, 31, MinIDBKey(), MinIDBKey(), 0)); 9541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump keys.push_back(IndexDataKey::Encode(1, 2, 30, MinIDBKey(), MinIDBKey(), 0)); 9554fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor keys.push_back( 956e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor IndexDataKey::EncodeMaxKey(1, 2, std::numeric_limits<int32>::max() - 1)); 957e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 958e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor for (size_t i = 0; i < keys.size(); ++i) { 959e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(Compare(keys[i], keys[i], false), 0); 9601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 9614fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor for (size_t j = i + 1; j < keys.size(); ++j) { 9621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EXPECT_LT(Compare(keys[i], keys[j], false), 0); 9634fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_GT(Compare(keys[j], keys[i], false), 0); 9644fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor } 9654fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor } 9664fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor} 9674fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 9684fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas GregorTEST(IndexedDBLevelDBCodingTest, EncodeVarIntVSEncodeByteTest) { 9694fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor std::vector<unsigned char> test_cases; 9704fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor test_cases.push_back(0); 9714fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor test_cases.push_back(1); 9724fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor test_cases.push_back(127); 9734fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 9748538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl for (size_t i = 0; i < test_cases.size(); ++i) { 9754fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor unsigned char n = test_cases[i]; 9764fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 9774fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor std::string vA = WrappedEncodeByte(n); 9784fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor std::string vB = WrappedEncodeVarInt(static_cast<int64>(n)); 9794fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 9804fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(vA.size(), vB.size()); 9814fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(*vA.begin(), *vB.begin()); 9828538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 9834fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor} 9844fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 985ec312a1f0557b1d27f3eb6cf49acbf7e72696422Daniel Dunbar} // namespace 9864fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 9874fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor} // namespace content 9884fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor