mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 03:34:08 +01:00 
			
		
		
		
	sourceRevisionAtLastExport: 33f2fb0e53d135f0ee17cfccd9d993eb2a6f47de targetRevisionAtLastExport: 31340cbd9add103f586d501b0c3354b7b182abc0
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Copyright 2016 the V8 project authors. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style license that can be
 | |
| // found in the LICENSE file.
 | |
| 
 | |
| var x = {a: 1};
 | |
| var y = { ...x};
 | |
| assertEquals(x, y);
 | |
| 
 | |
| assertEquals({}, y = { ...{} } );
 | |
| assertEquals({}, y = { ...undefined });
 | |
| assertEquals({}, y = { ...null });
 | |
| 
 | |
| assertEquals({}, y = { ...1 });
 | |
| assertEquals({0: 'f', 1: 'o', 2: 'o'}, y = { ...'foo' });
 | |
| assertEquals({0: 0, 1: 1}, y = { ...[0, 1] });
 | |
| assertEquals({}, { ...new Proxy({}, {}) });
 | |
| 
 | |
| assertEquals({a: 2}, y = { ...x, a: 2 });
 | |
| assertEquals({a: 1, b: 1}, y = { ...x, b: 1 });
 | |
| assertEquals({a: 1}, y = { a: 2, ...x });
 | |
| assertEquals({a: 1, b: 1}, y = { a:2, ...x, b: 1 });
 | |
| assertEquals({a: 3}, y = { a: 2, ...x, a: 3 });
 | |
| 
 | |
| var z = { b: 1}
 | |
| assertEquals({a: 1, b: 1}, y = { ...x, ...z });
 | |
| assertEquals({a: 1, b: 1}, y = { a: 2, ...x, ...z });
 | |
| assertEquals({a: 1, b: 1}, y = { b: 2, ...z, ...x });
 | |
| assertEquals({a: 1, b: 1}, y = { a: 1, ...x, b: 2, ...z });
 | |
| assertEquals({a: 1, b: 2}, y = { a: 1, ...x, ...z, b: 2 });
 | |
| assertEquals({a: 2, b: 2}, y = { ...x, ...z, a:2, b: 2 });
 | |
| 
 | |
| var x = {}
 | |
| Object.defineProperty(x, 'a', {
 | |
|   enumerable: false,
 | |
|   configurable: false,
 | |
|   writable: false,
 | |
|   value: 1
 | |
| });
 | |
| assertEquals({}, { ...x });
 | |
| 
 | |
| var x = {}
 | |
| Object.defineProperty(x, 'a', {
 | |
|   enumerable: true,
 | |
|   configurable: false,
 | |
|   writable: false,
 | |
|   value: 1
 | |
| });
 | |
| var y = { ...x };
 | |
| var prop = Object.getOwnPropertyDescriptor(y, 'a');
 | |
| assertEquals(prop.value, 1);
 | |
| assertTrue(prop.enumerable);
 | |
| assertTrue(prop.configurable);
 | |
| assertTrue(prop.writable);
 | |
| 
 | |
| var x = { __proto__: z }
 | |
| assertEquals({}, { ...x });
 | |
| 
 | |
| var x = {
 | |
|   get a() { return 1; },
 | |
|   set a(_) { assertUnreachable("setter called"); },
 | |
| };
 | |
| assertEquals({ a: 1 }, y = { ...x });
 | |
| 
 | |
| var x = {
 | |
|   method() { return 1; },
 | |
| };
 | |
| assertEquals(x, y = { ...x });
 | |
| 
 | |
| var x = {
 | |
|   *gen() { return {value: 1, done: true} ; },
 | |
| };
 | |
| assertEquals(x, y = { ...x });
 | |
| 
 | |
| var x = {
 | |
|   get a() { throw new Error(); },
 | |
| };
 | |
| assertThrows(() => { y = { ...x } });
 | |
| 
 | |
| var p = new Proxy({}, {
 | |
|   ownKeys() { throw new Error(); }
 | |
| });
 | |
| assertThrows(() => { y = { ...p } });
 | |
| 
 | |
| var p = new Proxy({}, {
 | |
|   ownKeys() { [1]; },
 | |
|   get() { throw new Error(); }
 | |
| });
 | |
| assertThrows(() => { y = { ...p } });
 | |
| 
 | |
| var p = new Proxy({}, {
 | |
|   ownKeys() { [1]; },
 | |
|   getOwnPropertyDescriptor() { throw new Error(); }
 | |
| });
 | |
| assertThrows(() => { y = { ...p } });
 | |
| 
 | |
| var p = new Proxy(z, {
 | |
|   ownKeys() { return Object.keys(z); },
 | |
|   get(_, prop) { return z[prop]; },
 | |
|   getOwnPropertyDescriptor(_, prop) {
 | |
|     return Object.getOwnPropertyDescriptor(z, prop);
 | |
|   },
 | |
| });
 | |
| assertEquals(z, y = { ...p });
 | |
| 
 | |
| var x = { a:1 };
 | |
| assertEquals(x, y = { set a(_) { throw new Error(); }, ...x });
 | |
| 
 | |
| var x = { a:1 };
 | |
| assertEquals(x, y = { get a() { throw new Error(); }, ...x });
 |