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  }