mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 11:44:31 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Copyright (C) 2015 the V8 project authors. All rights reserved.
 | |
| // Copyright (C) 2020 Rick Waldron. All rights reserved.
 | |
| // This code is governed by the BSD license found in the LICENSE file.
 | |
| /*---
 | |
| esid: sec-reflect.apply
 | |
| description: >
 | |
|   Return abrupt if argumentsList is not an ArrayLike object.
 | |
| info: |
 | |
|   Reflect.apply ( target, thisArgument, argumentsList )
 | |
| 
 | |
|   ...
 | |
|   Let args be ? CreateListFromArrayLike(argumentsList).
 | |
| 
 | |
| 
 | |
|   CreateListFromArrayLike (obj [, elementTypes] )
 | |
| 
 | |
|   ...
 | |
|   If Type(obj) is not Object, throw a TypeError exception.
 | |
|   Let len be ? LengthOfArrayLike(obj).
 | |
|   Let list be a new empty List.
 | |
|   Let index be 0.
 | |
|   Repeat, while index < len,
 | |
|     Let indexName be ! ToString(index).
 | |
|     Let next be ? Get(obj, indexName).
 | |
|     If Type(next) is not an element of elementTypes, throw a TypeError exception.
 | |
|     Append next as the last element of list.
 | |
|     Set index to index + 1.
 | |
|   Return list.
 | |
| includes: [compareArray.js]
 | |
| features: [Reflect, arrow-function, Symbol]
 | |
| ---*/
 | |
| 
 | |
| let count = 0;
 | |
| 
 | |
| function fn(...args) {
 | |
|   count++;
 | |
|   return args;
 | |
| }
 | |
| 
 | |
| let f_unction = new Function();
 | |
| 
 | |
| Object.defineProperty(f_unction, "length", {
 | |
|   get() {
 | |
|     return 1;
 | |
|   }
 | |
| });
 | |
| 
 | |
| assert.compareArray(Reflect.apply(fn, null, f_unction), [undefined]);
 | |
| 
 | |
| let object = new Object();
 | |
| 
 | |
| Object.defineProperty(object, "length", {
 | |
|   get() {
 | |
|     return 1;
 | |
|   }
 | |
| });
 | |
| 
 | |
| assert.compareArray(Reflect.apply(fn, null, object), [undefined]);
 | |
| 
 | |
| let number = new Number();
 | |
| 
 | |
| Object.defineProperty(number, "length", {
 | |
|   get() {
 | |
|     return 1;
 | |
|   }
 | |
| });
 | |
| 
 | |
| assert.compareArray(Reflect.apply(fn, null, number), [undefined]);
 | |
| 
 | |
| let boolean = new Boolean();
 | |
| 
 | |
| Object.defineProperty(boolean, "length", {
 | |
|   get() {
 | |
|     return 1;
 | |
|   }
 | |
| });
 | |
| 
 | |
| assert.compareArray(Reflect.apply(fn, null, boolean), [undefined]);
 | |
| 
 | |
| assert.sameValue(count, 4, 'The value of `count` is 1');
 |