diff --git a/test/language/subclassing/RegExp/lastIndex.js b/test/language/subclassing/RegExp/lastIndex.js new file mode 100644 index 0000000000000000000000000000000000000000..2e2a05e4c84094ed7821e43899997602a2e6816f --- /dev/null +++ b/test/language/subclassing/RegExp/lastIndex.js @@ -0,0 +1,26 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 21.2.6.1 +description: Instances has the own property lastIndex +info: > + 21.2.6.1 lastIndex + + The value of the lastIndex property specifies the String index at which to + start the next match. It is coerced to an integer when used (see 21.2.5.2.2). + This property shall have the attributes { [[Writable]]: true, [[Enumerable]]: + false, [[Configurable]]: false }. +includes: [propertyHelper.js] +---*/ + +class RE extends RegExp {} + +var re = new RE('39?'); + +re.exec('TC39'); + +assert.sameValue(re.lastIndex, 0); + +verifyWritable(re, 'lastIndex'); +verifyNotEnumerable(re, 'lastIndex'); +verifyNotConfigurable(re, 'lastIndex'); \ No newline at end of file diff --git a/test/language/subclassing/RegExp/regular-subclassing.js b/test/language/subclassing/RegExp/regular-subclassing.js new file mode 100644 index 0000000000000000000000000000000000000000..37245ba966a9518da1f45fae7525de97e7b55e66 --- /dev/null +++ b/test/language/subclassing/RegExp/regular-subclassing.js @@ -0,0 +1,23 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 21.2.3 +description: Subclassing the RegExp object +info: > + 21.2.3 The RegExp Constructor + + ... + + The RegExp constructor is designed to be subclassable. It may be used as the + value of an extends clause of a class definition. Subclass constructors that + intend to inherit the specified RegExp behaviour must include a super call to + the RegExp constructor to create and initialize subclass instances with the + necessary internal slots. +---*/ + +class RE extends RegExp {} + +var re = new RE(39); + +assert.sameValue(re.test('TC39'), true); +assert.sameValue(re.test('42'), false); diff --git a/test/language/subclassing/RegExp/super-must-be-called.js b/test/language/subclassing/RegExp/super-must-be-called.js new file mode 100644 index 0000000000000000000000000000000000000000..30c067d91df7f1fde0ca9d59a92064ee1228f0bf --- /dev/null +++ b/test/language/subclassing/RegExp/super-must-be-called.js @@ -0,0 +1,32 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 21.2.3 +description: Super need to be called to initialize internals +info: > + 21.2.3 The RegExp Constructor + + ... + + The RegExp constructor is designed to be subclassable. It may be used as the + value of an extends clause of a class definition. Subclass constructors that + intend to inherit the specified RegExp behaviour must include a super call to + the RegExp constructor to create and initialize subclass instances with the + necessary internal slots. +---*/ + +class RE1 extends RegExp { + constructor() {} +} + +assert.throws(ReferenceError, function() { + new RE1(); +}); + +class RE2 extends RegExp { + constructor() { + super(); + } +} + +new RE2();