@@ -7,8 +7,10 @@ import { ParameterType } from "../../src/config.js";
7
7
import {
8
8
buildGlobalOptionsMap ,
9
9
buildGlobalOptionDefinition ,
10
+ resolveGlobalOptions ,
10
11
} from "../../src/internal/global-options.js" ;
11
12
import { RESERVED_PARAMETER_NAMES } from "../../src/internal/parameters.js" ;
13
+ import { createTestEnvManager } from "../utils.js" ;
12
14
13
15
describe ( "Global Options" , ( ) => {
14
16
describe ( "buildGlobalOptionsMap" , ( ) => {
@@ -240,7 +242,202 @@ describe("Global Options", () => {
240
242
} ) ;
241
243
} ) ;
242
244
243
- describe . todo ( "resolveGlobalOptions" , ( ) => {
244
- // TODO: Implement tests.
245
+ describe ( "resolveGlobalOptions" , ( ) => {
246
+ const { setEnvVar } = createTestEnvManager ( ) ;
247
+
248
+ it ( "should resolve to the default values when no options are provided" , ( ) => {
249
+ const globalOptionsMap = buildGlobalOptionsMap ( [
250
+ {
251
+ id : "plugin1" ,
252
+ globalOptions : [
253
+ buildGlobalOptionDefinition ( {
254
+ name : "param1" ,
255
+ description : "param1 description" ,
256
+ parameterType : ParameterType . BOOLEAN ,
257
+ defaultValue : true ,
258
+ } ) ,
259
+ buildGlobalOptionDefinition ( {
260
+ name : "param2" ,
261
+ description : "param2 description" ,
262
+ defaultValue : "default" ,
263
+ } ) ,
264
+ ] ,
265
+ } ,
266
+ ] ) ;
267
+
268
+ const globalOptions = resolveGlobalOptions ( { } , globalOptionsMap ) ;
269
+
270
+ assert . deepEqual ( globalOptions , {
271
+ param1 : true ,
272
+ param2 : "default" ,
273
+ } ) ;
274
+ } ) ;
275
+
276
+ it ( "should resolve to the user provided options and env variables" , ( ) => {
277
+ const globalOptionsMap = buildGlobalOptionsMap ( [
278
+ {
279
+ id : "plugin1" ,
280
+ globalOptions : [
281
+ buildGlobalOptionDefinition ( {
282
+ name : "param1" ,
283
+ description : "param1 description" ,
284
+ parameterType : ParameterType . BOOLEAN ,
285
+ defaultValue : true ,
286
+ } ) ,
287
+ buildGlobalOptionDefinition ( {
288
+ name : "param2" ,
289
+ description : "param2 description" ,
290
+ defaultValue : "default" ,
291
+ } ) ,
292
+ buildGlobalOptionDefinition ( {
293
+ name : "param3" ,
294
+ description : "param3 description" ,
295
+ parameterType : ParameterType . BIGINT ,
296
+ defaultValue : 0n ,
297
+ } ) ,
298
+ ] ,
299
+ } ,
300
+ ] ) ;
301
+
302
+ setEnvVar ( "HARDHAT_PARAM3" , "5n" ) ;
303
+
304
+ const globalOptions = resolveGlobalOptions (
305
+ {
306
+ param1 : "false" ,
307
+ param2 : "user" ,
308
+ } ,
309
+ globalOptionsMap ,
310
+ ) ;
311
+
312
+ assert . deepEqual ( globalOptions , {
313
+ param1 : false ,
314
+ param2 : "user" ,
315
+ param3 : 5n ,
316
+ } ) ;
317
+ } ) ;
318
+
319
+ it ( "should resolve to the user provided options over the environment variables" , ( ) => {
320
+ const globalOptionsMap = buildGlobalOptionsMap ( [
321
+ {
322
+ id : "plugin1" ,
323
+ globalOptions : [
324
+ buildGlobalOptionDefinition ( {
325
+ name : "param1" ,
326
+ description : "param1 description" ,
327
+ parameterType : ParameterType . BOOLEAN ,
328
+ defaultValue : true ,
329
+ } ) ,
330
+ buildGlobalOptionDefinition ( {
331
+ name : "param2" ,
332
+ description : "param2 description" ,
333
+ defaultValue : "default" ,
334
+ } ) ,
335
+ ] ,
336
+ } ,
337
+ ] ) ;
338
+
339
+ setEnvVar ( "HARDHAT_PARAM2" , "env" ) ;
340
+
341
+ const globalOptions = resolveGlobalOptions (
342
+ {
343
+ param1 : "false" ,
344
+ param2 : "user" ,
345
+ } ,
346
+ globalOptionsMap ,
347
+ ) ;
348
+
349
+ assert . deepEqual ( globalOptions , {
350
+ param1 : false ,
351
+ param2 : "user" ,
352
+ } ) ;
353
+ } ) ;
354
+
355
+ it ( "should ignore options that are not defined in the global option map" , ( ) => {
356
+ const globalOptionsMap = buildGlobalOptionsMap ( [
357
+ {
358
+ id : "plugin1" ,
359
+ globalOptions : [
360
+ buildGlobalOptionDefinition ( {
361
+ name : "param1" ,
362
+ description : "param1 description" ,
363
+ parameterType : ParameterType . BOOLEAN ,
364
+ defaultValue : true ,
365
+ } ) ,
366
+ ] ,
367
+ } ,
368
+ ] ) ;
369
+
370
+ setEnvVar ( "HARDHAT_PARAM3" , "env" ) ;
371
+
372
+ const globalOptions = resolveGlobalOptions (
373
+ {
374
+ param1 : "false" ,
375
+ param2 : "user" ,
376
+ } ,
377
+ globalOptionsMap ,
378
+ ) ;
379
+
380
+ assert . deepEqual ( globalOptions , {
381
+ param1 : false ,
382
+ } ) ;
383
+ } ) ;
384
+
385
+ it ( "should throw if the provided option is not valid" , ( ) => {
386
+ const globalOptionsMap = buildGlobalOptionsMap ( [
387
+ {
388
+ id : "plugin1" ,
389
+ globalOptions : [
390
+ buildGlobalOptionDefinition ( {
391
+ name : "param1" ,
392
+ description : "param1 description" ,
393
+ parameterType : ParameterType . BOOLEAN ,
394
+ defaultValue : true ,
395
+ } ) ,
396
+ ] ,
397
+ } ,
398
+ ] ) ;
399
+
400
+ assert . throws (
401
+ ( ) =>
402
+ resolveGlobalOptions (
403
+ {
404
+ param1 : "not a boolean" ,
405
+ } ,
406
+ globalOptionsMap ,
407
+ ) ,
408
+ new HardhatError ( HardhatError . ERRORS . ARGUMENTS . INVALID_VALUE_FOR_TYPE , {
409
+ value : "not a boolean" ,
410
+ name : "param1" ,
411
+ type : ParameterType . BOOLEAN ,
412
+ } ) ,
413
+ ) ;
414
+ } ) ;
415
+
416
+ it ( "should throw if the environment variable is not valid" , ( ) => {
417
+ const globalOptionsMap = buildGlobalOptionsMap ( [
418
+ {
419
+ id : "plugin1" ,
420
+ globalOptions : [
421
+ buildGlobalOptionDefinition ( {
422
+ name : "param1" ,
423
+ description : "param1 description" ,
424
+ parameterType : ParameterType . BOOLEAN ,
425
+ defaultValue : true ,
426
+ } ) ,
427
+ ] ,
428
+ } ,
429
+ ] ) ;
430
+
431
+ setEnvVar ( "HARDHAT_PARAM1" , "not a boolean" ) ;
432
+
433
+ assert . throws (
434
+ ( ) => resolveGlobalOptions ( { } , globalOptionsMap ) ,
435
+ new HardhatError ( HardhatError . ERRORS . ARGUMENTS . INVALID_VALUE_FOR_TYPE , {
436
+ value : "not a boolean" ,
437
+ name : "param1" ,
438
+ type : ParameterType . BOOLEAN ,
439
+ } ) ,
440
+ ) ;
441
+ } ) ;
245
442
} ) ;
246
443
} ) ;
0 commit comments