@@ -19,275 +19,34 @@ public class DataRowAttribute : Attribute, ITestDataSource
19
19
/// Initializes a new instance of the <see cref="DataRowAttribute"/> class.
20
20
/// </summary>
21
21
public DataRowAttribute ( )
22
- => Data = Array . Empty < object > ( ) ;
22
+ : this ( Array . Empty < object > ( ) )
23
+ {
24
+ }
23
25
24
26
/// <summary>
25
27
/// Initializes a new instance of the <see cref="DataRowAttribute"/> class.
26
28
/// </summary>
27
- /// <param name="arg1"> The first argument. </param>
28
- // Need to have this constructor explicitly to fix a CLS compliance error.
29
- public DataRowAttribute ( object ? arg1 )
30
- => Data = new object ? [ ] { arg1 } ;
31
-
32
- /// <summary>
33
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
34
- /// </summary>
35
- /// <param name="arg1"> The first argument. </param>
36
- /// <param name="arg2"> The second argument. </param>
37
- public DataRowAttribute ( object ? arg1 , object ? arg2 )
38
- => Data = new object ? [ ] { arg1 , arg2 } ;
39
-
40
- /// <summary>
41
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
42
- /// </summary>
43
- /// <param name="arg1"> The first argument. </param>
44
- /// <param name="arg2"> The second argument. </param>
45
- /// <param name="arg3"> The third argument. </param>
46
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 )
47
- => Data = new object ? [ ] { arg1 , arg2 , arg3 } ;
48
-
49
- /// <summary>
50
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
51
- /// </summary>
52
- /// <param name="arg1"> The first argument. </param>
53
- /// <param name="arg2"> The second argument. </param>
54
- /// <param name="arg3"> The third argument. </param>
55
- /// <param name="arg4"> The fourth argument. </param>
56
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 )
57
- => Data = new object ? [ ] { arg1 , arg2 , arg3 , arg4 } ;
58
-
59
- /// <summary>
60
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
61
- /// </summary>
62
- /// <param name="arg1"> The first argument. </param>
63
- /// <param name="arg2"> The second argument. </param>
64
- /// <param name="arg3"> The third argument. </param>
65
- /// <param name="arg4"> The fourth argument. </param>
66
- /// <param name="arg5"> The fifth argument. </param>
67
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 )
68
- => Data = new object ? [ ] { arg1 , arg2 , arg3 , arg4 , arg5 } ;
69
-
70
- /// <summary>
71
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
72
- /// </summary>
73
- /// <param name="arg1"> The first argument. </param>
74
- /// <param name="arg2"> The second argument. </param>
75
- /// <param name="arg3"> The third argument. </param>
76
- /// <param name="arg4"> The fourth argument. </param>
77
- /// <param name="arg5"> The fifth argument. </param>
78
- /// <param name="arg6"> The sixth argument. </param>
79
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 )
80
- => Data = new object ? [ ] { arg1 , arg2 , arg3 , arg4 , arg5 , arg6 } ;
81
-
82
- /// <summary>
83
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
84
- /// </summary>
85
- /// <param name="arg1"> The first argument. </param>
86
- /// <param name="arg2"> The second argument. </param>
87
- /// <param name="arg3"> The third argument. </param>
88
- /// <param name="arg4"> The fourth argument. </param>
89
- /// <param name="arg5"> The fifth argument. </param>
90
- /// <param name="arg6"> The sixth argument. </param>
91
- /// <param name="arg7"> The seventh argument. </param>
92
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
93
- object ? arg7 )
94
- => Data = new object ? [ ] { arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 } ;
95
-
96
- /// <summary>
97
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
98
- /// </summary>
99
- /// <param name="arg1"> The first argument. </param>
100
- /// <param name="arg2"> The second argument. </param>
101
- /// <param name="arg3"> The third argument. </param>
102
- /// <param name="arg4"> The fourth argument. </param>
103
- /// <param name="arg5"> The fifth argument. </param>
104
- /// <param name="arg6"> The sixth argument. </param>
105
- /// <param name="arg7"> The seventh argument. </param>
106
- /// <param name="arg8"> The eight argument. </param>
107
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
108
- object ? arg7 , object ? arg8 )
109
- => Data = new object ? [ ] { arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 } ;
110
-
111
- /// <summary>
112
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
113
- /// </summary>
114
- /// <param name="arg1"> The first argument. </param>
115
- /// <param name="arg2"> The second argument. </param>
116
- /// <param name="arg3"> The third argument. </param>
117
- /// <param name="arg4"> The fourth argument. </param>
118
- /// <param name="arg5"> The fifth argument. </param>
119
- /// <param name="arg6"> The sixth argument. </param>
120
- /// <param name="arg7"> The seventh argument. </param>
121
- /// <param name="arg8"> The eight argument. </param>
122
- /// <param name="arg9"> The nineth argument. </param>
123
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
124
- object ? arg7 , object ? arg8 , object ? arg9 )
125
- => Data = new object ? [ ] { arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 } ;
126
-
127
- /// <summary>
128
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
129
- /// </summary>
130
- /// <param name="arg1"> The first argument. </param>
131
- /// <param name="arg2"> The second argument. </param>
132
- /// <param name="arg3"> The third argument. </param>
133
- /// <param name="arg4"> The fourth argument. </param>
134
- /// <param name="arg5"> The fifth argument. </param>
135
- /// <param name="arg6"> The sixth argument. </param>
136
- /// <param name="arg7"> The seventh argument. </param>
137
- /// <param name="arg8"> The eight argument. </param>
138
- /// <param name="arg9"> The nineth argument. </param>
139
- /// <param name="arg10"> The tenth argument. </param>
140
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
141
- object ? arg7 , object ? arg8 , object ? arg9 , object ? arg10 )
142
- => Data = new object ? [ ] { arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 } ;
143
-
144
- /// <summary>
145
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
146
- /// </summary>
147
- /// <param name="arg1"> The first argument. </param>
148
- /// <param name="arg2"> The second argument. </param>
149
- /// <param name="arg3"> The third argument. </param>
150
- /// <param name="arg4"> The fourth argument. </param>
151
- /// <param name="arg5"> The fifth argument. </param>
152
- /// <param name="arg6"> The sixth argument. </param>
153
- /// <param name="arg7"> The seventh argument. </param>
154
- /// <param name="arg8"> The eight argument. </param>
155
- /// <param name="arg9"> The nineth argument. </param>
156
- /// <param name="arg10"> The tenth argument. </param>
157
- /// <param name="arg11"> The eleventh argument. </param>
158
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
159
- object ? arg7 , object ? arg8 , object ? arg9 , object ? arg10 , object ? arg11 )
160
- => Data = new object ? [ ]
161
- {
162
- arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 ,
163
- } ;
164
-
165
- /// <summary>
166
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
167
- /// </summary>
168
- /// <param name="arg1"> The first argument. </param>
169
- /// <param name="arg2"> The second argument. </param>
170
- /// <param name="arg3"> The third argument. </param>
171
- /// <param name="arg4"> The fourth argument. </param>
172
- /// <param name="arg5"> The fifth argument. </param>
173
- /// <param name="arg6"> The sixth argument. </param>
174
- /// <param name="arg7"> The seventh argument. </param>
175
- /// <param name="arg8"> The eight argument. </param>
176
- /// <param name="arg9"> The nineth argument. </param>
177
- /// <param name="arg10"> The tenth argument. </param>
178
- /// <param name="arg11"> The eleventh argument. </param>
179
- /// <param name="arg12"> The twelfth argument. </param>
180
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
181
- object ? arg7 , object ? arg8 , object ? arg9 , object ? arg10 , object ? arg11 , object ? arg12 )
182
- => Data = new object ? [ ]
183
- {
184
- arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 , arg12 ,
185
- } ;
186
-
187
- /// <summary>
188
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
189
- /// </summary>
190
- /// <param name="arg1"> The first argument. </param>
191
- /// <param name="arg2"> The second argument. </param>
192
- /// <param name="arg3"> The third argument. </param>
193
- /// <param name="arg4"> The fourth argument. </param>
194
- /// <param name="arg5"> The fifth argument. </param>
195
- /// <param name="arg6"> The sixth argument. </param>
196
- /// <param name="arg7"> The seventh argument. </param>
197
- /// <param name="arg8"> The eight argument. </param>
198
- /// <param name="arg9"> The nineth argument. </param>
199
- /// <param name="arg10"> The tenth argument. </param>
200
- /// <param name="arg11"> The eleventh argument. </param>
201
- /// <param name="arg12"> The twelfth argument. </param>
202
- /// <param name="arg13"> The thirteen argument. </param>
203
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
204
- object ? arg7 , object ? arg8 , object ? arg9 , object ? arg10 , object ? arg11 , object ? arg12 , object ? arg13 )
205
- => Data = new object ? [ ]
206
- {
207
- arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 ,
208
- arg12 , arg13 ,
209
- } ;
210
-
211
- /// <summary>
212
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
213
- /// </summary>
214
- /// <param name="arg1"> The first argument. </param>
215
- /// <param name="arg2"> The second argument. </param>
216
- /// <param name="arg3"> The third argument. </param>
217
- /// <param name="arg4"> The fourth argument. </param>
218
- /// <param name="arg5"> The fifth argument. </param>
219
- /// <param name="arg6"> The sixth argument. </param>
220
- /// <param name="arg7"> The seventh argument. </param>
221
- /// <param name="arg8"> The eight argument. </param>
222
- /// <param name="arg9"> The nineth argument. </param>
223
- /// <param name="arg10"> The tenth argument. </param>
224
- /// <param name="arg11"> The eleventh argument. </param>
225
- /// <param name="arg12"> The twelfth argument. </param>
226
- /// <param name="arg13"> The thirteen argument. </param>
227
- /// <param name="arg14"> The fourteenth argument. </param>
228
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
229
- object ? arg7 , object ? arg8 , object ? arg9 , object ? arg10 , object ? arg11 , object ? arg12 , object ? arg13 ,
230
- object ? arg14 )
231
- => Data = new object ? [ ]
232
- {
233
- arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 ,
234
- arg12 , arg13 , arg14 ,
235
- } ;
29
+ /// <param name="stringArrayData"> The string array data. </param>
30
+ public DataRowAttribute ( string ? [ ] ? stringArrayData )
31
+ : this ( new object ? [ ] { stringArrayData } )
32
+ {
33
+ }
236
34
237
35
/// <summary>
238
36
/// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
239
37
/// </summary>
240
- /// <param name="arg1"> The first argument. </param>
241
- /// <param name="arg2"> The second argument. </param>
242
- /// <param name="arg3"> The third argument. </param>
243
- /// <param name="arg4"> The fourth argument. </param>
244
- /// <param name="arg5"> The fifth argument. </param>
245
- /// <param name="arg6"> The sixth argument. </param>
246
- /// <param name="arg7"> The seventh argument. </param>
247
- /// <param name="arg8"> The eight argument. </param>
248
- /// <param name="arg9"> The nineth argument. </param>
249
- /// <param name="arg10"> The tenth argument. </param>
250
- /// <param name="arg11"> The eleventh argument. </param>
251
- /// <param name="arg12"> The twelfth argument. </param>
252
- /// <param name="arg13"> The thirteen argument. </param>
253
- /// <param name="arg14"> The fourteenth argument. </param>
254
- /// <param name="arg15"> The fifteenth argument. </param>
255
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
256
- object ? arg7 , object ? arg8 , object ? arg9 , object ? arg10 , object ? arg11 , object ? arg12 , object ? arg13 ,
257
- object ? arg14 , object ? arg15 )
258
- => Data = new object ? [ ]
38
+ /// <param name="data"> The data. </param>
39
+ public DataRowAttribute ( params object ? [ ] ? data )
40
+ {
41
+ if ( data == null )
259
42
{
260
- arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 ,
261
- arg12 , arg13 , arg14 , arg15 ,
262
- } ;
263
-
264
- /// <summary>
265
- /// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
266
- /// </summary>
267
- /// <param name="arg1"> The first argument. </param>
268
- /// <param name="arg2"> The second argument. </param>
269
- /// <param name="arg3"> The third argument. </param>
270
- /// <param name="arg4"> The fourth argument. </param>
271
- /// <param name="arg5"> The fifth argument. </param>
272
- /// <param name="arg6"> The sixth argument. </param>
273
- /// <param name="arg7"> The seventh argument. </param>
274
- /// <param name="arg8"> The eight argument. </param>
275
- /// <param name="arg9"> The nineth argument. </param>
276
- /// <param name="arg10"> The tenth argument. </param>
277
- /// <param name="arg11"> The eleventh argument. </param>
278
- /// <param name="arg12"> The twelfth argument. </param>
279
- /// <param name="arg13"> The thirteen argument. </param>
280
- /// <param name="arg14"> The fourteenth argument. </param>
281
- /// <param name="arg15"> The fifteenth argument. </param>
282
- /// <param name="arg16"> The sixteenth argument. </param>
283
- public DataRowAttribute ( object ? arg1 , object ? arg2 , object ? arg3 , object ? arg4 , object ? arg5 , object ? arg6 ,
284
- object ? arg7 , object ? arg8 , object ? arg9 , object ? arg10 , object ? arg11 , object ? arg12 , object ? arg13 ,
285
- object ? arg14 , object ? arg15 , object ? arg16 )
286
- => Data = new object ? [ ]
43
+ Data = new object ? [ ] { null } ;
44
+ }
45
+ else
287
46
{
288
- arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 ,
289
- arg12 , arg13 , arg14 , arg15 , arg16 ,
290
- } ;
47
+ Data = data ;
48
+ }
49
+ }
291
50
292
51
/// <summary>
293
52
/// Gets data for calling test method.
@@ -313,15 +72,21 @@ public DataRowAttribute(object? arg1, object? arg2, object? arg3, object? arg4,
313
72
return DisplayName ;
314
73
}
315
74
316
- if ( data ! = null )
75
+ if ( data = = null )
317
76
{
318
- // We want to force call to `data.AsEnumerable()` to ensure that objects are casted to strings (using ToString())
319
- // so that null do appear as "null". If you remove the call, and do string.Join(",", new object[] { null, "a" }),
320
- // you will get empty string while with the call you will get "null,a".
321
- return string . Format ( CultureInfo . CurrentCulture , FrameworkMessages . DataDrivenResultDisplayName , methodInfo . Name ,
322
- string . Join ( "," , data . AsEnumerable ( ) ) ) ;
77
+ return null ;
323
78
}
324
79
325
- return null ;
80
+ var parameters = methodInfo . GetParameters ( ) ;
81
+
82
+ // We want to force call to `data.AsEnumerable()` to ensure that objects are casted to strings (using ToString())
83
+ // so that null do appear as "null". If you remove the call, and do string.Join(",", new object[] { null, "a" }),
84
+ // you will get empty string while with the call you will get "null,a".
85
+ IEnumerable < object ? > displayData = parameters . Length == 1 && parameters [ 0 ] . ParameterType == typeof ( object [ ] )
86
+ ? new object [ ] { data . AsEnumerable ( ) }
87
+ : data . AsEnumerable ( ) ;
88
+
89
+ return string . Format ( CultureInfo . CurrentCulture , FrameworkMessages . DataDrivenResultDisplayName , methodInfo . Name ,
90
+ string . Join ( "," , displayData ) ) ;
326
91
}
327
92
}
0 commit comments