mirror of
https://github.com/unidoc/unioffice.git
synced 2025-04-25 13:48:53 +08:00
68 lines
18 KiB
Go
68 lines
18 KiB
Go
//
|
|
// Copyright 2020 FoxyUtils ehf. All rights reserved.
|
|
//
|
|
// This is a commercial product and requires a license to operate.
|
|
// A trial license can be obtained at https://unidoc.io
|
|
//
|
|
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
|
|
//
|
|
// Use of this source code is governed by the UniDoc End User License Agreement
|
|
// terms that can be accessed at https://unidoc.io/eula/
|
|
|
|
package testutils ;import (_cb "crypto/md5";_ff "encoding/hex";_g "encoding/json";_ee "errors";_db "fmt";_cd "github.com/stretchr/testify/require";_gb "golang.org/x/image/font";_bb "golang.org/x/image/font/opentype";_da "golang.org/x/image/math/fixed";
|
|
_de "image";_ge "image/color";_b "image/draw";_ga "image/png";_d "io";_fb "io/ioutil";_cc "log";_ac "math";_gf "os";_a "os/exec";_eg "path/filepath";_c "strings";_cf "sync";_e "testing";_bd "time";);func _fbb (_fef ,_fdcb string )error {_caac ,_aea :=_gf .Open (_fef );
|
|
if _aea !=nil {return _aea ;};defer _caac .Close ();_abg ,_ ,_aea :=_de .DecodeConfig (_caac );if _aea !=nil {panic (_aea );};_ecb :=_de .NewRGBA (_de .Rect (0,0,_abg .Width ,_abg .Height ));_cbcd ,_aea :=_gf .Create (_fdcb );if _aea !=nil {return _aea ;
|
|
};defer _cbcd .Close ();_aea =_ga .Encode (_cbcd ,_ecb );if _aea !=nil {return _aea ;};return nil ;};func (_aba *ReferenceFile )updateMap (_df *ReferenceMap )int {var _ag int ;if _aba .Map ._eef ==nil {_aba .Map ._eef =map[string ]ReferenceEntry {};};for _ed ,_bg :=range _df ._eef {_eee ,_ffb :=_aba .Map ._eef [_ed ];
|
|
if !_ffb {_aba .Map ._eef [_ed ]=_bg ;_ag ++;continue ;};if string (_eee .Value )!=string (_bg .Value ){_aba .Map ._eef [_ed ]=_bg ;_ag ++;};};for _dff :=range _aba .Map ._eef {if _ ,_gbd :=_df ._eef [_dff ];!_gbd {delete (_aba .Map ._eef ,_dff );_ag ++;
|
|
};};return _ag ;};func _abee (_faec *_de .RGBA ,_fgf string ,_gfa string ,_bdg ,_faa int )error {_eae ,_agd :=_fb .ReadFile (_fgf );if _agd !=nil {return _agd ;};_acc ,_agd :=_bb .Parse (_eae );if _agd !=nil {return _agd ;};_ddde ,_agd :=_bb .NewFace (_acc ,&_bb .FaceOptions {Size :18,DPI :72,Hinting :_gb .HintingNone });
|
|
if _agd !=nil {return _agd ;};_dcde :=&_gb .Drawer {Dst :_faec ,Src :_de .NewUniform (_ge .RGBA {200,100,0,255}),Face :_ddde ,Dot :_da .P (_bdg ,_faa )};_dcde .DrawString (_gfa );return nil ;};func _bfb (_eefe *_e .T ,_efg string )int64 {_cgf ,_efa :=_gf .Stat (_efg );
|
|
_cd .NoError (_eefe ,_efa );return _cgf .Size ();};func ReadFile (dirPath ,testName string ,createEmpty bool )(*ReferenceFile ,error ){if dirPath ==""&&createEmpty {return &ReferenceFile {Map :&ReferenceMap {}},nil ;};if dirPath ==""{return nil ,_gf .ErrNotExist ;
|
|
};_gg :=_eg .Join (dirPath ,testName +"\u005fr\u0065f\u0065\u0072\u0065\u006e\u0063\u0065\u002e\u006a\u0073\u006f\u006e");_ca :=&ReferenceFile {_ea :_gg };_gac ,_ddd :=_gf .Open (_gg );if _ee .Is (_ddd ,_gf .ErrNotExist )&&createEmpty {_ca .Timestamp =_bd .Now ().UTC ();
|
|
_ca .Map =&ReferenceMap {};return _ca ,nil ;};if _ddd !=nil {return nil ,_ddd ;};defer _gac .Close ();if _ddc :=_g .NewDecoder (_gac ).Decode (_ca );_ddc !=nil {if _ddc .Error ()=="i\u006c\u006c\u0065\u0067\u0061\u006c \u0062\u0061\u0073\u0065\u0036\u0034 \u0064\u0061\u0074\u0061\u0020\u0061\u0074 \u0069\u006e\u0070\u0075\u0074\u0020\u0062\u0079\u0074\u0065 \u0030"&&createEmpty {return _ca ,nil ;
|
|
};return nil ,_ddc ;};return _ca ,nil ;};func (_edd *ReferenceMap )Keys ()(_dd []string ){_dd =make ([]string ,len (_edd ._eef ));var _ega int ;for _dffe :=range _edd ._eef {_dd [_ega ]=_dffe ;_ega ++;};return _dd ;};func _adc (_ggc ,_gad _de .Rectangle )bool {return _ggc .Min .X ==_gad .Min .X &&_ggc .Min .Y ==_gad .Min .Y &&_ggc .Max .X ==_gad .Max .X &&_ggc .Max .Y ==_gad .Max .Y ;
|
|
};func ReadPNG (file string )(_de .Image ,error ){_egae ,_ade :=_gf .Open (file );if _ade !=nil {return nil ,_ade ;};defer _egae .Close ();return _ga .Decode (_egae );};func ComparePNGFiles (file1 ,file2 string )(bool ,error ){_caa ,_gfd :=HashFile (file1 );
|
|
if _gfd !=nil {return false ,_gfd ;};_ec ,_gfd :=HashFile (file2 );if _gfd !=nil {return false ,_gfd ;};if _caa ==_ec {return true ,nil ;};_ead ,_gfd :=ReadPNG (file1 );if _gfd !=nil {return false ,_gfd ;};_dda ,_gfd :=ReadPNG (file2 );if _gfd !=nil {return false ,_gfd ;
|
|
};if _ead .Bounds ()!=_dda .Bounds (){return false ,nil ;};return CompareImages (_ead ,_dda );};func (_gbg *ReferenceMap )Len ()int {return len (_gbg ._eef )};type ReferenceFile struct{Timestamp _bd .Time `json:"timestamp"`;Map *ReferenceMap `json:"map,omitempty"`;
|
|
_ea string ;};func (_age *ReferenceMap )Write (key string ,entry ReferenceEntry ){_age .Lock ();defer _age .Unlock ();if _age ._eef ==nil {_age ._eef =map[string ]ReferenceEntry {};};_age ._eef [key ]=entry ;};type ReferenceMap struct{_cf .Mutex ;_eef map[string ]ReferenceEntry ;
|
|
};var (ErrRenderNotSupported =_ee .New ("\u0072\u0065\u006e\u0064\u0065r\u0069\u006e\u0067\u0020\u0050\u0044\u0046\u0020\u0066\u0069\u006c\u0065\u0073 \u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0073\u0075\u0070\u0070\u006f\u0072\u0074\u0065\u0064\u0020\u006f\u006e\u0020\u0074\u0068\u0069\u0073\u0020\u0073\u0079\u0073\u0074\u0065m");
|
|
ErrImageSizeNotMatch =_ee .New ("\u0069\u006d\u0061ge\u0020\u0073\u0069\u007a\u0065\u0073\u0020\u0064\u006f\u006e\u0027\u0074\u0020\u006d\u0061\u0074\u0063\u0068"););func CopyFile (src ,dst string )error {_bgg ,_bfd :=_gf .Open (src );if _bfd !=nil {return _bfd ;
|
|
};defer _bgg .Close ();_bdc ,_bfd :=_gf .Create (dst );if _bfd !=nil {return _bfd ;};defer _bdc .Close ();_ ,_bfd =_d .Copy (_bdc ,_bgg );return _bfd ;};func (_be *ReferenceMap )UnmarshalJSON (data []byte )error {return _g .Unmarshal (data ,&_be ._eef )};
|
|
func (_bf *ReferenceFile )Update (currentMap *ReferenceMap )error {if _bf ._ea ==""{return nil ;};_ffd :=_bf .updateMap (currentMap );if _ffd ==0{return nil ;};_fa ,_af :=_gf .OpenFile (_bf ._ea ,_gf .O_CREATE |_gf .O_TRUNC |_gf .O_WRONLY ,0664);if _af !=nil {return _af ;
|
|
};defer _fa .Close ();_bf .Timestamp =_bd .Now ().UTC ();_ab :=_g .NewEncoder (_fa );_ab .SetIndent ("","\u0009");return _ab .Encode (_bf );};func RenderPDFToPNGs (pdfPath string ,dpi int ,outpathTpl string )error {if dpi <=0{dpi =100;};if _ ,_cea :=_a .LookPath ("\u0067\u0073");
|
|
_cea !=nil {return ErrRenderNotSupported ;};return _a .Command ("\u0067\u0073","\u002d\u0073\u0044\u0045\u0056\u0049\u0043\u0045\u003d\u0070\u006e\u0067a\u006c\u0070\u0068\u0061","\u002d\u006f",outpathTpl ,_db .Sprintf ("\u002d\u0072\u0025\u0064",dpi ),pdfPath ).Run ();
|
|
};func RunRenderOfficeTest (t *_e .T ,pdfPath ,outputDir ,baselineRenderPath string ,saveBaseline bool ,currentHashMap *ReferenceMap ,refFile *ReferenceFile ,postfix string ){_gbb :=_c .TrimSuffix (_eg .Base (pdfPath ),_eg .Ext (pdfPath ));t .Run ("\u0072\u0065\u006e\u0064\u0065\u0072",func (_gace *_e .T ){_bce :=_eg .Join (outputDir ,_gbb );
|
|
_gfde :=_bce +"\u002d%\u0064\u002e\u0070\u006e\u0067";if _dfc :=RenderPDFToPNGs (pdfPath ,0,_gfde );_dfc !=nil {_gace .Skip (_dfc );};_cdc :=_gbb +postfix ;_bcgb :=_eg .Join (outputDir ,_cdc );_caf :=_bcgb +"\u002d%\u0064\u002e\u0070\u006e\u0067";_bee :=false ;
|
|
if saveBaseline {_ebb :=_eg .Dir (pdfPath );_dddgb :=_eg .Join (_ebb ,_cdc +"\u002e\u0070\u0064\u0066");if _ ,_dg :=_gf .Stat (_dddgb );_dg ==nil {_gace .Logf ("\u0052e\u006e\u0064\u0065\u0072\u0020\u004d\u0053\u0020\u004f\u0066\u0066i\u0063\u0065\u0020\u0050\u0044\u0046\u003a\u0020\u0025\u0076",_dddgb );
|
|
if _bae :=RenderPDFToPNGs (_dddgb ,0,_caf );_bae !=nil {_gace .Skip (_bae );};_bee =true ;};};for _gdag :=1;true ;_gdag ++{_eac :=_db .Sprintf ("\u0025s\u002d\u0025\u0064\u002e\u0070\u006eg",_bce ,_gdag );_cfg :=_eg .Join (baselineRenderPath ,_db .Sprintf ("\u0025\u0073\u002d\u0025\u0064\u005f\u0065\u0078\u0070\u002e\u0070\u006e\u0067",_gbb ,_gdag ));
|
|
if _ ,_baa :=_gf .Stat (_eac );_baa !=nil {break ;};_gace .Logf ("\u0025\u0073",_cfg );if saveBaseline {_gace .Logf ("\u0043\u006fp\u0079\u0069\u006eg\u0020\u0025\u0073\u0020\u002d\u003e\u0020\u0025\u0073",_eac ,_cfg );_fdbc :=CopyFile (_eac ,_cfg );if _fdbc !=nil {_gace .Fatalf ("\u0045\u0052\u0052OR\u0020\u0063\u006f\u0070\u0079\u0069\u006e\u0067\u0020\u0074\u006f\u0020\u0025\u0073\u003a\u0020\u0025\u0076",_cfg ,_fdbc );
|
|
};if _bee {_ffdf :=_db .Sprintf ("\u0025s\u002d\u0025\u0064\u002e\u0070\u006eg",_bcgb ,_gdag );_dgc :=_eg .Join (baselineRenderPath ,_db .Sprintf ("\u0025\u0073\u002d\u0025\u0064\u005f\u0065\u0078\u0070\u002e\u0070\u006e\u0067",_cdc ,_gdag ));_gace .Logf ("\u0043\u006f\u0070\u0079\u0069\u006e\u0067\u0020\u004d\u0053\u0020\u0057\u006f\u0072\u0064 \u0072e\u0073\u0075\u006c\u0074\u0073\u0020\u0025\u0073\u0020\u002d\u003e\u0020\u0025\u0073",_ffdf ,_dgc );
|
|
_ebc :=CopyFile (_ffdf ,_dgc );if _ebc !=nil {_gace .Logf ("\u0045\u0052\u0052\u004f\u0052\u0020\u0063\u006f\u0070\u0079\u0069\u006eg\u0020\u0074\u006f \u0025\u0073\u003a\u0020\u0025\u0076\u002c\u0020\u0068\u0061\u0076i\u006e\u0067\u0020d\u0069\u0066\u0066\u0065r\u0065\u006e\u0074\u0020\u0070\u0061\u0067\u0065\u0020\u0073\u0069\u007a\u0065\u0020\u0072\u0065\u0073\u0075\u006c\u0074\u0073\u002c\u0020\u0072\u0065\u0070\u006c\u0061\u0063\u0069\u006eg\u0020\u0069\u0074\u0020\u0077\u0069\u0074\u0068\u0020\u0062\u006ca\u006e\u006b\u0020\u0069\u006d\u0061\u0067\u0065\u0020\u0069\u006e\u0073\u0074\u0065\u0061\u0064",_dgc ,_ebc );
|
|
if _bea :=_fbb (_cfg ,_dgc );_bea !=nil {_gace .Fatalf ("\u0045\u0052\u0052\u004f\u0052\u0020c\u0072\u0065\u0061\u0074\u0069\u006e\u0067\u0020\u0065\u006d\u0070\u0074\u0079 \u0069\u006d\u0061\u0067\u0065\u0020\u0025s\u003a\u0020\u0025\u0076",_dgc ,_bea );
|
|
};};_gace .Logf ("\u0043\u006fm\u0062\u0069\u006e\u0069\u006eg\u0020\u0055\u006e\u0069\u004ff\u0066\u0069\u0063\u0065\u0020\u0072\u0065\u0073\u0075\u006c\u0074\u0073\u0020\u0077\u0069\u0074\u0068\u0020\u004d\u0053\u0020\u004f\u0066\u0066\u0069\u0063\u0065\u0020\u0025\u0073\u0020\u0061\u006e\u0064\u0020\u0025\u0073",_cfg ,_dgc );
|
|
_cdb ,_ebc :=CombinePNGFiles (_cfg ,_dgc );if _gf .IsNotExist (_ebc ){_gace .Fatal ("\u0069m\u0061g\u0065\u0020\u0066\u0069\u006ce\u0020\u006di\u0073\u0073\u0069\u006e\u0067");}else if !_cdb {_gace .Fatal ("\u0055n\u0061\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0063\u006f\u006db\u0069\u006e\u0065\u0020\u0069\u006d\u0061\u0067\u0065\u0073");
|
|
};_gace .Logf ("\u0043\u0072\u0065\u0061\u0074\u0069\u006e\u0067\u0020\u0069\u006d\u0061\u0067\u0065\u0020\u0064\u0069\u0066f \u0055n\u0069\u004f\u0066\u0066\u0069\u0063\u0065\u0020\u0072\u0065\u0073\u0075l\u0074\u0073\u0020\u0077\u0069\u0074\u0068\u0020\u004d\u0053\u0020\u004f\u0066\u0066\u0069\u0063\u0065 \u0025\u0073\u0020\u0061\u006e\u0064\u0020\u0025\u0073",_cfg ,_dgc );
|
|
_cdb ,_fba ,_abae ,_gcb ,_ebc :=CreatePNGDiff (_cfg ,_dgc );if _ebc !=nil &&_ee .Is (_ebc ,ErrImageSizeNotMatch ){_gace .Fatalf ("\u0045\u0072\u0072\u006fr\u0020\u006f\u006e\u0020\u0063\u0072\u0065\u0061\u0074\u0065 \u0050N\u0047\u0020\u0044\u0069\u0066\u0066\u003a \u0025\u0076",_ebc );
|
|
};if _cdb {_gace .Logf ("\u0049\u006d\u0061\u0067\u0065\u003a\u0020\u0025\u0073\u000a",_fba );_gace .Logf ("D\u0069\u0066\u0066\u0020Pe\u0072c\u0065\u006e\u0074\u003a\u0020%\u0032\u002e\u0066\u0025\u0025\u000a",_abae );_gace .Logf ("\u0044i\u0066f\u0020\u0054\u006f\u0074\u0061\u006c\u003a\u0020\u0025\u0066\u000a",_gcb );
|
|
_bfg :=_eg .Base (_fba );_bfga ,_add :=currentHashMap .Read (_bfg );if _add &&(_bfga .DiffPercent < _abae ||_bfga .DiffTotal < _gcb ){_gace .Logf ("\u004e\u0065\u0077\u0020\u0072\u0065\u0073\u0075\u006c\u0074\u0073\u0020\u0068\u0061\u0076\u0069\u006e\u0067 h\u0069g\u0068\u0065\u0072\u0020\u0064\u0069\u0066\u0066\u0065\u0072\u0065\u006ec\u0065\u0020\u0070\u0065\u0072\u0063\u0065\u006e\u0074\u003a\u0020\u0025\u0066\u0020\u0061\u006e\u0064 \u0074\u006f\u0074\u0061\u006c\u0020\u0025\u0066\u000a",_abae ,_gcb );
|
|
};_acd ,_gffb :=HashFile (_fba );_cd .NoError (_gace ,_gffb );_fgd :=_bfb (_gace ,_fba );if !_add ||_bfga .Value !=_acd ||_bfga .ResultSize !=_fgd ||_bfga .DiffPercent !=_abae ||_bfga .DiffTotal !=_gcb {_dea :=ReferenceEntry {Timestamp :_bd .Now ().UTC ().Unix (),Value :_acd ,ResultSize :_fgd ,DiffPercent :_abae ,DiffTotal :_gcb };
|
|
currentHashMap .Write (_bfg ,_dea );if _gffb =refFile .Update (currentHashMap );_gffb !=nil {_gace .Logf ("\u0055\u0070\u0064\u0061\u0074\u0065\u0020\u0072\u0065\u0066\u0065\u0072\u0065\u006e\u0063e\u0020f\u0069\u006c\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_gffb );
|
|
};};};};continue ;};_gace .Run (_db .Sprintf ("\u0070\u0061\u0067\u0065\u0025\u0064",_gdag ),func (_egg *_e .T ){_egg .Logf ("\u0043o\u006dp\u0061\u0072\u0069\u006e\u0067 \u0025\u0073 \u0076\u0073\u0020\u0025\u0073",_eac ,_cfg );_gfb ,_aacc :=ComparePNGFiles (_eac ,_cfg );
|
|
if _gf .IsNotExist (_aacc ){_egg .Fatal ("\u0069m\u0061g\u0065\u0020\u0066\u0069\u006ce\u0020\u006di\u0073\u0073\u0069\u006e\u0067");}else if !_gfb {_egg .Fatal ("\u0077\u0072\u006f\u006eg \u0070\u0061\u0067\u0065\u0020\u0072\u0065\u006e\u0064\u0065\u0072\u0065\u0064");
|
|
};});};});};func CombinePNGFiles (file1 ,file2 string )(bool ,error ){_gc ,_ddcg :=ReadPNG (file1 );if _ddcg !=nil {return false ,_ddcg ;};_bcb ,_ddcg :=ReadPNG (file2 );if _ddcg !=nil {return false ,_ddcg ;};_fdc :=_de .Point {_gc .Bounds ().Dx (),0};
|
|
_bge :=_de .Rectangle {_fdc ,_fdc .Add (_bcb .Bounds ().Size ())};_bdf :=_de .Rectangle {_de .Point {0,0},_bge .Max };_cbf :=_de .NewRGBA (_bdf );_b .Draw (_cbf ,_gc .Bounds (),_gc ,_de .Point {0,0},_b .Src );_b .Draw (_cbf ,_bge ,_bcb ,_de .Point {0,0},_b .Src );
|
|
_eec :=_eg .Dir (file1 );_gcc :=_c .TrimSuffix (_eg .Base (file1 ),_eg .Ext (file1 ));_afb ,_ddcg :=_gf .Create (_eec +"\u002f"+_gcc +"\u002d\u0063\u006f\u006d\u0062\u0069\u006e\u0065\u0064\u002e\u0070\u006e\u0067");if _ddcg !=nil {return false ,_ddcg ;
|
|
};defer _afb .Close ();if _dbg :=_ga .Encode (_afb ,_cbf );_dbg !=nil {return false ,_dbg ;};return true ,nil ;};func (_fg *ReferenceMap )MarshalJSON ()([]byte ,error ){return _g .Marshal (_fg ._eef )};func CreatePNGDiff (src ,dst string )(bool ,string ,float64 ,float64 ,error ){_fgcg ,_dag :=ReadPNG (src );
|
|
if _dag !=nil {return false ,"",0,0,_dag ;};_bde ,_dag :=ReadPNG (dst );if _dag !=nil {return false ,"",0,0,_dag ;};_egf :=_fgcg .Bounds ();_eaa :=_bde .Bounds ();if !_adc (_egf ,_eaa ){if _ac .Abs (float64 (_egf .Max .X )-float64 (_eaa .Max .X ))> 1{_cc .Printf ("S\u006f\u0075\u0072\u0063\u0065\u0020b\u006f\u0075\u006e\u0064\u0073\u003a \u0025\u0076\u003b\u0020\u0044\u0065\u0073t\u0020\u0062\u006f\u0075\u006e\u0064\u0073\u003a\u0020\u0025v\u000a",_egf ,_eaa );
|
|
return false ,"",0,0,ErrImageSizeNotMatch ;};};_ae :=_de .NewRGBA (_de .Rect (0,0,_egf .Max .X ,_egf .Max .Y ));var (_edda float64 ;_gbgd float64 ;);for _afg :=_egf .Min .Y ;_afg < _egf .Max .Y ;_afg ++{for _gd :=_egf .Min .X ;_gd < _egf .Max .X ;_gd ++{_fae ,_dfd ,_bcg ,_ef :=_fgcg .At (_gd ,_afg ).RGBA ();
|
|
_gae ,_eeeg ,_aab ,_abe :=_bde .At (_gd ,_afg ).RGBA ();_ae .Set (_gd ,_afg ,_ge .RGBA {uint8 (_gae ),uint8 (_eeeg ),uint8 (_aab ),64});_eaf :=_ef ==0x00&&_fae ==0x00&&_dfd ==0x00&&_bcg ==0x00&&_gae ==0xFFFF&&_eeeg ==0xFFFF&&_aab ==0xFFFF;if !_eaf &&!_dfe (_fgcg .At (_gd ,_afg ),_bde .At (_gd ,_afg )){_ae .Set (_gd ,_afg ,_ge .RGBA {uint8 (_fae ),uint8 (_dfd ),uint8 (_bcg ),uint8 (_ef )});
|
|
_ecc :=float64 (_fae )+float64 (_dfd )+float64 (_bcg )+float64 (_ef )-float64 (_gae )+float64 (_eeeg )+float64 (_aab )+float64 (_abe );_dddg :=_ac .Sqrt (_ac .Pow (_ecc /float64 (_egf .Dx ()*_egf .Dy ()),2));_gbgd +=_dddg ;_edda ++;};};};_ggd :=_edda /float64 (_egf .Dx ()*_egf .Dy ())*100;
|
|
_fe :=_eg .Dir (src );_dce :=_c .TrimSuffix (_eg .Base (src ),_eg .Ext (src ));_aaa ,_dag :=_gf .Create (_fe +"\u002f"+_dce +"\u002dd\u0069\u0066\u0066\u002e\u0070\u006eg");if _dag !=nil {return false ,"",0,0,_dag ;};defer _aaa .Close ();_cfd :=_c .Replace (_fe ,"\u0072\u0065\u006e\u0064\u0065\u0072","\u0066\u006f\u006et\u0073",1)+"\u002f\u0043\u0061l\u0069\u0062\u0072\u0069\u002e\u0074\u0074\u0066";
|
|
_cdf :=_db .Sprintf ("\u0044\u0069f\u0066\u0065\u0072e\u006e\u0063\u0065\u003a\u0020\u0025\u0066\u0025\u0025",_ggd );_dag =_abee (_ae ,_cfd ,_cdf ,15,22);if _dag !=nil {return false ,"",0,0,_dag ;};_cdf =_db .Sprintf ("T\u006ft\u0061\u006c\u0020\u0044\u0069\u0066\u0066\u0065r\u0065\u006e\u0063\u0065: \u0025\u0066",_gbgd );
|
|
_dag =_abee (_ae ,_cfd ,_cdf ,15,44);if _dag !=nil {return false ,"",0,0,_dag ;};if _efe :=_ga .Encode (_aaa ,_ae );_efe !=nil {return false ,"",0,0,_efe ;};return true ,_aaa .Name (),_ggd ,_gbgd ,nil ;};func _dfe (_fdb ,_ce _ge .Color )bool {_ba ,_aac ,_ddf ,_gec :=_fdb .RGBA ();
|
|
_afbf ,_ffbb ,_baf ,_bfdc :=_ce .RGBA ();return _ba ==_afbf &&_aac ==_ffbb &&_ddf ==_baf &&_gec ==_bfdc ;};func RunRenderTest (t *_e .T ,pdfPath ,outputDir ,baselineRenderPath string ,saveBaseline bool ,currentHashMap *ReferenceMap ,refFile *ReferenceFile ){RunRenderOfficeTest (t ,pdfPath ,outputDir ,baselineRenderPath ,saveBaseline ,currentHashMap ,refFile ,"\u002em\u0073\u0077\u006f\u0072\u0064");
|
|
};type ReferenceEntry struct{Timestamp int64 `json:"timestamp"`;Value string `json:"value"`;ResultSize int64 `json:"resultSize,omitempty"`;DiffPercent float64 `json:"diffPercent,omitempty"`;DiffTotal float64 `json:"diffValue,omitempty"`;Invalid bool `json:"markedInvalid,omitempty"`;
|
|
};func HashFile (file string )(string ,error ){_fd ,_fgb :=_gf .Open (file );if _fgb !=nil {return "",_fgb ;};defer _fd .Close ();_gea :=_cb .New ();if _ ,_fgb =_d .Copy (_gea ,_fd );_fgb !=nil {return "",_fgb ;};return _ff .EncodeToString (_gea .Sum (nil )),nil ;
|
|
};func (_aa *ReferenceMap )Copy ()*ReferenceMap {_aae :=ReferenceMap {_eef :make (map[string ]ReferenceEntry ,len (_aa ._eef ))};for _gff ,_cg :=range _aa ._eef {_aae ._eef [_gff ]=_cg ;};return &_aae ;};func (_afe *ReferenceMap )Read (key string )(ReferenceEntry ,bool ){_afe .Lock ();
|
|
defer _afe .Unlock ();if _afe ._eef ==nil {return ReferenceEntry {},false ;};_eb ,_dcg :=_afe ._eef [key ];return _eb ,_dcg ;};func CompareImages (img1 ,img2 _de .Image )(bool ,error ){_fgc :=img1 .Bounds ();_cbc :=0;for _cad :=0;_cad < _fgc .Size ().X ;
|
|
_cad ++{for _aaeg :=0;_aaeg < _fgc .Size ().Y ;_aaeg ++{_gba ,_ggb ,_cgb ,_ :=img1 .At (_cad ,_aaeg ).RGBA ();_dcd ,_gfg ,_egd ,_ :=img2 .At (_cad ,_aaeg ).RGBA ();if _gba !=_dcd ||_ggb !=_gfg ||_cgb !=_egd {_cbc ++;};};};_adee :=float64 (_cbc )/float64 (_fgc .Dx ()*_fgc .Dy ());
|
|
if _adee > 0.0001{_db .Printf ("\u0064\u0069\u0066f \u0066\u0072\u0061\u0063\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0076\u0020\u0028\u0025\u0064\u0029\u000a",_adee ,_cbc );return false ,nil ;};return true ,nil ;}; |