@@ -19,7 +19,7 @@ public void HostProviderRegistry_Register_AutoProviderId_ThrowException()
19
19
var provider = new Mock < IHostProvider > ( ) ;
20
20
provider . Setup ( x => x . Id ) . Returns ( Constants . ProviderIdAuto ) ;
21
21
22
- Assert . Throws < ArgumentException > ( ( ) => registry . Register ( provider . Object ) ) ;
22
+ Assert . Throws < ArgumentException > ( ( ) => registry . Register ( provider . Object , HostProviderPriority . Normal ) ) ;
23
23
}
24
24
25
25
[ Fact ]
@@ -30,7 +30,7 @@ public void HostProviderRegistry_Register_AutoAuthorityId_ThrowException()
30
30
var provider = new Mock < IHostProvider > ( ) ;
31
31
provider . Setup ( x => x . SupportedAuthorityIds ) . Returns ( new [ ] { "foo" , Constants . AuthorityIdAuto , "bar" } ) ;
32
32
33
- Assert . Throws < ArgumentException > ( ( ) => registry . Register ( provider . Object ) ) ;
33
+ Assert . Throws < ArgumentException > ( ( ) => registry . Register ( provider . Object , HostProviderPriority . Normal ) ) ;
34
34
}
35
35
36
36
[ Fact ]
@@ -57,7 +57,9 @@ public async Task HostProviderRegistry_GetProvider_Auto_HasProviders_ReturnsSupp
57
57
provider2Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( true ) ;
58
58
provider3Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( false ) ;
59
59
60
- registry . Register ( provider1Mock . Object , provider2Mock . Object , provider3Mock . Object ) ;
60
+ registry . Register ( provider1Mock . Object , HostProviderPriority . Normal ) ;
61
+ registry . Register ( provider2Mock . Object , HostProviderPriority . Normal ) ;
62
+ registry . Register ( provider3Mock . Object , HostProviderPriority . Normal ) ;
61
63
62
64
IHostProvider result = await registry . GetProviderAsync ( input ) ;
63
65
@@ -78,13 +80,41 @@ public async Task HostProviderRegistry_GetProvider_Auto_MultipleValidProviders_R
78
80
provider2Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( true ) ;
79
81
provider3Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( true ) ;
80
82
81
- registry . Register ( provider1Mock . Object , provider2Mock . Object , provider3Mock . Object ) ;
83
+ registry . Register ( provider1Mock . Object , HostProviderPriority . Normal ) ;
84
+ registry . Register ( provider2Mock . Object , HostProviderPriority . Normal ) ;
85
+ registry . Register ( provider3Mock . Object , HostProviderPriority . Normal ) ;
82
86
83
87
IHostProvider result = await registry . GetProviderAsync ( input ) ;
84
88
85
89
Assert . Same ( provider1Mock . Object , result ) ;
86
90
}
87
91
92
+ [ Fact ]
93
+ public async Task HostProviderRegistry_GetProvider_Auto_MultipleValidProvidersMultipleLevels_ReturnsFirstHighestRegistered ( )
94
+ {
95
+ var context = new TestCommandContext ( ) ;
96
+ var registry = new HostProviderRegistry ( context ) ;
97
+ var input = new InputArguments ( new Dictionary < string , string > ( ) ) ;
98
+
99
+ var provider1Mock = new Mock < IHostProvider > ( ) ;
100
+ var provider2Mock = new Mock < IHostProvider > ( ) ;
101
+ var provider3Mock = new Mock < IHostProvider > ( ) ;
102
+ var provider4Mock = new Mock < IHostProvider > ( ) ;
103
+ provider1Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( true ) ;
104
+ provider2Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( true ) ;
105
+ provider3Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( true ) ;
106
+ provider4Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( true ) ;
107
+
108
+ registry . Register ( provider1Mock . Object , HostProviderPriority . Low ) ;
109
+ registry . Register ( provider2Mock . Object , HostProviderPriority . Normal ) ;
110
+ registry . Register ( provider3Mock . Object , HostProviderPriority . High ) ;
111
+ registry . Register ( provider4Mock . Object , HostProviderPriority . Low ) ;
112
+
113
+ IHostProvider result = await registry . GetProviderAsync ( input ) ;
114
+
115
+ Assert . Same ( provider3Mock . Object , result ) ;
116
+ }
117
+
88
118
[ Fact ]
89
119
public async Task HostProviderRegistry_GetProvider_ProviderSpecified_ReturnsProvider ( )
90
120
{
@@ -105,7 +135,9 @@ public async Task HostProviderRegistry_GetProvider_ProviderSpecified_ReturnsProv
105
135
provider3Mock . Setup ( x => x . Id ) . Returns ( "provider3" ) ;
106
136
provider3Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( false ) ;
107
137
108
- registry . Register ( provider1Mock . Object , provider2Mock . Object , provider3Mock . Object ) ;
138
+ registry . Register ( provider1Mock . Object , HostProviderPriority . Normal ) ;
139
+ registry . Register ( provider2Mock . Object , HostProviderPriority . Normal ) ;
140
+ registry . Register ( provider3Mock . Object , HostProviderPriority . Normal ) ;
109
141
110
142
IHostProvider result = await registry . GetProviderAsync ( input ) ;
111
143
@@ -132,7 +164,9 @@ public async Task HostProviderRegistry_GetProvider_AutoProviderSpecified_Returns
132
164
provider3Mock . Setup ( x => x . Id ) . Returns ( "provider3" ) ;
133
165
provider3Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( false ) ;
134
166
135
- registry . Register ( provider1Mock . Object , provider2Mock . Object , provider3Mock . Object ) ;
167
+ registry . Register ( provider1Mock . Object , HostProviderPriority . Normal ) ;
168
+ registry . Register ( provider2Mock . Object , HostProviderPriority . Normal ) ;
169
+ registry . Register ( provider3Mock . Object , HostProviderPriority . Normal ) ;
136
170
137
171
IHostProvider result = await registry . GetProviderAsync ( input ) ;
138
172
@@ -159,7 +193,9 @@ public async Task HostProviderRegistry_GetProvider_UnknownProviderSpecified_Retu
159
193
provider3Mock . Setup ( x => x . Id ) . Returns ( "provider3" ) ;
160
194
provider3Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( false ) ;
161
195
162
- registry . Register ( provider1Mock . Object , provider2Mock . Object , provider3Mock . Object ) ;
196
+ registry . Register ( provider1Mock . Object , HostProviderPriority . Normal ) ;
197
+ registry . Register ( provider2Mock . Object , HostProviderPriority . Normal ) ;
198
+ registry . Register ( provider3Mock . Object , HostProviderPriority . Normal ) ;
163
199
164
200
IHostProvider result = await registry . GetProviderAsync ( input ) ;
165
201
@@ -186,7 +222,9 @@ public async Task HostProviderRegistry_GetProvider_LegacyAuthoritySpecified_Retu
186
222
provider3Mock . Setup ( x => x . SupportedAuthorityIds ) . Returns ( new [ ] { "authorityD" } ) ;
187
223
provider3Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( false ) ;
188
224
189
- registry . Register ( provider1Mock . Object , provider2Mock . Object , provider3Mock . Object ) ;
225
+ registry . Register ( provider1Mock . Object , HostProviderPriority . Normal ) ;
226
+ registry . Register ( provider2Mock . Object , HostProviderPriority . Normal ) ;
227
+ registry . Register ( provider3Mock . Object , HostProviderPriority . Normal ) ;
190
228
191
229
IHostProvider result = await registry . GetProviderAsync ( input ) ;
192
230
@@ -213,7 +251,9 @@ public async Task HostProviderRegistry_GetProvider_AutoLegacyAuthoritySpecified_
213
251
provider3Mock . Setup ( x => x . SupportedAuthorityIds ) . Returns ( new [ ] { "authorityD" } ) ;
214
252
provider3Mock . Setup ( x => x . IsSupported ( It . IsAny < InputArguments > ( ) ) ) . Returns ( false ) ;
215
253
216
- registry . Register ( provider1Mock . Object , provider2Mock . Object , provider3Mock . Object ) ;
254
+ registry . Register ( provider1Mock . Object , HostProviderPriority . Normal ) ;
255
+ registry . Register ( provider2Mock . Object , HostProviderPriority . Normal ) ;
256
+ registry . Register ( provider3Mock . Object , HostProviderPriority . Normal ) ;
217
257
218
258
IHostProvider result = await registry . GetProviderAsync ( input ) ;
219
259
0 commit comments