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  }