@@ -311,6 +311,9 @@ suite('NotebookTextModel', () => {
311
311
) ;
312
312
} ) ;
313
313
314
+ const stdOutMime = 'application/vnd.code.notebook.stdout' ;
315
+ const stdErrMime = 'application/vnd.code.notebook.stderr' ;
316
+
314
317
test ( 'appending streaming outputs' , async function ( ) {
315
318
await withTestNotebook (
316
319
[
@@ -326,20 +329,21 @@ suite('NotebookTextModel', () => {
326
329
append : true ,
327
330
outputs : [ {
328
331
outputId : 'append1' ,
329
- outputs : [ { mime : 'application/vnd.code.notebook.stdout' , data : valueBytesFromString ( 'append 1' ) } ]
332
+ outputs : [ { mime : stdOutMime , data : valueBytesFromString ( 'append 1' ) } ]
330
333
} ]
331
334
} ] , true , undefined , ( ) => undefined , undefined , true ) ;
332
335
const [ output ] = textModel . cells [ 0 ] . outputs ;
333
- assert . strictEqual ( output . versionId , 0 , 'initial output version is 0' ) ;
336
+ assert . strictEqual ( output . versionId , 0 , 'initial output version should be 0' ) ;
334
337
335
338
textModel . applyEdits ( [
336
339
{
337
340
editType : CellEditType . OutputItems ,
338
341
append : true ,
339
342
outputId : 'append1' ,
340
- items : [ {
341
- mime : 'application/vnd.code.notebook.stdout' , data : valueBytesFromString ( 'append 2' )
342
- } ]
343
+ items : [
344
+ { mime : stdOutMime , data : valueBytesFromString ( 'append 2' ) } ,
345
+ { mime : stdOutMime , data : valueBytesFromString ( 'append 3' ) }
346
+ ]
343
347
} ] , true , undefined , ( ) => undefined , undefined , true ) ;
344
348
assert . strictEqual ( output . versionId , 1 , 'version should bump per append' ) ;
345
349
@@ -348,17 +352,128 @@ suite('NotebookTextModel', () => {
348
352
editType : CellEditType . OutputItems ,
349
353
append : true ,
350
354
outputId : 'append1' ,
351
- items : [ {
352
- mime : 'application/vnd.code.notebook.stdout' , data : valueBytesFromString ( 'append 3' )
353
- } ]
355
+ items : [
356
+ { mime : stdOutMime , data : valueBytesFromString ( 'append 4' ) } ,
357
+ { mime : stdOutMime , data : valueBytesFromString ( 'append 5' ) }
358
+ ]
354
359
} ] , true , undefined , ( ) => undefined , undefined , true ) ;
355
360
assert . strictEqual ( output . versionId , 2 , 'version should bump per append' ) ;
356
361
357
362
assert . strictEqual ( textModel . cells . length , 1 ) ;
358
363
assert . strictEqual ( textModel . cells [ 0 ] . outputs . length , 1 , 'has 1 output' ) ;
359
364
assert . strictEqual ( output . outputId , 'append1' ) ;
360
365
assert . strictEqual ( output . outputs . length , 1 , 'outputs are compressed' ) ;
361
- assert . strictEqual ( output . outputs [ 0 ] . data . toString ( ) , 'append 1append 2append 3' ) ;
366
+ assert . strictEqual ( output . outputs [ 0 ] . data . toString ( ) , 'append 1append 2append 3append 4append 5' ) ;
367
+ assert . strictEqual ( output . appendedSinceVersion ( 0 , stdOutMime ) ?. toString ( ) , 'append 2append 3append 4append 5' ) ;
368
+ assert . strictEqual ( output . appendedSinceVersion ( 1 , stdOutMime ) ?. toString ( ) , 'append 4append 5' ) ;
369
+ assert . strictEqual ( output . appendedSinceVersion ( 2 , stdOutMime ) , undefined ) ;
370
+ assert . strictEqual ( output . appendedSinceVersion ( 2 , stdErrMime ) , undefined ) ;
371
+ }
372
+ ) ;
373
+ } ) ;
374
+
375
+ test ( 'replacing streaming outputs' , async function ( ) {
376
+ await withTestNotebook (
377
+ [
378
+ [ 'var a = 1;' , 'javascript' , CellKind . Code , [ ] , { } ] ,
379
+ ] ,
380
+ ( editor ) => {
381
+ const textModel = editor . textModel ;
382
+
383
+ textModel . applyEdits ( [
384
+ {
385
+ index : 0 ,
386
+ editType : CellEditType . Output ,
387
+ append : true ,
388
+ outputs : [ {
389
+ outputId : 'append1' ,
390
+ outputs : [ { mime : stdOutMime , data : valueBytesFromString ( 'append 1' ) } ]
391
+ } ]
392
+ } ] , true , undefined , ( ) => undefined , undefined , true ) ;
393
+ const [ output ] = textModel . cells [ 0 ] . outputs ;
394
+ assert . strictEqual ( output . versionId , 0 , 'initial output version should be 0' ) ;
395
+
396
+ textModel . applyEdits ( [
397
+ {
398
+ editType : CellEditType . OutputItems ,
399
+ append : true ,
400
+ outputId : 'append1' ,
401
+ items : [ {
402
+ mime : stdOutMime , data : valueBytesFromString ( 'append 2' )
403
+ } ]
404
+ } ] , true , undefined , ( ) => undefined , undefined , true ) ;
405
+ assert . strictEqual ( output . versionId , 1 , 'version should bump per append' ) ;
406
+
407
+ textModel . applyEdits ( [
408
+ {
409
+ editType : CellEditType . OutputItems ,
410
+ append : false ,
411
+ outputId : 'append1' ,
412
+ items : [ {
413
+ mime : stdOutMime , data : valueBytesFromString ( 'replace 3' )
414
+ } ]
415
+ } ] , true , undefined , ( ) => undefined , undefined , true ) ;
416
+ assert . strictEqual ( output . versionId , 2 , 'version should bump per replace' ) ;
417
+
418
+ textModel . applyEdits ( [
419
+ {
420
+ editType : CellEditType . OutputItems ,
421
+ append : true ,
422
+ outputId : 'append1' ,
423
+ items : [ {
424
+ mime : stdOutMime , data : valueBytesFromString ( 'append 4' )
425
+ } ]
426
+ } ] , true , undefined , ( ) => undefined , undefined , true ) ;
427
+ assert . strictEqual ( output . versionId , 3 , 'version should bump per append' ) ;
428
+
429
+ assert . strictEqual ( output . outputs [ 0 ] . data . toString ( ) , 'replace 3append 4' ) ;
430
+ assert . strictEqual ( output . appendedSinceVersion ( 0 , stdOutMime ) , undefined ,
431
+ 'replacing output should clear out previous versioned output buffers' ) ;
432
+ assert . strictEqual ( output . appendedSinceVersion ( 1 , stdOutMime ) , undefined ,
433
+ 'replacing output should clear out previous versioned output buffers' ) ;
434
+ assert . strictEqual ( output . appendedSinceVersion ( 2 , stdOutMime ) ?. toString ( ) , 'append 4' ) ;
435
+ }
436
+ ) ;
437
+ } ) ;
438
+
439
+ test ( 'appending multiple different mime streaming outputs' , async function ( ) {
440
+ await withTestNotebook (
441
+ [
442
+ [ 'var a = 1;' , 'javascript' , CellKind . Code , [ ] , { } ] ,
443
+ ] ,
444
+ ( editor ) => {
445
+ const textModel = editor . textModel ;
446
+
447
+ textModel . applyEdits ( [
448
+ {
449
+ index : 0 ,
450
+ editType : CellEditType . Output ,
451
+ append : true ,
452
+ outputs : [ {
453
+ outputId : 'append1' ,
454
+ outputs : [
455
+ { mime : stdOutMime , data : valueBytesFromString ( 'stdout 1' ) } ,
456
+ { mime : stdErrMime , data : valueBytesFromString ( 'stderr 1' ) }
457
+ ]
458
+ } ]
459
+ } ] , true , undefined , ( ) => undefined , undefined , true ) ;
460
+ const [ output ] = textModel . cells [ 0 ] . outputs ;
461
+ assert . strictEqual ( output . versionId , 0 , 'initial output version should be 0' ) ;
462
+
463
+ textModel . applyEdits ( [
464
+ {
465
+ editType : CellEditType . OutputItems ,
466
+ append : true ,
467
+ outputId : 'append1' ,
468
+ items : [
469
+ { mime : stdOutMime , data : valueBytesFromString ( 'stdout 2' ) } ,
470
+ { mime : stdErrMime , data : valueBytesFromString ( 'stderr 2' ) }
471
+ ]
472
+ } ] , true , undefined , ( ) => undefined , undefined , true ) ;
473
+ assert . strictEqual ( output . versionId , 1 , 'version should bump per replace' ) ;
474
+
475
+ assert . strictEqual ( output . appendedSinceVersion ( 0 , stdErrMime ) ?. toString ( ) , 'stderr 2' ) ;
476
+ assert . strictEqual ( output . appendedSinceVersion ( 0 , stdOutMime ) ?. toString ( ) , 'stdout 2' ) ;
362
477
}
363
478
) ;
364
479
} ) ;
0 commit comments