From 25978298a469abb89bf66e35f95b7a0294e321e9 Mon Sep 17 00:00:00 2001
From: Alexey Shvayka <shvaikalesh@gmail.com>
Date: Mon, 6 Apr 2020 18:59:56 +0300
Subject: [PATCH] Add String.prototype.replaceAll test

---
 .../searchValue-replacer-is-null.js           | 35 +++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 test/built-ins/String/prototype/replaceAll/searchValue-replacer-is-null.js

diff --git a/test/built-ins/String/prototype/replaceAll/searchValue-replacer-is-null.js b/test/built-ins/String/prototype/replaceAll/searchValue-replacer-is-null.js
new file mode 100644
index 0000000000..b27e49142e
--- /dev/null
+++ b/test/built-ins/String/prototype/replaceAll/searchValue-replacer-is-null.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-string.prototype.replaceall
+description: >
+  If searchValue's Symbol.replace property is null, no error is thrown.
+info: |
+  String.prototype.replaceAll ( searchValue, replaceValue )
+
+  [...]
+  2. If searchValue is neither undefined nor null, then
+    [...]
+    c. Let replacer be ? GetMethod(searchValue, @@replace).
+    d. If replacer is not undefined, then
+      [...]
+  [...]
+  16. Return result.
+
+  GetMethod ( V, P )
+
+  [...]
+  2. Let func be ? GetV(V, P).
+  3. If func is either undefined or null, return undefined.
+features: [String.prototype.replaceAll, Symbol.replace]
+---*/
+
+var searchValue = {};
+searchValue[Symbol.replace] = null;
+searchValue.toString = function() { return "2"; };
+searchValue.valueOf = function() { throw new Test262Error("should not be called"); };
+
+var replacer = function() { return "<foo>"; };
+assert.sameValue("a2b2c".replaceAll(searchValue, replacer), "a<foo>b<foo>c");
+assert.sameValue("a2b2c".replaceAll(searchValue, "<foo>"), "a<foo>b<foo>c");