@@ -489,14 +489,13 @@ suite('Plots Test Suite', () => {
489489 const mockWriteJson = stub ( FileSystem , 'writeJson' )
490490 const mockOpenFile = stub ( FileSystem , 'openFileInEditor' )
491491 const exportFile = Uri . file ( 'raw-data.json' )
492- const mockShowInformationMessage = stub ( window , 'showErrorMessage' )
493492
494493 mockShowSaveDialog . resolves ( exportFile )
495494
496- const fileCancelledEvent = new Promise ( resolve =>
497- mockShowSaveDialog . onFirstCall ( ) . callsFake ( ( ) => {
495+ const openFileEvent = new Promise ( resolve =>
496+ mockOpenFile . onFirstCall ( ) . callsFake ( ( ) => {
498497 resolve ( undefined )
499- return Promise . resolve ( undefined )
498+ return Promise . resolve ( undefined as unknown as TextDocument )
500499 } )
501500 )
502501
@@ -505,27 +504,84 @@ suite('Plots Test Suite', () => {
505504 type : MessageFromWebviewType . EXPORT_PLOT_DATA_AS_JSON
506505 } )
507506
508- await fileCancelledEvent
507+ await openFileEvent
509508
510- expect ( mockSendTelemetryEvent ) . not . to . be . called
511- expect ( mockWriteJson ) . not . to . be . called
509+ expect ( mockWriteJson ) . to . be . calledOnce
510+ expect ( mockWriteJson ) . to . be . calledWithExactly (
511+ exportFile . path ,
512+ customPlot . values ,
513+ true
514+ )
515+ expect ( mockOpenFile ) . to . calledWithExactly ( exportFile . path )
516+ expect ( mockSendTelemetryEvent ) . to . be . calledOnce
517+ expect ( mockSendTelemetryEvent ) . to . be . calledWithExactly (
518+ EventName . VIEWS_PLOTS_EXPORT_PLOT_DATA_AS_JSON ,
519+ undefined ,
520+ undefined
521+ )
522+ } )
512523
513- const jsonWriteErrorEvent = new Promise ( resolve =>
514- mockWriteJson . onFirstCall ( ) . callsFake ( ( ) => {
524+ it ( 'should handle an export plot data as csv message from the webview' , async ( ) => {
525+ const { plots } = await buildPlots ( {
526+ disposer : disposable ,
527+ plotsDiff : plotsDiffFixture
528+ } )
529+
530+ const webview = await plots . showWebview ( )
531+ const mockSendTelemetryEvent = stub ( Telemetry , 'sendTelemetryEvent' )
532+ const mockMessageReceived = getMessageReceivedEmitter ( webview )
533+ const mockShowSaveDialog = stub ( window , 'showSaveDialog' )
534+ const mockWriteCsv = stub ( FileSystem , 'writeCsv' )
535+ const mockOpenFile = stub ( FileSystem , 'openFileInEditor' )
536+ const exportFile = Uri . file ( 'raw-data.csv' )
537+ const templatePlot = templatePlotsFixture . plots [ 0 ] . entries [ 0 ]
538+
539+ mockShowSaveDialog . resolves ( exportFile )
540+
541+ const openFileEvent = new Promise ( resolve =>
542+ mockOpenFile . onFirstCall ( ) . callsFake ( ( ) => {
515543 resolve ( undefined )
516- throw new Error ( 'file failed to write' )
544+ return Promise . resolve ( undefined as unknown as TextDocument )
517545 } )
518546 )
519547
520548 mockMessageReceived . fire ( {
521- payload : customPlot . id ,
522- type : MessageFromWebviewType . EXPORT_PLOT_DATA_AS_JSON
549+ payload : templatePlot . id ,
550+ type : MessageFromWebviewType . EXPORT_PLOT_DATA_AS_CSV
523551 } )
524552
525- await jsonWriteErrorEvent
553+ await openFileEvent
526554
527- expect ( mockOpenFile ) . not . to . be . called
528- expect ( mockShowInformationMessage ) . to . be . called
555+ expect ( mockWriteCsv ) . to . be . calledOnce
556+ expect ( mockWriteCsv ) . to . be . calledWithExactly (
557+ exportFile . path ,
558+ ( templatePlot . content . data as { values : unknown [ ] } ) . values
559+ )
560+ expect ( mockOpenFile ) . to . calledWithExactly ( exportFile . path )
561+ expect ( mockSendTelemetryEvent ) . to . be . calledOnce
562+ expect ( mockSendTelemetryEvent ) . to . be . calledWithExactly (
563+ EventName . VIEWS_PLOTS_EXPORT_PLOT_DATA_AS_CSV ,
564+ undefined ,
565+ undefined
566+ )
567+ } )
568+
569+ it ( 'should handle an export plot data as tsv message from the webview' , async ( ) => {
570+ const { plots } = await buildPlots ( {
571+ disposer : disposable ,
572+ plotsDiff : plotsDiffFixture
573+ } )
574+
575+ const webview = await plots . showWebview ( )
576+ const mockSendTelemetryEvent = stub ( Telemetry , 'sendTelemetryEvent' )
577+ const mockMessageReceived = getMessageReceivedEmitter ( webview )
578+ const mockShowSaveDialog = stub ( window , 'showSaveDialog' )
579+ const mockWriteTsv = stub ( FileSystem , 'writeTsv' )
580+ const mockOpenFile = stub ( FileSystem , 'openFileInEditor' )
581+ const exportFile = Uri . file ( 'raw-data.tsv' )
582+ const customPlot = customPlotsFixture . plots [ 0 ]
583+
584+ mockShowSaveDialog . resolves ( exportFile )
529585
530586 const openFileEvent = new Promise ( resolve =>
531587 mockOpenFile . onFirstCall ( ) . callsFake ( ( ) => {
@@ -536,25 +592,26 @@ suite('Plots Test Suite', () => {
536592
537593 mockMessageReceived . fire ( {
538594 payload : customPlot . id ,
539- type : MessageFromWebviewType . EXPORT_PLOT_DATA_AS_JSON
595+ type : MessageFromWebviewType . EXPORT_PLOT_DATA_AS_TSV
540596 } )
541597
542598 await openFileEvent
543599
544- expect ( mockWriteJson ) . to . be . calledWithExactly (
600+ expect ( mockWriteTsv ) . to . be . calledOnce
601+ expect ( mockWriteTsv ) . to . be . calledWithExactly (
545602 exportFile . path ,
546- customPlot . values ,
547- true
603+ customPlot . values
548604 )
549605 expect ( mockOpenFile ) . to . calledWithExactly ( exportFile . path )
606+ expect ( mockSendTelemetryEvent ) . to . be . calledOnce
550607 expect ( mockSendTelemetryEvent ) . to . be . calledWithExactly (
551- EventName . VIEWS_PLOTS_EXPORT_PLOT_DATA_AS_JSON ,
608+ EventName . VIEWS_PLOTS_EXPORT_PLOT_DATA_AS_TSV ,
552609 undefined ,
553610 undefined
554611 )
555612 } )
556613
557- it ( 'should handle an export plot data as csv message from the webview' , async ( ) => {
614+ it ( 'should handle export data messages from the webview when the file is cancelled or errors are thrown during file writing ' , async ( ) => {
558615 const { plots } = await buildPlots ( {
559616 disposer : disposable ,
560617 plotsDiff : plotsDiffFixture
@@ -589,10 +646,11 @@ suite('Plots Test Suite', () => {
589646 expect ( mockWriteCsv ) . not . to . be . called
590647 expect ( mockOpenFile ) . not . to . be . called
591648
592- const openFileEvent = new Promise ( resolve =>
593- mockOpenFile . onFirstCall ( ) . callsFake ( ( ) => {
649+ const mockShowInformationMessage = stub ( window , 'showErrorMessage' )
650+ const fileWriteErrorEvent = new Promise ( resolve =>
651+ mockWriteCsv . onFirstCall ( ) . callsFake ( ( ) => {
594652 resolve ( undefined )
595- return Promise . resolve ( undefined as unknown as TextDocument )
653+ throw new Error ( 'file failed to write' )
596654 } )
597655 )
598656
@@ -601,18 +659,10 @@ suite('Plots Test Suite', () => {
601659 type : MessageFromWebviewType . EXPORT_PLOT_DATA_AS_CSV
602660 } )
603661
604- await openFileEvent
662+ await fileWriteErrorEvent
605663
606- expect ( mockWriteCsv ) . to . be . calledWithExactly (
607- exportFile . path ,
608- ( templatePlot . content . data as { values : unknown [ ] } ) . values
609- )
610- expect ( mockOpenFile ) . to . calledWithExactly ( exportFile . path )
611- expect ( mockSendTelemetryEvent ) . to . be . calledWithExactly (
612- EventName . VIEWS_PLOTS_EXPORT_PLOT_DATA_AS_CSV ,
613- undefined ,
614- undefined
615- )
664+ expect ( mockOpenFile ) . not . to . be . called
665+ expect ( mockShowInformationMessage ) . to . be . called
616666 } )
617667
618668 it ( 'should handle a custom plots reordered message from the webview' , async ( ) => {
0 commit comments