@@ -399,6 +399,117 @@ dev_dependencies:
399
399
});
400
400
});
401
401
402
+ group ('reportExternalPathDependencies' , () {
403
+ late HookContext context;
404
+ late Logger logger;
405
+
406
+ setUp (() {
407
+ context = _MockHookContext ();
408
+ logger = _MockLogger ();
409
+
410
+ when (() => context.logger).thenReturn (logger);
411
+ });
412
+
413
+ test ('reports nothing when there are no external path dependencies' ,
414
+ () async {
415
+ final exitCalls = < int > [];
416
+ final directory = Directory .systemTemp.createTempSync ();
417
+ File (path.join (directory.path, 'pubspec.yaml' )).writeAsStringSync (
418
+ '''
419
+ name: example
420
+ version: 0.1.0
421
+ environment:
422
+ sdk: ^2.17.0
423
+ dependencies:
424
+ mason: any
425
+ dev_dependencies:
426
+ test: any
427
+ ''' ,
428
+ );
429
+ await expectLater (
430
+ reportExternalPathDependencies (context, directory, exitCalls.add),
431
+ completes,
432
+ );
433
+ verifyNever (() => logger.err (any ()));
434
+ expect (exitCalls, isEmpty);
435
+ directory.delete (recursive: true ).ignore ();
436
+ });
437
+
438
+ test ('reports when there is a single external path dependency' , () async {
439
+ final exitCalls = < int > [];
440
+ final directory = Directory .systemTemp.createTempSync ();
441
+ File (path.join (directory.path, 'pubspec.yaml' )).writeAsStringSync (
442
+ '''
443
+ name: example
444
+ version: 0.1.0
445
+ environment:
446
+ sdk: ^2.17.0
447
+ dependencies:
448
+ mason: any
449
+ foo:
450
+ path: ../../foo
451
+ dev_dependencies:
452
+ test: any
453
+ ''' ,
454
+ );
455
+ await expectLater (
456
+ reportExternalPathDependencies (context, directory, exitCalls.add),
457
+ completes,
458
+ );
459
+ expect (exitCalls, equals ([1 ]));
460
+ verify (
461
+ () => logger.err ('All path dependencies must be within the project.' ),
462
+ ).called (1 );
463
+ verify (
464
+ () => logger.err ('External path dependencies detected:' ),
465
+ ).called (1 );
466
+ verify (
467
+ () => logger.err (' \u {2022} foo from ../../foo' ),
468
+ ).called (1 );
469
+ directory.delete (recursive: true ).ignore ();
470
+ });
471
+
472
+ test ('reports when there are multiple external path dependencies' ,
473
+ () async {
474
+ final exitCalls = < int > [];
475
+ final directory = Directory .systemTemp.createTempSync ();
476
+ File (path.join (directory.path, 'pubspec.yaml' )).writeAsStringSync (
477
+ '''
478
+ name: example
479
+ version: 0.1.0
480
+ environment:
481
+ sdk: ^2.17.0
482
+ dependencies:
483
+ mason: any
484
+ foo:
485
+ path: ../../foo
486
+ dev_dependencies:
487
+ test: any
488
+ bar:
489
+ path: ../../bar
490
+ ''' ,
491
+ );
492
+ await expectLater (
493
+ reportExternalPathDependencies (context, directory, exitCalls.add),
494
+ completes,
495
+ );
496
+ expect (exitCalls, equals ([1 ]));
497
+ verify (
498
+ () => logger.err ('All path dependencies must be within the project.' ),
499
+ ).called (1 );
500
+ verify (
501
+ () => logger.err ('External path dependencies detected:' ),
502
+ ).called (1 );
503
+ verify (
504
+ () => logger.err (' \u {2022} foo from ../../foo' ),
505
+ ).called (1 );
506
+ verify (
507
+ () => logger.err (' \u {2022} bar from ../../bar' ),
508
+ ).called (1 );
509
+ directory.delete (recursive: true ).ignore ();
510
+ });
511
+ });
512
+
402
513
group ('ExitOverrides' , () {
403
514
group ('runZoned' , () {
404
515
test ('uses default exit when not specified' , () {
0 commit comments