Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
fe2e842f
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fe2e842f
编写于
10月 31, 2019
作者:
D
Daniel Imms
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Ensure terminal/task tests don't leak listeners across tests
上级
c0e630fd
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
80 addition
and
91 deletion
+80
-91
extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts
.../vscode-api-tests/src/singlefolder-tests/terminal.test.ts
+41
-67
extensions/vscode-api-tests/src/singlefolder-tests/workspace.tasks.test.ts
...-api-tests/src/singlefolder-tests/workspace.tasks.test.ts
+39
-24
未找到文件。
extensions/vscode-api-tests/src/singlefolder-tests/terminal.test.ts
浏览文件 @
fe2e842f
...
...
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
window
,
Pseudoterminal
,
EventEmitter
,
TerminalDimensions
,
workspace
,
ConfigurationTarget
}
from
'
vscode
'
;
import
{
window
,
Pseudoterminal
,
EventEmitter
,
TerminalDimensions
,
workspace
,
ConfigurationTarget
,
Disposable
}
from
'
vscode
'
;
import
{
doesNotThrow
,
equal
,
ok
,
deepEqual
}
from
'
assert
'
;
suite
(
'
window namespace tests
'
,
()
=>
{
...
...
@@ -12,49 +12,47 @@ suite('window namespace tests', () => {
await
workspace
.
getConfiguration
(
'
terminal.integrated
'
).
update
(
'
windowsEnableConpty
'
,
false
,
ConfigurationTarget
.
Global
);
});
suite
(
'
Terminal
'
,
()
=>
{
let
disposables
:
Disposable
[]
=
[];
teardown
(()
=>
{
disposables
.
forEach
(
d
=>
d
.
dispose
());
disposables
.
length
=
0
;
});
test
(
'
sendText immediately after createTerminal should not throw
'
,
(
done
)
=>
{
const
reg1
=
window
.
onDidOpenTerminal
(
term
=>
{
disposables
.
push
(
window
.
onDidOpenTerminal
(
term
=>
{
try
{
equal
(
terminal
,
term
);
}
catch
(
e
)
{
done
(
e
);
}
terminal
.
dispose
();
reg1
.
dispose
();
const
reg2
=
window
.
onDidCloseTerminal
(()
=>
{
reg2
.
dispose
();
done
();
});
});
disposables
.
push
(
window
.
onDidCloseTerminal
(()
=>
done
()));
}));
const
terminal
=
window
.
createTerminal
();
doesNotThrow
(
terminal
.
sendText
.
bind
(
terminal
,
'
echo "foo"
'
));
});
test
(
'
onDidCloseTerminal event fires when terminal is disposed
'
,
(
done
)
=>
{
const
reg1
=
window
.
onDidOpenTerminal
(
term
=>
{
disposables
.
push
(
window
.
onDidOpenTerminal
(
term
=>
{
try
{
equal
(
terminal
,
term
);
}
catch
(
e
)
{
done
(
e
);
}
terminal
.
dispose
();
reg1
.
dispose
();
const
reg2
=
window
.
onDidCloseTerminal
(()
=>
{
reg2
.
dispose
();
done
();
});
});
disposables
.
push
(
window
.
onDidCloseTerminal
(()
=>
done
()));
}));
const
terminal
=
window
.
createTerminal
();
});
test
(
'
processId immediately after createTerminal should fetch the pid
'
,
(
done
)
=>
{
const
reg1
=
window
.
onDidOpenTerminal
(
term
=>
{
disposables
.
push
(
window
.
onDidOpenTerminal
(
term
=>
{
try
{
equal
(
terminal
,
term
);
}
catch
(
e
)
{
done
(
e
);
}
reg1
.
dispose
();
terminal
.
processId
.
then
(
id
=>
{
try
{
ok
(
id
>
0
);
...
...
@@ -62,29 +60,22 @@ suite('window namespace tests', () => {
done
(
e
);
}
terminal
.
dispose
();
const
reg2
=
window
.
onDidCloseTerminal
(()
=>
{
reg2
.
dispose
();
done
();
});
disposables
.
push
(
window
.
onDidCloseTerminal
(()
=>
done
()));
});
});
})
)
;
const
terminal
=
window
.
createTerminal
();
});
test
(
'
name in constructor should set terminal.name
'
,
(
done
)
=>
{
const
reg1
=
window
.
onDidOpenTerminal
(
term
=>
{
disposables
.
push
(
window
.
onDidOpenTerminal
(
term
=>
{
try
{
equal
(
terminal
,
term
);
}
catch
(
e
)
{
done
(
e
);
}
terminal
.
dispose
();
reg1
.
dispose
();
const
reg2
=
window
.
onDidCloseTerminal
(()
=>
{
reg2
.
dispose
();
done
();
});
});
disposables
.
push
(
window
.
onDidCloseTerminal
(()
=>
done
()));
}));
const
terminal
=
window
.
createTerminal
(
'
a
'
);
try
{
equal
(
terminal
.
name
,
'
a
'
);
...
...
@@ -94,19 +85,15 @@ suite('window namespace tests', () => {
});
test
(
'
onDidOpenTerminal should fire when a terminal is created
'
,
(
done
)
=>
{
const
reg1
=
window
.
onDidOpenTerminal
(
term
=>
{
disposables
.
push
(
window
.
onDidOpenTerminal
(
term
=>
{
try
{
equal
(
term
.
name
,
'
b
'
);
}
catch
(
e
)
{
done
(
e
);
}
reg1
.
dispose
();
const
reg2
=
window
.
onDidCloseTerminal
(()
=>
{
reg2
.
dispose
();
done
();
});
disposables
.
push
(
window
.
onDidCloseTerminal
(()
=>
done
()));
terminal
.
dispose
();
});
})
)
;
const
terminal
=
window
.
createTerminal
(
'
b
'
);
});
// test('onDidChangeActiveTerminal should fire when new terminals are created', (done) => {
...
...
@@ -182,7 +169,7 @@ suite('window namespace tests', () => {
suite
(
'
hideFromUser
'
,
()
=>
{
test
(
'
should be available to terminals API
'
,
done
=>
{
const
terminal
=
window
.
createTerminal
({
name
:
'
bg
'
,
hideFromUser
:
true
});
window
.
onDidOpenTerminal
(
t
=>
{
disposables
.
push
(
window
.
onDidOpenTerminal
(
t
=>
{
try
{
equal
(
t
,
terminal
);
equal
(
t
.
name
,
'
bg
'
);
...
...
@@ -190,12 +177,12 @@ suite('window namespace tests', () => {
}
catch
(
e
)
{
done
(
e
);
}
const
reg3
=
window
.
onDidCloseTerminal
(()
=>
{
reg3
.
dispose
();
disposables
.
push
(
window
.
onDidCloseTerminal
(()
=>
{
//
reg3.dispose();
done
();
});
})
)
;
terminal
.
dispose
();
});
})
)
;
});
});
...
...
@@ -204,17 +191,17 @@ suite('window namespace tests', () => {
const
openEvents
:
string
[]
=
[];
const
dataEvents
:
{
name
:
string
,
data
:
string
}[]
=
[];
const
closeEvents
:
string
[]
=
[];
const
reg1
=
window
.
onDidOpenTerminal
(
e
=>
openEvents
.
push
(
e
.
name
));
disposables
.
push
(
window
.
onDidOpenTerminal
(
e
=>
openEvents
.
push
(
e
.
name
)
));
let
resolveOnceDataWritten
:
(()
=>
void
)
|
undefined
;
const
reg2
=
window
.
onDidWriteTerminalData
(
e
=>
{
disposables
.
push
(
window
.
onDidWriteTerminalData
(
e
=>
{
dataEvents
.
push
({
name
:
e
.
terminal
.
name
,
data
:
e
.
data
});
resolveOnceDataWritten
!
();
});
})
)
;
const
reg3
=
window
.
onDidCloseTerminal
(
e
=>
{
disposables
.
push
(
window
.
onDidCloseTerminal
(
e
=>
{
closeEvents
.
push
(
e
.
name
);
try
{
...
...
@@ -226,16 +213,12 @@ suite('window namespace tests', () => {
deepEqual
(
openEvents
,
[
'
test1
'
,
'
test2
'
]);
deepEqual
(
dataEvents
,
[{
name
:
'
test1
'
,
data
:
'
write1
'
},
{
name
:
'
test2
'
,
data
:
'
write2
'
}]);
deepEqual
(
closeEvents
,
[
'
test1
'
,
'
test2
'
]);
reg1
.
dispose
();
reg2
.
dispose
();
reg3
.
dispose
();
done
();
}
}
catch
(
e
)
{
done
(
e
);
}
});
})
)
;
const
term1Write
=
new
EventEmitter
<
string
>
();
const
term1Close
=
new
EventEmitter
<
void
>
();
...
...
@@ -272,19 +255,15 @@ suite('window namespace tests', () => {
suite
(
'
Extension pty terminals
'
,
()
=>
{
test
(
'
should fire onDidOpenTerminal and onDidCloseTerminal
'
,
(
done
)
=>
{
const
reg1
=
window
.
onDidOpenTerminal
(
term
=>
{
disposables
.
push
(
window
.
onDidOpenTerminal
(
term
=>
{
try
{
equal
(
term
.
name
,
'
c
'
);
}
catch
(
e
)
{
done
(
e
);
}
reg1
.
dispose
();
const
reg2
=
window
.
onDidCloseTerminal
(()
=>
{
reg2
.
dispose
();
done
();
});
disposables
.
push
(
window
.
onDidCloseTerminal
(()
=>
done
()));
term
.
dispose
();
});
})
)
;
const
pty
:
Pseudoterminal
=
{
onDidWrite
:
new
EventEmitter
<
string
>
().
event
,
open
:
()
=>
{
},
...
...
@@ -341,15 +320,14 @@ suite('window namespace tests', () => {
// });
test
(
'
should respect dimension overrides
'
,
(
done
)
=>
{
const
reg1
=
window
.
onDidOpenTerminal
(
term
=>
{
disposables
.
push
(
window
.
onDidOpenTerminal
(
term
=>
{
try
{
equal
(
terminal
,
term
);
}
catch
(
e
)
{
done
(
e
);
}
reg1
.
dispose
();
term
.
show
();
const
reg2
=
window
.
onDidChangeTerminalDimensions
(
e
=>
{
disposables
.
push
(
window
.
onDidChangeTerminalDimensions
(
e
=>
{
try
{
equal
(
e
.
dimensions
.
columns
,
10
);
equal
(
e
.
dimensions
.
rows
,
5
);
...
...
@@ -357,14 +335,10 @@ suite('window namespace tests', () => {
}
catch
(
e
)
{
done
(
e
);
}
reg2
.
dispose
();
const
reg3
=
window
.
onDidCloseTerminal
(()
=>
{
reg3
.
dispose
();
done
();
});
disposables
.
push
(
window
.
onDidCloseTerminal
(()
=>
done
()));
terminal
.
dispose
();
});
});
})
)
;
})
)
;
const
writeEmitter
=
new
EventEmitter
<
string
>
();
const
overrideDimensionsEmitter
=
new
EventEmitter
<
TerminalDimensions
>
();
const
pty
:
Pseudoterminal
=
{
...
...
extensions/vscode-api-tests/src/singlefolder-tests/workspace.tasks.test.ts
浏览文件 @
fe2e842f
...
...
@@ -4,14 +4,20 @@
*--------------------------------------------------------------------------------------------*/
import
*
as
assert
from
'
assert
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
window
,
tasks
,
Disposable
,
TaskDefinition
,
Task
,
EventEmitter
,
CustomExecution
,
Pseudoterminal
,
TaskScope
,
commands
,
Task2
}
from
'
vscode
'
;
suite
(
'
workspace-namespace
'
,
()
=>
{
suite
(
'
Tasks
'
,
()
=>
{
let
disposables
:
Disposable
[]
=
[];
teardown
(()
=>
{
disposables
.
forEach
(
d
=>
d
.
dispose
());
disposables
.
length
=
0
;
});
test
(
'
CustomExecution task should start and shutdown successfully
'
,
(
done
)
=>
{
interface
CustomTestingTaskDefinition
extends
vscode
.
TaskDefinition
{
interface
CustomTestingTaskDefinition
extends
TaskDefinition
{
/**
* One of the task properties. This can be used to customize the task in the tasks.json
*/
...
...
@@ -19,49 +25,58 @@ suite('workspace-namespace', () => {
}
const
taskType
:
string
=
'
customTesting
'
;
const
taskName
=
'
First custom task
'
;
const
reg1
=
vscode
.
window
.
onDidOpenTerminal
(
term
=>
{
reg1
.
dispose
();
const
reg2
=
vscode
.
window
.
onDidWriteTerminalData
(
e
=>
{
reg2
.
dispose
();
let
isPseudoterminalClosed
=
false
;
disposables
.
push
(
window
.
onDidOpenTerminal
(
term
=>
{
disposables
.
push
(
window
.
onDidWriteTerminalData
(
e
=>
{
try
{
assert
.
equal
(
e
.
data
,
'
testing
\r\n
'
);
}
catch
(
e
)
{
done
(
e
);
}
disposables
.
push
(
window
.
onDidCloseTerminal
(()
=>
{
try
{
// Pseudoterminal.close should have fired by now, additionally we want
// to make sure all events are flushed before continuing with more tests
assert
.
ok
(
isPseudoterminalClosed
);
}
catch
(
e
)
{
done
(
e
);
return
;
}
done
();
}));
term
.
dispose
();
});
});
const
taskProvider
=
vscode
.
tasks
.
registerTaskProvider
(
taskType
,
{
})
)
;
})
)
;
disposables
.
push
(
tasks
.
registerTaskProvider
(
taskType
,
{
provideTasks
:
()
=>
{
const
result
:
vscode
.
Task
[]
=
[];
const
result
:
Task
[]
=
[];
const
kind
:
CustomTestingTaskDefinition
=
{
type
:
taskType
,
customProp1
:
'
testing task one
'
};
const
writeEmitter
=
new
vscode
.
EventEmitter
<
string
>
();
const
execution
=
new
vscode
.
CustomExecution
(():
Thenable
<
vscode
.
Pseudoterminal
>
=>
{
const
pty
:
vscode
.
Pseudoterminal
=
{
const
writeEmitter
=
new
EventEmitter
<
string
>
();
const
execution
=
new
CustomExecution
(():
Thenable
<
Pseudoterminal
>
=>
{
const
pty
:
Pseudoterminal
=
{
onDidWrite
:
writeEmitter
.
event
,
open
:
()
=>
{
writeEmitter
.
fire
(
'
testing
\r\n
'
);
},
close
:
()
=>
{
taskProvider
.
dispose
();
done
();
}
open
:
()
=>
writeEmitter
.
fire
(
'
testing
\r\n
'
),
close
:
()
=>
isPseudoterminalClosed
=
true
};
return
Promise
.
resolve
(
pty
);
});
const
task
=
new
vscode
.
Task2
(
kind
,
vscode
.
TaskScope
.
Workspace
,
taskName
,
taskType
,
execution
);
const
task
=
new
Task2
(
kind
,
TaskScope
.
Workspace
,
taskName
,
taskType
,
execution
);
result
.
push
(
task
);
return
result
;
},
resolveTask
(
_task
:
vscode
.
Task
):
vscode
.
Task
|
undefined
{
resolveTask
(
_task
:
Task
):
Task
|
undefined
{
try
{
assert
.
fail
(
'
resolveTask should not trigger during the test
'
);
}
catch
(
e
)
{
done
(
e
);
}
return
undefined
;
}
});
vscode
.
commands
.
executeCommand
(
'
workbench.action.tasks.runTask
'
,
`
${
taskType
}
:
${
taskName
}
`
);
})
)
;
commands
.
executeCommand
(
'
workbench.action.tasks.runTask
'
,
`
${
taskType
}
:
${
taskName
}
`
);
});
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录