@@ -10,78 +10,93 @@ import (
1010)
1111
1212func TestIsAny (t * testing.T ) {
13- test := func (name string , err error , targets []error , want bool ) {
14- t .Helper ()
13+ tests := map [string ]struct {
14+ err error
15+ targets []error
16+ want bool
17+ }{
18+ "no matches" : {err : errFoo , targets : []error {errBar }, want : false },
19+ "single target match" : {err : errFoo , targets : []error {errFoo }, want : true },
20+ "single target match (wrapped)" : {err : wrap (errFoo ), targets : []error {errFoo }, want : true },
21+ "multiple targets match (wrapped)" : {err : wrap (errFoo ), targets : []error {errBar , errFoo }, want : true },
22+ }
23+
24+ for name , test := range tests {
1525 t .Run (name , func (t * testing.T ) {
16- t .Helper ()
17- if got := errorsx .IsAny (err , targets [0 ], targets [1 :]... ); got != want {
18- t .Errorf ("got %t; want %t" , got , want )
26+ if got := errorsx .IsAny (test .err , test .targets [0 ], test .targets [1 :]... ); got != test .want {
27+ t .Errorf ("got %t; want %t" , got , test .want )
1928 }
2029 })
2130 }
22-
23- test ("no matches" , errFoo , []error {errBar }, false )
24- test ("single target match" , errFoo , []error {errFoo }, true )
25- test ("single target match (wrapped)" , wrap (errFoo ), []error {errFoo }, true )
26- test ("multiple targets match (wrapped)" , wrap (errFoo ), []error {errBar , errFoo }, true )
2731}
2832
2933func TestHasType (t * testing.T ) {
30- test := func (name string , fn func (error ) bool , err error , want bool ) {
31- t .Helper ()
34+ tests := map [string ]struct {
35+ fn func (error ) bool
36+ err error
37+ want bool
38+ }{
39+ "no match" : {fn : errorsx .HasType [barError ], err : errFoo , want : false },
40+ "match (exact)" : {fn : errorsx .HasType [fooError ], err : errFoo , want : true },
41+ "match (wrapped)" : {fn : errorsx .HasType [fooError ], err : wrap (errFoo ), want : true },
42+ "match (interface)" : {fn : errorsx.HasType [interface { Error () string }], err : errFoo , want : true },
43+ }
44+
45+ for name , test := range tests {
3246 t .Run (name , func (t * testing.T ) {
33- t .Helper ()
34- if got := fn (err ); got != want {
35- t .Errorf ("got %t; want %t" , got , want )
47+ if got := test .fn (test .err ); got != test .want {
48+ t .Errorf ("got %t; want %t" , got , test .want )
3649 }
3750 })
3851 }
39-
40- test ("no match" , errorsx .HasType [barError ], errFoo , false )
41- test ("match (exact)" , errorsx .HasType [fooError ], errFoo , true )
42- test ("match (wrapped)" , errorsx .HasType [fooError ], wrap (errFoo ), true )
43- test ("match (interface)" , errorsx.HasType [interface { Error () string }], errFoo , true )
4452}
4553
4654func TestSplit (t * testing.T ) {
47- test := func (name string , err error , wantErrs []error ) {
48- t .Helper ()
55+ tests := map [string ]struct {
56+ err error
57+ wantErrs []error
58+ }{
59+ "nil error" : {err : nil , wantErrs : nil },
60+ "single error" : {err : errFoo , wantErrs : nil },
61+ "joined errors (errors.Join)" : {err : errors .Join (errFoo , errBar ), wantErrs : []error {errFoo , errBar }},
62+ "joined errors (fmt.Errorf)" : {err : fmt .Errorf ("%w; %w" , errFoo , errBar ), wantErrs : []error {errFoo , errBar }},
63+ }
64+
65+ for name , test := range tests {
4966 t .Run (name , func (t * testing.T ) {
50- t .Helper ()
51- if gotErrs := errorsx .Split (err ); ! slices .Equal (gotErrs , wantErrs ) {
52- t .Errorf ("got %v; want %v" , gotErrs , wantErrs )
67+ if gotErrs := errorsx .Split (test .err ); ! slices .Equal (gotErrs , test .wantErrs ) {
68+ t .Errorf ("got %v; want %v" , gotErrs , test .wantErrs )
5369 }
5470 })
5571 }
56-
57- test ("nil error" , nil , nil )
58- test ("single error" , errFoo , nil )
59- test ("joined errors (errors.Join)" , errors .Join (errFoo , errBar ), []error {errFoo , errBar })
60- test ("joined errors (fmt.Errorf)" , fmt .Errorf ("%w; %w" , errFoo , errBar ), []error {errFoo , errBar })
6172}
6273
6374func TestClose (t * testing.T ) {
64- test := func (name string , mainErr , closeErr error , wantErrs []error ) {
65- t .Helper ()
75+ tests := map [string ]struct {
76+ mainErr error
77+ closeErr error
78+ wantErrs []error
79+ }{
80+ "main: ok; close: ok" : {mainErr : nil , closeErr : nil , wantErrs : []error {}},
81+ "main: ok; close: error" : {mainErr : nil , closeErr : errBar , wantErrs : []error {errBar }},
82+ "main: error; close: ok" : {mainErr : errFoo , closeErr : nil , wantErrs : []error {errFoo }},
83+ "main: error; close: error" : {mainErr : errFoo , closeErr : errBar , wantErrs : []error {errFoo , errBar }},
84+ }
85+
86+ for name , test := range tests {
6687 t .Run (name , func (t * testing.T ) {
67- t .Helper ()
6888 gotErr := func () (err error ) {
69- c := errCloser {err : closeErr }
89+ c := errCloser {err : test . closeErr }
7090 defer errorsx .Close (& c , & err )
71- return mainErr
91+ return test . mainErr
7292 }()
73- for _ , wantErr := range wantErrs {
93+ for _ , wantErr := range test . wantErrs {
7494 if ! errors .Is (gotErr , wantErr ) {
75- t .Errorf ("got %v; want %v" , gotErr , wantErrs )
95+ t .Errorf ("got %v; want %v" , gotErr , wantErr )
7696 }
7797 }
7898 })
7999 }
80-
81- test ("main: ok; close: ok" , nil , nil , []error {})
82- test ("main: ok; close: error" , nil , errBar , []error {errBar })
83- test ("main: error; close: ok" , errFoo , nil , []error {errFoo })
84- test ("main: error; close: error" , errFoo , errBar , []error {errFoo , errBar })
85100}
86101
87102var (
0 commit comments