mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 16:58:38 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
129
testing/web-platform/tests/IndexedDB/key_invalid.htm
Normal file
129
testing/web-platform/tests/IndexedDB/key_invalid.htm
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
<!DOCTYPE html>
|
||||
<!-- Submitted from TestTWF Paris -->
|
||||
<meta charset=utf-8">
|
||||
<title>Invalid 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.">
|
||||
<!-- original author -->
|
||||
<link rel=author href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
|
||||
<!-- some additions by Baptiste Fontaine (batifon@yahoo.fr) -->
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<script src=support.js></script>
|
||||
|
||||
<script>
|
||||
var db = createdb_for_multiple_tests(),
|
||||
// cache for ObjectStores
|
||||
objStore = null,
|
||||
objStore2 = null;
|
||||
|
||||
function is_cloneable(o) {
|
||||
try {
|
||||
self.postMessage(o, '*');
|
||||
return true;
|
||||
} catch (ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function invalid_key(desc, key) {
|
||||
var t = async_test(document.title + " - " + desc);
|
||||
|
||||
// set the current test, and run it
|
||||
db.setTest(t).onupgradeneeded = function(e) {
|
||||
objStore = objStore || e.target.result.createObjectStore("store");
|
||||
assert_throws('DataError', function() {
|
||||
objStore.add("value", key);
|
||||
});
|
||||
|
||||
if (is_cloneable(key)) {
|
||||
objStore2 = objStore2 || e.target.result.createObjectStore("store2", { keyPath: ["x", "keypath"] });
|
||||
assert_throws('DataError', function() {
|
||||
objStore2.add({ x: "value", keypath: key });
|
||||
});
|
||||
}
|
||||
this.done();
|
||||
};
|
||||
}
|
||||
|
||||
var fake_array = {
|
||||
length : 0,
|
||||
constructor : Array
|
||||
};
|
||||
|
||||
var ArrayClone = function(){};
|
||||
ArrayClone.prototype = Array;
|
||||
var ArrayClone_instance = new ArrayClone();
|
||||
|
||||
// booleans
|
||||
invalid_key( 'true' , true );
|
||||
invalid_key( 'false' , false );
|
||||
|
||||
// null/NaN/undefined
|
||||
invalid_key( 'null' , null );
|
||||
invalid_key( 'NaN' , NaN );
|
||||
invalid_key( 'undefined' , undefined );
|
||||
invalid_key( 'undefined2');
|
||||
|
||||
// functions
|
||||
invalid_key( 'function() {}', function(){} );
|
||||
|
||||
// objects
|
||||
invalid_key( '{}' , {} );
|
||||
invalid_key( '{ obj: 1 }' , { obj: 1 });
|
||||
invalid_key( 'Math' , Math );
|
||||
invalid_key( 'window' , window );
|
||||
invalid_key( '{length:0,constructor:Array}' , fake_array );
|
||||
invalid_key( 'Array clone’s instance' , ArrayClone_instance );
|
||||
invalid_key( 'Array (object)' , Array );
|
||||
invalid_key( 'String (object)' , String );
|
||||
invalid_key( 'new String()' , new String() );
|
||||
invalid_key( 'new Number()' , new Number() );
|
||||
invalid_key( 'new Boolean()' , new Boolean() );
|
||||
|
||||
// arrays
|
||||
invalid_key( '[{}]' , [{}] );
|
||||
invalid_key( '[[], [], [], [[ Date ]]]' , [ [], [], [], [[ Date ]] ] );
|
||||
invalid_key( '[undefined]' , [undefined] );
|
||||
invalid_key( '[,1]' , [,1] );
|
||||
|
||||
invalid_key( 'document.getElements'
|
||||
+'ByTagName("script")' , document.getElementsByTagName("script") );
|
||||
|
||||
// dates
|
||||
invalid_key( 'new Date(NaN)' , new Date(NaN) );
|
||||
invalid_key( 'new Date(Infinity)' , new Date(Infinity) );
|
||||
|
||||
// regexes
|
||||
invalid_key( '/foo/' , /foo/ );
|
||||
invalid_key( 'new RegExp()' , new RegExp() );
|
||||
|
||||
var sparse = [];
|
||||
sparse[10] = "hei";
|
||||
invalid_key('sparse array', sparse);
|
||||
|
||||
var sparse2 = [];
|
||||
sparse2[0] = 1;
|
||||
sparse2[""] = 2;
|
||||
sparse2[2] = 3;
|
||||
invalid_key('sparse array 2', sparse2);
|
||||
|
||||
invalid_key('[[1], [3], [7], [[ sparse array ]]]', [ [1], [3], [7], [[ sparse2 ]] ]);
|
||||
|
||||
// sparse3
|
||||
invalid_key( '[1,2,3,,]', [1,2,3,,] );
|
||||
|
||||
var recursive = [];
|
||||
recursive.push(recursive);
|
||||
invalid_key('array directly contains self', recursive);
|
||||
|
||||
var recursive2 = [];
|
||||
recursive2.push([recursive2]);
|
||||
invalid_key('array indirectly contains self', recursive2);
|
||||
|
||||
var recursive3 = [recursive];
|
||||
invalid_key('array member contains self', recursive3);
|
||||
|
||||
</script>
|
||||
|
||||
<div id=log></div>
|
||||
Loading…
Add table
Add a link
Reference in a new issue