483d8b9bd8
R=cbruni@chromium.org Review URL: https://codereview.chromium.org/1416093006 Cr-Commit-Position: refs/heads/master@{#31910}
65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
// Copyright 2015 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --harmony-regexps --harmony-unicode-regexps
|
|
|
|
var r1 = /abc/gi;
|
|
assertEquals("abc", r1.source);
|
|
assertTrue(r1.global);
|
|
assertTrue(r1.ignoreCase);
|
|
assertFalse(r1.multiline);
|
|
assertFalse(r1.sticky);
|
|
assertFalse(r1.unicode);
|
|
|
|
// Internal slot of prototype is not read.
|
|
var r2 = { __proto__: r1 };
|
|
assertThrows(function() { r2.source; }, TypeError);
|
|
assertThrows(function() { r2.global; }, TypeError);
|
|
assertThrows(function() { r2.ignoreCase; }, TypeError);
|
|
assertThrows(function() { r2.multiline; }, TypeError);
|
|
assertThrows(function() { r2.sticky; }, TypeError);
|
|
assertThrows(function() { r2.unicode; }, TypeError);
|
|
|
|
var r3 = /I/;
|
|
var string = "iIiIi";
|
|
var expected = "iXiIi";
|
|
assertFalse(r3.global);
|
|
assertFalse(r3.ignoreCase);
|
|
assertEquals("", r3.flags);
|
|
assertEquals(expected, string.replace(r3, "X"));
|
|
|
|
var get_count = 0;
|
|
Object.defineProperty(r3, "global", {
|
|
get: function() { get_count++; return true; }
|
|
});
|
|
Object.defineProperty(r3, "ignoreCase", {
|
|
get: function() { get_count++; return true; }
|
|
});
|
|
|
|
assertTrue(r3.global);
|
|
assertEquals(1, get_count);
|
|
assertTrue(r3.ignoreCase);
|
|
assertEquals(2, get_count);
|
|
// Overridden flag getters affects the flags getter.
|
|
assertEquals("gi", r3.flags);
|
|
assertEquals(4, get_count);
|
|
// Overridden flag getters do not affect the internal flags.
|
|
assertEquals(expected, string.replace(r3, "X"));
|
|
assertEquals(4, get_count);
|
|
|
|
|
|
function testName(name) {
|
|
assertThrows(() => RegExp.prototype[name], TypeError);
|
|
assertEquals(
|
|
"get " + name,
|
|
Object.getOwnPropertyDescriptor(RegExp.prototype, name).get.name);
|
|
}
|
|
|
|
testName("global");
|
|
testName("ignoreCase");
|
|
testName("multiline");
|
|
testName("source");
|
|
testName("sticky");
|
|
testName("unicode");
|