forked from zloirock/core-js
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
es.regexp.constructor.js
50 lines (48 loc) · 2.27 KB
/
es.regexp.constructor.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { DESCRIPTORS, GLOBAL } from '../helpers/constants';
import { nativeSubclass } from '../helpers/helpers';
if (DESCRIPTORS) {
QUnit.test('RegExp constructor', assert => {
const Symbol = GLOBAL.Symbol || {};
assert.isFunction(RegExp);
assert.arity(RegExp, 2);
assert.name(RegExp, 'RegExp');
assert.looksNative(RegExp);
assert.ok({}.toString.call(RegExp()).slice(8, -1), 'RegExp');
assert.ok({}.toString.call(new RegExp()).slice(8, -1), 'RegExp');
const regexp = /a/g;
assert.notStrictEqual(regexp, new RegExp(regexp), 'new RegExp(regexp) isnt regexp');
assert.strictEqual(regexp, RegExp(regexp), 'RegExp(regexp) is regexp');
regexp[Symbol.match] = false;
assert.notStrictEqual(regexp, RegExp(regexp), 'RegExp(regexp) isnt regexp, changed Symbol.match');
const object = {};
assert.notStrictEqual(object, RegExp(object), 'RegExp(O) isnt O');
object[Symbol.match] = true;
object.constructor = RegExp;
assert.strictEqual(object, RegExp(object), 'RegExp(O) is O, changed Symbol.match');
assert.strictEqual(String(regexp), '/a/g', 'b is /a/g');
assert.strictEqual(String(new RegExp(/a/g, 'mi')), '/a/im', 'Allows a regex with flags');
assert.ok(new RegExp(/a/g, 'im') instanceof RegExp, 'Works with instanceof');
assert.strictEqual(new RegExp(/a/g, 'im').constructor, RegExp, 'Has the right constructor');
/(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)/.exec('abcdefghijklmnopq');
let result = true;
const characters = 'bcdefghij';
for (let i = 0, { length } = characters; i < length; ++i) {
const chr = characters[i];
if (RegExp[`$${ i + 1 }`] !== chr) {
result = false;
}
}
assert.ok(result, 'Updates RegExp globals');
if (nativeSubclass) {
const Subclass = nativeSubclass(RegExp);
assert.ok(new Subclass() instanceof Subclass, 'correct subclassing with native classes #1');
assert.ok(new Subclass() instanceof RegExp, 'correct subclassing with native classes #2');
assert.ok(new Subclass('^abc$').test('abc'), 'correct subclassing with native classes #3');
}
});
QUnit.test('RegExp sticky', assert => {
const re = new RegExp('a', 'y');
assert.ok(re.sticky, '.sticky is true');
assert.strictEqual(re.flags, 'y', '.flags contains y');
});
}