@@ -30,6 +30,7 @@ import (
30
30
"testing"
31
31
32
32
"github.com/stretchr/testify/assert"
33
+ "github.com/stretchr/testify/require"
33
34
"go.uber.org/dig"
34
35
"go.uber.org/dig/internal/digtest"
35
36
"go.uber.org/dig/internal/dot"
@@ -62,13 +63,14 @@ func TestDotGraph(t *testing.T) {
62
63
type t2 struct {}
63
64
type t3 struct {}
64
65
type t4 struct {}
65
- type t5 strings.Reader
66
+ type t5 struct {
67
+ strings.Reader
68
+ }
66
69
67
70
type1 := reflect .TypeOf (t1 {})
68
71
type2 := reflect .TypeOf (t2 {})
69
72
type3 := reflect .TypeOf (t3 {})
70
73
type4 := reflect .TypeOf (t4 {})
71
- type5 := reflect .TypeOf (t5 {})
72
74
type6 := reflect .Indirect (reflect .ValueOf (new (io.Reader ))).Type ()
73
75
type7 := reflect .Indirect (reflect .ValueOf (new (io.Writer ))).Type ()
74
76
@@ -81,7 +83,6 @@ func TestDotGraph(t *testing.T) {
81
83
r2 := tresult (type2 , "" , "" , 0 )
82
84
r3 := tresult (type3 , "" , "" , 0 )
83
85
r4 := tresult (type4 , "" , "" , 0 )
84
- r5 := tresult (type5 , "" , "" , 0 )
85
86
r6 := tresult (type6 , "" , "" , 0 )
86
87
87
88
t .Parallel ()
@@ -95,7 +96,7 @@ func TestDotGraph(t *testing.T) {
95
96
}
96
97
97
98
c := digtest .New (t )
98
- c .Provide (func (A t1 ) t2 { return t2 {} })
99
+ c .RequireProvide (func (A t1 ) t2 { return t2 {} })
99
100
100
101
dg := c .CreateGraph ()
101
102
assertCtorsEqual (t , expected , dg .Ctors )
@@ -105,12 +106,12 @@ func TestDotGraph(t *testing.T) {
105
106
expected := []* dot.Ctor {
106
107
{
107
108
Params : []* dot.Param {p1 },
108
- Results : []* dot.Result {r5 , r6 },
109
+ Results : []* dot.Result {r6 },
109
110
},
110
111
}
111
112
112
113
c := digtest .New (t )
113
- c .Provide (func (A t1 ) t5 { return t5 {} }, dig .As (new (io.Reader )))
114
+ c .RequireProvide (func (A t1 ) * t5 { return & t5 {} }, dig .As (new (io.Reader )))
114
115
115
116
dg := c .CreateGraph ()
116
117
assertCtorsEqual (t , expected , dg .Ctors )
@@ -133,9 +134,9 @@ func TestDotGraph(t *testing.T) {
133
134
}
134
135
135
136
c := digtest .New (t )
136
- c .Provide (func (A t1 ) t2 { return t2 {} })
137
- c .Provide (func (A t1 ) t3 { return t3 {} })
138
- c .Provide (func (A t2 ) t4 { return t4 {} })
137
+ c .RequireProvide (func (A t1 ) t2 { return t2 {} })
138
+ c .RequireProvide (func (A t1 ) t3 { return t3 {} })
139
+ c .RequireProvide (func (A t2 ) t4 { return t4 {} })
139
140
140
141
dg := c .CreateGraph ()
141
142
assertCtorsEqual (t , expected , dg .Ctors )
@@ -158,7 +159,7 @@ func TestDotGraph(t *testing.T) {
158
159
}
159
160
160
161
c := digtest .New (t )
161
- c .Provide (func (A t1 ) t2 { return t2 {} })
162
+ c .RequireProvide (func (A t1 ) t2 { return t2 {} })
162
163
163
164
s := c .Scope ("test" )
164
165
s .Provide (func (A t1 ) t3 { return t3 {} })
@@ -185,7 +186,7 @@ func TestDotGraph(t *testing.T) {
185
186
}
186
187
187
188
c := digtest .New (t )
188
- c .Provide (func (A t1 ) t2 { return t2 {} })
189
+ c .RequireProvide (func (A t1 ) t2 { return t2 {} })
189
190
190
191
s := c .Scope ("parent_scope" )
191
192
s .Provide (func (A t1 ) t3 { return t3 {} })
@@ -206,7 +207,7 @@ func TestDotGraph(t *testing.T) {
206
207
}
207
208
208
209
c := digtest .New (t )
209
- c .Provide (func (A t3 , B t4 ) (t1 , t2 ) { return t1 {}, t2 {} })
210
+ c .RequireProvide (func (A t3 , B t4 ) (t1 , t2 ) { return t1 {}, t2 {} })
210
211
211
212
dg := c .CreateGraph ()
212
213
assertCtorsEqual (t , expected , dg .Ctors )
@@ -235,7 +236,7 @@ func TestDotGraph(t *testing.T) {
235
236
}
236
237
237
238
c := digtest .New (t )
238
- c .Provide (func (i in ) out { return out {} })
239
+ c .RequireProvide (func (i in ) out { return out {} })
239
240
240
241
dg := c .CreateGraph ()
241
242
assertCtorsEqual (t , expected , dg .Ctors )
@@ -266,7 +267,7 @@ func TestDotGraph(t *testing.T) {
266
267
}
267
268
268
269
c := digtest .New (t )
269
- c .Provide (func (p in ) t4 { return t4 {} })
270
+ c .RequireProvide (func (p in ) t4 { return t4 {} })
270
271
271
272
dg := c .CreateGraph ()
272
273
assertCtorsEqual (t , expected , dg .Ctors )
@@ -301,7 +302,7 @@ func TestDotGraph(t *testing.T) {
301
302
}
302
303
303
304
c := digtest .New (t )
304
- c .Provide (func (A t1 ) out { return out {} })
305
+ c .RequireProvide (func (A t1 ) out { return out {} })
305
306
306
307
dg := c .CreateGraph ()
307
308
assertCtorsEqual (t , expected , dg .Ctors )
@@ -351,22 +352,22 @@ func TestDotGraph(t *testing.T) {
351
352
}
352
353
353
354
c := digtest .New (t )
354
- c .Provide (func (B t2 ) out1 { return out1 {} })
355
- c .Provide (func (B t4 ) out2 { return out2 {} })
356
- c .Provide (func (i in ) t3 { return t3 {} })
355
+ c .RequireProvide (func (B t2 ) out1 { return out1 {} })
356
+ c .RequireProvide (func (B t4 ) out2 { return out2 {} })
357
+ c .RequireProvide (func (i in ) t3 { return t3 {} })
357
358
358
359
dg := c .CreateGraph ()
359
360
assertCtorsEqual (t , expected , dg .Ctors )
360
361
})
361
362
362
363
t .Run ("value groups as" , func (t * testing.T ) {
363
364
c := digtest .New (t )
364
- c .Provide (
365
+ c .RequireProvide (
365
366
func () * bytes.Buffer { return bytes .NewBufferString ("foo" ) },
366
367
dig .As (new (io.Reader ), new (io.Writer )),
367
368
dig .Group ("buffs" ),
368
369
)
369
- c .Provide (
370
+ c .RequireProvide (
370
371
func () * bytes.Buffer { return bytes .NewBufferString ("bar" ) },
371
372
dig .As (new (io.Reader ), new (io.Writer )),
372
373
dig .Group ("buffs" ),
@@ -408,7 +409,7 @@ func TestDotGraph(t *testing.T) {
408
409
}
409
410
410
411
c := digtest .New (t )
411
- c .Provide (func (i in ) out { return out {B : t2 {}} })
412
+ c .RequireProvide (func (i in ) out { return out {B : t2 {}} })
412
413
413
414
dg := c .CreateGraph ()
414
415
assertCtorsEqual (t , expected , dg .Ctors )
@@ -435,7 +436,7 @@ func TestDotGraph(t *testing.T) {
435
436
}
436
437
437
438
c := digtest .New (t )
438
- c .Provide (func (i in ) t4 { return t4 {} })
439
+ c .RequireProvide (func (i in ) t4 { return t4 {} })
439
440
440
441
dg := c .CreateGraph ()
441
442
assertCtorsEqual (t , expected , dg .Ctors )
@@ -449,6 +450,7 @@ func assertCtorEqual(t *testing.T, expected *dot.Ctor, ctor *dot.Ctor) {
449
450
}
450
451
451
452
func assertCtorsEqual (t * testing.T , expected []* dot.Ctor , ctors []* dot.Ctor ) {
453
+ require .Equal (t , len (expected ), len (ctors ))
452
454
for i , c := range ctors {
453
455
assertCtorEqual (t , expected [i ], c )
454
456
}
@@ -470,8 +472,8 @@ func TestVisualize(t *testing.T) {
470
472
t .Run ("simple graph" , func (t * testing.T ) {
471
473
c := digtest .New (t )
472
474
473
- c .Provide (func () (t1 , t2 ) { return t1 {}, t2 {} })
474
- c .Provide (func (A t1 , B t2 ) (t3 , t4 ) { return t3 {}, t4 {} })
475
+ c .RequireProvide (func () (t1 , t2 ) { return t1 {}, t2 {} })
476
+ c .RequireProvide (func (A t1 , B t2 ) (t3 , t4 ) { return t3 {}, t4 {} })
475
477
dig .VerifyVisualization (t , "simple" , c .Container )
476
478
})
477
479
@@ -495,8 +497,8 @@ func TestVisualize(t *testing.T) {
495
497
A t3 `name:"foo"`
496
498
}
497
499
498
- c .Provide (func (in ) out1 { return out1 {} })
499
- c .Provide (func () out2 { return out2 {} })
500
+ c .RequireProvide (func (in ) out1 { return out1 {} })
501
+ c .RequireProvide (func () out2 { return out2 {} })
500
502
dig .VerifyVisualization (t , "named" , c .Container )
501
503
})
502
504
@@ -521,8 +523,8 @@ func TestVisualize(t *testing.T) {
521
523
A t1 `optional:"true"`
522
524
}
523
525
524
- c .Provide (func () t1 { return t1 {} })
525
- c .Provide (func (in ) t2 { return t2 {} })
526
+ c .RequireProvide (func () t1 { return t1 {} })
527
+ c .RequireProvide (func (in ) t2 { return t2 {} })
526
528
dig .VerifyVisualization (t , "optional" , c .Container )
527
529
})
528
530
@@ -547,9 +549,9 @@ func TestVisualize(t *testing.T) {
547
549
A t3 `group:"foo"`
548
550
}
549
551
550
- c .Provide (func () out1 { return out1 {} })
551
- c .Provide (func () out2 { return out2 {} })
552
- c .Provide (func (in ) t2 { return t2 {} })
552
+ c .RequireProvide (func () out1 { return out1 {} })
553
+ c .RequireProvide (func () out2 { return out2 {} })
554
+ c .RequireProvide (func (in ) t2 { return t2 {} })
553
555
554
556
dig .VerifyVisualization (t , "grouped" , c .Container )
555
557
})
@@ -590,32 +592,32 @@ func TestVisualize(t *testing.T) {
590
592
B t2 `group:"g2"`
591
593
}
592
594
593
- c .Provide (func (in1 ) out1 { return out1 {} })
594
- c .Provide (func (in2 ) t4 { return t4 {} })
595
- c .Provide (func () out2 { return out2 {} })
596
- c .Provide (func () (out3 , error ) { return out3 {}, errors .New ("great sadness" ) })
595
+ c .RequireProvide (func (in1 ) out1 { return out1 {} })
596
+ c .RequireProvide (func (in2 ) t4 { return t4 {} })
597
+ c .RequireProvide (func () out2 { return out2 {} })
598
+ c .RequireProvide (func () (out3 , error ) { return out3 {}, errors .New ("great sadness" ) })
597
599
err := c .Invoke (func (t4 t4 ) {})
598
600
599
601
dig .VerifyVisualization (t , "error" , c .Container , dig .VisualizeError (err ))
600
602
601
603
t .Run ("non-failing graph nodes are pruned" , func (t * testing.T ) {
602
604
t .Run ("prune non-failing constructor result" , func (t * testing.T ) {
603
605
c := digtest .New (t )
604
- c .Provide (func (in1 ) out1 { return out1 {} })
605
- c .Provide (func (in2 ) t4 { return t4 {} })
606
- c .Provide (func () (out2 , error ) { return out2 {}, errors .New ("great sadness" ) })
607
- c .Provide (func () out3 { return out3 {} })
606
+ c .RequireProvide (func (in1 ) out1 { return out1 {} })
607
+ c .RequireProvide (func (in2 ) t4 { return t4 {} })
608
+ c .RequireProvide (func () (out2 , error ) { return out2 {}, errors .New ("great sadness" ) })
609
+ c .RequireProvide (func () out3 { return out3 {} })
608
610
err := c .Invoke (func (t4 t4 ) {})
609
611
610
612
dig .VerifyVisualization (t , "prune_constructor_result" , c .Container , dig .VisualizeError (err ))
611
613
})
612
614
613
615
t .Run ("if only the root node fails all node except for the root should be pruned" , func (t * testing.T ) {
614
616
c := digtest .New (t )
615
- c .Provide (func (in1 ) out1 { return out1 {} })
616
- c .Provide (func (in2 ) (t4 , error ) { return t4 {}, errors .New ("great sadness" ) })
617
- c .Provide (func () out2 { return out2 {} })
618
- c .Provide (func () out3 { return out3 {} })
617
+ c .RequireProvide (func (in1 ) out1 { return out1 {} })
618
+ c .RequireProvide (func (in2 ) (t4 , error ) { return t4 {}, errors .New ("great sadness" ) })
619
+ c .RequireProvide (func () out2 { return out2 {} })
620
+ c .RequireProvide (func () out3 { return out3 {} })
619
621
err := c .Invoke (func (t4 t4 ) {})
620
622
621
623
dig .VerifyVisualization (t , "prune_non_root_nodes" , c .Container , dig .VisualizeError (err ))
@@ -626,7 +628,7 @@ func TestVisualize(t *testing.T) {
626
628
t .Run ("missing types" , func (t * testing.T ) {
627
629
c := digtest .New (t )
628
630
629
- c .Provide (func (A t1 , B t2 , C t3 ) t4 { return t4 {} })
631
+ c .RequireProvide (func (A t1 , B t2 , C t3 ) t4 { return t4 {} })
630
632
err := c .Invoke (func (t4 t4 ) {})
631
633
632
634
dig .VerifyVisualization (t , "missing" , c .Container , dig .VisualizeError (err ))
0 commit comments