diff --git a/features.txt b/features.txt
index 9d19bfaa246de399951c0e6c41094c3df7f6e112..39092a57bf3edac2eb04779ce9950bfef2e0e012 100644
--- a/features.txt
+++ b/features.txt
@@ -55,6 +55,11 @@ regexp-unicode-property-escapes
 Atomics
 SharedArrayBuffer
 
+# Array.prototype.flatten and Array.prototype.flatMap
+# https://github.com/tc39/proposal-flatMap
+Array.prototype.flatten
+Array.prototype.flatMap
+
 # Standard language features
 #
 # Language features that have been included in a published version of the
diff --git a/test/built-ins/Array/prototype/flatMap/array-like-objects.js b/test/built-ins/Array/prototype/flatMap/array-like-objects.js
index 0e057a952a66ac1877cd9b69b448060c9603856b..a9512ff35f33eb600f265e6bee4497688ef239c3 100644
--- a/test/built-ins/Array/prototype/flatMap/array-like-objects.js
+++ b/test/built-ins/Array/prototype/flatMap/array-like-objects.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatMap
 description: >
     array-like objects can be flattened
 includes: [compareArray.js]
+features: [Array.prototype.flatMap]
 ---*/
 
 function getArgumentsObject() {
diff --git a/test/built-ins/Array/prototype/flatMap/bound-function-argument.js b/test/built-ins/Array/prototype/flatMap/bound-function-argument.js
index 093e9599d47f4e976ce745dd6171f6de8fade78d..95f5aeffe7ad41ac57d7a5df489f342af3d8a4a6 100644
--- a/test/built-ins/Array/prototype/flatMap/bound-function-argument.js
+++ b/test/built-ins/Array/prototype/flatMap/bound-function-argument.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatMap
 description: >
     Behavior when given a bound function
 includes: [compareArray.js]
+features: [Array.prototype.flatMap]
 ---*/
 
 var a = [0, 0];
diff --git a/test/built-ins/Array/prototype/flatMap/depth-always-one.js b/test/built-ins/Array/prototype/flatMap/depth-always-one.js
index 37caee8574ad9cf7e2027a4a469534a82ae1a5d6..a31e0a1a5631c210e797c6119de6f48bf7bbbc6a 100644
--- a/test/built-ins/Array/prototype/flatMap/depth-always-one.js
+++ b/test/built-ins/Array/prototype/flatMap/depth-always-one.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatMap
 description: >
     Behavior when array is depth more than 1
 includes: [compareArray.js]
+features: [Array.prototype.flatMap]
 ---*/
 
 assert.compareArray([1, 2].flatMap(function(e) {
diff --git a/test/built-ins/Array/prototype/flatMap/length.js b/test/built-ins/Array/prototype/flatMap/length.js
index 1f16e513a8fd06b2896081c40eddcdd21f21a3e1..4ef59290bdcd05a7db91ea85375e06a888d4d3ff 100644
--- a/test/built-ins/Array/prototype/flatMap/length.js
+++ b/test/built-ins/Array/prototype/flatMap/length.js
@@ -6,6 +6,7 @@ description: Array.prototype.flatMap.length value and descriptor.
 info: >
   17 ECMAScript Standard Built-in Objects
 includes: [propertyHelper.js]
+features: [Array.prototype.flatMap]
 ---*/
 
 assert.sameValue(
diff --git a/test/built-ins/Array/prototype/flatMap/name.js b/test/built-ins/Array/prototype/flatMap/name.js
index 326e5173c82f09346f30276866a29a83491c7fa1..53deaa1e564c38c117b5c10dc6d0d53d9557a1c4 100644
--- a/test/built-ins/Array/prototype/flatMap/name.js
+++ b/test/built-ins/Array/prototype/flatMap/name.js
@@ -6,6 +6,7 @@ description: Array.prototype.flatmap name value and descriptor.
 info: >
   17 ECMAScript Standard Built-in Objects
 includes: [propertyHelper.js]
+features: [Array.prototype.flatMap]
 ---*/
 
 assert.sameValue(
diff --git a/test/built-ins/Array/prototype/flatMap/non-callable-argument-throws.js b/test/built-ins/Array/prototype/flatMap/non-callable-argument-throws.js
index 4795e3b6e45053a52fc7bbd52ce9eea3b1974c64..6d47d0233547094902d3ee1ef774cc5ca23d44b2 100644
--- a/test/built-ins/Array/prototype/flatMap/non-callable-argument-throws.js
+++ b/test/built-ins/Array/prototype/flatMap/non-callable-argument-throws.js
@@ -4,6 +4,7 @@
 esid: sec-array.prototype.flatMap
 description: >
     non callable argument should throw TypeError Exception
+features: [Array.prototype.flatMap]
 ---*/
 
 assert.throws(TypeError, function () {
diff --git a/test/built-ins/Array/prototype/flatMap/non-object-ctor-throws.js b/test/built-ins/Array/prototype/flatMap/non-object-ctor-throws.js
index ba4c6d26e583a2005f3ad6391a52dddb52e639c7..21e44b6818612aa5dc983af54aea15bc0dce7e14 100644
--- a/test/built-ins/Array/prototype/flatMap/non-object-ctor-throws.js
+++ b/test/built-ins/Array/prototype/flatMap/non-object-ctor-throws.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatMap
 description: >
     Behavior when `constructor` property is neither an Object nor undefined
     - if IsConstructor(C) is false, throw a TypeError exception.
+features: [Array.prototype.flatMap]
 ---*/
 
 var a = [];
diff --git a/test/built-ins/Array/prototype/flatMap/null-undefined-input-throws.js b/test/built-ins/Array/prototype/flatMap/null-undefined-input-throws.js
index 83ebe5d6898160161e46fe8523956431d549d4cf..5a4e966e25625fae3245897d023dbabf4257aadb 100644
--- a/test/built-ins/Array/prototype/flatMap/null-undefined-input-throws.js
+++ b/test/built-ins/Array/prototype/flatMap/null-undefined-input-throws.js
@@ -4,6 +4,7 @@
 esid: sec-array.prototype.flatMap
 description: >
     null or undefined should throw TypeError Exception
+features: [Array.prototype.flatMap]
 ---*/
 
 assert.throws(TypeError, function() {
diff --git a/test/built-ins/Array/prototype/flatMap/thisArg-argument.js b/test/built-ins/Array/prototype/flatMap/thisArg-argument.js
index f682045f1eb45a7a442ef6188a2fcc48cd7b6361..95b95ca7a387b53847bd4334d9df923087f84882 100644
--- a/test/built-ins/Array/prototype/flatMap/thisArg-argument.js
+++ b/test/built-ins/Array/prototype/flatMap/thisArg-argument.js
@@ -7,6 +7,7 @@ description: >
     Array.prototype.flatMap ( mapperFunction [ , thisArg ] )
 includes: [compareArray.js]
 flags: [onlyStrict]
+features: [Array.prototype.flatMap]
 ---*/
 
 var a = {};
diff --git a/test/built-ins/Array/prototype/flatten/array-like-objects.js b/test/built-ins/Array/prototype/flatten/array-like-objects.js
index f423ed2d7fc1e3ad39829a14fc99fe1d1dd16632..f9ed97b058cea7fcd7c0402b7eb4efdaec8f60f1 100644
--- a/test/built-ins/Array/prototype/flatten/array-like-objects.js
+++ b/test/built-ins/Array/prototype/flatten/array-like-objects.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatten
 description: >
     array-like objects can be flattened
 includes: [compareArray.js]
+features: [Array.prototype.flatten]
 ---*/
 
 function getArgumentsObject() {
diff --git a/test/built-ins/Array/prototype/flatten/bound-function-call.js b/test/built-ins/Array/prototype/flatten/bound-function-call.js
index 7d30a6553cbd692790f710b2be9540b324e908e7..ce4153b87cd0069ebe709c130f50ecc4f92423cc 100644
--- a/test/built-ins/Array/prototype/flatten/bound-function-call.js
+++ b/test/built-ins/Array/prototype/flatten/bound-function-call.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatten
 description: >
     using bound functions
 includes: [compareArray.js]
+features: [Array.prototype.flatten]
 ---*/
 
 var a = [[0],[1]];
diff --git a/test/built-ins/Array/prototype/flatten/empty-array-elements.js b/test/built-ins/Array/prototype/flatten/empty-array-elements.js
index 4e5195e434801309987b681eb0e4b50d2234a5ef..cbf2ae4b07b01ae22c8cd893998e25a702282da7 100644
--- a/test/built-ins/Array/prototype/flatten/empty-array-elements.js
+++ b/test/built-ins/Array/prototype/flatten/empty-array-elements.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatten
 description: >
     arrays with empty arrays elements
 includes: [compareArray.js]
+features: [Array.prototype.flatten]
 ---*/
 
 var a = {};
diff --git a/test/built-ins/Array/prototype/flatten/empty-object-elements.js b/test/built-ins/Array/prototype/flatten/empty-object-elements.js
index 97f031e2d3001da2113dc60e730dc209cdb1d53e..356cab6606e3f34ac3728c49f5e4d66363b8c070 100644
--- a/test/built-ins/Array/prototype/flatten/empty-object-elements.js
+++ b/test/built-ins/Array/prototype/flatten/empty-object-elements.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatten
 description: >
     arrays with empty object elements
 includes: [compareArray.js]
+features: [Array.prototype.flatten]
 ---*/
 
 var a = {}, b = {};
diff --git a/test/built-ins/Array/prototype/flatten/length.js b/test/built-ins/Array/prototype/flatten/length.js
index 9b3f2ff8da93efbb7bfe1a6a14a13d8fad4b92f6..704e81158a7b0ac35ffbf6d74ff67defaca8a52a 100644
--- a/test/built-ins/Array/prototype/flatten/length.js
+++ b/test/built-ins/Array/prototype/flatten/length.js
@@ -6,6 +6,7 @@ description: Array.prototype.flatten.length value and descriptor.
 info: >
   17 ECMAScript Standard Built-in Objects
 includes: [propertyHelper.js]
+features: [Array.prototype.flatten]
 ---*/
 
 assert.sameValue(
diff --git a/test/built-ins/Array/prototype/flatten/name.js b/test/built-ins/Array/prototype/flatten/name.js
index bcd55ac1d32e6de5d64014351caefedbb0c513f9..365c7e11cef4863b711666676f78ce73df3e234a 100644
--- a/test/built-ins/Array/prototype/flatten/name.js
+++ b/test/built-ins/Array/prototype/flatten/name.js
@@ -7,6 +7,7 @@ description: >
 info: >
   17 ECMAScript Standard Built-in Objects
 includes: [propertyHelper.js]
+features: [Array.prototype.flatten]
 ---*/
 
 assert.sameValue(
diff --git a/test/built-ins/Array/prototype/flatten/non-numeric-depth-should-not-throw.js b/test/built-ins/Array/prototype/flatten/non-numeric-depth-should-not-throw.js
index 19772bbcbbe45b65ede2c960af4aad338e968786..5f6f59d2f0fe92ea4571486bf842ef9c0fc3a8de 100644
--- a/test/built-ins/Array/prototype/flatten/non-numeric-depth-should-not-throw.js
+++ b/test/built-ins/Array/prototype/flatten/non-numeric-depth-should-not-throw.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatten
 description: >
     if the argument is a string or object, the depthNum is 0
 includes: [compareArray.js]
+features: [Array.prototype.flatten]
 ---*/
 
 var a = [1, [2]];
diff --git a/test/built-ins/Array/prototype/flatten/non-object-ctor-throws.js b/test/built-ins/Array/prototype/flatten/non-object-ctor-throws.js
index 31a239e792ee970659b2c47be7a656dc9862e34c..fc8e8768591b3c5879137c810b432d8c969a92c5 100644
--- a/test/built-ins/Array/prototype/flatten/non-object-ctor-throws.js
+++ b/test/built-ins/Array/prototype/flatten/non-object-ctor-throws.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatten
 description: >
     Behavior when `constructor` property is neither an Object nor undefined
     - if IsConstructor(C) is false, throw a TypeError exception.
+features: [Array.prototype.flatten]
 ---*/
 
 var a = [];
diff --git a/test/built-ins/Array/prototype/flatten/null-undefined-elements.js b/test/built-ins/Array/prototype/flatten/null-undefined-elements.js
index 685b902e3f462f3eab5e503c3f2725cb2bc32144..ef8fb3a53241f9209a133fb1079b99612eb2f121 100644
--- a/test/built-ins/Array/prototype/flatten/null-undefined-elements.js
+++ b/test/built-ins/Array/prototype/flatten/null-undefined-elements.js
@@ -5,7 +5,9 @@ esid: sec-array.prototype.flatten
 description: >
     arrays with null, and undefined
 includes: [compareArray.js]
+features: [Array.prototype.flatten]
 ---*/
+
 var a = [void 0];
 
 assert(compareArray([1, null, void 0].flatten(), [1, null, undefined]));
diff --git a/test/built-ins/Array/prototype/flatten/null-undefined-input-throws.js b/test/built-ins/Array/prototype/flatten/null-undefined-input-throws.js
index bccb6d2a8864d03c65c87a536c0d2ce56fe860c9..3e711223f75bfd1d0d042ca6cdab0571c33a9c85 100644
--- a/test/built-ins/Array/prototype/flatten/null-undefined-input-throws.js
+++ b/test/built-ins/Array/prototype/flatten/null-undefined-input-throws.js
@@ -4,6 +4,7 @@
 esid: sec-array.prototype.flatten
 description: >
     null or undefined should throw TypeError Exception
+features: [Array.prototype.flatten]
 ---*/
 
 assert.throws(TypeError, function() {
diff --git a/test/built-ins/Array/prototype/flatten/positive-infinity.js b/test/built-ins/Array/prototype/flatten/positive-infinity.js
index 4af7c097733e8c7faed61ae457be58771745780d..0c4dfcd593290c0e19f81daa0a85bd32e96ff80a 100644
--- a/test/built-ins/Array/prototype/flatten/positive-infinity.js
+++ b/test/built-ins/Array/prototype/flatten/positive-infinity.js
@@ -5,6 +5,7 @@ esid: sec-array.prototype.flatten
 description: >
     if the argument is a positive infinity, the depthNum is max depth of the array
 includes: [compareArray.js]
+features: [Array.prototype.flatten]
 ---*/
 
 var a = [1, [2, [3, [4]]]]
diff --git a/test/built-ins/Array/prototype/flatten/prop-desc.js b/test/built-ins/Array/prototype/flatten/prop-desc.js
index a3bdc691f1b1c50332451de0dbbe45ca572d5833..f7f386148bbb3fd32d014c951439f630c2187184 100644
--- a/test/built-ins/Array/prototype/flatten/prop-desc.js
+++ b/test/built-ins/Array/prototype/flatten/prop-desc.js
@@ -7,6 +7,7 @@ description: Property type and descriptor.
 info: >
   17 ECMAScript Standard Built-in Objects
 includes: [propertyHelper.js]
+features: [Array.prototype.flatten]
 ---*/
 
 assert.sameValue(
diff --git a/test/built-ins/Array/prototype/flatten/symbol-object-create-null-depth-throws.js b/test/built-ins/Array/prototype/flatten/symbol-object-create-null-depth-throws.js
index ad76cedb399173eb99c7738ffece0ccb15296aee..9bcf98ae0c23a2b8366afbfd6b0a529580b13bd4 100644
--- a/test/built-ins/Array/prototype/flatten/symbol-object-create-null-depth-throws.js
+++ b/test/built-ins/Array/prototype/flatten/symbol-object-create-null-depth-throws.js
@@ -4,6 +4,7 @@
 esid: sec-array.prototype.flatten
 description: >
     if the argument is a Symbol or Object null, it throws exception
+features: [Array.prototype.flatten]
 ---*/
 
 assert.throws(TypeError, function() {