From 1aa1202344c1a33d07a7a2341e9e459c6524ea61 Mon Sep 17 00:00:00 2001 From: Lyndon White Date: Mon, 15 Feb 2021 20:07:26 +0000 Subject: [PATCH 1/8] Support anything that can save as PNG --- Project.toml | 4 +++- src/fileio.jl | 10 ++++++++++ src/test_reference.jl | 2 +- test/references/heatmap.png | Bin 0 -> 12877 bytes test/references/scatter.png | Bin 0 -> 11051 bytes test/runtests.jl | 6 ++++++ 6 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 test/references/heatmap.png create mode 100644 test/references/scatter.png 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..80d13c8 100644 --- a/src/fileio.jl +++ b/src/fileio.jl @@ -64,6 +64,16 @@ function _convert( return join(strs,'\n') end +# PNG +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..ff50f8e 100644 --- a/src/test_reference.jl +++ b/src/test_reference.jl @@ -122,7 +122,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 0000000000000000000000000000000000000000..5b43f9d93a92c1fcf42bb28b5a33e5d46538d499 GIT binary patch literal 12877 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 GnEwOmAbH;a literal 0 HcmV?d00001 diff --git a/test/references/scatter.png b/test/references/scatter.png new file mode 100644 index 0000000000000000000000000000000000000000..db3e8d1d16047fd623f0edcf38f557a4b59a62da GIT binary patch literal 11051 zcmd^lXH-<#x^0=-K#MH~3<#|x$tEO2iwcrO3PC^+Q4m3LmS8K22!do0N+d~1R#Y;D zqGX98DoKPAikymEaA$S*IrqFb-aGf6`{Rx~#&rxwS=(J}uf5jy&2P^6E&tP+${RQA z+CU%>HmaODafU!xsZSuRc(86It}yic>+!ML;+V!U0^xZu%cAKTd|%;sMp==NS;s-c zmtW0JozWl=JopHN8@>d>JTBenClH(u5C{Vo2n6Ye1OmHVY=O2cZY8LkI7W0^G5m(b zbJNuK?=HcO1S1(b|S_mkf5{)M}sN@q11Zc!lf*Z9{cE|e? z`<$e-*@nr-4L6jnD~$ePy|CmHJi7e6>z0nRnRHuyAKi0TR;v(!V10Qt;l}$w0wMe1 zW&&aR;gy8ai%JB7e(gE}Azn-*3{^RnyYSI$!8=`t$?A(!m}l>Dz*5 z3=9Sw@_hxr(>-{lI9TKFg-1pf7>VLDB0`F!Nzzf$z1HyLSdK-#O=~7e@JV`ldS0I7 zfdi+>`znI=OuES`ZW9m{b&)37B?85C19o|z8y z^Iw;<+JNQKiCR#M^4VZ8YN?z4iUl(o*W`#0@po)n8v+ z4mijsC3P<4Yp!jV%xDpoG>ft{-`{^_&icy>s;$q0VTQpgo4oFye0+RJ`AtntBVIpQ zTY9Tiz4w~3

H@v#m{Uo=+WI>or;R6+grC#dhx8+1laI_GYt?F8A4GKC)6LUCU>_ z%5l}5;BzHMbR#Yh4^H;gQx--F6B84yK9WOXW7ESfUApwrsx{NLtAt-O_MyDj{ErVY z_|BMavkl&P*!reOFZz zDf|oJ+v1@sA4zL%-8987I`68;%43WMto51gR_-V`|19S+@!+kWHtv#g=#8;0nd=SH z8X#&ZFr2zdy!z_n#4Hgjj(v5cgJ$KcHpw2iK0UNz)lXa5*|Dvj9R<#E9#aiFJ%+yY zP5NatjS3cK&sfyg%6iV)UAmM+AoKc6tEqW%5H*2}3`Wug1T*Qplc#Ch{ znz`J2MKO!c<^6fNeD@lHq)EC_@${(x1)9RWt9demQ3(nAn47aLQ57L+Vr`x7dC|;l zX3kCa@q-7y%)Kiww`qH=kz&6%J3cqrmu2uul|O&(N6gGo{<6bc2C6&0PHnPE>2YNk0AcKngX_^$VAs^R!1F9y9;+GMDz-LU6#RA+<1 zM3q`mU7LNjcXM|KeV}D>a^o9 zHa50SubB?)f2^eaMQlFeqGjj3`}a2rRLSVuop`f({`{LR3N~1O#f^@mHtlY-+)2y7Gs`X*q;!wQH&Ir?N1CodhIKZ<@^-QtUORfO>F_w6wUi~GcBvcz{2LM?{n9Z zCH+q494C*=455P8h5MOsa-rB|_$z(ri%uU2Lk)gA#)uqiY3B5qveCV%{r-fq^2~6X z9`)kIi$xuI2FxuHYR96SU&w zHB)pfY$`QYoiXup>}j=)&FfWSJoW0T@LrsCjPn8tdaYFO=F3;P6qUsD4^K)_RZ$74 zU&C%>*LE$JMr5BOv&Cxm4dg}|d!1kQ8R>GFN>!QI)VMqmnNRT)cj+nG)afpA=n#rq z8iyRm^b&(q#u8OD_Cm0N>;bHf%P^$3v#^-g<-d^Ri~lwCod5bUjw(CG%kg<*z53Y- zWm8krm4w*Ql@iP1@3cK%DtRq`Uo2%T|6JX{sO(*T>!&Hb9ZB3u%dSRl-M9Vy z{olWT|NHO1&`Qw8h>z-Zmo_RIYGZBYY z67+4$qGD_wE)JFKHV%R1dFnufIhE*nz;3nMYXlicW@l|wbnzH^N+g+i=`Ky3;6}k(H>cB+nloO z?B<%-(i2rOA1nBV<`lF`e4yTEX;PxglRGXUApw<}efxIRftIwWik@@NFWycK+Ds_* z*tqM+>=3=rPxImQ@k|NISvB|K$E%jDIZd}0&s|hk4;1XX$s&5C?e(?6PZ`u6mqLDx zM@bIlJ9Gs=capICSw7tK{>DTZmmxbz4vm-~R#w)tR1VZ0RIF%}#>8OxR0qwJ9K&3j z)T3DH{p@UPO;0s;len>O9*g4@ew(^(DG=V_&4ix+W8i4;;ij{KYahH8u!Fk=9`Rn`!W%-`+ z`-9CXTK9K}^PG42a+x_0ep8O$Ox7!metnhZS>Q4(eWCP5dwY9!_5o57ncR;Q_vyJW z(VK(Rwrqadl3|#Or~ZMIPv#G%K4dJ+{k|4uiCE}zjS+eC=1l>erzez@26&M9w#`p9=t9ZK$w)Zk zEIsnR+qZ86fynz#o;<0U(md?KqMMYR-9U9%uiN|ixfv^$uKI7k-DswL96gk}0|*=% z$~G5{KM@gYR;2o{`j(xaJ<2iWn zAo%QjL{rllzq0PpQ88l3_wN@$h~ft%Nt(HBB7gsW4`uvqS65fJ9r+>$tKZU=#Cy-M z@aE=EJ*S7hfcctTyyz6ljPp^S<%JqCO1eq@RFfKbstoB)+wcgI9qC0pD9ROoFV7Q- z!y!LbGo^;gmU_2FnY>Sw%dafnv4VW@%$YMI1%sK&obEga4vb;-NAb(wek)}vhYcIP zzO>}F?0$P2d?L*-H`5b*OO7)*siz{Cf;AKn5Lik0V^=ukJZj?DRCrJP1OJX{rh+Cetv1G|Qa9aO2qsYJbxNWaJ=O%8muuF3U z8QK=Vavkjy%=KEBPKon2pd#d*Q7@yy!)56ob+~*M?TN&Xy;WgQ7pwo=a$Fk+Yc}zo zqau0V+*-@j7ki|g9@HZW5krTa2Z(dNetv2mv)z7rS;mYg$|Cho@UT)+QUd=5pqK{= znj6GUrKlo77fEjxEcM?@q$XlrW&{H)sZ>^(d@R8^}F*UL61sf0B&oQ|sDjjODz z#EWaEgv7-uIQ2Jt`*wlU8*TA8AN+diFGvC~K_l$nkCKW{K|zPVB>$QP6FJkcWl$KW4b2DXib@e|a zH90b{?gZ+9Gn;~f!rY0ueq#AUkiT_=8(05-F44c3ZvVt@`d>Lx;)XUPw(t5aE~A|t zDE(57KM?d)ec;sY*fIrJCW*?yuWdT!pI2}O1P7bEywV6sn(6>8<)W_-7m*1cPswC5 zkW1&OdVcqv-F#Y)WgU7ew+WrCWD0$h#pEdC)N?sMwrI&Vf>?2R&ziz?0Vl!Gky^0# z{$xVts9q>IW)(pZQ?ot6P%6NRQIO{cA5ptt3sv?tDsz$G3IW`Bnal>17zK3K;natt zB@3AvF-Ir-gMxzY-|r~#T7V3FqI2zYcD(tAN6()>4?UY{G&k25*ZNGy0J$pa8T6LT0j~-W41Z#0A zBx$C!4R24q+d8;${rb(RntwAoi3hYpl~%GgcZ3YgEe8h&m{I&%kJC-o zZ`#!L$|_2;tlQ4_&K;!_Cyvm6l=@avZ5 zTPdnv;o{EI2f@M~#l$T99_$H{%A`gn(CXz6$HvCiZ{hoS*O5~M0#QL}o6G(B@t%rR zD_8b5S131uDwB0!aws9$}+zdDou54#NJqC+6f z!J5+iEbPxKX>8kt4IJv*TVGUoCzYONi1mzKYnePR^&}~ZQ z%p-&Z1oDSpw;B5|oK;ZH7HUkEV1&YiRj~V3`XNSQVPOF(aqvfs?WgEAB(>M!KJ#G4 zZ{Ek|#r+ObX37SQxkv?WwCtF*>j`$=?%$qA$E;!t=Dpu+yCFbIb}=K~b?Wo9`yiRT zpCpoaFB*m=>_w)xi6U-n|9%_L4FoN$9!zZ!^768|c_fUhq0i4DFjoEa^TPwCikOzd z;#e6#l#iF!8QF*0FMZrq)4hM})nO`oQgco5^!Nf7W&X#pRYsywOuKt=agjZ$$lhtO zZ+_2S@n9#?5o$=ZnEXN#oZU4rES$c)xNK=@3BT=ofS9JHrg4E2EnGmSH|I)Y0$%dY zoja;R(+ zX#DlWMMj#4@}Tk4HJ&8fFSd~u`88eYxgd*SONNvINP&r>sCo- zQ)}zCZD?lwp=NL1T+@;gounnHUH&dHgH-p&dv1Zw4Dgpit8@f5sC>(ANU5qicD%!7@I74TGSz=*5D_)VN!bm6nR zjpX+kd(e_gOG}U4`bmQ%O$RlZuTWTeZr@W5`*GlB1Y~bgT~AVi(F1-bhSq^MX5r*c^m64#&Uz-8-lsVQJ|C^fk!j z%0c=xXnJ3qPs#LGtMj6*5HTLpLjsmRYNKHS*n-VlTMtc8YZ4O@oPLM-BVPA-q67(dAIqF%Qxuc%0K zKvz}m>r0ic7pBx|-GHd#sg{_S4MCjOyzFDVi^JB|FCT#%n;kWP!mzY_cKYNJJ^uK0&I2Der`~O*SvMv5qy3etXlfc?*8Nb%HS_eg>gsBkKZ75iaT7xT zq=q*6?}uH|E`G`|jC%0k39`85M;&RQbk!zMEJqPOKBZ-UZC#di>&QAOL10N6{vVDj zks%9ue%PW;SX6YWIc{kRu=~^M)#P@V%IJ0%`YbOYF^VRth3JE=QAZqq)WW=d0g=kf zOTEo*yl&mPUj*Z`v+a5-L(Z0+@iBe{XZJPWX4-MT#ZQ~c@=pE#g7aeZm74;@v% zyLazm-qa9fPB>Q(zWLQ14mBb=DVo~^Ezr0EUlT>)8!z7-cYQ<(@D(>THHExRYrnNg zUeays8|Xgk?xWVgqGQL7ZIT@;y_Va-N7PhODu1x|I5dU+XgLVBrs}2v{33SC zx{Z;w6GaP$4n-8AiChu5lbiS!nuXc>sB;nDD7`}e@{=MAt;-sFj zdvX#`FmR8|QNRIwGf-+hxc4cCFA+a@PJgig5`E1!Jr4DWKE`9ui7FVTRs8V2uySgV z!n7|reZ^P?I3V6*Z`Q_n&(n0Yej=eA*St zUjFjs%PiZ4uXGg9fquBd7!Qg+?uT;Zh|~vqg#v?ptKA{R*@gA9fs)zT*`UrK%0XNT z#_}*%m4i7uvQ2M!!iy20F_n9Ly#m$}$)z`+M8K2HJ8g zv@TqD;(0d1K=fN$=^IoE+r6ujYMCUBJDb(KHej

    bzR<`tUr51Hq56JrOJw3dP zxq6?Ho*Ay{Tu4gJuPpdJRfHX^YZ2u!qK2e7-2`9^Te8L&e2GL5h> zK64+lOibkel()`s)B}7}BXkC8r~^<#%-^T$Gu!Tv zoAi+m!zTE2W@cuG43w} z@8029L{dr$KQC|9Uw6sdfA@uYt5by`1{3Du#RN~bEnA|5&n1|^)S8D%Mkm{N?xppY zrfxeUxPXVvYw!B|Zx-B(9voI_LIuICrG+LlTrYVviZWpWUbt`pTbiO3XME<2Lw`d& zY@0bAKEBLzIZ9+-^f(Hf2f@{l zp-pCP{sVm38@+0|*>AT(LFcGjcJ1=O`0;F*$E{npbVZLGnSy62-NLj}vrH5$>Nr$D zVfAy&H2|5c9Flf@Bv&||PDr}9T)%?&NlNNd(d`W8kUC>z#DVJR0B)%q#L>9(P^$Sp zZf-|MM`~DD7#a}V`}Xz1@65NT=ZvVSs`9^g?_OZwUz9DVhI;Sr-Cyd?A|T4TD{E>3 z0t3Ut!@{=g*^{Bufxai44+a(*;y#Iaoa79)`RdiHL?RJUg2lFb{qK+3(#y?sOhwNZ zoVphj_bfO))K5eby?(WWnAiOJ%=G<1ji^td0=;X)7#zu-54iH(`Mb%YRVc>@F z1XqN`#tJ_Jn4lb3f#*Y~16}MgPbw+>pi-Y1fn_QxzJ=HZ0H!!V4jhYlak$;l~0X9Qw_j?)qR;~vEU+eMiEI9&)y652YrZHb`q=txy< zEnKWqCrM@Ao(L&4hBL80gv(@jkYvAah?y+hbyQK z8}~?0WfqQjpzPqI02G^owjz#4yum%7fl{bfz-19Ku)i zO2d;k+w_d=nGW&vXEWQPaU~ZQIE2MHFJ8c-e&s|v6I?NwOJNK*#2*J2n3x;Nspnu- zMo-XZjv58jM@O3*+Mevo?68e>m*wZ@L$}08*xF!dL>JS`LB)aaq%JLt#$nme?REzk zS!ET!PD<*ZuN} z^fQd|9p1vsJJa>#rZ{fq|_$)*>4yPeG&i&mq-8Jcn8S0 zMa)fg{$pRaAD5_*5DdKRq>mpzHYO@dSbshsFTaGD&}Yu&J5aGMe44SJ!A{TvIA&2t zp5NJ>7^WV5=%hSJ+IfDWM$9=iME?-Xj~>Fe0Hf{T=jY7=@D=lU?m0b&%I n*m@>j$*KqbYu4NI<+TFcvQ2@%9I?k~R)We&%@di57jFI=St)7f literal 0 HcmV?d00001 diff --git a/test/runtests.jl b/test/runtests.jl index f53377f..720c3b0 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,11 @@ end @test_throws Exception @test_reference "references/camera.png" camera # unequal size end +@testset "Plots as PNG images" begin + @test_reference "references/heatmap.png" heatmap([1 0; 0 1]) + @test_reference "references/scatter.png" scatter([(0,0),(1,0),(0,1),(1,1)],ms=8) +end + using DataFrames, CSVFiles @testset "DataFrame as CSV" begin @test_reference "references/dataframe.csv" DataFrame(v1=[1,2,3], v2=["a","b","c"]) From 1882c26040c74fe18a3fc0049649ffd56f729cef Mon Sep 17 00:00:00 2001 From: Lyndon White Date: Mon, 15 Feb 2021 21:01:42 +0000 Subject: [PATCH 2/8] usual actual not raw_actual to decide rendermode Revert "usual actual not raw_actual to decide rendermode" This reverts commit 9cc6d5377ef047b4feae25c627a4c0b562e317fc. render actual --- src/test_reference.jl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/test_reference.jl b/src/test_reference.jl index ff50f8e..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) From f2cb1aba52a9586f68d4b615c97da0fbac2deb26 Mon Sep 17 00:00:00 2001 From: Lyndon White Date: Tue, 16 Feb 2021 16:17:22 +0000 Subject: [PATCH 3/8] try ImageIO to see if better on Ubuntu for PNGs --- Project.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index ec0e526..4025276 100644 --- a/Project.toml +++ b/Project.toml @@ -21,7 +21,6 @@ Distances = "0.7, 0.8, 0.9, 0.10" FileIO = "1" ImageCore = "0.8.1" ImageInTerminal = "0.3, 0.4" -ImageMagick = "0.7, 1" ImageTransformations = "0.8" Plots = "1.4.3" TestImages = "0.6, 1" @@ -30,10 +29,11 @@ julia = "1" [extras] CSVFiles = "5d742f6a-9f54-50ce-8119-2520741973ca" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +ImageIO = "82e4d734-157c-48bb-816b-45c225c6df19" 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", "Plots", "TestImages"] +test = ["CSVFiles", "DataFrames", "ImageIO", "ImageMagick", "ImageTransformations", "Plots", "TestImages"] From 58a4b0ff745ed44aa59f68371f3db47db65be9f3 Mon Sep 17 00:00:00 2001 From: Lyndon White Date: Tue, 16 Feb 2021 16:17:22 +0000 Subject: [PATCH 4/8] Revert "try ImageIO to see if better on Ubuntu for PNGs" This reverts commit f2cb1aba52a9586f68d4b615c97da0fbac2deb26. --- Project.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index 4025276..ec0e526 100644 --- a/Project.toml +++ b/Project.toml @@ -21,6 +21,7 @@ Distances = "0.7, 0.8, 0.9, 0.10" FileIO = "1" ImageCore = "0.8.1" ImageInTerminal = "0.3, 0.4" +ImageMagick = "0.7, 1" ImageTransformations = "0.8" Plots = "1.4.3" TestImages = "0.6, 1" @@ -29,11 +30,10 @@ julia = "1" [extras] CSVFiles = "5d742f6a-9f54-50ce-8119-2520741973ca" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -ImageIO = "82e4d734-157c-48bb-816b-45c225c6df19" 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", "ImageIO", "ImageMagick", "ImageTransformations", "Plots", "TestImages"] +test = ["CSVFiles", "DataFrames", "ImageMagick", "ImageTransformations", "Plots", "TestImages"] From bb8431a6a6ce121f96736a1832bc294c7206a5dc Mon Sep 17 00:00:00 2001 From: Lyndon White Date: Thu, 18 Feb 2021 16:54:48 +0000 Subject: [PATCH 5/8] Update src/fileio.jl --- src/fileio.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileio.jl b/src/fileio.jl index 80d13c8..1196129 100644 --- a/src/fileio.jl +++ b/src/fileio.jl @@ -64,7 +64,7 @@ function _convert( return join(strs,'\n') end -# PNG +# PNG (Including for things that can be saved as PNGs like Plots.jl plots) function _convert(::Type{<:DataFormat{:PNG}}, data)::AbstractArray{<:Colorant} mktempdir() do dir filename = File{DataFormat{:PNG}}(joinpath(dir, "inconversion.png")) From 44bf448e8fd927d53d0ebf859a490fd69dce1f59 Mon Sep 17 00:00:00 2001 From: Lyndon White Date: Thu, 18 Feb 2021 16:57:20 +0000 Subject: [PATCH 6/8] lower tolerance Co-authored-by: Johnny Chen --- test/runtests.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index 720c3b0..190f864 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -122,7 +122,7 @@ end end @testset "Plots as PNG images" begin - @test_reference "references/heatmap.png" heatmap([1 0; 0 1]) + @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 From 4f5c2d5c213751529b57e31c4c12a23890af628f Mon Sep 17 00:00:00 2001 From: Lyndon White Date: Thu, 18 Feb 2021 17:00:23 +0000 Subject: [PATCH 7/8] Update src/fileio.jl --- src/fileio.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileio.jl b/src/fileio.jl index 1196129..3e18a25 100644 --- a/src/fileio.jl +++ b/src/fileio.jl @@ -64,7 +64,7 @@ function _convert( return join(strs,'\n') end -# PNG (Including for things that can be saved as PNGs like Plots.jl plots) +# 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")) From 96a6d45b7534e126e1e97aecb26693f13ddbbbfd Mon Sep 17 00:00:00 2001 From: Lyndon White Date: Sat, 20 Feb 2021 00:48:39 +0000 Subject: [PATCH 8/8] disable plot test on linux --- test/runtests.jl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index 190f864..4de8ab0 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -122,8 +122,11 @@ end end @testset "Plots as PNG images" begin - @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) + # 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