go-hep.org/x/hep@v0.40.0/cmd/root2arrow/main_test.go (about)

     1  // Copyright ©2019 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 main // import "go-hep.org/x/hep/cmd/root2arrow"
     6  
     7  import (
     8  	"os"
     9  	"os/exec"
    10  	"testing"
    11  
    12  	"go-hep.org/x/hep/internal/diff"
    13  )
    14  
    15  func TestFile(t *testing.T) {
    16  	for _, tc := range []struct {
    17  		file   string
    18  		tree   string
    19  		stream bool
    20  		want   string
    21  	}{
    22  		{
    23  			file: "../../groot/testdata/simple.root",
    24  			tree: "tree",
    25  			want: "testdata/simple.root.file",
    26  		},
    27  		{
    28  			file:   "../../groot/testdata/simple.root",
    29  			tree:   "tree",
    30  			stream: true,
    31  			want:   "testdata/simple.root.stream",
    32  		},
    33  		{
    34  			file: "../../groot/testdata/leaves.root",
    35  			tree: "tree",
    36  			want: "testdata/leaves.root.file",
    37  		},
    38  		{
    39  			file:   "../../groot/testdata/leaves.root",
    40  			tree:   "tree",
    41  			stream: true,
    42  			want:   "testdata/leaves.root.stream",
    43  		},
    44  		{
    45  			file: "../../groot/testdata/embedded-std-vector.root",
    46  			tree: "modules",
    47  			want: "testdata/embedded-std-vector.root.file",
    48  		},
    49  		{
    50  			file:   "../../groot/testdata/embedded-std-vector.root",
    51  			tree:   "modules",
    52  			stream: true,
    53  			want:   "testdata/embedded-std-vector.root.stream",
    54  		},
    55  	} {
    56  		t.Run(tc.want, func(t *testing.T) {
    57  			f, err := os.CreateTemp("", "root2arrow-")
    58  			if err != nil {
    59  				t.Fatal(err)
    60  			}
    61  			f.Close()
    62  			defer os.Remove(f.Name())
    63  
    64  			err = process(f.Name(), tc.file, tc.tree, tc.stream)
    65  			if err != nil {
    66  				t.Fatal(err)
    67  			}
    68  
    69  			want, err := os.ReadFile(tc.want)
    70  			if err != nil {
    71  				t.Fatal(err)
    72  			}
    73  
    74  			got, err := arrowCat(f.Name())
    75  			if err != nil {
    76  				t.Fatal(err)
    77  			}
    78  
    79  			if got, want := string(got), string(want); got != want {
    80  				t.Fatalf(
    81  					"arrow file/stream differ:\n%s",
    82  					diff.Format(got, want),
    83  				)
    84  			}
    85  		})
    86  	}
    87  
    88  }
    89  
    90  func arrowCat(fname string) ([]byte, error) {
    91  	return exec.Command(
    92  		"go", "tool",
    93  		"git.sr.ht/~sbinet/go-arrow/ipc/cmd/arrow-cat",
    94  		fname,
    95  	).CombinedOutput()
    96  }