set.window.js (4259B)
1 ["localStorage", "sessionStorage"].forEach(function(name) { 2 [9, "x"].forEach(function(key) { 3 test(function() { 4 var expected = "value for " + this.name; 5 var value = expected; 6 7 var storage = window[name]; 8 storage.clear(); 9 10 assert_equals(storage[key], undefined); 11 assert_equals(storage.getItem(key), null); 12 assert_equals(storage[key] = value, value); 13 assert_equals(storage[key], expected); 14 assert_equals(storage.getItem(key), expected); 15 }, "Setting property for key " + key + " on " + name); 16 17 test(function() { 18 var expected = "value for " + this.name; 19 var value = { 20 toString: function() { return expected; } 21 }; 22 23 var storage = window[name]; 24 storage.clear(); 25 26 assert_equals(storage[key], undefined); 27 assert_equals(storage.getItem(key), null); 28 assert_equals(storage[key] = value, value); 29 assert_equals(storage[key], expected); 30 assert_equals(storage.getItem(key), expected); 31 }, "Setting property with toString for key " + key + " on " + name); 32 33 test(function() { 34 var proto = "proto for " + this.name; 35 Storage.prototype[key] = proto; 36 this.add_cleanup(function() { delete Storage.prototype[key]; }); 37 38 var value = "value for " + this.name; 39 40 var storage = window[name]; 41 storage.clear(); 42 43 assert_equals(storage[key], proto); 44 assert_equals(storage.getItem(key), null); 45 assert_equals(storage[key] = value, value); 46 // Hidden because no [LegacyOverrideBuiltIns]. 47 assert_equals(storage[key], proto); 48 assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined); 49 assert_equals(storage.getItem(key), value); 50 }, "Setting property for key " + key + " on " + name + " with data property on prototype"); 51 52 test(function() { 53 var proto = "proto for " + this.name; 54 Storage.prototype[key] = proto; 55 this.add_cleanup(function() { delete Storage.prototype[key]; }); 56 57 var value = "value for " + this.name; 58 var existing = "existing for " + this.name; 59 60 var storage = window[name]; 61 storage.clear(); 62 63 storage.setItem(key, existing); 64 65 // Hidden because no [LegacyOverrideBuiltIns]. 66 assert_equals(storage[key], proto); 67 assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined); 68 assert_equals(storage.getItem(key), existing); 69 assert_equals(storage[key] = value, value); 70 assert_equals(storage[key], proto); 71 assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined); 72 assert_equals(storage.getItem(key), value); 73 }, "Setting property for key " + key + " on " + name + " with data property on prototype and existing item"); 74 75 test(function() { 76 var storage = window[name]; 77 storage.clear(); 78 79 var proto = "proto getter for " + this.name; 80 Object.defineProperty(Storage.prototype, key, { 81 "get": function() { return proto; }, 82 "set": this.unreached_func("Should not call [[Set]] on prototype"), 83 "configurable": true, 84 }); 85 this.add_cleanup(function() { 86 delete Storage.prototype[key]; 87 delete storage[key]; 88 assert_false(key in storage); 89 }); 90 91 var value = "value for " + this.name; 92 93 assert_equals(storage[key], proto); 94 assert_equals(storage.getItem(key), null); 95 assert_equals(storage[key] = value, value); 96 // Property is hidden because no [LegacyOverrideBuiltIns]. 97 assert_equals(storage[key], proto); 98 assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined); 99 assert_equals(storage.getItem(key), value); 100 }, "Setting property for key " + key + " on " + name + " with accessor property on prototype"); 101 }); 102 });