go-hep.org/x/hep@v0.38.1/hepmc/go-hepmc-dump/main_test.go (about) 1 // Copyright ©2018 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 6 7 import ( 8 "bytes" 9 "io" 10 "log" 11 "os" 12 "testing" 13 ) 14 15 func TestDump(t *testing.T) { 16 f, err := os.Open("../testdata/small.hepmc") 17 if err != nil { 18 log.Fatal(err) 19 } 20 defer f.Close() 21 22 out := new(bytes.Buffer) 23 err = dump(out, f) 24 if err != nil { 25 t.Fatal(err) 26 } 27 28 want, err := os.ReadFile("testdata/small.hepmc.ref") 29 if err != nil { 30 t.Fatal(err) 31 } 32 33 if !bytes.Equal(out.Bytes(), want) { 34 t.Fatalf("dump error.\ngot:\n%s\nwant:\n%s\n", out.Bytes(), want) 35 } 36 } 37 38 func TestDumpFail(t *testing.T) { 39 ref, err := os.ReadFile("../testdata/small.hepmc") 40 if err != nil { 41 t.Fatal(err) 42 } 43 44 for _, i := range []int{ 45 0, 1, 2, 3, 4, 5, 46 64, 128, 256, 47 } { 48 raw := ref[:i] 49 t.Run("input", func(t *testing.T) { 50 r := bytes.NewReader(raw) 51 out := new(bytes.Buffer) 52 err := dump(out, r) 53 if err == nil { 54 t.Fatalf("expected a failure\n%q\n", raw) 55 } 56 }) 57 } 58 59 want, err := os.ReadFile("testdata/small.hepmc.ref") 60 if err != nil { 61 t.Fatal(err) 62 } 63 64 for range len(want) - 1 { 65 nbytes := 0 66 t.Run("output", func(t *testing.T) { 67 r := bytes.NewReader(ref) 68 out := newWriter(nbytes) 69 err := dump(out, r) 70 if err == nil { 71 t.Fatalf("expected a failure") 72 } 73 }) 74 } 75 } 76 77 type failWriter struct { 78 n int 79 c int 80 } 81 82 func newWriter(n int) *failWriter { 83 return &failWriter{n: n, c: 0} 84 } 85 86 func (w *failWriter) Write(data []byte) (int, error) { 87 for range data { 88 w.c++ 89 if w.c >= w.n { 90 return 0, io.ErrUnexpectedEOF 91 } 92 } 93 return len(data), nil 94 }