diff --git a/Project.toml b/Project.toml index 8ff8e07..ec0e526 100644 --- a/Project.toml +++ b/Project.toml @@ -23,6 +23,7 @@ ImageCore = "0.8.1" ImageInTerminal = "0.3, 0.4" ImageMagick = "0.7, 1" ImageTransformations = "0.8" +Plots = "1.4.3" TestImages = "0.6, 1" julia = "1" @@ -31,7 +32,8 @@ CSVFiles = "5d742f6a-9f54-50ce-8119-2520741973ca" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" ImageMagick = "6218d12a-5da1-5696-b52f-db25d2ecc6d1" ImageTransformations = "02fcd773-0e25-5acc-982a-7f6622650795" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" TestImages = "5e47fb64-e119-507b-a336-dd2b206d9990" [targets] -test = ["CSVFiles", "DataFrames", "ImageMagick", "ImageTransformations", "TestImages"] +test = ["CSVFiles", "DataFrames", "ImageMagick", "ImageTransformations", "Plots", "TestImages"] diff --git a/src/fileio.jl b/src/fileio.jl index 2866d61..3e18a25 100644 --- a/src/fileio.jl +++ b/src/fileio.jl @@ -64,6 +64,16 @@ function _convert( return join(strs,'\n') end +# PNG (Including images as arrays of colorants, and things like Plots.jl plots etc) +function _convert(::Type{<:DataFormat{:PNG}}, data)::AbstractArray{<:Colorant} + mktempdir() do dir + filename = File{DataFormat{:PNG}}(joinpath(dir, "inconversion.png")) + savefile(filename, data) + load(filename) + end +end +_convert(::Type{<:DataFormat{:PNG}}, img::AbstractArray{<:Colorant}; kw...) = img + # SHA256 _convert(::Type{DataFormat{:SHA256}}, x; kw...) = bytes2hex(sha256(string(x))) function _convert(::Type{DataFormat{:SHA256}}, img::AbstractArray{<:Colorant}; kw...) diff --git a/src/test_reference.jl b/src/test_reference.jl index 211f510..a15234a 100644 --- a/src/test_reference.jl +++ b/src/test_reference.jl @@ -100,19 +100,20 @@ function test_reference( path = file.filename dir, filename = splitdir(path) + actual = _convert(F, raw_actual; kw...) + # infer the default rendermode here # since `nothing` is always passed to this method from # test_reference(filename::AbstractString, raw_actual; kw...) if rendermode === nothing - rendermode = default_rendermode(F, raw_actual) + rendermode = default_rendermode(F, actual) end - actual = _convert(F, raw_actual; kw...) # preprocessing when reference file doesn't exists if !isfile(path) @info("Reference file for \"$filename\" does not exist. It will be created") # TODO: move encoding out from render - render(rendermode, raw_actual) + render(rendermode, actual) mkpath(dir) savefile(file, actual) @@ -122,7 +123,7 @@ function test_reference( end # file exists - reference = loadfile(T, file) + reference = loadfile(typeof(actual), file) if equiv === nothing # generally, `reference` and `actual` are of the same type after preprocessing diff --git a/test/references/heatmap.png b/test/references/heatmap.png new file mode 100644 index 0000000..5b43f9d Binary files /dev/null and b/test/references/heatmap.png differ diff --git a/test/references/scatter.png b/test/references/scatter.png new file mode 100644 index 0000000..db3e8d1 Binary files /dev/null and b/test/references/scatter.png differ diff --git a/test/runtests.jl b/test/runtests.jl index f53377f..4de8ab0 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,5 +1,6 @@ using Test using ImageInTerminal, TestImages, ImageCore, ImageTransformations +using Plots using Random if isinteractive() @@ -120,6 +121,14 @@ end @test_throws Exception @test_reference "references/camera.png" camera # unequal size end +@testset "Plots as PNG images" begin + # Test disabled on linux because: https://github.com/JuliaPlots/Plots.jl/issues/2127 + if !Sys.islinux() + @test_reference "references/heatmap.png" heatmap([1 0; 0 1]) by=psnr_equality(15) + @test_reference "references/scatter.png" scatter([(0,0),(1,0),(0,1),(1,1)], ms=8) + end +end + using DataFrames, CSVFiles @testset "DataFrame as CSV" begin @test_reference "references/dataframe.csv" DataFrame(v1=[1,2,3], v2=["a","b","c"])