From fc160c78ad3bb92996e73aca8e39b37daca0296d Mon Sep 17 00:00:00 2001 From: Leonardo Balter <leonardo.balter@gmail.com> Date: Mon, 11 Jan 2016 15:22:36 -0500 Subject: [PATCH] Add tests for Subclassing the built-in RegExp Objects --- test/language/subclassing/RegExp/lastIndex.js | 26 +++++++++++++++ .../subclassing/RegExp/regular-subclassing.js | 23 +++++++++++++ .../RegExp/super-must-be-called.js | 32 +++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 test/language/subclassing/RegExp/lastIndex.js create mode 100644 test/language/subclassing/RegExp/regular-subclassing.js create mode 100644 test/language/subclassing/RegExp/super-must-be-called.js diff --git a/test/language/subclassing/RegExp/lastIndex.js b/test/language/subclassing/RegExp/lastIndex.js new file mode 100644 index 0000000000..2e2a05e4c8 --- /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 0000000000..37245ba966 --- /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 0000000000..30c067d91d --- /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(); -- GitLab