@@ -269,6 +269,64 @@ assert.throws(() => new Blob({}), { |
269 | 269 | reader.closed.then(common.mustCall()); |
270 | 270 | })().then(common.mustCall()); |
271 | 271 |
|
| 272 | +(async () => { |
| 273 | + const b = new Blob(['A', 'B', 'C']); |
| 274 | + const stream = b.stream(); |
| 275 | + const chunks = []; |
| 276 | + const decoder = new TextDecoder(); |
| 277 | + await stream.pipeTo(new WritableStream({ |
| 278 | + write(chunk) { |
| 279 | + chunks.push(decoder.decode(chunk, { stream: true })); |
| 280 | + } |
| 281 | + })); |
| 282 | + assert.strictEqual(chunks.join(''), 'ABC'); |
| 283 | +})().then(common.mustCall()); |
| 284 | + |
| 285 | +(async () => { |
| 286 | + const b = new Blob(['A', 'B', 'C']); |
| 287 | + const stream = b.stream(); |
| 288 | + const chunks = []; |
| 289 | + const decoder = new TextDecoder(); |
| 290 | + await stream.pipeTo( |
| 291 | + new WritableStream({ |
| 292 | + write(chunk) { |
| 293 | + chunks.push(decoder.decode(chunk, { stream: true })); |
| 294 | + }, |
| 295 | + }) |
| 296 | + ); |
| 297 | + assert.strictEqual(chunks.join(''), 'ABC'); |
| 298 | +})().then(common.mustCall()); |
| 299 | + |
| 300 | +(async () => { |
| 301 | + // Ref: https://github.com/nodejs/node/issues/48668 |
| 302 | + const chunks = []; |
| 303 | + const stream = new Blob(['Hello world']).stream(); |
| 304 | + const decoder = new TextDecoder(); |
| 305 | + await Promise.resolve(); |
| 306 | + await stream.pipeTo( |
| 307 | + new WritableStream({ |
| 308 | + write(chunk) { |
| 309 | + chunks.push(decoder.decode(chunk, { stream: true })); |
| 310 | + }, |
| 311 | + }) |
| 312 | + ); |
| 313 | + assert.strictEqual(chunks.join(''), 'Hello world'); |
| 314 | +})().then(common.mustCall()); |
| 315 | + |
| 316 | +(async () => { |
| 317 | + // Ref: https://github.com/nodejs/node/issues/48668 |
| 318 | + if (common.hasCrypto) { |
| 319 | + // Can only do this test if we have node built with crypto |
| 320 | + const file = new Blob(['<svg></svg>'], { type: 'image/svg+xml' }); |
| 321 | + const url = URL.createObjectURL(file); |
| 322 | + const res = await fetch(url); |
| 323 | + const blob = await res.blob(); |
| 324 | + assert.strictEqual(blob.size, 11); |
| 325 | + assert.strictEqual(blob.type, 'image/svg+xml'); |
| 326 | + assert.strictEqual(await blob.text(), '<svg></svg>'); |
| 327 | + } |
| 328 | +})().then(common.mustCall()); |
| 329 | + |
272 | 330 | (async () => { |
273 | 331 | const b = new Blob(Array(10).fill('hello')); |
274 | 332 | const stream = b.stream(); |
|