@@ -64,6 +64,21 @@ void main() {
6464 package.pubspecFile.writeAsStringSync (lines.join ('\n ' ));
6565 }
6666
67+ /// Adds dummy 'dependencies:' entries for each package in [dependencies]
68+ /// to [package] , using a path-based dependency.
69+ void addPathDependencies (
70+ RepositoryPackage package, Iterable <String > dependencies,
71+ {required String relativePathBase}) {
72+ final List <String > lines = package.pubspecFile.readAsLinesSync ();
73+ final int dependenciesStartIndex = lines.indexOf ('dependencies:' );
74+ assert (dependenciesStartIndex != - 1 );
75+ lines.insertAll (dependenciesStartIndex + 1 , < String > [
76+ for (final String dependency in dependencies)
77+ ' $dependency : { path: $relativePathBase $dependency }' ,
78+ ]);
79+ package.pubspecFile.writeAsStringSync (lines.join ('\n ' ));
80+ }
81+
6782 /// Adds a 'dev_dependencies:' section with entries for each package in
6883 /// [dependencies] to [package] .
6984 void addDevDependenciesSection (
@@ -172,15 +187,15 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
172187 final Map <String , String ?> simplePackageOverrides =
173188 getDependencyOverrides (simplePackage);
174189 expect (simplePackageOverrides.length, 2 );
175- expect (simplePackageOverrides['bar' ], '../bar/bar' );
190+ expect (simplePackageOverrides['bar' ], '../../packages/ bar/bar' );
176191 expect (simplePackageOverrides['bar_platform_interface' ],
177- '../bar/bar_platform_interface' );
192+ '../../packages/ bar/bar_platform_interface' );
178193
179194 final Map <String , String ?> appFacingPackageOverrides =
180195 getDependencyOverrides (pluginAppFacing);
181196 expect (appFacingPackageOverrides.length, 1 );
182197 expect (appFacingPackageOverrides['bar_platform_interface' ],
183- '../../bar/bar_platform_interface' );
198+ '../../../packages/ bar/bar_platform_interface' );
184199 });
185200
186201 test ('rewrites "dev_dependencies" references' , () async {
@@ -205,7 +220,7 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
205220 final Map <String , String ?> overrides =
206221 getDependencyOverrides (builderPackage);
207222 expect (overrides.length, 1 );
208- expect (overrides['foo' ], '../foo' );
223+ expect (overrides['foo' ], '../../packages/ foo' );
209224 });
210225
211226 test ('rewrites examples when rewriting the main package' , () async {
@@ -230,7 +245,8 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
230245 final Map <String , String ?> exampleOverrides =
231246 getDependencyOverrides (pluginAppFacing.getExamples ().first);
232247 expect (exampleOverrides.length, 1 );
233- expect (exampleOverrides['bar_android' ], '../../../bar/bar_android' );
248+ expect (exampleOverrides['bar_android' ],
249+ '../../../../packages/bar/bar_android' );
234250 });
235251
236252 test ('example overrides include both local and main-package dependencies' ,
@@ -258,8 +274,24 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
258274 final Map <String , String ?> exampleOverrides =
259275 getDependencyOverrides (pluginAppFacing.getExamples ().first);
260276 expect (exampleOverrides.length, 2 );
261- expect (exampleOverrides['another_package' ], '../../../another_package' );
262- expect (exampleOverrides['bar_android' ], '../../../bar/bar_android' );
277+ expect (exampleOverrides['another_package' ],
278+ '../../../../packages/another_package' );
279+ expect (exampleOverrides['bar_android' ],
280+ '../../../../packages/bar/bar_android' );
281+ });
282+
283+ test ('does not rewrite path-based dependencies that are already path based' ,
284+ () async {
285+ final RepositoryPackage package = createFakePlugin ('foo' , packagesDir);
286+ final RepositoryPackage example = package.getExamples ().first;
287+ addPathDependencies (example, < String > ['foo' ], relativePathBase: '../' );
288+
289+ await runCapturingPrint (
290+ runner, < String > ['make-deps-path-based' , '--target-dependencies=foo' ]);
291+
292+ final Map <String , String ?> exampleOverrides =
293+ getDependencyOverrides (example);
294+ expect (exampleOverrides.length, 0 );
263295 });
264296
265297 test (
@@ -317,6 +349,32 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
317349 expect (simplePackageOverrides['bar' ], '../../third_party/packages/bar' );
318350 });
319351
352+ test ('handles third_party target package references in third_party' ,
353+ () async {
354+ createFakePackage ('bar' , thirdPartyPackagesDir, isFlutter: true );
355+ final RepositoryPackage otherThirdPartyPackge =
356+ createFakePlugin ('foo' , thirdPartyPackagesDir);
357+
358+ addDependencies (otherThirdPartyPackge, < String > [
359+ 'bar' ,
360+ ]);
361+
362+ final List <String > output = await runCapturingPrint (
363+ runner, < String > ['make-deps-path-based' , '--target-dependencies=bar' ]);
364+
365+ expect (
366+ output,
367+ containsAll (< String > [
368+ 'Rewriting references to: bar...' ,
369+ ' Modified third_party/packages/foo/pubspec.yaml' ,
370+ ]));
371+
372+ final Map <String , String ?> simplePackageOverrides =
373+ getDependencyOverrides (otherThirdPartyPackge);
374+ expect (simplePackageOverrides.length, 1 );
375+ expect (simplePackageOverrides['bar' ], '../../../third_party/packages/bar' );
376+ });
377+
320378 // This test case ensures that running CI using this command on an interim
321379 // PR that itself used this command won't fail on the rewrite step.
322380 test ('running a second time no-ops without failing' , () async {
@@ -420,7 +478,7 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
420478 expect (
421479 output,
422480 containsAllInOrder (< Matcher > [
423- contains ('Skipping foo; deleted.' ),
481+ contains ('Skipping packages/ foo; deleted.' ),
424482 contains ('No target dependencies' ),
425483 ]),
426484 );
0 commit comments