summaryrefslogtreecommitdiff
path: root/test/parallel/test-buffer-tostring-range.js
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2016-08-23 14:16:45 -0700
committerJames M Snell <jasnell@gmail.com>2016-08-26 07:15:31 -0700
commit7053922c1a76ac56ef245923ec171b01cd90d2f4 (patch)
tree0464984232c835fe6e1d3ac2b429bdaaf77a6cbe /test/parallel/test-buffer-tostring-range.js
parentb3e7ac2605c18c041293cd3ab892c963e1145176 (diff)
downloadandroid-node-v8-7053922c1a76ac56ef245923ec171b01cd90d2f4.tar.gz
android-node-v8-7053922c1a76ac56ef245923ec171b01cd90d2f4.tar.bz2
android-node-v8-7053922c1a76ac56ef245923ec171b01cd90d2f4.zip
test: clean up / refactor buffer tests, remove duplication
Remove duplication of buffer tests, separate out into separate files, update and cleanup code, move to using strictEqual where possible. PR-URL: https://github.com/nodejs/node/pull/8256 Reviewed-By: Michaƫl Zasso <mic.besace@gmail.com>
Diffstat (limited to 'test/parallel/test-buffer-tostring-range.js')
-rw-r--r--test/parallel/test-buffer-tostring-range.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/test/parallel/test-buffer-tostring-range.js b/test/parallel/test-buffer-tostring-range.js
new file mode 100644
index 0000000000..c7ab356e46
--- /dev/null
+++ b/test/parallel/test-buffer-tostring-range.js
@@ -0,0 +1,84 @@
+'use strict';
+
+require('../common');
+const assert = require('assert');
+
+const rangeBuffer = Buffer.from('abc');
+
+// if start >= buffer's length, empty string will be returned
+assert.strictEqual(rangeBuffer.toString('ascii', 3), '');
+assert.strictEqual(rangeBuffer.toString('ascii', +Infinity), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 3.14, 3), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 'Infinity', 3), '');
+
+// if end <= 0, empty string will be returned
+assert.strictEqual(rangeBuffer.toString('ascii', 1, 0), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 1, -1.2), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 1, -100), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 1, -Infinity), '');
+
+// if start < 0, start will be taken as zero
+assert.strictEqual(rangeBuffer.toString('ascii', -1, 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', -1.99, 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', -Infinity, 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', '-1', 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', '-1.99', 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', '-Infinity', 3), 'abc');
+
+// if start is an invalid integer, start will be taken as zero
+assert.strictEqual(rangeBuffer.toString('ascii', 'node.js', 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', {}, 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', [], 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', NaN, 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', null, 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', undefined, 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', false, 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', '', 3), 'abc');
+
+// but, if start is an integer when coerced, then it will be coerced and used.
+assert.strictEqual(rangeBuffer.toString('ascii', '-1', 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', '1', 3), 'bc');
+assert.strictEqual(rangeBuffer.toString('ascii', '-Infinity', 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', '3', 3), '');
+assert.strictEqual(rangeBuffer.toString('ascii', Number(3), 3), '');
+assert.strictEqual(rangeBuffer.toString('ascii', '3.14', 3), '');
+assert.strictEqual(rangeBuffer.toString('ascii', '1.99', 3), 'bc');
+assert.strictEqual(rangeBuffer.toString('ascii', '-1.99', 3), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 1.99, 3), 'bc');
+assert.strictEqual(rangeBuffer.toString('ascii', true, 3), 'bc');
+
+// if end > buffer's length, end will be taken as buffer's length
+assert.strictEqual(rangeBuffer.toString('ascii', 0, 5), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, 6.99), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, Infinity), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, '5'), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, '6.99'), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, 'Infinity'), 'abc');
+
+// if end is an invalid integer, end will be taken as buffer's length
+assert.strictEqual(rangeBuffer.toString('ascii', 0, 'node.js'), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, {}), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, NaN), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, undefined), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, null), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, []), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, false), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, ''), '');
+
+// but, if end is an integer when coerced, then it will be coerced and used.
+assert.strictEqual(rangeBuffer.toString('ascii', 0, '-1'), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, '1'), 'a');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, '-Infinity'), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, '3'), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, Number(3)), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, '3.14'), 'abc');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, '1.99'), 'a');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, '-1.99'), '');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, 1.99), 'a');
+assert.strictEqual(rangeBuffer.toString('ascii', 0, true), 'a');
+
+// try toString() with a object as a encoding
+assert.strictEqual(rangeBuffer.toString({toString: function() {
+ return 'ascii';
+}}), 'abc');