@@ -64,6 +64,21 @@ void main() {
64
64
package.pubspecFile.writeAsStringSync (lines.join ('\n ' ));
65
65
}
66
66
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
+
67
82
/// Adds a 'dev_dependencies:' section with entries for each package in
68
83
/// [dependencies] to [package] .
69
84
void addDevDependenciesSection (
@@ -172,15 +187,15 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
172
187
final Map <String , String ?> simplePackageOverrides =
173
188
getDependencyOverrides (simplePackage);
174
189
expect (simplePackageOverrides.length, 2 );
175
- expect (simplePackageOverrides['bar' ], '../bar/bar' );
190
+ expect (simplePackageOverrides['bar' ], '../../packages/ bar/bar' );
176
191
expect (simplePackageOverrides['bar_platform_interface' ],
177
- '../bar/bar_platform_interface' );
192
+ '../../packages/ bar/bar_platform_interface' );
178
193
179
194
final Map <String , String ?> appFacingPackageOverrides =
180
195
getDependencyOverrides (pluginAppFacing);
181
196
expect (appFacingPackageOverrides.length, 1 );
182
197
expect (appFacingPackageOverrides['bar_platform_interface' ],
183
- '../../bar/bar_platform_interface' );
198
+ '../../../packages/ bar/bar_platform_interface' );
184
199
});
185
200
186
201
test ('rewrites "dev_dependencies" references' , () async {
@@ -205,7 +220,7 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
205
220
final Map <String , String ?> overrides =
206
221
getDependencyOverrides (builderPackage);
207
222
expect (overrides.length, 1 );
208
- expect (overrides['foo' ], '../foo' );
223
+ expect (overrides['foo' ], '../../packages/ foo' );
209
224
});
210
225
211
226
test ('rewrites examples when rewriting the main package' , () async {
@@ -230,7 +245,8 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
230
245
final Map <String , String ?> exampleOverrides =
231
246
getDependencyOverrides (pluginAppFacing.getExamples ().first);
232
247
expect (exampleOverrides.length, 1 );
233
- expect (exampleOverrides['bar_android' ], '../../../bar/bar_android' );
248
+ expect (exampleOverrides['bar_android' ],
249
+ '../../../../packages/bar/bar_android' );
234
250
});
235
251
236
252
test ('example overrides include both local and main-package dependencies' ,
@@ -258,8 +274,24 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
258
274
final Map <String , String ?> exampleOverrides =
259
275
getDependencyOverrides (pluginAppFacing.getExamples ().first);
260
276
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 );
263
295
});
264
296
265
297
test (
@@ -317,6 +349,32 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
317
349
expect (simplePackageOverrides['bar' ], '../../third_party/packages/bar' );
318
350
});
319
351
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
+
320
378
// This test case ensures that running CI using this command on an interim
321
379
// PR that itself used this command won't fail on the rewrite step.
322
380
test ('running a second time no-ops without failing' , () async {
@@ -420,7 +478,7 @@ ${devDependencies.map((String dep) => ' $dep: $constraint').join('\n')}
420
478
expect (
421
479
output,
422
480
containsAllInOrder (< Matcher > [
423
- contains ('Skipping foo; deleted.' ),
481
+ contains ('Skipping packages/ foo; deleted.' ),
424
482
contains ('No target dependencies' ),
425
483
]),
426
484
);
0 commit comments