regexp-6.js (2263B)
1 // Tests for String.prototype builtins with custom regexp symbols on 2 // RegExp.prototype. 3 // Use fresh globals because this pops realm fuses. 4 5 // Custom RegExp.prototype[@@match]. 6 newGlobal().evaluate(`(function() { 7 var s = "foobar"; 8 var re = /abc.+/; 9 var count = 0; 10 for (var i = 0; i < 200; i++) { 11 s.match(re); 12 if (i === 150) { 13 RegExp.prototype[Symbol.match] = function() { 14 count++; 15 return null; 16 }; 17 } 18 } 19 assertEq(count, 49); 20 })();`); 21 22 // Custom RegExp.prototype[@@matchAll]. 23 newGlobal().evaluate(`(function() { 24 var s = "foobar"; 25 var re = /abc.+/g; 26 var count = 0; 27 for (var i = 0; i < 200; i++) { 28 s.matchAll(re); 29 if (i === 150) { 30 RegExp.prototype[Symbol.matchAll] = function() { 31 count++; 32 return null; 33 }; 34 } 35 } 36 assertEq(count, 49); 37 })();`); 38 39 // Custom RegExp.prototype[@@replace] for replace. 40 newGlobal().evaluate(`(function() { 41 var s = "foobar"; 42 var re = /abc.+/; 43 var count = 0; 44 for (var i = 0; i < 200; i++) { 45 s.replace(re, ""); 46 if (i === 150) { 47 RegExp.prototype[Symbol.replace] = function() { 48 count++; 49 return ""; 50 }; 51 } 52 } 53 assertEq(count, 49); 54 })();`); 55 56 // Custom RegExp.prototype[@@replace] for replaceAll. 57 newGlobal().evaluate(`(function() { 58 var s = "foobar"; 59 var re = /abc.+/g; 60 var count = 0; 61 for (var i = 0; i < 200; i++) { 62 s.replaceAll(re, ""); 63 if (i === 150) { 64 RegExp.prototype[Symbol.replace] = function() { 65 count++; 66 return ""; 67 }; 68 } 69 } 70 assertEq(count, 49); 71 })();`); 72 73 // Custom RegExp.prototype[@@search]. 74 newGlobal().evaluate(`(function() { 75 var s = "foobar"; 76 var re = /abc.+/g; 77 var count = 0; 78 for (var i = 0; i < 200; i++) { 79 s.search(re); 80 if (i === 150) { 81 RegExp.prototype[Symbol.search] = function() { 82 count++; 83 return -1; 84 }; 85 } 86 } 87 assertEq(count, 49); 88 })();`); 89 90 // Custom RegExp.prototype[@@split]. 91 newGlobal().evaluate(`(function() { 92 var s = "foobar"; 93 var re = /abc.+/; 94 var count = 0; 95 for (var i = 0; i < 200; i++) { 96 s.split(re); 97 if (i === 150) { 98 RegExp.prototype[Symbol.split] = function() { 99 count++; 100 return []; 101 }; 102 } 103 } 104 assertEq(count, 49); 105 })();`);