mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 11:44:31 +01:00 
			
		
		
		
	* Automated assertion message update: Array.from * Automated assertion message update: Array.isArray * Automated assertion message update: Array length property * Automated assertion message update: Array.of * Automated assertion message update: Array * Automated assertion message update: Array.prototype.at * Automated assertion message update: Array.prototype.concat * Automated assertion message update: compareArray -> assert.compareArray
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Copyright (C) 2020 Alexey Shvayka. All rights reserved.
 | |
| // This code is governed by the BSD license found in the LICENSE file.
 | |
| 
 | |
| /*---
 | |
| author: André Bargull
 | |
| esid: sec-arraysetlength
 | |
| description: >
 | |
|   [[Value]] is coerced to number before current descriptor's [[Writable]] check.
 | |
| info: |
 | |
|   ArraySetLength ( A, Desc )
 | |
| 
 | |
|   [...]
 | |
|   3. Let newLen be ? ToUint32(Desc.[[Value]]).
 | |
|   4. Let numberLen be ? ToNumber(Desc.[[Value]]).
 | |
|   [...]
 | |
|   7. Let oldLenDesc be OrdinaryGetOwnProperty(A, "length").
 | |
|   [...]
 | |
|   12. If oldLenDesc.[[Writable]] is false, return false.
 | |
| features: [Symbol, Symbol.toPrimitive, Reflect, Reflect.set]
 | |
| includes: [compareArray.js]
 | |
| ---*/
 | |
| 
 | |
| var array = [1, 2, 3];
 | |
| var hints = [];
 | |
| var length = {};
 | |
| length[Symbol.toPrimitive] = function(hint) {
 | |
|   hints.push(hint);
 | |
|   Object.defineProperty(array, "length", {writable: false});
 | |
|   return 0;
 | |
| };
 | |
| 
 | |
| assert.throws(TypeError, function() {
 | |
|   "use strict";
 | |
|   array.length = length;
 | |
| }, '`"use strict"; array.length = length` throws a TypeError exception');
 | |
| assert.compareArray(hints, ["number", "number"], 'The value of hints is expected to be ["number", "number"]');
 | |
| 
 | |
| 
 | |
| array = [1, 2, 3];
 | |
| hints = [];
 | |
| 
 | |
| assert(
 | |
|   !Reflect.set(array, "length", length),
 | |
|   'The value of !Reflect.set(array, "length", length) is expected to be true'
 | |
| );
 | |
| assert.compareArray(hints, ["number", "number"], 'The value of hints is expected to be ["number", "number"]');
 |