Add tests for Subclassing the built-in RegExp Objects

This commit is contained in:
Leonardo Balter 2016-01-11 15:22:36 -05:00
parent 5be3a8019d
commit fc160c78ad
3 changed files with 81 additions and 0 deletions

View File

@ -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');

View File

@ -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);

View File

@ -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();