go-hep.org/x/hep@v0.38.1/hplot/htex/handler_test.go (about) 1 // Copyright ©2020 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package htex_test 6 7 import ( 8 "fmt" 9 "os" 10 "os/exec" 11 "runtime" 12 "testing" 13 14 "go-hep.org/x/hep/hplot" 15 "go-hep.org/x/hep/hplot/htex" 16 "gonum.org/v1/plot/vg" 17 ) 18 19 func TestGoHandler(t *testing.T) { 20 tmp, err := os.MkdirTemp("", "hplot-htex-") 21 if err != nil { 22 t.Fatalf("could not create tmpdir: %+v", err) 23 } 24 defer os.RemoveAll(tmp) 25 26 for i, tc := range []struct { 27 name string 28 latex *htex.GoHandler 29 skip bool 30 want error 31 }{ 32 { 33 name: "parallel-pdflatex-not-there", 34 latex: htex.NewGoHandler(-1, "pdflatex-not-there"), 35 want: func() error { 36 err := fmt.Errorf("htex: could not generate PDF from vgtex:\n\nerror: exec: \"pdflatex-not-there\": executable file not found in $PATH") 37 if runtime.GOOS != "windows" { 38 return err 39 } 40 return fmt.Errorf("htex: could not generate PDF from vgtex:\n\nerror: exec: \"pdflatex-not-there\": executable file not found in %%PATH%%") 41 }(), 42 }, 43 { 44 name: "parallel-pdflatex-handler", 45 latex: htex.NewGoHandler(-1, "pdflatex"), 46 skip: func() bool { 47 _, err := exec.LookPath("pdflatex") 48 return err != nil 49 }(), 50 want: nil, 51 }, 52 } { 53 name := fmt.Sprintf("pdflatex-%d", i) 54 t.Run(tc.name, func(t *testing.T) { 55 if tc.skip { 56 t.Skipf("skipping %q", tc.name) 57 } 58 p := hplot.New() 59 p.X.Min = -10 60 p.X.Max = +10 61 p.Y.Min = -10 62 p.Y.Max = +10 63 64 p.Title.Text = name 65 p.X.Label.Text = "X" 66 p.Y.Label.Text = "Y" 67 68 fig := hplot.Figure(p, hplot.WithLatexHandler(tc.latex)) 69 70 for i := range 10 { 71 fname := fmt.Sprintf("%s/%s-%02d.tex", tmp, name, i) 72 defer os.RemoveAll(fname) 73 74 err := hplot.Save(fig, 10*vg.Centimeter, 10*vg.Centimeter, fname) 75 if err != nil { 76 t.Fatalf("error: %+v", err) 77 } 78 } 79 80 err := tc.latex.Wait() 81 switch { 82 case err != nil && tc.want != nil: 83 if got, want := err.Error(), tc.want.Error(); got != want { 84 t.Fatalf("invalid error:\ngot= %q\nwant=%v", got, want) 85 } 86 case err != nil && tc.want == nil: 87 t.Fatalf("unexpected error: %+v", err) 88 case err == nil && tc.want == nil: 89 // ok. 90 case err == nil && tc.want != nil: 91 t.Fatalf("error:\ngot= %v\nwant=%v", err, tc.want) 92 } 93 }) 94 } 95 }