@@ -399,6 +399,117 @@ dev_dependencies:
399399 });
400400 });
401401
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+
402513 group ('ExitOverrides' , () {
403514 group ('runZoned' , () {
404515 test ('uses default exit when not specified' , () {
0 commit comments