21 Star 49 Fork 0

Gitee 极速下载/julia-language

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/JuliaLang/julia
克隆/下载
client.jl 2.74 KB
一键复制 编辑 原始数据 按行查看 历史
# This file is a part of Julia. License is MIT: https://julialang.org/license
import Base.StackTraces: StackFrame
nested_error_expr = quote
try
__not_a_binding__
catch
1 ÷ 0 # Generate error while handling error
end
end
nested_error_pattern = r"""
ERROR: DivideError: integer division error
Stacktrace:.*
caused by: UndefVarError: `__not_a_binding__` not defined in `Main`
Stacktrace:.*
"""s
@testset "display_error" begin
# Display of errors which cause more than one entry on the exception stack
excs = try
Core.eval(Main, nested_error_expr)
catch
Base.current_exceptions()
end
@test typeof.(first.(excs)) == [UndefVarError, DivideError]
@test occursin(nested_error_pattern, sprint(Base.display_error, excs))
@test occursin(r"""
2-element ExceptionStack:
DivideError: integer division error
Stacktrace:.*
caused by: UndefVarError: `__not_a_binding__` not defined in `Main`
Stacktrace:.*
"""s, sprint(show, excs))
end
@testset "Fallback REPL" begin
# Fallback REPL should show errors with display_error
errio = IOBuffer()
Base.eval_user_input(errio, nested_error_expr, true)
err_str = String(take!(errio))
@test occursin(nested_error_pattern, err_str)
end
@testset "display_error(io, er, bt) works" begin
errio = IOBuffer()
Base.display_error(errio, ErrorException, [])
err_str = String(take!(errio))
@test occursin(r"""
ERROR: ErrorException
"""s, err_str)
end
@testset "defining `ans` and `err`" begin
@test eval(:(ans = 1)) == 1
@test eval(:(err = 1)) == 1
end
@testset "scrub REPL-related frames" begin
repl_bt = [StackFrame(:foo, "foo.jl", 1),
StackFrame(:__repl_entry_anysuffix, "client.jl", 2),
StackFrame(:bar, "bar.jl", 3)]
scrubbed_repl_bt = Base.scrub_repl_backtrace(repl_bt)
nonrepl_bt = [StackFrame(:foo, "foo.jl", 1),
StackFrame(:baz, "baz.jl", 2),
StackFrame(:bar, "bar.jl", 3)]
scrubbed_nonrepl_bt = Base.scrub_repl_backtrace(nonrepl_bt)
@test length(scrubbed_repl_bt) == 1
@test scrubbed_repl_bt[1].func == :foo
@test length(scrubbed_nonrepl_bt) == 3
errio = IOBuffer()
lower_errexpr = :(@bad)
Base.eval_user_input(errio, lower_errexpr, false)
outstr = String(take!(errio))
@test occursin("ERROR: LoadError: UndefVarError: `@bad`", outstr)
@test !occursin("_repl_entry", outstr)
@test !occursin(r"\.[/\\]client.jl", outstr)
errexpr = :(error("fail"))
Base.eval_user_input(errio, errexpr, false)
outstr = String(take!(errio))
@test occursin("ERROR: fail", outstr)
@test !occursin("_repl_entry", outstr)
@test !occursin(r"\.[/\\]client.jl", outstr)
end
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/mirrors/julia-language.git
git@gitee.com:mirrors/julia-language.git
mirrors
julia-language
julia-language
master

搜索帮助