| //@ runNoFTL |
| |
| function assert(testedValue, msg) { |
| if (!testedValue) |
| throw Error(msg); |
| } |
| |
| // String prototype with overridden @@search: test with string literal. |
| (function () { |
| let accesses = []; |
| var obj = ""; |
| Object.defineProperty(String.prototype, Symbol.search, { |
| value: function (str) { |
| accesses.push("Symbol(Symbol.search)"); |
| return /rch/[Symbol.search](str); |
| }, |
| writable: true, |
| configurable: true, |
| }); |
| |
| assert(accesses == "", "unexpected call to overridden props"); |
| let result = "searchme".search(obj); |
| assert(accesses == "Symbol(Symbol.search)", "Property accesses do not match expectation"); |
| assert(result === 3, "Unexpected result"); |
| |
| Object.defineProperty(String.prototype, Symbol.search, { value: undefined, writable: false, configurable: true }); |
| })(); |