summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/RegExp/cross-compartment-getter.js
blob: c625c6317747f27b42e364cf301608aa434ebc76 (plain)
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
const otherGlobal = newGlobal({newCompartment: true});

let regExp = otherGlobal.eval("/a(b|c)/iy");

function get(name) {
    const descriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, name);
    return descriptor.get.call(regExp);
}

assertEq(get("flags"), "iy");
assertEq(get("global"), false);
assertEq(get("ignoreCase"), true);
assertEq(get("multiline"), false);
assertEq(get("dotAll"), false);
assertEq(get("source"), "a(b|c)");
assertEq(get("sticky"), true);
assertEq(get("unicode"), false);

regExp = otherGlobal.eval("new RegExp('', 'gu')");

assertEq(get("flags"), "gu");
assertEq(get("global"), true);
assertEq(get("ignoreCase"), false);
assertEq(get("multiline"), false);
assertEq(get("dotAll"), false);
assertEq(get("source"), "(?:)");
assertEq(get("sticky"), false);
assertEq(get("unicode"), true);

// Trigger escaping
regExp = otherGlobal.eval("new RegExp('a/b', '')");

assertEq(get("flags"), "");
assertEq(get("global"), false);
assertEq(get("ignoreCase"), false);
assertEq(get("multiline"), false);
assertEq(get("dotAll"), false);
assertEq(get("source"), "a\\/b");
assertEq(get("sticky"), false);
assertEq(get("unicode"), false);

if (typeof reportCompare === "function")
    reportCompare(true, true);