Index: LayoutTests/imported/web-platform-tests/IndexedDB/key_valid.html |
diff --git a/LayoutTests/imported/web-platform-tests/IndexedDB/key_valid.html b/LayoutTests/imported/web-platform-tests/IndexedDB/key_valid.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ec245cdc075d5cbe885e8494fee458f11edd13b2 |
--- /dev/null |
+++ b/LayoutTests/imported/web-platform-tests/IndexedDB/key_valid.html |
@@ -0,0 +1,73 @@ |
+<!DOCTYPE html> |
+<!-- Submitted from TestTWF Paris --> |
+<meta charset=utf-8"> |
+<title>Valid key</title> |
+<link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#key-construct"> |
+<link rel=assert title="A value is said to be a valid key if it is one of the following types: Array JavaScript objects [ECMA-262], DOMString [WEBIDL], Date [ECMA-262] or float [WEBIDL]. However Arrays are only valid keys if every item in the array is defined and is a valid key (i.e. sparse arrays can not be valid keys) and if the Array doesn't directly or indirectly contain itself. Any non-numeric properties are ignored, and thus does not affect whether the Array is a valid key. Additionally, if the value is of type float, it is only a valid key if it is not NaN, and if the value is of type Date it is only a valid key if its [[PrimitiveValue]] internal property, as defined by [ECMA-262], is not NaN. Conforming user agents must support all valid keys as keys."> |
+<link rel=author href="mailto:batifon@yahoo.fr" title="Baptiste Fontaine"> |
+<script src=../../../resources/testharness.js></script> |
+<script src=../../../resources/testharnessreport.js></script> |
+<script src=support.js></script> |
+ |
+<script> |
+ function valid_key(desc, key) { |
+ var db; |
+ var t = async_test(document.title + " - " + desc); |
+ var open_rq = createdb(t); |
+ |
+ open_rq.onupgradeneeded = function(e) { |
+ db = e.target.result; |
+ |
+ store = db.createObjectStore("store"); |
+ assert_true(store.add('value', key) instanceof IDBRequest); |
+ |
+ store2 = db.createObjectStore("store2", { keyPath: ["x", "keypath"] }); |
+ assert_true(store2.add({ x: 'v', keypath: key }) instanceof IDBRequest); |
+ }; |
+ open_rq.onsuccess = function(e) { |
+ var rq = db.transaction("store") |
+ .objectStore("store") |
+ .get(key) |
+ rq.onsuccess = t.step_func(function(e) { |
+ assert_equals(e.target.result, 'value') |
+ var rq = db.transaction("store2") |
+ .objectStore("store2") |
+ .get(['v', key]) |
+ rq.onsuccess = t.step_func(function(e) { |
+ assert_object_equals(e.target.result, { x: 'v', keypath: key }) |
+ t.done() |
+ }) |
+ }) |
+ } |
+ } |
+ |
+ // Date |
+ valid_key( 'new Date()' , new Date() ); |
+ valid_key( 'new Date(0)' , new Date(0) ); |
+ |
+ // Array |
+ valid_key( '[]' , [] ); |
+ valid_key( 'new Array()' , new Array() ); |
+ |
+ valid_key( '["undefined"]' , ['undefined'] ); |
+ |
+ // Float |
+ valid_key( 'Infinity' , Infinity ); |
+ valid_key( '-Infinity' , -Infinity ); |
+ valid_key( '0' , 0 ); |
+ valid_key( '1.5' , 1.5 ); |
+ valid_key( '3e38' , 3e38 ); |
+ valid_key( '3e-38' , 3e38 ); |
+ |
+ // String |
+ valid_key( '"foo"' , "foo" ); |
+ valid_key( '"\\n"' , "\n" ); |
+ valid_key( '""' , "" ); |
+ valid_key( '"\\""' , "\"" ); |
+ valid_key( '"\\u1234"' , "\u1234" ); |
+ valid_key( '"\\u0000"' , "\u0000" ); |
+ valid_key( '"NaN"' , "NaN" ); |
+ |
+</script> |
+ |
+<div id=log></div> |