Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wa-lang
wa
提交
4ca0062f
wa
项目概览
wa-lang
/
wa
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
4ca0062f
编写于
8月 06, 2023
作者:
chai2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
wa test 支持异常测试
上级
c2ceecec
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
78 addition
and
22 deletion
+78
-22
internal/app/apptest/apptest.go
internal/app/apptest/apptest.go
+34
-0
internal/loader/api.go
internal/loader/api.go
+4
-3
internal/loader/loader.go
internal/loader/loader.go
+32
-18
waroot/src/apple/apple_test.wa
waroot/src/apple/apple_test.wa
+8
-1
未找到文件。
internal/app/apptest/apptest.go
浏览文件 @
4ca0062f
...
...
@@ -102,6 +102,23 @@ func runTest(cfg *config.Config, pkgpath string, appArgs ...string) {
tFuncName
:=
mainPkg
.
Pkg
.
Path
()
+
"."
+
t
.
Name
tFuncName
=
strings
.
ReplaceAll
(
tFuncName
,
"/"
,
"$"
)
_
,
stdout
,
stderr
,
err
:=
m
.
RunFunc
(
tFuncName
)
if
t
.
OutputPanic
{
if
exitCode
,
_
:=
wazero
.
AsExitError
(
err
);
exitCode
==
0
{
fmt
.
Printf
(
"---- %s.%s
\n
"
,
prog
.
Manifest
.
MainPkg
,
t
.
Name
)
fmt
.
Printf
(
" expect panic, got = nil
\n
"
)
}
stdout
=
bytes
.
TrimSpace
(
stdout
)
expect
,
got
:=
t
.
Output
,
string
(
stdout
)
// panic: ${expect} (pos)
if
!
strings
.
HasPrefix
(
got
,
"panic: "
+
expect
)
{
fmt
.
Printf
(
"---- %s.%s
\n
"
,
prog
.
Manifest
.
MainPkg
,
t
.
Name
)
fmt
.
Printf
(
" expect(panic) = %q, got = %q
\n
"
,
expect
,
got
)
}
continue
}
if
err
!=
nil
{
if
len
(
stdout
)
>
0
{
if
s
:=
sWithPrefix
(
string
(
stdout
),
" "
);
s
!=
""
{
...
...
@@ -158,6 +175,23 @@ func runTest(cfg *config.Config, pkgpath string, appArgs ...string) {
tFuncName
:=
mainPkg
.
Pkg
.
Path
()
+
"."
+
t
.
Name
tFuncName
=
strings
.
ReplaceAll
(
tFuncName
,
"/"
,
"$"
)
_
,
stdout
,
stderr
,
err
:=
m
.
RunFunc
(
tFuncName
)
if
t
.
OutputPanic
{
if
exitCode
,
_
:=
wazero
.
AsExitError
(
err
);
exitCode
==
0
{
fmt
.
Printf
(
"---- %s.%s
\n
"
,
prog
.
Manifest
.
MainPkg
,
t
.
Name
)
fmt
.
Printf
(
" expect panic, got = nil
\n
"
)
}
stdout
=
bytes
.
TrimSpace
(
stdout
)
expect
,
got
:=
t
.
Output
,
string
(
stdout
)
// panic: ${expect} (pos)
if
!
strings
.
HasPrefix
(
got
,
"panic: "
+
expect
)
{
fmt
.
Printf
(
"---- %s.%s
\n
"
,
prog
.
Manifest
.
MainPkg
,
t
.
Name
)
fmt
.
Printf
(
" expect(panic) = %q, got = %q
\n
"
,
expect
,
got
)
}
continue
}
if
err
!=
nil
{
if
len
(
stdout
)
>
0
{
if
s
:=
sWithPrefix
(
string
(
stdout
),
" "
);
s
!=
""
{
...
...
internal/loader/api.go
浏览文件 @
4ca0062f
...
...
@@ -44,9 +44,10 @@ type TestInfo struct {
// 测试函数信息
type
TestFuncInfo
struct
{
FuncPos
token
.
Pos
// 函数位置
Name
string
// 函数名, 不含包路径
Output
string
// 期望输出, 为空表示不验证
FuncPos
token
.
Pos
// 函数位置
Name
string
// 函数名, 不含包路径
Output
string
// 期望输出, 为空表示不验证
OutputPanic
bool
// 异常信息
}
// 汇编代码文件
...
...
internal/loader/loader.go
浏览文件 @
4ca0062f
...
...
@@ -300,10 +300,12 @@ func (p *_Loader) parseTestInfo(pkg *Package, filenames []string) (*TestInfo, er
switch
{
case
strings
.
HasPrefix
(
name
,
"Test"
)
:
output
,
isPanic
:=
p
.
parseExampleOutputComment
(
file
,
fn
)
tInfo
.
Tests
=
append
(
tInfo
.
Tests
,
TestFuncInfo
{
FuncPos
:
obj
.
Pos
(),
Name
:
name
,
Output
:
p
.
parseExampleOutputComment
(
file
,
fn
),
FuncPos
:
obj
.
Pos
(),
Name
:
name
,
Output
:
output
,
OutputPanic
:
isPanic
,
})
case
strings
.
HasPrefix
(
name
,
"Bench"
)
:
tInfo
.
Benchs
=
append
(
tInfo
.
Benchs
,
TestFuncInfo
{
...
...
@@ -311,10 +313,12 @@ func (p *_Loader) parseTestInfo(pkg *Package, filenames []string) (*TestInfo, er
Name
:
name
,
})
case
strings
.
HasPrefix
(
name
,
"Example"
)
:
output
,
isPanic
:=
p
.
parseExampleOutputComment
(
file
,
fn
)
tInfo
.
Examples
=
append
(
tInfo
.
Examples
,
TestFuncInfo
{
FuncPos
:
obj
.
Pos
(),
Name
:
name
,
Output
:
p
.
parseExampleOutputComment
(
file
,
fn
),
FuncPos
:
obj
.
Pos
(),
Name
:
name
,
Output
:
output
,
OutputPanic
:
isPanic
,
})
}
}
...
...
@@ -324,7 +328,7 @@ func (p *_Loader) parseTestInfo(pkg *Package, filenames []string) (*TestInfo, er
return
tInfo
,
nil
}
func
(
p
*
_Loader
)
parseExampleOutputComment
(
f
*
ast
.
File
,
fn
*
ast
.
FuncDecl
)
string
{
func
(
p
*
_Loader
)
parseExampleOutputComment
(
f
*
ast
.
File
,
fn
*
ast
.
FuncDecl
)
(
output
string
,
isPanic
bool
)
{
for
_
,
commentGroup
:=
range
f
.
Comments
{
if
commentGroup
.
Pos
()
<=
fn
.
Body
.
Pos
()
{
continue
...
...
@@ -334,23 +338,33 @@ func (p *_Loader) parseExampleOutputComment(f *ast.File, fn *ast.FuncDecl) strin
}
for
j
,
comment
:=
range
commentGroup
.
List
{
if
comment
.
Text
!=
"// Output:"
{
continue
}
switch
comment
.
Text
{
case
"// Output:"
:
var
lineTexts
[]
string
for
_
,
x
:=
range
commentGroup
.
List
[
j
+
1
:
]
{
if
!
strings
.
HasPrefix
(
x
.
Text
,
"//"
)
{
break
}
lineTexts
=
append
(
lineTexts
,
strings
.
TrimSpace
(
x
.
Text
[
2
:
]))
}
var
lineTexts
[]
string
for
_
,
x
:=
range
commentGroup
.
List
[
j
+
1
:
]
{
if
!
strings
.
HasPrefix
(
x
.
Text
,
"//"
)
{
break
return
strings
.
Join
(
lineTexts
,
"
\n
"
),
false
case
"// Output(panic):"
:
var
lineTexts
[]
string
for
_
,
x
:=
range
commentGroup
.
List
[
j
+
1
:
]
{
if
!
strings
.
HasPrefix
(
x
.
Text
,
"//"
)
{
break
}
lineTexts
=
append
(
lineTexts
,
strings
.
TrimSpace
(
x
.
Text
[
2
:
]))
}
lineTexts
=
append
(
lineTexts
,
strings
.
TrimSpace
(
x
.
Text
[
2
:
]))
}
return
strings
.
Join
(
lineTexts
,
"
\n
"
)
return
strings
.
Join
(
lineTexts
,
"
\n
"
),
true
}
}
}
return
""
return
""
,
false
}
func
(
p
*
_Loader
)
ParseDir_wsFiles
(
pkgpath
string
)
(
files
[]
*
WsFile
,
err
error
)
{
...
...
waroot/src/apple/apple_test.wa
浏览文件 @
4ca0062f
...
...
@@ -23,4 +23,11 @@ func ExampleApple {
// Output:
// apple-mvp
}
\ No newline at end of file
}
func ExamplePanic {
panic("fuck panic")
// Output(panic):
// fuck panic
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录