Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
f41b363e
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f41b363e
编写于
9月 06, 2016
作者:
B
Brian Anderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update libtest for single-threaded emscripten support
上级
b8b50f0e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
53 addition
and
16 deletion
+53
-16
src/libtest/lib.rs
src/libtest/lib.rs
+53
-16
未找到文件。
src/libtest/lib.rs
浏览文件 @
f41b363e
...
...
@@ -1182,26 +1182,63 @@ fn flush(&mut self) -> io::Result<()> {
}
}
thread
::
spawn
(
move
||
{
let
data
=
Arc
::
new
(
Mutex
::
new
(
Vec
::
new
()));
let
data2
=
data
.clone
();
let
cfg
=
thread
::
Builder
::
new
()
.name
(
match
desc
.name
{
DynTestName
(
ref
name
)
=>
name
.clone
(),
StaticTestName
(
name
)
=>
name
.to_owned
(),
// If the platform is single-threaded we're just going to run
// the test synchronously, regardless of the concurrency
// level.
let
supports_threads
=
!
cfg!
(
target_os
=
"emscripten"
);
// Buffer for capturing standard I/O
let
data
=
Arc
::
new
(
Mutex
::
new
(
Vec
::
new
()));
let
data2
=
data
.clone
();
if
supports_threads
{
thread
::
spawn
(
move
||
{
let
cfg
=
thread
::
Builder
::
new
()
.name
(
match
desc
.name
{
DynTestName
(
ref
name
)
=>
name
.clone
(),
StaticTestName
(
name
)
=>
name
.to_owned
(),
});
let
result_guard
=
cfg
.spawn
(
move
||
{
if
!
nocapture
{
io
::
set_print
(
box
Sink
(
data2
.clone
()));
io
::
set_panic
(
box
Sink
(
data2
));
}
testfn
()
})
.unwrap
();
let
test_result
=
calc_result
(
&
desc
,
result_guard
.join
());
let
stdout
=
data
.lock
()
.unwrap
()
.to_vec
();
monitor_ch
.send
((
desc
.clone
(),
test_result
,
stdout
))
.unwrap
();
});
}
else
{
let
oldio
=
if
!
nocapture
{
Some
((
io
::
set_print
(
box
Sink
(
data2
.clone
())),
io
::
set_panic
(
box
Sink
(
data2
))
))
}
else
{
None
};
use
std
::
panic
::{
catch_unwind
,
AssertUnwindSafe
};
let
result_guard
=
cfg
.spawn
(
move
||
{
if
!
nocapture
{
io
::
set_print
(
box
Sink
(
data2
.clone
()));
io
::
set_panic
(
box
Sink
(
data2
));
}
testfn
()
})
.unwrap
();
let
test_result
=
calc_result
(
&
desc
,
result_guard
.join
());
let
result
=
catch_unwind
(
AssertUnwindSafe
(||
{
testfn
()
}));
if
let
Some
((
printio
,
panicio
))
=
oldio
{
if
let
Some
(
printio
)
=
printio
{
io
::
set_print
(
printio
);
}
if
let
Some
(
panicio
)
=
panicio
{
io
::
set_panic
(
panicio
);
}
};
let
test_result
=
calc_result
(
&
desc
,
result
);
let
stdout
=
data
.lock
()
.unwrap
()
.to_vec
();
monitor_ch
.send
((
desc
.clone
(),
test_result
,
stdout
))
.unwrap
();
}
);
}
}
match
testfn
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录