188 lines
5.6 KiB
Julia
188 lines
5.6 KiB
Julia
import ImageMagick
|
|
using VisualRegressionTests
|
|
using Plots
|
|
using Random
|
|
using Test
|
|
using FileIO
|
|
using Gtk
|
|
using LibGit2
|
|
using GeometryTypes
|
|
using Dates
|
|
|
|
include("test_axes.jl")
|
|
include("test_hdf5plots.jl")
|
|
include("test_pgfplotsx.jl")
|
|
|
|
reference_dir(args...) = joinpath(homedir(), ".julia", "dev", "PlotReferenceImages", args...)
|
|
|
|
function reference_file(backend, i, version)
|
|
refdir = reference_dir("Plots", string(backend))
|
|
fn = "ref$i.png"
|
|
versions = sort(VersionNumber.(readdir(refdir)), rev = true)
|
|
|
|
reffn = joinpath(refdir, string(version), fn)
|
|
for v in versions
|
|
tmpfn = joinpath(refdir, string(v), fn)
|
|
if isfile(tmpfn)
|
|
reffn = tmpfn
|
|
break
|
|
end
|
|
end
|
|
|
|
return reffn
|
|
end
|
|
|
|
reference_path(backend, version) = reference_dir("Plots", string(backend), string(version))
|
|
|
|
if !isdir(reference_dir())
|
|
mkpath(reference_dir())
|
|
LibGit2.clone("https://github.com/JuliaPlots/PlotReferenceImages.jl.git", reference_dir())
|
|
end
|
|
|
|
include("imgcomp.jl")
|
|
# don't actually show the plots
|
|
Random.seed!(1234)
|
|
default(show=false, reuse=true)
|
|
is_ci() = get(ENV, "CI", "false") == "true"
|
|
img_tol = is_ci() ? 1e-2 : Sys.islinux() ? 1e-3 : 0.1
|
|
|
|
## Uncomment the following lines to update reference images for different backends
|
|
|
|
# @testset "GR" begin
|
|
# image_comparison_facts(:gr, tol=img_tol, skip = Plots._backend_skips[:gr])
|
|
# end
|
|
#
|
|
# plotly()
|
|
# @testset "Plotly" begin
|
|
# image_comparison_facts(:plotly, tol=img_tol, skip = Plots._backend_skips[:plotlyjs])
|
|
# end
|
|
#
|
|
# pyplot()
|
|
# @testset "PyPlot" begin
|
|
# image_comparison_facts(:pyplot, tol=img_tol, skip = Plots._backend_skips[:pyplot])
|
|
# end
|
|
#
|
|
# pgfplotsx()
|
|
# @testset "PGFPlotsX" begin
|
|
# image_comparison_facts(:pgfplotsx, tol=img_tol, skip = Plots._backend_skips[:pgfplotsx])
|
|
# end
|
|
|
|
# 10 Histogram2D
|
|
|
|
##
|
|
|
|
@testset "Backends" begin
|
|
|
|
@testset "GR" begin
|
|
ENV["PLOTS_TEST"] = "true"
|
|
ENV["GKSwstype"] = "100"
|
|
@test gr() == Plots.GRBackend()
|
|
@test backend() == Plots.GRBackend()
|
|
|
|
@static if haskey(ENV, "APPVEYOR")
|
|
@info "Skipping GR image comparison tests on AppVeyor"
|
|
else
|
|
image_comparison_facts(:gr, tol=img_tol, skip = Plots._backend_skips[:gr])
|
|
end
|
|
end
|
|
|
|
@testset "UnicodePlots" begin
|
|
@test unicodeplots() == Plots.UnicodePlotsBackend()
|
|
@test backend() == Plots.UnicodePlotsBackend()
|
|
|
|
# lets just make sure it runs without error
|
|
p = plot(rand(10))
|
|
@test isa(p, Plots.Plot) == true
|
|
@test isa(display(p), Nothing) == true
|
|
p = bar(randn(10))
|
|
@test isa(p, Plots.Plot) == true
|
|
@test isa(display(p), Nothing) == true
|
|
p = plot([1, 2], [3, 4])
|
|
annotate!(p, [(1.5, 3.2, Plots.text("Test", :red, :center))])
|
|
hline!(p, [3.1])
|
|
@test isa(p, Plots.Plot) == true
|
|
@test isa(display(p), Nothing) == true
|
|
p = plot([Dates.Date(2019, 1, 1), Dates.Date(2019, 2, 1)], [3, 4])
|
|
hline!(p, [3.1])
|
|
annotate!(p, [(Dates.Date(2019, 1, 15), 3.2, Plots.text("Test", :red, :center))])
|
|
@test isa(p, Plots.Plot) == true
|
|
@test isa(display(p), Nothing) == true
|
|
p = plot([Dates.Date(2019, 1, 1), Dates.Date(2019, 2, 1)], [3, 4])
|
|
annotate!(p, [(Dates.Date(2019, 1, 15), 3.2, Plots.text("Test", :red, :center))])
|
|
hline!(p, [3.1])
|
|
@test isa(p, Plots.Plot) == true
|
|
@test isa(display(p), Nothing) == true
|
|
end
|
|
|
|
end
|
|
|
|
@testset "Axes" begin
|
|
p = plot()
|
|
axis = p.subplots[1][:xaxis]
|
|
@test typeof(axis) == Plots.Axis
|
|
@test Plots.discrete_value!(axis, "HI") == (0.5, 1)
|
|
@test Plots.discrete_value!(axis, :yo) == (1.5, 2)
|
|
@test Plots.ignorenan_extrema(axis) == (0.5,1.5)
|
|
@test axis[:discrete_map] == Dict{Any,Any}(:yo => 2, "HI" => 1)
|
|
|
|
Plots.discrete_value!(axis, ["x$i" for i=1:5])
|
|
Plots.discrete_value!(axis, ["x$i" for i=0:2])
|
|
@test Plots.ignorenan_extrema(axis) == (0.5, 7.5)
|
|
end
|
|
|
|
@testset "NoFail" begin
|
|
plots = [histogram([1, 0, 0, 0, 0, 0]),
|
|
plot([missing]),
|
|
plot([missing; 1:4]),
|
|
plot([fill(missing,10); 1:4]),
|
|
plot([1 1; 1 missing]),
|
|
plot(["a" "b"; missing "d"], [1 2; 3 4])]
|
|
for plt in plots
|
|
display(plt)
|
|
end
|
|
@test_nowarn plot(x->x^2,0,2)
|
|
end
|
|
|
|
@testset "EmptyAnim" begin
|
|
anim = @animate for i in []
|
|
end
|
|
|
|
@test_throws ArgumentError gif(anim)
|
|
end
|
|
|
|
@testset "Segments" begin
|
|
function segments(args...)
|
|
segs = UnitRange{Int}[]
|
|
for seg in iter_segments(args...)
|
|
push!(segs,seg)
|
|
end
|
|
segs
|
|
end
|
|
|
|
nan10 = fill(NaN,10)
|
|
@test segments(11:20) == [1:10]
|
|
@test segments([NaN]) == []
|
|
@test segments(nan10) == []
|
|
@test segments([nan10; 1:5]) == [11:15]
|
|
@test segments([1:5;nan10]) == [1:5]
|
|
@test segments([nan10; 1:5; nan10; 1:5; nan10]) == [11:15, 26:30]
|
|
@test segments([NaN; 1], 1:10) == [2:2, 4:4, 6:6, 8:8, 10:10]
|
|
@test segments([nan10; 1:15], [1:15; nan10]) == [11:15]
|
|
end
|
|
|
|
@testset "Utils" begin
|
|
zipped = ([(1,2)], [("a","b")], [(1,"a"),(2,"b")],
|
|
[(1,2),(3,4)], [(1,2,3),(3,4,5)], [(1,2,3,4),(3,4,5,6)],
|
|
[(1,2.0),(missing,missing)], [(1,missing),(missing,"a")],
|
|
[(missing,missing)], [(missing,missing,missing),("a","b","c")])
|
|
for z in zipped
|
|
@test isequal(collect(zip(Plots.unzip(z)...)), z)
|
|
@test isequal(collect(zip(Plots.unzip(GeometryTypes.Point.(z))...)), z)
|
|
end
|
|
op1 = process_clims((1.0, 2.0))
|
|
op2 = process_clims((1, 2.0))
|
|
data = randn(100, 100)
|
|
@test op1(data) == op2(data)
|
|
@test process_clims(nothing) == process_clims(missing) == process_clims(:auto)
|
|
end
|