44 *--------------------------------------------------------------------------------------------*/
55
66import * as assert from 'assert' ;
7- import { window , tasks , Disposable , TaskDefinition , Task , EventEmitter , CustomExecution , Pseudoterminal , TaskScope , commands , Task2 , env , UIKind , ShellExecution , TaskExecution } from 'vscode' ;
7+ import { window , tasks , Disposable , TaskDefinition , Task , EventEmitter , CustomExecution , Pseudoterminal , TaskScope , commands , Task2 , env , UIKind , ShellExecution , TaskExecution , Terminal } from 'vscode' ;
88
99// Disable tasks tests:
1010// - Web https://github.com/microsoft/vscode/issues/90528
@@ -28,26 +28,55 @@ import { window, tasks, Disposable, TaskDefinition, Task, EventEmitter, CustomEx
2828 const taskType : string = 'customTesting' ;
2929 const taskName = 'First custom task' ;
3030 let isPseudoterminalClosed = false ;
31+ let terminal : Terminal | undefined ;
32+ // There's a strict order that should be observed here:
33+ // 1. The terminal opens
34+ // 2. The terminal is written to.
35+ // 3. The terminal is closed.
36+ enum TestOrder {
37+ Start ,
38+ TerminalOpened ,
39+ TerminalWritten ,
40+ TerminalClosed
41+ }
42+
43+ let testOrder = TestOrder . Start ;
44+
3145 disposables . push ( window . onDidOpenTerminal ( term => {
32- disposables . push ( window . onDidWriteTerminalData ( e => {
33- try {
34- assert . equal ( e . data , 'testing\r\n' ) ;
35- } catch ( e ) {
36- done ( e ) ;
37- }
38- disposables . push ( window . onDidCloseTerminal ( ( ) => {
39- try {
40- // Pseudoterminal.close should have fired by now, additionally we want
41- // to make sure all events are flushed before continuing with more tests
42- assert . ok ( isPseudoterminalClosed ) ;
43- } catch ( e ) {
44- done ( e ) ;
45- return ;
46- }
47- done ( ) ;
48- } ) ) ;
49- term . dispose ( ) ;
50- } ) ) ;
46+ try {
47+ assert . equal ( testOrder , TestOrder . Start ) ;
48+ } catch ( e ) {
49+ done ( e ) ;
50+ }
51+ testOrder = TestOrder . TerminalOpened ;
52+ terminal = term ;
53+ } ) ) ;
54+ disposables . push ( window . onDidWriteTerminalData ( e => {
55+ try {
56+ assert . equal ( testOrder , TestOrder . TerminalOpened ) ;
57+ testOrder = TestOrder . TerminalWritten ;
58+ assert . notEqual ( terminal , undefined ) ;
59+ assert . equal ( e . data , 'testing\r\n' ) ;
60+ } catch ( e ) {
61+ done ( e ) ;
62+ }
63+
64+ if ( terminal ) {
65+ terminal . dispose ( ) ;
66+ }
67+ } ) ) ;
68+ disposables . push ( window . onDidCloseTerminal ( ( ) => {
69+ try {
70+ assert . equal ( testOrder , TestOrder . TerminalWritten ) ;
71+ testOrder = TestOrder . TerminalClosed ;
72+ // Pseudoterminal.close should have fired by now, additionally we want
73+ // to make sure all events are flushed before continuing with more tests
74+ assert . ok ( isPseudoterminalClosed ) ;
75+ } catch ( e ) {
76+ done ( e ) ;
77+ return ;
78+ }
79+ done ( ) ;
5180 } ) ) ;
5281 disposables . push ( tasks . registerTaskProvider ( taskType , {
5382 provideTasks : ( ) => {
0 commit comments