mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 05:33:50 +01:00 
			
		
		
		
	* Update two constructor tests of Array.fromAsync * Remove extra comment --------- Co-authored-by: Rezvan Mahdavi Hezaveh <rezvan@chromium.org>
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// Copyright (C) 2023 Igalia, S.L. All rights reserved.
 | 
						|
// This code is governed by the BSD license found in the LICENSE file.
 | 
						|
 | 
						|
/*---
 | 
						|
esid: sec-array.fromasync
 | 
						|
description: >
 | 
						|
  Order of user-observable operations on a custom this-value and its instances
 | 
						|
includes: [compareArray.js, asyncHelpers.js]
 | 
						|
flags: [async]
 | 
						|
features: [Array.fromAsync]
 | 
						|
---*/
 | 
						|
 | 
						|
function formatPropertyName(propertyKey, objectName = "") {
 | 
						|
  switch (typeof propertyKey) {
 | 
						|
    case "symbol":
 | 
						|
      if (Symbol.keyFor(propertyKey) !== undefined) {
 | 
						|
        return `${objectName}[Symbol.for('${Symbol.keyFor(propertyKey)}')]`;
 | 
						|
      } else if (propertyKey.description.startsWith('Symbol.')) {
 | 
						|
        return `${objectName}[${propertyKey.description}]`;
 | 
						|
      } else {
 | 
						|
        return `${objectName}[Symbol('${propertyKey.description}')]`
 | 
						|
      }
 | 
						|
    case "string":
 | 
						|
      if (propertyKey !== String(Number(propertyKey)))
 | 
						|
        return objectName ? `${objectName}.${propertyKey}` : propertyKey;
 | 
						|
      // fall through
 | 
						|
    default:
 | 
						|
      // integer or string integer-index
 | 
						|
      return `${objectName}[${propertyKey}]`;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
asyncTest(async function () {
 | 
						|
  const expectedCalls = [
 | 
						|
    "construct MyArray",
 | 
						|
    "defineProperty A[0]",
 | 
						|
    "defineProperty A[1]",
 | 
						|
    "set A.length"
 | 
						|
  ];
 | 
						|
  const actualCalls = [];
 | 
						|
 | 
						|
  function MyArray(...args) {
 | 
						|
    actualCalls.push("construct MyArray");
 | 
						|
    return new Proxy(Object.create(null), {
 | 
						|
      set(target, key, value) {
 | 
						|
        actualCalls.push(`set ${formatPropertyName(key, "A")}`);
 | 
						|
        return Reflect.set(target, key, value);
 | 
						|
      },
 | 
						|
      defineProperty(target, key, descriptor) {
 | 
						|
        actualCalls.push(`defineProperty ${formatPropertyName(key, "A")}`);
 | 
						|
        return Reflect.defineProperty(target, key, descriptor);
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  let result = await Array.fromAsync.call(MyArray, [1, 2]);
 | 
						|
  assert.compareArray(expectedCalls, actualCalls, "order of operations for array argument");
 | 
						|
 | 
						|
  actualCalls.splice(0);  // reset
 | 
						|
 | 
						|
  const expectedCallsForArrayLike = [
 | 
						|
    "construct MyArray",
 | 
						|
    "defineProperty A[0]",
 | 
						|
    "defineProperty A[1]",
 | 
						|
    "set A.length"
 | 
						|
  ];
 | 
						|
  result = await Array.fromAsync.call(MyArray, {
 | 
						|
    length: 2,
 | 
						|
    0: 1,
 | 
						|
    1: 2
 | 
						|
  });
 | 
						|
  assert.compareArray(expectedCallsForArrayLike, actualCalls, "order of operations for array-like argument");
 | 
						|
});
 |