-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathrender.jl
82 lines (72 loc) · 3.07 KB
/
render.jl
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
#################################################
# 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
render_item(::RenderMode, item) = println(item)
function render_item(::BeforeAfterLimited, item)
show(IOContext(stdout, :limit=>true, :displaysize=>(20,80)), "text/plain", item)
println()
end
function render_item(::BeforeAfterImage, item)
str_item = @withcolor ImageInTerminal.encodeimg(ImageInTerminal.SmallBlocks(), ImageInTerminal.TermColor256(), item, 20, 40)[1]
println("eltype: ", eltype(item))
println("size: ", map(length, axes(item)))
println("thumbnail:")
println.(str_item)
end
## 2 arg form render for comparing
function render(mode::BeforeAfter, reference, actual)
if displayable(MIME("image/png"))
render(MIME("image/png"), mode, reference, actual)
else
render(MIME("text/plain"), mode, reference, actual)
end
end
function render(::MIME"text/plain", mode::BeforeAfter, reference, actual)
println("- REFERENCE -------------------")
render_item(mode, reference)
println("-------------------------------")
println("- ACTUAL ----------------------")
render_item(mode, actual)
println("-------------------------------")
end
function render(::MIME"image/png", mode::BeforeAfterImage, reference, actual)
println("- REFERENCE --------|--------- ACTUAL -")
display(MIME("image/png"), mosaicview(reference, actual; nrow=1, npad=5))
end
function render(::Diff, reference, actual)
println("- DIFF ------------------------")
@withcolor println(deepdiff(reference, actual))
println("-------------------------------")
end
## 1 arg form render for new content
function render(mode::RenderMode, actual)
if displayable(MIME("image/png"))
display(MIME("image/png"), actual)
else
println("- NEW CONTENT -----------------")
render_item(mode, actual)
println("-------------------------------")
end
end
"""
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}) = BeforeAfterFull()