Backed out 3 changesets (bug 1892041) for causing failures on async-module-does-not...
[gecko.git] / js / src / tests / test262 / built-ins / RegExp / prototype / Symbol.replace / coerce-global.js
blob4b87e8402413a4ba9d0218a23d485c0ff7502532
1 // Copyright (C) 2015 the V8 project authors. All rights reserved.
2 // This code is governed by the BSD license found in the LICENSE file.
4 /*---
5 description: Boolean coercion of `global` property
6 es6id: 21.2.5.8
7 info: |
8     21.2.5.6 RegExp.prototype [ @@replace ] ( string )
10     [...]
11     8. Let global be ToBoolean(Get(rx, "global")).
12     [...]
13 features: [Symbol.replace]
14 ---*/
16 Array.print = print;
17 var r = /a/g;
18 Object.defineProperty(r, 'global', { writable: true });
20 r.lastIndex = 0;
21 r.global = undefined;
22 assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: undefined');
24 r.lastIndex = 0;
25 r.global = null;
26 assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: null');
28 r.lastIndex = 0;
29 r.global = false;
30 assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: false');
32 r.lastIndex = 0;
33 r.global = NaN;
34 assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: NaN');
36 r.lastIndex = 0;
37 r.global = 0;
38 assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: global');
40 r.lastIndex = 0;
41 r.global = '';
42 assert.sameValue(r[Symbol.replace]('aa', 'b'), 'ba', 'value: ""');
44 var execCount = 0;
45 r = /a/;
46 Object.defineProperty(r, 'global', { writable: true });
47 r.exec = function() {
48   execCount += 1;
49   if (execCount === 1) {
50     return ['a'];
51   }
52   return null;
55 execCount = 0;
56 r.global = true;
57 r[Symbol.replace]('aa', 'b');
58 assert.sameValue(execCount, 2, 'value: true');
60 execCount = 0;
61 r.global = 86;
62 r[Symbol.replace]('aa', 'b');
63 assert.sameValue(execCount, 2, 'value: 86');
65 execCount = 0;
66 r.global = Symbol.replace;
67 r[Symbol.replace]('aa', 'b');
68 assert.sameValue(execCount, 2, 'value: Symbol.replace');
70 execCount = 0;
71 r.global = {};
72 r[Symbol.replace]('aa', 'b');
73 assert.sameValue(execCount, 2, 'value: {}');
75 reportCompare(0, 0);