@@ -3,6 +3,7 @@ import 'dart:io';
33import 'package:dart_frog_gen/dart_frog_gen.dart' ;
44import 'package:mason/mason.dart' ;
55import 'package:mocktail/mocktail.dart' ;
6+ import 'package:path/path.dart' as path;
67import 'package:test/test.dart' ;
78
89import '../pre_gen.dart' ;
@@ -339,6 +340,111 @@ void main() {
339340 });
340341 });
341342
343+ group ('reportExternalPathDependencies' , () {
344+ late HookContext context;
345+ late Logger logger;
346+
347+ setUp (() {
348+ context = _MockHookContext ();
349+ logger = _MockLogger ();
350+
351+ when (() => context.logger).thenReturn (logger);
352+ });
353+
354+ test ('reports nothing when there are no external path dependencies' ,
355+ () async {
356+ final directory = Directory .systemTemp.createTempSync ();
357+ File (path.join (directory.path, 'pubspec.yaml' )).writeAsStringSync (
358+ '''
359+ name: example
360+ version: 0.1.0
361+ environment:
362+ sdk: ^2.17.0
363+ dependencies:
364+ mason: any
365+ dev_dependencies:
366+ test: any
367+ ''' ,
368+ );
369+ await expectLater (
370+ reportExternalPathDependencies (context, directory),
371+ completes,
372+ );
373+ verifyNever (() => logger.err (any ()));
374+ directory.delete (recursive: true ).ignore ();
375+ });
376+
377+ test ('reports when there is a single external path dependency' , () async {
378+ final directory = Directory .systemTemp.createTempSync ();
379+ File (path.join (directory.path, 'pubspec.yaml' )).writeAsStringSync (
380+ '''
381+ name: example
382+ version: 0.1.0
383+ environment:
384+ sdk: ^2.17.0
385+ dependencies:
386+ mason: any
387+ foo:
388+ path: ../../foo
389+ dev_dependencies:
390+ test: any
391+ ''' ,
392+ );
393+ await expectLater (
394+ reportExternalPathDependencies (context, directory),
395+ completes,
396+ );
397+ verify (
398+ () => logger.err ('All path dependencies must be within the project.' ),
399+ ).called (1 );
400+ verify (
401+ () => logger.err ('External path dependencies detected:' ),
402+ ).called (1 );
403+ verify (
404+ () => logger.err (' \u {2022} foo from ../../foo' ),
405+ ).called (1 );
406+ directory.delete (recursive: true ).ignore ();
407+ });
408+
409+ test ('reports when there are multiple external path dependencies' ,
410+ () async {
411+ final directory = Directory .systemTemp.createTempSync ();
412+ File (path.join (directory.path, 'pubspec.yaml' )).writeAsStringSync (
413+ '''
414+ name: example
415+ version: 0.1.0
416+ environment:
417+ sdk: ^2.17.0
418+ dependencies:
419+ mason: any
420+ foo:
421+ path: ../../foo
422+ dev_dependencies:
423+ test: any
424+ bar:
425+ path: ../../bar
426+ ''' ,
427+ );
428+ await expectLater (
429+ reportExternalPathDependencies (context, directory),
430+ completes,
431+ );
432+ verify (
433+ () => logger.err ('All path dependencies must be within the project.' ),
434+ ).called (1 );
435+ verify (
436+ () => logger.err ('External path dependencies detected:' ),
437+ ).called (1 );
438+ verify (
439+ () => logger.err (' \u {2022} foo from ../../foo' ),
440+ ).called (1 );
441+ verify (
442+ () => logger.err (' \u {2022} bar from ../../bar' ),
443+ ).called (1 );
444+ directory.delete (recursive: true ).ignore ();
445+ });
446+ });
447+
342448 group ('ExitOverrides' , () {
343449 group ('runZoned' , () {
344450 test ('uses default exit when not specified' , () {
0 commit comments