@@ -3,6 +3,7 @@ import 'dart:io';
3
3
import 'package:dart_frog_gen/dart_frog_gen.dart' ;
4
4
import 'package:mason/mason.dart' ;
5
5
import 'package:mocktail/mocktail.dart' ;
6
+ import 'package:path/path.dart' as path;
6
7
import 'package:test/test.dart' ;
7
8
8
9
import '../pre_gen.dart' ;
@@ -339,6 +340,111 @@ void main() {
339
340
});
340
341
});
341
342
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
+
342
448
group ('ExitOverrides' , () {
343
449
group ('runZoned' , () {
344
450
test ('uses default exit when not specified' , () {
0 commit comments