|
3 | 3 | var test = require('tape');
|
4 | 4 | var availableTypedArrays = require('available-typed-arrays')();
|
5 | 5 | var forEach = require('for-each');
|
| 6 | +var typedArrayBuffer = require('typed-array-buffer'); |
| 7 | +var SafeBuffer = require('safe-buffer').Buffer; |
6 | 8 |
|
7 | 9 | var toBuffer = require('../');
|
8 | 10 | var fixtures = require('./fixtures.json');
|
@@ -67,5 +69,41 @@ test('handle all TA types', function (t) {
|
67 | 69 | );
|
68 | 70 | });
|
69 | 71 |
|
| 72 | + t.test('TA subset view on another one', { skip: typeof Float64Array === 'undefined' || typeof Uint8Array === 'undefined' }, function (st) { |
| 73 | + var arr = new Uint8Array(100); |
| 74 | + for (var i = 0; i < arr.length; i += 1) { |
| 75 | + arr[i] = i; |
| 76 | + } |
| 77 | + |
| 78 | + var buffer = typedArrayBuffer(arr); |
| 79 | + var expectedHex = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263'; |
| 80 | + |
| 81 | + forEach(availableTypedArrays, function (type) { |
| 82 | + var TA = global[type]; |
| 83 | + var offset = 8; |
| 84 | + var len = 4; |
| 85 | + var arr2 = new TA(buffer, offset, len); |
| 86 | + st.ok(arr2.BYTES_PER_ELEMENT >= 1, 'BYTES_PER_ELEMENT: sanity check'); |
| 87 | + |
| 88 | + var expectedSlice = expectedHex.slice(offset * 2, (offset + (len * arr2.BYTES_PER_ELEMENT)) * 2); |
| 89 | + var expected = SafeBuffer.from(expectedSlice, 'hex'); |
| 90 | + st.equal(expected.length, len * arr2.BYTES_PER_ELEMENT, 'expected length: sanity check'); |
| 91 | + |
| 92 | + var result = toBuffer(arr2); |
| 93 | + st.deepEqual( |
| 94 | + result, |
| 95 | + expected, |
| 96 | + 'Uint8Array subset view on ' + type + ' should be converted to Buffer correctly' |
| 97 | + ); |
| 98 | + st.equal( |
| 99 | + result.toString('hex'), |
| 100 | + expectedSlice, |
| 101 | + 'Uint8Array subset view on ' + type + ' should be converted to Buffer that toStrings correctly' |
| 102 | + ); |
| 103 | + }); |
| 104 | + |
| 105 | + st.end(); |
| 106 | + }); |
| 107 | + |
70 | 108 | t.end();
|
71 | 109 | });
|
0 commit comments