Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wa-lang
wa
提交
106cf4c8
wa
项目概览
wa-lang
/
wa
10 个月 前同步成功
通知
68
Star
655
Fork
45
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
wa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
106cf4c8
编写于
6月 22, 2023
作者:
chai2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完善测试功能
上级
5319e5a5
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
38 addition
and
18 deletion
+38
-18
internal/app/app_runtest.go
internal/app/app_runtest.go
+26
-12
internal/app/wacli/wacli.go
internal/app/wacli/wacli.go
+1
-5
internal/wazero/module.go
internal/wazero/module.go
+2
-1
internal/wazero/util.go
internal/wazero/util.go
+9
-0
未找到文件。
internal/app/app_runtest.go
浏览文件 @
106cf4c8
...
...
@@ -9,19 +9,19 @@ import (
"strings"
"time"
"github.com/tetratelabs/wazero/sys"
"wa-lang.org/wa/internal/backends/compiler_wat"
"wa-lang.org/wa/internal/loader"
"wa-lang.org/wa/internal/wabt"
"wa-lang.org/wa/internal/wazero"
)
func
(
p
*
App
)
RunTest
(
pkgpath
string
,
appArgs
...
string
)
error
{
func
(
p
*
App
)
RunTest
(
pkgpath
string
,
appArgs
...
string
)
{
cfg
:=
p
.
opt
.
Config
()
cfg
.
UnitTest
=
true
prog
,
err
:=
loader
.
LoadProgram
(
cfg
,
pkgpath
)
if
err
!=
nil
{
return
err
fmt
.
Println
(
err
)
os
.
Exit
(
1
)
}
startTime
:=
time
.
Now
()
...
...
@@ -31,13 +31,14 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
if
len
(
mainPkg
.
TestInfo
.
Files
)
==
0
{
fmt
.
Printf
(
"? %s [no test files]
\n
"
,
prog
.
Manifest
.
MainPkg
)
return
nil
return
}
// 生成 wat 文件(main 函数为空)
watOutput
,
err
:=
compiler_wat
.
New
()
.
Compile
(
prog
,
""
)
if
err
!=
nil
{
return
err
fmt
.
Println
(
err
)
os
.
Exit
(
1
)
}
// wat 落盘(仅用于调试)
...
...
@@ -46,12 +47,14 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
// 编译为 wasm
wasmBytes
,
err
:=
wabt
.
Wat2Wasm
([]
byte
(
watOutput
))
if
err
!=
nil
{
return
err
fmt
.
Println
(
err
)
os
.
Exit
(
1
)
}
m
,
err
:=
wazero
.
BuildModule
(
cfg
,
wasmName
,
wasmBytes
,
wasmArgs
...
)
if
err
!=
nil
{
return
err
fmt
.
Println
(
err
)
os
.
Exit
(
1
)
}
defer
m
.
Close
()
...
...
@@ -60,12 +63,17 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
for
_
,
t
:=
range
mainPkg
.
TestInfo
.
Tests
{
_
,
stdout
,
stderr
,
err
:=
m
.
RunFunc
(
mainPkg
.
Pkg
.
Path
()
+
"."
+
t
.
Name
)
if
err
!=
nil
{
if
len
(
stdout
)
>
0
{
if
s
:=
sWithPrefix
(
string
(
stdout
),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
}
if
len
(
stderr
)
>
0
{
if
s
:=
sWithPrefix
(
string
(
stderr
),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
}
return
err
os
.
Exit
(
1
)
}
stdout
=
bytes
.
TrimSpace
(
stdout
)
...
...
@@ -77,7 +85,7 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
if
firstError
==
nil
{
firstError
=
err
}
if
_
,
ok
:=
err
.
(
*
sys
.
ExitErro
r
);
ok
{
if
_
,
ok
:=
wazero
.
AsExitError
(
er
r
);
ok
{
fmt
.
Printf
(
"---- %s.%s
\n
"
,
prog
.
Manifest
.
MainPkg
,
t
.
Name
)
if
s
:=
sWithPrefix
(
string
(
stdout
),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
...
...
@@ -103,12 +111,18 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
for
_
,
t
:=
range
mainPkg
.
TestInfo
.
Examples
{
_
,
stdout
,
stderr
,
err
:=
m
.
RunFunc
(
mainPkg
.
Pkg
.
Path
()
+
"."
+
t
.
Name
)
if
err
!=
nil
{
if
len
(
stdout
)
>
0
{
if
s
:=
sWithPrefix
(
string
(
stdout
),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
}
if
len
(
stderr
)
>
0
{
if
s
:=
sWithPrefix
(
string
(
stderr
),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
}
return
err
os
.
Exit
(
1
)
}
stdout
=
bytes
.
TrimSpace
(
stdout
)
...
...
@@ -120,7 +134,7 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
if
firstError
==
nil
{
firstError
=
err
}
if
_
,
ok
:=
err
.
(
*
sys
.
ExitErro
r
);
ok
{
if
_
,
ok
:=
wazero
.
AsExitError
(
er
r
);
ok
{
fmt
.
Printf
(
"---- %s.%s
\n
"
,
prog
.
Manifest
.
MainPkg
,
t
.
Name
)
if
s
:=
sWithPrefix
(
string
(
stdout
),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
...
...
@@ -150,7 +164,7 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
fmt
.
Printf
(
"ok %s %v
\n
"
,
prog
.
Manifest
.
MainPkg
,
time
.
Now
()
.
Sub
(
startTime
)
.
Round
(
time
.
Millisecond
))
return
nil
return
}
func
sWithPrefix
(
s
,
prefix
string
)
string
{
...
...
internal/app/wacli/wacli.go
浏览文件 @
106cf4c8
...
...
@@ -372,11 +372,7 @@ func Main() {
}
appArgs
:=
c
.
Args
()
.
Slice
()[
1
:
]
waApp
:=
app
.
NewApp
(
build_Options
(
c
))
err
:=
waApp
.
RunTest
(
c
.
Args
()
.
First
(),
appArgs
...
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
os
.
Exit
(
1
)
}
waApp
.
RunTest
(
c
.
Args
()
.
First
(),
appArgs
...
)
return
nil
},
},
...
...
internal/wazero/module.go
浏览文件 @
106cf4c8
...
...
@@ -114,7 +114,8 @@ func (p *Module) buildModule() error {
WithSysNanosleep
()
.
WithSysNanotime
()
.
WithSysWalltime
()
.
WithArgs
(
append
([]
string
{
p
.
wasmName
},
p
.
wasmArgs
...
)
...
)
WithArgs
(
append
([]
string
{
p
.
wasmName
},
p
.
wasmArgs
...
)
...
)
.
WithName
(
p
.
wasmName
)
// TODO: Windows 可能导致异常, 临时屏蔽
if
runtime
.
GOOS
!=
"windows"
{
...
...
internal/wazero/util.go
浏览文件 @
106cf4c8
package
wazero
import
(
"github.com/tetratelabs/wazero/sys"
"wa-lang.org/wa/internal/config"
)
...
...
@@ -14,3 +15,11 @@ func RunWasm(cfg *config.Config, wasmName string, wasmBytes []byte, wasmArgs ...
return
m
.
RunMain
()
}
func
AsExitError
(
err
error
)
(
exitCode
int
,
ok
bool
)
{
errExit
,
ok
:=
err
.
(
*
sys
.
ExitError
)
if
ok
{
return
int
(
errExit
.
ExitCode
()),
true
}
return
0
,
false
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录