go-hep.org/x/hep@v0.38.1/hplot/htex/latex_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 TestHandler(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.Handler 29 skip bool 30 want error 31 }{ 32 { 33 name: "noop-latex-handler", 34 latex: htex.NoopHandler{}, 35 want: nil, 36 }, 37 { 38 name: "pdflatex-not-there", 39 latex: htex.NewHandler("pdflatex-not-there"), 40 want: func() error { 41 err := fmt.Errorf("hplot: could not save plot: hplot: could not generate PDF: htex: could not generate PDF from vgtex:\n\nerror: exec: \"pdflatex-not-there\": executable file not found in $PATH") 42 if runtime.GOOS != "windows" { 43 return err 44 } 45 return fmt.Errorf("hplot: could not save plot: hplot: could not generate PDF: htex: could not generate PDF from vgtex:\n\nerror: exec: \"pdflatex-not-there\": executable file not found in %%PATH%%") 46 }(), 47 }, 48 { 49 name: "pdflatex-handler", 50 latex: htex.DefaultHandler, 51 skip: func() bool { 52 _, err := exec.LookPath("pdflatex") 53 return err != nil 54 }(), 55 want: nil, 56 }, 57 } { 58 name := fmt.Sprintf("pdflatex-%d", i) 59 t.Run(tc.name, func(t *testing.T) { 60 if tc.skip { 61 t.Skipf("skipping %q", tc.name) 62 } 63 p := hplot.New() 64 p.X.Min = -10 65 p.X.Max = +10 66 p.Y.Min = -10 67 p.Y.Max = +10 68 69 p.Title.Text = name 70 p.X.Label.Text = "X" 71 p.Y.Label.Text = "Y" 72 73 fig := hplot.Figure(p, hplot.WithLatexHandler(tc.latex)) 74 75 fname := fmt.Sprintf("%s/%s.tex", tmp, name) 76 defer os.RemoveAll(fname) 77 78 err := hplot.Save(fig, 10*vg.Centimeter, 10*vg.Centimeter, fname) 79 switch { 80 case err != nil && tc.want != nil: 81 if got, want := err.Error(), tc.want.Error(); got != want { 82 t.Fatalf("invalid error:\ngot= %q\nwant=%v", got, want) 83 } 84 case err != nil && tc.want == nil: 85 t.Fatalf("unexpected error: %+v", err) 86 case err == nil && tc.want == nil: 87 // ok. 88 case err == nil && tc.want != nil: 89 t.Fatalf("error:\ngot= %v\nwant=%v", err, tc.want) 90 } 91 }) 92 } 93 }