Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wa-lang
wa
提交
5319e5a5
wa
项目概览
wa-lang
/
wa
9 个月 前同步成功
通知
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 搜索 >>
提交
5319e5a5
编写于
6月 22, 2023
作者:
chai2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
test 切换到 wazero 包装函数
上级
473e0fcf
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
21 addition
and
87 deletion
+21
-87
internal/app/app_runtest.go
internal/app/app_runtest.go
+15
-80
internal/wazero/arduino.go
internal/wazero/arduino.go
+1
-1
internal/wazero/chrome.go
internal/wazero/chrome.go
+1
-1
internal/wazero/module.go
internal/wazero/module.go
+3
-4
internal/wazero/wasi.go
internal/wazero/wasi.go
+1
-1
未找到文件。
internal/app/app_runtest.go
浏览文件 @
5319e5a5
...
...
@@ -4,20 +4,16 @@ package app
import
(
"bytes"
"context"
"crypto/rand"
"fmt"
"os"
"strings"
"time"
"github.com/tetratelabs/wazero"
"github.com/tetratelabs/wazero/sys"
"wa-lang.org/wa/internal/app/waruntime"
"wa-lang.org/wa/internal/backends/compiler_wat"
"wa-lang.org/wa/internal/config"
"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
{
...
...
@@ -30,6 +26,8 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
startTime
:=
time
.
Now
()
mainPkg
:=
prog
.
Pkgs
[
prog
.
Manifest
.
MainPkg
]
wasmName
:=
"unittest://"
+
pkgpath
wasmArgs
:=
[]
string
{}
if
len
(
mainPkg
.
TestInfo
.
Files
)
==
0
{
fmt
.
Printf
(
"? %s [no test files]
\n
"
,
prog
.
Manifest
.
MainPkg
)
...
...
@@ -51,84 +49,25 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
return
err
}
// 构建 wasm 可执行实例
// https://pkg.go.dev/github.com/tetratelabs/wazero@v1.0.0-pre.4#section-readme
var
r
wazero
.
Runtime
var
ctx
=
context
.
Background
()
var
stdoutBuffer
=
new
(
bytes
.
Buffer
)
var
stderrBuffer
=
new
(
bytes
.
Buffer
)
{
r
=
wazero
.
NewRuntime
(
ctx
)
defer
r
.
Close
(
ctx
)
switch
cfg
.
WaOS
{
case
config
.
WaOS_arduino
:
if
_
,
err
=
waruntime
.
ArduinoInstantiate
(
ctx
,
r
);
err
!=
nil
{
if
s
:=
sWithPrefix
(
stderrBuffer
.
String
(),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
return
err
}
case
config
.
WaOS_chrome
:
if
_
,
err
=
waruntime
.
ChromeInstantiate
(
ctx
,
r
);
err
!=
nil
{
if
s
:=
sWithPrefix
(
stderrBuffer
.
String
(),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
return
err
}
case
config
.
WaOS_wasi
:
if
_
,
err
=
waruntime
.
WasiInstantiate
(
ctx
,
r
);
err
!=
nil
{
if
s
:=
sWithPrefix
(
stderrBuffer
.
String
(),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
return
err
}
}
}
conf
:=
wazero
.
NewModuleConfig
()
.
WithStdout
(
stdoutBuffer
)
.
WithStderr
(
stderrBuffer
)
.
WithStdin
(
os
.
Stdin
)
.
WithRandSource
(
rand
.
Reader
)
.
WithSysNanosleep
()
.
WithSysNanotime
()
.
WithSysWalltime
()
.
WithArgs
(
"a.out.wasm"
)
.
WithName
(
"unittest"
)
// 执行 init 函数
compiled
,
err
:=
r
.
CompileModule
(
ctx
,
wasmBytes
)
m
,
err
:=
wazero
.
BuildModule
(
cfg
,
wasmName
,
wasmBytes
,
wasmArgs
...
)
if
err
!=
nil
{
return
err
}
wasmIns
,
err
:=
r
.
InstantiateModule
(
ctx
,
compiled
,
conf
)
if
err
!=
nil
{
if
s
:=
sWithPrefix
(
stderrBuffer
.
String
(),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
return
err
}
defer
m
.
Close
()
// 执行测试函数
var
firstError
error
for
_
,
t
:=
range
mainPkg
.
TestInfo
.
Tests
{
stdoutBuffer
.
Reset
()
stderrBuffer
.
Reset
()
_
,
err
:=
wasmIns
.
ExportedFunction
(
mainPkg
.
Pkg
.
Path
()
+
"."
+
t
.
Name
)
.
Call
(
ctx
)
_
,
stdout
,
stderr
,
err
:=
m
.
RunFunc
(
mainPkg
.
Pkg
.
Path
()
+
"."
+
t
.
Name
)
if
err
!=
nil
{
if
s
:=
sWithPrefix
(
stderrBuffer
.
String
(),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
if
len
(
stderr
)
>
0
{
if
s
:=
sWithPrefix
(
string
(
stderr
),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
}
return
err
}
stdout
:=
stdoutBuffer
.
Bytes
()
stderr
:=
stderrBuffer
.
Bytes
()
stdout
=
bytes
.
TrimSpace
(
stdout
)
if
t
.
Output
!=
""
&&
t
.
Output
==
string
(
stdout
)
{
continue
...
...
@@ -162,20 +101,16 @@ func (p *App) RunTest(pkgpath string, appArgs ...string) error {
}
}
for
_
,
t
:=
range
mainPkg
.
TestInfo
.
Examples
{
stdoutBuffer
.
Reset
()
stderrBuffer
.
Reset
()
_
,
err
:=
wasmIns
.
ExportedFunction
(
mainPkg
.
Pkg
.
Path
()
+
"."
+
t
.
Name
)
.
Call
(
ctx
)
_
,
stdout
,
stderr
,
err
:=
m
.
RunFunc
(
mainPkg
.
Pkg
.
Path
()
+
"."
+
t
.
Name
)
if
err
!=
nil
{
if
s
:=
sWithPrefix
(
stderrBuffer
.
String
(),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
if
len
(
stderr
)
>
0
{
if
s
:=
sWithPrefix
(
string
(
stderr
),
" "
);
s
!=
""
{
fmt
.
Println
(
s
)
}
}
return
err
}
stdout
:=
stdoutBuffer
.
Bytes
()
stderr
:=
stderrBuffer
.
Bytes
()
stdout
=
bytes
.
TrimSpace
(
stdout
)
if
t
.
Output
!=
""
&&
t
.
Output
==
string
(
stdout
)
{
continue
...
...
internal/
app/waruntime
/arduino.go
→
internal/
wazero
/arduino.go
浏览文件 @
5319e5a5
// 版权 @2022 凹语言 作者。保留所有权利。
package
wa
runtime
package
wa
zero
import
(
"context"
...
...
internal/
app/waruntime
/chrome.go
→
internal/
wazero
/chrome.go
浏览文件 @
5319e5a5
// 版权 @2022 凹语言 作者。保留所有权利。
package
wa
runtime
package
wa
zero
import
(
"context"
...
...
internal/wazero/module.go
浏览文件 @
5319e5a5
...
...
@@ -14,7 +14,6 @@ import (
"github.com/tetratelabs/wazero"
"github.com/tetratelabs/wazero/api"
"wa-lang.org/wa/internal/app/waruntime"
"wa-lang.org/wa/internal/config"
)
...
...
@@ -142,17 +141,17 @@ func (p *Module) buildModule() error {
switch
p
.
cfg
.
WaOS
{
case
config
.
WaOS_arduino
:
if
_
,
err
=
waruntime
.
ArduinoInstantiate
(
p
.
wazeroCtx
,
p
.
wazeroRuntime
);
err
!=
nil
{
if
_
,
err
=
ArduinoInstantiate
(
p
.
wazeroCtx
,
p
.
wazeroRuntime
);
err
!=
nil
{
p
.
wazeroInitErr
=
err
return
err
}
case
config
.
WaOS_chrome
:
if
_
,
err
=
waruntime
.
ChromeInstantiate
(
p
.
wazeroCtx
,
p
.
wazeroRuntime
);
err
!=
nil
{
if
_
,
err
=
ChromeInstantiate
(
p
.
wazeroCtx
,
p
.
wazeroRuntime
);
err
!=
nil
{
p
.
wazeroInitErr
=
err
return
err
}
case
config
.
WaOS_wasi
:
if
_
,
err
=
waruntime
.
WasiInstantiate
(
p
.
wazeroCtx
,
p
.
wazeroRuntime
);
err
!=
nil
{
if
_
,
err
=
WasiInstantiate
(
p
.
wazeroCtx
,
p
.
wazeroRuntime
);
err
!=
nil
{
p
.
wazeroInitErr
=
err
return
err
}
...
...
internal/
app/waruntime
/wasi.go
→
internal/
wazero
/wasi.go
浏览文件 @
5319e5a5
// 版权 @2022 凹语言 作者。保留所有权利。
package
wa
runtime
package
wa
zero
import
(
"context"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录