// Copyright 2014 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 RegExp.prototype.flags = 'setter should be undefined'; assertEquals('', RegExp('').flags); assertEquals('', /./.flags); assertEquals('gimuy', RegExp('', 'yugmi').flags); assertEquals('gimuy', /foo/yumig.flags); var descriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags'); assertTrue(descriptor.configurable); assertFalse(descriptor.enumerable); assertInstanceof(descriptor.get, Function); assertEquals(undefined, descriptor.set); function testGenericFlags(object) { return descriptor.get.call(object); } assertEquals('', testGenericFlags({})); assertEquals('i', testGenericFlags({ ignoreCase: true })); assertEquals('uy', testGenericFlags({ global: 0, sticky: 1, unicode: 1 })); assertEquals('m', testGenericFlags({ __proto__: { multiline: true } })); assertThrows(function() { testGenericFlags(); }, TypeError); assertThrows(function() { testGenericFlags(undefined); }, TypeError); assertThrows(function() { testGenericFlags(null); }, TypeError); assertThrows(function() { testGenericFlags(true); }, TypeError); assertThrows(function() { testGenericFlags(false); }, TypeError); assertThrows(function() { testGenericFlags(''); }, TypeError); assertThrows(function() { testGenericFlags(42); }, TypeError); var counter = 0; var map = {}; var object = { get global() { map.g = counter++; }, get ignoreCase() { map.i = counter++; }, get multiline() { map.m = counter++; }, get unicode() { map.u = counter++; }, get sticky() { map.y = counter++; } }; testGenericFlags(object); assertEquals({ g: 0, i: 1, m: 2, u: 3, y: 4 }, map);