mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 05:33:50 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// Copyright 2017 Aleksey Shvayka. All rights reserved.
 | 
						|
// This code is governed by the BSD license found in the LICENSE file.
 | 
						|
 | 
						|
/*---
 | 
						|
description: Properties of the groups object are created with CreateDataProperty
 | 
						|
includes: [propertyHelper.js]
 | 
						|
esid: sec-regexpbuiltinexec
 | 
						|
features: [regexp-named-groups]
 | 
						|
info: |
 | 
						|
  Runtime Semantics: RegExpBuiltinExec ( R, S )
 | 
						|
    24. If _R_ contains any |GroupName|, then
 | 
						|
      a. Let _groups_ be ObjectCreate(*null*).
 | 
						|
    25. Else,
 | 
						|
      a. Let _groups_ be *undefined*.
 | 
						|
    26. Perform ! CreateDataProperty(_A_, `"groups"`, _groups_).
 | 
						|
---*/
 | 
						|
 | 
						|
// `groups` is created with Define, not Set.
 | 
						|
let counter = 0;
 | 
						|
Object.defineProperty(Array.prototype, "groups", {
 | 
						|
  set() { counter++; }
 | 
						|
});
 | 
						|
 | 
						|
let match = /(?<x>.)/.exec("a");
 | 
						|
assert.sameValue(counter, 0);
 | 
						|
 | 
						|
// `groups` is writable, enumerable and configurable
 | 
						|
// (from CreateDataProperty).
 | 
						|
verifyProperty(match, "groups", {
 | 
						|
  writable: true,
 | 
						|
  enumerable: true,
 | 
						|
  configurable: true,
 | 
						|
});
 | 
						|
 | 
						|
// The `__proto__` property on the groups object is not special,
 | 
						|
// and does not affect the [[Prototype]] of the resulting groups object.
 | 
						|
let {groups} = /(?<__proto__>.)/.exec("a");
 | 
						|
assert.sameValue("a", groups.__proto__);
 | 
						|
assert.sameValue(null, Object.getPrototypeOf(groups));
 |