1package warnings_test 2 3import ( 4 "errors" 5 "reflect" 6 "testing" 7 8 w "gopkg.in/warnings.v0" 9) 10 11var _ error = w.List{} 12 13type warn string 14 15func (w warn) Error() string { return string(w) } 16 17func warning(s string) error { return warn(s) } 18func fatal(s string) error { return errors.New(s) } 19 20func isFatal(err error) bool { 21 _, ok := err.(warn) 22 return !ok 23} 24 25func omitNils(errs []error) []error { 26 if errs == nil { 27 return nil 28 } 29 res := []error{} 30 for _, err := range errs { 31 if err != nil { 32 res = append(res, err) 33 } 34 } 35 return res 36} 37 38var collectorTests = [...]struct { 39 collector w.Collector 40 warnings []error 41 fatal error 42}{ 43 {w.Collector{IsFatal: isFatal}, nil, nil}, 44 {w.Collector{IsFatal: isFatal}, nil, fatal("1f")}, 45 {w.Collector{IsFatal: isFatal}, []error{warning("1w")}, nil}, 46 {w.Collector{IsFatal: isFatal}, []error{warning("1w")}, fatal("2f")}, 47 {w.Collector{IsFatal: isFatal}, []error{warning("1w"), warning("2w")}, fatal("3f")}, 48 {w.Collector{IsFatal: isFatal}, []error{warning("1w"), nil, warning("2w")}, fatal("3f")}, 49 {w.Collector{IsFatal: isFatal, FatalWithWarnings: true}, []error{warning("1w")}, fatal("2f")}, 50} 51 52func TestCollector(t *testing.T) { 53 for _, tt := range collectorTests { 54 c := tt.collector 55 for _, warn := range tt.warnings { 56 err := c.Collect(warn) 57 if err != nil { 58 t.Fatalf("Collect(%v) = %v; want nil", warn, err) 59 } 60 } 61 if tt.fatal != nil { 62 err := c.Collect(tt.fatal) 63 if err == nil || w.FatalOnly(err) != tt.fatal { 64 t.Fatalf("Collect(%v) = %v; want fatal %v", tt.fatal, 65 err, tt.fatal) 66 } 67 } 68 err := c.Done() 69 if tt.fatal != nil { 70 if err == nil || w.FatalOnly(err) != tt.fatal { 71 t.Fatalf("Done() = %v; want fatal %v", err, tt.fatal) 72 } 73 } 74 if tt.fatal == nil || c.FatalWithWarnings { 75 warns := w.WarningsOnly(err) 76 if !reflect.DeepEqual(warns, omitNils(tt.warnings)) { 77 t.Fatalf("Done() = %v; want warnings %v", err, 78 omitNils(tt.warnings)) 79 } 80 } 81 } 82} 83