-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathrender.jl
More file actions
85 lines (75 loc) · 2.83 KB
/
Copy pathrender.jl
File metadata and controls
85 lines (75 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#################################################
# Rendering
# This controls how failures are displayed
abstract type RenderMode end
struct Diff <: RenderMode end
abstract type BeforeAfter <: RenderMode end
struct BeforeAfterLimited <: BeforeAfter end
struct BeforeAfterFull <: BeforeAfter end
struct BeforeAfterImage <: BeforeAfter end
color_buffer(args...) =
IOContext(PipeBuffer(), :color=>Base.get_have_color(), args...)
function render_item(::RenderMode, item)
io = color_buffer()
print(io, item)
read(io, String)
end
function render_item(::BeforeAfterLimited, item)
io = color_buffer(
:limit=>true,
:displaysize=>(20,80)
)
show(io, "text/plain", item)
read(io, String)
end
function render_item(::BeforeAfterImage, item)
io = color_buffer()
println(io, "eltype: ", eltype(item))
println(io, "size: ", map(length, axes(item)))
println(io, "thumbnail:")
if Base.get_bool_env("REFERENCETESTS_SIXEL", false)
sixel_encode(io, item)
else
strs = @withcolor XTermColors.ascii_show(
item,
Base.invokelatest(XTermColors.TermColor8bit),
:small,
(20, 40)
)
print(io, join(strs, '\n'))
end
read(io, String)
end
## 2 arg form render for comparing
render(mode::BeforeAfter, reference, actual) = """
- REFERENCE -------------------
$(render_item(mode, reference))
-------------------------------
- ACTUAL ----------------------
$(render_item(mode, actual))
-------------------------------"""
render(mode::Diff, reference, actual) = """
- DIFF ------------------------
$(@withcolor(render_item(mode, deepdiff(reference, actual))))
-------------------------------"""
## 1 arg form render for new content
render(mode::RenderMode, actual) = """
- NEW CONTENT -----------------
$(render_item(mode, actual))
-------------------------------"""
"""
default_rendermode(::DataFormat, actual)
Infer the most appropriate render mode according to type of reference file and `actual`.
"""
default_rendermode(::Type{<:DataFormat}, ::Any) = BeforeAfterLimited()
default_rendermode(::Type{<:DataFormat}, ::AbstractString) = Diff()
default_rendermode(::Type{<:DataFormat}, ::AbstractArray{<:Colorant}) = BeforeAfterImage()
# plain TXTs
default_rendermode(::Type{DataFormat{:TXT}}, ::Any) = Diff()
default_rendermode(::Type{DataFormat{:TXT}}, ::AbstractString) = Diff()
default_rendermode(::Type{DataFormat{:TXT}}, ::Number) = BeforeAfterFull()
default_rendermode(::Type{DataFormat{:TXT}}, ::AbstractArray{<:Colorant}) = BeforeAfterImage()
# SHA256
default_rendermode(::Type{DataFormat{:SHA256}}, ::Any) = BeforeAfterFull()
default_rendermode(::Type{DataFormat{:SHA256}}, ::AbstractString) = BeforeAfterFull()
default_rendermode(::Type{DataFormat{:SHA256}}, ::AbstractArray{<:Colorant}) = BeforeAfterLimited()