diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-23 17:03:15 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-23 17:03:15 +0200 |
commit | a73d1c176f2f3e0458861de8590dc20321a501ae (patch) | |
tree | d897fc5974797c3cb300d7f5916f258df765401f /Source/WebKit/chromium/tests/IDBKeyPathTest.cpp | |
parent | c311cf639cc1d6570d67b0a80a8ba04dc992a658 (diff) | |
download | qtwebkit-a73d1c176f2f3e0458861de8590dc20321a501ae.tar.gz |
Imported WebKit commit a5ae8a56a48e44ebfb9b81aaa5488affaffdb175 (http://svn.webkit.org/repository/webkit/trunk@126420)
New snapshot with OS X 10.6 build fix
Diffstat (limited to 'Source/WebKit/chromium/tests/IDBKeyPathTest.cpp')
-rw-r--r-- | Source/WebKit/chromium/tests/IDBKeyPathTest.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/Source/WebKit/chromium/tests/IDBKeyPathTest.cpp b/Source/WebKit/chromium/tests/IDBKeyPathTest.cpp index 7d662c009..c3d47d788 100644 --- a/Source/WebKit/chromium/tests/IDBKeyPathTest.cpp +++ b/Source/WebKit/chromium/tests/IDBKeyPathTest.cpp @@ -26,6 +26,10 @@ #include "config.h" #include "IDBKeyPath.h" +#include "IDBBindingUtilities.h" +#include "IDBKey.h" +#include "SerializedScriptValue.h" + #include <gtest/gtest.h> #include <wtf/Vector.h> @@ -123,6 +127,92 @@ TEST(IDBKeyPathTest, InvalidKeyPath5) checkKeyPath(keyPath, expected, 3); } +TEST(IDBKeyPathTest, Extract) +{ + IDBKeyPath keyPath("foo"); + RefPtr<IDBKey> stringZooKey(IDBKey::createString("zoo")); + RefPtr<IDBKey> invalidKey(IDBKey::createInvalid()); + RefPtr<SerializedScriptValue> ssv; + RefPtr<IDBKey> result; + + // keypath: "foo", value: {foo: "zoo"}, expected: "zoo" + UChar dataFooZoo[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x017b}; + ssv = SerializedScriptValue::createFromWire(String(dataFooZoo, WTF_ARRAY_LENGTH(dataFooZoo))); + result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); + EXPECT_TRUE(stringZooKey->isEqual(result.get())); + + // keypath: "foo", value: {foo: null}, expected: invalid + UChar dataFooNull[] = {0x0353, 0x6f66, 0x306f, 0x017b}; + ssv = SerializedScriptValue::createFromWire(String(dataFooNull, WTF_ARRAY_LENGTH(dataFooNull))); + result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); + EXPECT_FALSE(result->isValid()); + + // keypath: "foo", value: {}, expected: null + UChar dataObject[] = {0x017b}; + ssv = SerializedScriptValue::createFromWire(String(dataObject, WTF_ARRAY_LENGTH(dataObject))); + result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); + EXPECT_EQ(0, result.get()); + + // keypath: "foo", value: null, expected: null + ssv = SerializedScriptValue::nullValue(); + result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); + EXPECT_EQ(0, result.get()); +} + +TEST(IDBKeyPathTest, IDBKeyPathPropertyNotAvailable) +{ + IDBKeyPath keyPath("PropertyNotAvailable"); + RefPtr<SerializedScriptValue> ssv; + // {foo: "zoo", bar: null} + UChar data[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x0353, 0x6162, + 0x3072, 0x027b}; + ssv = SerializedScriptValue::createFromWire(String(data, WTF_ARRAY_LENGTH(data))); + RefPtr<IDBKey> result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); + EXPECT_EQ(0, result.get()); + + // null + ssv = SerializedScriptValue::nullValue(); + result = createIDBKeyFromSerializedValueAndKeyPath(ssv, keyPath); + EXPECT_EQ(0, result.get()); +} + +TEST(IDBKeyPathTest, InjectIDBKey) +{ + // {foo: 'zoo'} + const UChar initialData[] = {0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x017b}; + RefPtr<SerializedScriptValue> value = SerializedScriptValue::createFromWire(String(initialData, WTF_ARRAY_LENGTH(initialData))); + + RefPtr<IDBKey> key = IDBKey::createString("myNewKey"); + IDBKeyPath keyPath("bar"); + + // {foo: 'zoo', bar: 'myNewKey'} + const UChar expectedData[] = {0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6603, + 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, + 0x5301, 0x6203, 0x7261, 0x013f, 0x0853, + 0x796d, 0x654e, 0x4b77, 0x7965, 0x027b}; + RefPtr<SerializedScriptValue> expectedValue = + SerializedScriptValue::createFromWire(String(expectedData, WTF_ARRAY_LENGTH(expectedData))); + RefPtr<SerializedScriptValue> result = injectIDBKeyIntoSerializedValue(key, value, keyPath); + EXPECT_EQ(expectedValue->toWireString(), result->toWireString()); + + // Should fail - can't apply properties to string value of key foo + keyPath = IDBKeyPath("foo.bad.path"); + result = injectIDBKeyIntoSerializedValue(key, value, keyPath); + EXPECT_EQ(0, result.get()); + + // {foo: 'zoo', bar: {baz: 'myNewKey'}} + const UChar expectedData2[] = {0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6603, + 0x6f6f, 0x013f, 0x0353, 0x6f7a, 0x3f6f, + 0x5301, 0x6203, 0x7261, 0x013f, 0x3f6f, + 0x5302, 0x6203, 0x7a61, 0x023f, 0x0853, + 0x796d, 0x654e, 0x4b77, 0x7965, 0x017b, + 0x027b}; + RefPtr<SerializedScriptValue> expectedValue2 = SerializedScriptValue::createFromWire(String(expectedData2, WTF_ARRAY_LENGTH(expectedData2))); + keyPath = IDBKeyPath("bar.baz"); + result = injectIDBKeyIntoSerializedValue(key, value, keyPath); + EXPECT_EQ(expectedValue2->toWireString(), result->toWireString()); +} + } // namespace #endif // ENABLE(INDEXED_DATABASE) |