From 6f54c4632d0ebd28a95ff610f47710ba74020253 Mon Sep 17 00:00:00 2001
From: Sho Miyamoto <shqld8@gmail.com>
Date: Sat, 13 Jan 2018 22:05:26 +0900
Subject: [PATCH] test: add assertions for TextEncoder/Decoder

PR-URL: https://github.com/nodejs/node/pull/18132
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
---
 .../test-whatwg-encoding-textdecoder.js       | 41 +++++++++++++------
 .../test-whatwg-encoding-textencoder.js       | 34 +++++++++------
 2 files changed, 51 insertions(+), 24 deletions(-)

diff --git a/test/parallel/test-whatwg-encoding-textdecoder.js b/test/parallel/test-whatwg-encoding-textdecoder.js
index 55c601364d0add..8011f285fcb2b7 100644
--- a/test/parallel/test-whatwg-encoding-textdecoder.js
+++ b/test/parallel/test-whatwg-encoding-textdecoder.js
@@ -90,18 +90,35 @@ if (common.hasIntl) {
 }
 
 {
-  const fn = TextDecoder.prototype[inspect];
-  assert.doesNotThrow(() => {
-    fn.call(new TextDecoder(), Infinity, {});
-  });
-
-  [{}, [], true, 1, '', new TextEncoder()].forEach((i) => {
-    assert.throws(() => fn.call(i, Infinity, {}),
-                  common.expectsError({
-                    code: 'ERR_INVALID_THIS',
-                    type: TypeError,
-                    message: 'Value of "this" must be of type TextDecoder'
-                  }));
+  const inspectFn = TextDecoder.prototype[inspect];
+  const decodeFn = TextDecoder.prototype.decode;
+  const {
+    encoding: { get: encodingGetter },
+    fatal: { get: fatalGetter },
+    ignoreBOM: { get: ignoreBOMGetter },
+  } = Object.getOwnPropertyDescriptors(TextDecoder.prototype);
+
+  const instance = new TextDecoder();
+
+  const expectedError = {
+    code: 'ERR_INVALID_THIS',
+    type: TypeError,
+    message: 'Value of "this" must be of type TextDecoder'
+  };
+
+  assert.doesNotThrow(() => inspectFn.call(instance, Infinity, {}));
+  assert.doesNotThrow(() => decodeFn.call(instance));
+  assert.doesNotThrow(() => encodingGetter.call(instance));
+  assert.doesNotThrow(() => fatalGetter.call(instance));
+  assert.doesNotThrow(() => ignoreBOMGetter.call(instance));
+
+  const invalidThisArgs = [{}, [], true, 1, '', new TextEncoder()];
+  invalidThisArgs.forEach((i) => {
+    common.expectsError(() => inspectFn.call(i, Infinity, {}), expectedError);
+    common.expectsError(() => decodeFn.call(i), expectedError);
+    common.expectsError(() => encodingGetter.call(i), expectedError);
+    common.expectsError(() => fatalGetter.call(i), expectedError);
+    common.expectsError(() => ignoreBOMGetter.call(i), expectedError);
   });
 }
 
diff --git a/test/parallel/test-whatwg-encoding-textencoder.js b/test/parallel/test-whatwg-encoding-textencoder.js
index 2e8ca9e9abafd1..4096a02432e900 100644
--- a/test/parallel/test-whatwg-encoding-textencoder.js
+++ b/test/parallel/test-whatwg-encoding-textencoder.js
@@ -35,17 +35,27 @@ assert(TextEncoder);
 }
 
 {
-  const fn = TextEncoder.prototype[inspect];
-  assert.doesNotThrow(() => {
-    fn.call(new TextEncoder(), Infinity, {});
-  });
-
-  [{}, [], true, 1, '', new TextDecoder()].forEach((i) => {
-    assert.throws(() => fn.call(i, Infinity, {}),
-                  common.expectsError({
-                    code: 'ERR_INVALID_THIS',
-                    type: TypeError,
-                    message: 'Value of "this" must be of type TextEncoder'
-                  }));
+  const inspectFn = TextEncoder.prototype[inspect];
+  const encodeFn = TextEncoder.prototype.encode;
+  const encodingGetter =
+    Object.getOwnPropertyDescriptor(TextEncoder.prototype, 'encoding').get;
+
+  const instance = new TextEncoder();
+
+  const expectedError = {
+    code: 'ERR_INVALID_THIS',
+    type: TypeError,
+    message: 'Value of "this" must be of type TextEncoder'
+  };
+
+  assert.doesNotThrow(() => inspectFn.call(instance, Infinity, {}));
+  assert.doesNotThrow(() => encodeFn.call(instance));
+  assert.doesNotThrow(() => encodingGetter.call(instance));
+
+  const invalidThisArgs = [{}, [], true, 1, '', new TextDecoder()];
+  invalidThisArgs.forEach((i) => {
+    common.expectsError(() => inspectFn.call(i, Infinity, {}), expectedError);
+    common.expectsError(() => encodeFn.call(i), expectedError);
+    common.expectsError(() => encodingGetter.call(i), expectedError);
   });
 }