OLD | NEW |
---|---|
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
132 var object = objects[i]; | 132 var object = objects[i]; |
133 Object.preventExtensions(object); | 133 Object.preventExtensions(object); |
134 assertThrows(function() { | 134 assertThrows(function() { |
135 Object.setPrototypeOf(object, proto); | 135 Object.setPrototypeOf(object, proto); |
136 }, TypeError); | 136 }, TypeError); |
137 } | 137 } |
138 } | 138 } |
139 TestSetPrototypeOfNonExtensibleObject(); | 139 TestSetPrototypeOfNonExtensibleObject(); |
140 | 140 |
141 | 141 |
142 function TestSetPrototypeCyclic() { | |
143 var objects = [ | |
144 Object.prototype, {}, | |
145 Array.prototype, [], | |
146 Error.prototype, new TypeError, | |
147 // etc ... | |
148 ]; | |
149 for (var i = 0; i < objects.length; i += 2) { | |
150 var object = objects[i]; | |
151 var value = objects[i+1]; | |
152 assertThrows(function() { | |
153 Object.setPrototypeOf(object, value); | |
mike4
2015/06/19 16:43:12
How about a second assertion for `object.__proto__
caitp (gmail)
2015/06/19 17:05:36
Done.
| |
154 }, TypeError); | |
155 } | |
156 } | |
157 TestSetPrototypeCyclic(); | |
158 | |
159 | |
142 function TestLookup() { | 160 function TestLookup() { |
143 var object = {}; | 161 var object = {}; |
144 assertFalse('x' in object); | 162 assertFalse('x' in object); |
145 assertFalse('y' in object); | 163 assertFalse('y' in object); |
146 | 164 |
147 var oldProto = { | 165 var oldProto = { |
148 x: 'old x', | 166 x: 'old x', |
149 y: 'old y' | 167 y: 'old y' |
150 }; | 168 }; |
151 Object.setPrototypeOf(object, oldProto); | 169 Object.setPrototypeOf(object, oldProto); |
152 assertEquals(object.x, 'old x'); | 170 assertEquals(object.x, 'old x'); |
153 assertEquals(object.y, 'old y'); | 171 assertEquals(object.y, 'old y'); |
154 | 172 |
155 var newProto = { | 173 var newProto = { |
156 x: 'new x' | 174 x: 'new x' |
157 }; | 175 }; |
158 Object.setPrototypeOf(object, newProto); | 176 Object.setPrototypeOf(object, newProto); |
159 assertEquals(object.x, 'new x'); | 177 assertEquals(object.x, 'new x'); |
160 assertFalse('y' in object); | 178 assertFalse('y' in object); |
161 } | 179 } |
162 TestLookup(); | 180 TestLookup(); |
OLD | NEW |