Revert "Add flag controlling creation of `.packages` file. (#2757)" (#3357)

This reverts commit a24614176d1f55abef8087eff07f489ccc541063.
diff --git a/lib/src/command/add.dart b/lib/src/command/add.dart
index 3557104..328d935 100644
--- a/lib/src/command/add.dart
+++ b/lib/src/command/add.dart
@@ -92,8 +92,6 @@
         help: 'Build executables in immediate dependencies.');
     argParser.addOption('directory',
         abbr: 'C', help: 'Run this in the directory <dir>.', valueHelp: 'dir');
-    argParser.addFlag('legacy-packages-file',
-        help: 'Generate the legacy ".packages" file', negatable: false);
   }
 
   @override
@@ -169,8 +167,7 @@
           .acquireDependencies(SolveType.get,
               dryRun: true,
               precompile: argResults['precompile'],
-              analytics: analytics,
-              generateDotPackages: false);
+              analytics: analytics);
     } else {
       /// Update the `pubspec.yaml` before calling [acquireDependencies] to
       /// ensure that the modification timestamp on `pubspec.lock` and
@@ -185,7 +182,6 @@
         SolveType.get,
         precompile: argResults['precompile'],
         analytics: analytics,
-        generateDotPackages: argResults['legacy-packages-file'],
       );
 
       if (argResults['example'] && entrypoint.example != null) {
@@ -194,7 +190,6 @@
           precompile: argResults['precompile'],
           onlyReportSuccessOrFailure: true,
           analytics: analytics,
-          generateDotPackages: argResults['legacy-packages-file'],
         );
       }
     }
diff --git a/lib/src/command/downgrade.dart b/lib/src/command/downgrade.dart
index fce5ef3..274ab48 100644
--- a/lib/src/command/downgrade.dart
+++ b/lib/src/command/downgrade.dart
@@ -42,8 +42,6 @@
 
     argParser.addOption('directory',
         abbr: 'C', help: 'Run this in the directory<dir>.', valueHelp: 'dir');
-    argParser.addFlag('legacy-packages-file',
-        help: 'Generate the legacy ".packages" file', negatable: false);
   }
 
   @override
@@ -59,7 +57,6 @@
       unlock: argResults.rest,
       dryRun: dryRun,
       analytics: analytics,
-      generateDotPackages: argResults['legacy-packages-file'],
     );
     var example = entrypoint.example;
     if (argResults['example'] && example != null) {
@@ -69,7 +66,6 @@
         dryRun: dryRun,
         onlyReportSuccessOrFailure: true,
         analytics: analytics,
-        generateDotPackages: argResults['legacy-packages-file'],
       );
     }
 
diff --git a/lib/src/command/get.dart b/lib/src/command/get.dart
index 7b8906c..302bb93 100644
--- a/lib/src/command/get.dart
+++ b/lib/src/command/get.dart
@@ -33,9 +33,6 @@
 
     argParser.addFlag('packages-dir', hide: true);
 
-    argParser.addFlag('legacy-packages-file',
-        help: 'Generate the legacy ".packages" file', negatable: false);
-
     argParser.addFlag(
       'example',
       help: 'Also run in `example/` (if it exists).',
@@ -56,20 +53,16 @@
       SolveType.get,
       dryRun: argResults['dry-run'],
       precompile: argResults['precompile'],
-      generateDotPackages: argResults['legacy-packages-file'],
       analytics: analytics,
     );
 
     var example = entrypoint.example;
     if (argResults['example'] && example != null) {
-      await example.acquireDependencies(
-        SolveType.get,
-        dryRun: argResults['dry-run'],
-        precompile: argResults['precompile'],
-        generateDotPackages: argResults['legacy-packages-file'],
-        analytics: analytics,
-        onlyReportSuccessOrFailure: true,
-      );
+      await example.acquireDependencies(SolveType.get,
+          dryRun: argResults['dry-run'],
+          precompile: argResults['precompile'],
+          onlyReportSuccessOrFailure: true,
+          analytics: analytics);
     }
   }
 }
diff --git a/lib/src/command/remove.dart b/lib/src/command/remove.dart
index 82a9547..f3b27bd 100644
--- a/lib/src/command/remove.dart
+++ b/lib/src/command/remove.dart
@@ -50,9 +50,6 @@
 
     argParser.addOption('directory',
         abbr: 'C', help: 'Run this in the directory<dir>.', valueHelp: 'dir');
-
-    argParser.addFlag('legacy-packages-file',
-        help: 'Generate the legacy ".packages" file', negatable: false);
   }
 
   @override
@@ -72,8 +69,7 @@
           .acquireDependencies(SolveType.get,
               precompile: argResults['precompile'],
               dryRun: true,
-              analytics: null,
-              generateDotPackages: false);
+              analytics: null);
     } else {
       /// Update the pubspec.
       _writeRemovalToPubspec(packages);
@@ -85,7 +81,6 @@
         SolveType.get,
         precompile: argResults['precompile'],
         analytics: analytics,
-        generateDotPackages: argResults['legacy-packages-file'],
       );
 
       var example = entrypoint.example;
@@ -95,7 +90,6 @@
           precompile: argResults['precompile'],
           onlyReportSuccessOrFailure: true,
           analytics: analytics,
-          generateDotPackages: argResults['legacy-packages-file'],
         );
       }
     }
diff --git a/lib/src/command/upgrade.dart b/lib/src/command/upgrade.dart
index 0dc5fb7..ee66c07 100644
--- a/lib/src/command/upgrade.dart
+++ b/lib/src/command/upgrade.dart
@@ -56,9 +56,6 @@
 
     argParser.addFlag('packages-dir', hide: true);
 
-    argParser.addFlag('legacy-packages-file',
-        help: 'Generate the legacy ".packages" file', negatable: false);
-
     argParser.addFlag(
       'major-versions',
       help: 'Upgrades packages to their latest resolvable versions, '
@@ -83,8 +80,6 @@
 
   bool get _precompile => argResults['precompile'];
 
-  bool get _packagesFile => argResults['legacy-packages-file'];
-
   bool get _upgradeNullSafety =>
       argResults['nullsafety'] || argResults['null-safety'];
 
@@ -131,7 +126,6 @@
       dryRun: _dryRun,
       precompile: _precompile,
       onlyReportSuccessOrFailure: onlySummary,
-      generateDotPackages: _packagesFile,
       analytics: analytics,
     );
     _showOfflineWarning();
@@ -241,7 +235,6 @@
         dryRun: true,
         precompile: _precompile,
         analytics: null, // No analytics for dry-run
-        generateDotPackages: false,
       );
     } else {
       if (changes.isNotEmpty) {
@@ -254,7 +247,6 @@
         SolveType.get,
         precompile: _precompile,
         analytics: analytics,
-        generateDotPackages: argResults['legacy-packages-file'],
       );
     }
 
@@ -339,7 +331,6 @@
         dryRun: true,
         precompile: _precompile,
         analytics: null,
-        generateDotPackages: false,
       );
     } else {
       if (changes.isNotEmpty) {
@@ -352,7 +343,6 @@
         SolveType.upgrade,
         precompile: _precompile,
         analytics: analytics,
-        generateDotPackages: argResults['legacy-packages-file'],
       );
     }
 
diff --git a/lib/src/entrypoint.dart b/lib/src/entrypoint.dart
index e854d52..5a2a50f 100644
--- a/lib/src/entrypoint.dart
+++ b/lib/src/entrypoint.dart
@@ -213,17 +213,13 @@
   Entrypoint? _example;
 
   /// Writes .packages and .dart_tool/package_config.json
-  Future<void> writePackagesFiles({bool generateDotPackages = false}) async {
+  Future<void> writePackagesFiles() async {
     final entrypointName = isGlobal ? null : root.name;
-    if (generateDotPackages) {
-      writeTextFile(
-          packagesFile,
-          lockFile.packagesFile(cache,
-              entrypoint: entrypointName,
-              relativeFrom: isGlobal ? null : root.dir));
-    } else {
-      tryDeleteEntry(packagesFile);
-    }
+    writeTextFile(
+        packagesFile,
+        lockFile.packagesFile(cache,
+            entrypoint: entrypointName,
+            relativeFrom: isGlobal ? null : root.dir));
     ensureDir(p.dirname(packageConfigFile));
     writeTextFile(
         packageConfigFile,
@@ -261,7 +257,6 @@
     Iterable<String>? unlock,
     bool dryRun = false,
     bool precompile = false,
-    required bool generateDotPackages,
     required PubAnalytics? analytics,
     bool onlyReportSuccessOrFailure = false,
   }) async {
@@ -330,7 +325,7 @@
       /// have to reload and reparse all the pubspecs.
       _packageGraph = PackageGraph.fromSolveResult(this, result);
 
-      await writePackagesFiles(generateDotPackages: generateDotPackages);
+      await writePackagesFiles();
 
       try {
         if (precompile) {
diff --git a/lib/src/executable.dart b/lib/src/executable.dart
index 3f8f6a9..5d8ea8b 100644
--- a/lib/src/executable.dart
+++ b/lib/src/executable.dart
@@ -308,7 +308,6 @@
         () => entrypoint.acquireDependencies(
           SolveType.get,
           analytics: analytics,
-          generateDotPackages: false,
         ),
       );
     } on ApplicationException catch (e) {
diff --git a/lib/src/global_packages.dart b/lib/src/global_packages.dart
index 07e2513..773f2ec 100644
--- a/lib/src/global_packages.dart
+++ b/lib/src/global_packages.dart
@@ -150,11 +150,7 @@
     var entrypoint = Entrypoint(path, cache);
 
     // Get the package's dependencies.
-    await entrypoint.acquireDependencies(
-      SolveType.get,
-      analytics: analytics,
-      generateDotPackages: false,
-    );
+    await entrypoint.acquireDependencies(SolveType.get, analytics: analytics);
     var name = entrypoint.root.name;
     _describeActive(name, cache);
 
diff --git a/lib/src/package_config.dart b/lib/src/package_config.dart
index d64808b..0493dcc 100644
--- a/lib/src/package_config.dart
+++ b/lib/src/package_config.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:convert';
-
 import 'package:pub_semver/pub_semver.dart';
 
 import 'language_version.dart';
@@ -162,6 +160,8 @@
   /// Given as `<major>.<minor>` version, similar to the `// @dart = X.Y`
   /// comment. This is derived from the lower-bound on the Dart SDK requirement
   /// in the `pubspec.yaml` for the given package.
+  ///
+  /// `null` if not given.
   LanguageVersion? languageVersion;
 
   /// Additional properties not in the specification for the
@@ -173,8 +173,10 @@
     required this.rootUri,
     this.packageUri,
     this.languageVersion,
-    this.additionalProperties = const {},
-  });
+    this.additionalProperties,
+  }) {
+    additionalProperties ??= {};
+  }
 
   /// Create [PackageConfigEntry] from JSON [data].
   ///
@@ -247,13 +249,7 @@
   Map<String, Object?> toJson() => {
         'name': name,
         'rootUri': rootUri.toString(),
-        if (packageUri != null) 'packageUri': packageUri.toString(),
+        if (packageUri != null) 'packageUri': packageUri?.toString(),
         if (languageVersion != null) 'languageVersion': '$languageVersion',
       }..addAll(additionalProperties ?? {});
-
-  @override
-  String toString() {
-    // TODO: implement toString
-    return JsonEncoder.withIndent('  ').convert(toJson());
-  }
 }
diff --git a/test/add/common/add_test.dart b/test/add/common/add_test.dart
index 82e098b..1a1e9df 100644
--- a/test/add/common/add_test.dart
+++ b/test/add/common/add_test.dart
@@ -46,9 +46,7 @@
       await pubAdd(args: ['foo:1.2.3']);
 
       await d.cacheDir({'foo': '1.2.3'}).validate();
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.2.3'}).validate();
       await d.appDir({'foo': '1.2.3'}).validate();
     });
 
@@ -64,11 +62,8 @@
 
       await d.cacheDir(
           {'foo': '1.2.3', 'bar': '1.1.0', 'baz': '2.5.3'}).validate();
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-        d.packageConfigEntry(name: 'bar', version: '1.1.0'),
-        d.packageConfigEntry(name: 'baz', version: '2.5.3'),
-      ]).validate();
+      await d.appPackagesFile(
+          {'foo': '1.2.3', 'bar': '1.1.0', 'baz': '2.5.3'}).validate();
       await d
           .appDir({'foo': '1.2.3', 'bar': '1.1.0', 'baz': '2.5.3'}).validate();
     });
@@ -95,9 +90,7 @@
       await pubAdd(args: ['foo:1.2.3']);
 
       await d.cacheDir({'foo': '1.2.3'}).validate();
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.2.3'}).validate();
 
       await d.dir(appPath, [
         d.pubspec({
@@ -143,9 +136,7 @@
       await pubAdd(args: ['foo:1.2.3']);
 
       await d.cacheDir({'foo': '1.2.3'}).validate();
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.2.3'}).validate();
       await d.appDir({'foo': '1.2.3'}).validate();
     });
 
@@ -226,9 +217,7 @@
               'adding it to dependencies instead.'));
 
       await d.cacheDir({'foo': '1.2.3'}).validate();
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.2.3'}).validate();
 
       await d.dir(appPath, [
         d.pubspec({
@@ -255,9 +244,7 @@
         await pubAdd(args: ['foo']);
 
         await d.cacheDir({'foo': '1.2.2'}).validate();
-        await d.appPackageConfigFile([
-          d.packageConfigEntry(name: 'foo', version: '1.2.2'),
-        ]).validate();
+        await d.appPackagesFile({'foo': '1.2.2'}).validate();
         await d.dir(appPath, [
           d.pubspec({
             'name': 'myapp',
@@ -469,9 +456,7 @@
 
       await pubAdd(args: ['--dev', 'foo:1.2.3']);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.2.3'}).validate();
 
       await d.dir(appPath, [
         d.pubspec({
@@ -581,9 +566,7 @@
         await pubAdd(args: ['foo', '--dev']);
 
         await d.cacheDir({'foo': '1.2.2'}).validate();
-        await d.appPackageConfigFile([
-          d.packageConfigEntry(name: 'foo', version: '1.2.2'),
-        ]).validate();
+        await d.appPackagesFile({'foo': '1.2.2'}).validate();
         await d.dir(appPath, [
           d.pubspec({
             'name': 'myapp',
diff --git a/test/add/common/version_constraint_test.dart b/test/add/common/version_constraint_test.dart
index f058082..546642f 100644
--- a/test/add/common/version_constraint_test.dart
+++ b/test/add/common/version_constraint_test.dart
@@ -22,9 +22,7 @@
     await pubAdd(args: ['foo']);
 
     await d.cacheDir({'foo': '1.2.3'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
     await d.appDir({'foo': '^1.2.3'}).validate();
   });
 
@@ -37,9 +35,7 @@
     await pubAdd(args: ['foo:1.2.3']);
 
     await d.cacheDir({'foo': '1.2.3'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
     await d.appDir({'foo': '1.2.3'}).validate();
   });
 
@@ -52,9 +48,7 @@
     await pubAdd(args: ['foo:1.2.3-dev']);
 
     await d.cacheDir({'foo': '1.2.3-dev'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3-dev'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3-dev'}).validate();
     await d.appDir({'foo': '1.2.3-dev'}).validate();
   });
 
@@ -71,9 +65,7 @@
     await pubAdd(args: ['foo:any']);
 
     await d.cacheDir({'foo': '1.2.3'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
     await d.appDir({'foo': 'any'}).validate();
   });
 
@@ -86,9 +78,7 @@
     await pubAdd(args: ['foo:>1.2.0 <2.0.0']);
 
     await d.cacheDir({'foo': '1.2.3'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
     await d.appDir({'foo': '>1.2.0 <2.0.0'}).validate();
   });
 
@@ -108,10 +98,7 @@
     await d.appDir({'foo': '^0.1.0', 'bar': '2.0.3'}).validate();
 
     await d.cacheDir({'foo': '0.1.0', 'bar': '2.0.3'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '0.1.0'),
-      d.packageConfigEntry(name: 'bar', version: '2.0.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '0.1.0', 'bar': '2.0.3'}).validate();
   });
 
   group('does not update pubspec if no available version found', () {
diff --git a/test/add/common/version_resolution_test.dart b/test/add/common/version_resolution_test.dart
index 0f44d2b..64b393a 100644
--- a/test/add/common/version_resolution_test.dart
+++ b/test/add/common/version_resolution_test.dart
@@ -32,10 +32,7 @@
 
     await d.appDir({'foo': '^3.5.0', 'bar': '1.0.0'}).validate();
     await d.cacheDir({'foo': '3.5.0', 'bar': '1.0.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '3.5.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '3.5.0', 'bar': '1.0.0'}).validate();
   });
 
   test('chooses the appropriate version to not break other dependencies',
@@ -57,10 +54,7 @@
 
     await d.appDir({'foo': '^3.2.1', 'bar': '1.0.0'}).validate();
     await d.cacheDir({'foo': '3.2.1', 'bar': '1.0.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '3.2.1'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '3.2.1', 'bar': '1.0.0'}).validate();
   });
 
   test('may upgrade other packages if they allow a later version to be chosen',
@@ -84,9 +78,6 @@
 
     await d.appDir({'foo': '^4.0.0', 'bar': '^1.0.0'}).validate();
     await d.cacheDir({'foo': '4.0.0', 'bar': '1.5.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '4.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.5.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '4.0.0', 'bar': '1.5.0'}).validate();
   });
 }
diff --git a/test/add/git/git_test.dart b/test/add/git/git_test.dart
index d976172..00bd334 100644
--- a/test/add/git/git_test.dart
+++ b/test/add/git/git_test.dart
@@ -173,9 +173,7 @@
     await pubAdd(args: ['foo', '--git-url', '../foo.git']);
 
     await d.cacheDir({'foo': '1.2.2'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.2'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.2'}).validate();
     await d.dir(appPath, [
       d.pubspec({
         'name': 'myapp',
diff --git a/test/add/git/subdir_test.dart b/test/add/git/subdir_test.dart
index 8e8c39c..0f78069 100644
--- a/test/add/git/subdir_test.dart
+++ b/test/add/git/subdir_test.dart
@@ -30,11 +30,10 @@
         ])
       ])
     ]).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'sub',
-          path: pathInCache('git/foo-${await repo.revParse('HEAD')}/subdir')),
-    ]).validate();
+
+    await d.appPackagesFile({
+      'sub': pathInCache('git/foo-${await repo.revParse('HEAD')}/subdir')
+    }).validate();
 
     await d.appDir({
       'sub': {
@@ -69,11 +68,9 @@
       ])
     ]).validate();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'sub',
-          path: pathInCache('git/foo-${await repo.revParse('HEAD')}/sub/dir')),
-    ]).validate();
+    await d.appPackagesFile({
+      'sub': pathInCache('git/foo-${await repo.revParse('HEAD')}/sub/dir')
+    }).validate();
 
     await d.appDir({
       'sub': {
diff --git a/test/add/hosted/non_default_pub_server_test.dart b/test/add/hosted/non_default_pub_server_test.dart
index 60538e3..0a83ac5 100644
--- a/test/add/hosted/non_default_pub_server_test.dart
+++ b/test/add/hosted/non_default_pub_server_test.dart
@@ -26,9 +26,7 @@
     await pubAdd(args: ['foo:1.2.3', '--hosted-url', url]);
 
     await d.cacheDir({'foo': '1.2.3'}, port: server.port).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
     await d.appDir({
       'foo': {
         'version': '1.2.3',
@@ -59,11 +57,8 @@
 
     await d.cacheDir({'foo': '1.2.3', 'bar': '3.2.3', 'baz': '1.3.5'},
         port: server.port).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      d.packageConfigEntry(name: 'bar', version: '3.2.3'),
-      d.packageConfigEntry(name: 'baz', version: '1.3.5'),
-    ]).validate();
+    await d.appPackagesFile(
+        {'foo': '1.2.3', 'bar': '3.2.3', 'baz': '1.3.5'}).validate();
     await d.appDir({
       'foo': {
         'version': '1.2.3',
@@ -122,9 +117,7 @@
     await pubAdd(args: ['foo', '--hosted-url', url]);
 
     await d.cacheDir({'foo': '1.2.3'}, port: server.port).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
     await d.appDir({
       'foo': {
         'version': '^1.2.3',
@@ -151,9 +144,7 @@
     await pubAdd(args: ['foo', '--hosted-url', url]);
 
     await d.cacheDir({'foo': '1.2.3'}, port: server.port).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
     await d.appDir({
       'foo': {
         'version': '^1.2.3',
@@ -180,9 +171,7 @@
     await pubAdd(args: ['foo:any', '--hosted-url', url]);
 
     await d.cacheDir({'foo': '1.2.3'}, port: server.port).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
     await d.appDir({
       'foo': {
         'version': 'any',
diff --git a/test/add/path/absolute_path_test.dart b/test/add/path/absolute_path_test.dart
index 5e63679..b15ec2d 100644
--- a/test/add/path/absolute_path_test.dart
+++ b/test/add/path/absolute_path_test.dart
@@ -20,9 +20,7 @@
 
     await pubAdd(args: ['foo', '--path', absolutePath]);
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: absolutePath),
-    ]).validate();
+    await d.appPackagesFile({'foo': absolutePath}).validate();
 
     await d.appDir({
       'foo': {'path': absolutePath}
@@ -129,9 +127,7 @@
     await pubAdd(args: ['foo', '--path', absolutePath]);
 
     await d.cacheDir({'foo': '1.2.2'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.2'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.2'}).validate();
     await d.dir(appPath, [
       d.pubspec({
         'name': 'myapp',
diff --git a/test/add/path/relative_path_test.dart b/test/add/path/relative_path_test.dart
index e08ba3c..c02b644 100644
--- a/test/add/path/relative_path_test.dart
+++ b/test/add/path/relative_path_test.dart
@@ -19,9 +19,7 @@
 
     await pubAdd(args: ['foo', '--path', '../foo']);
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '../foo'}).validate();
 
     await d.appDir({
       'foo': {'path': '../foo'}
@@ -40,9 +38,7 @@
       output: contains('Changed 1 dependency in myapp!'),
     );
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '../foo'}).validate();
 
     await d.appDir({
       'foo': {'path': '../foo'}
@@ -122,9 +118,7 @@
     await pubAdd(args: ['foo', '--path', '../foo']);
 
     await d.cacheDir({'foo': '1.2.2'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.2'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.2'}).validate();
     await d.dir(appPath, [
       d.pubspec({
         'name': 'myapp',
diff --git a/test/add/sdk/sdk_test.dart b/test/add/sdk/sdk_test.dart
index ff7d442..632725e 100644
--- a/test/add/sdk/sdk_test.dart
+++ b/test/add/sdk/sdk_test.dart
@@ -42,12 +42,11 @@
           'foo': {'sdk': 'flutter', 'version': '^0.0.1'}
         }
       }),
-    ]).validate();
-
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'foo', path: p.join(d.sandbox, 'flutter', 'packages', 'foo')),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
+      d.packagesFile({
+        'myapp': '.',
+        'foo': p.join(d.sandbox, 'flutter', 'packages', 'foo'),
+        'bar': '1.0.0'
+      })
     ]).validate();
   });
 
@@ -66,11 +65,11 @@
           'foo': {'sdk': 'flutter', 'version': '0.0.1'}
         }
       }),
-    ]).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'foo', path: p.join(d.sandbox, 'flutter', 'packages', 'foo')),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
+      d.packagesFile({
+        'myapp': '.',
+        'foo': p.join(d.sandbox, 'flutter', 'packages', 'foo'),
+        'bar': '1.0.0'
+      })
     ]).validate();
   });
 
@@ -80,10 +79,11 @@
         args: ['baz', '--sdk', 'flutter'],
         environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')});
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'baz',
-          path: p.join(d.sandbox, 'flutter', 'bin', 'cache', 'pkg', 'baz'))
+    await d.dir(appPath, [
+      d.packagesFile({
+        'myapp': '.',
+        'baz': p.join(d.sandbox, 'flutter', 'bin', 'cache', 'pkg', 'baz')
+      })
     ]).validate();
   });
 
diff --git a/test/dependency_override_test.dart b/test/dependency_override_test.dart
index 59f59e4..dd8dc0d 100644
--- a/test/dependency_override_test.dart
+++ b/test/dependency_override_test.dart
@@ -27,9 +27,7 @@
 
       await pubCommand(command);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '2.0.0'}).validate();
     });
 
     test('treats override as implicit dependency', () async {
@@ -45,9 +43,7 @@
 
       await pubCommand(command);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.0.0'}).validate();
     });
 
     test('ignores other constraints on overridden package', () async {
@@ -69,10 +65,7 @@
 
       await pubCommand(command);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-        d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '2.0.0', 'bar': '1.0.0'}).validate();
     });
 
     test('ignores SDK constraints', () async {
@@ -89,9 +82,8 @@
       ]).create();
 
       await pubCommand(command);
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      ]).validate();
+
+      await d.appPackagesFile({'foo': '1.0.0'}).validate();
     });
 
     test('warns about overridden dependencies', () async {
diff --git a/test/descriptor.dart b/test/descriptor.dart
index ee50851..7b140e2 100644
--- a/test/descriptor.dart
+++ b/test/descriptor.dart
@@ -277,23 +277,6 @@
 }) =>
     PackageConfigFileDescriptor(packages, generatorVersion);
 
-Descriptor appPackageConfigFile(
-  List<PackageConfigEntry> packages, {
-  String generatorVersion = '0.1.2+3',
-}) =>
-    dir(
-      appPath,
-      [
-        packageConfigFile(
-          [
-            packageConfigEntry(name: 'myapp', path: '.'),
-            ...packages,
-          ],
-          generatorVersion: generatorVersion,
-        ),
-      ],
-    );
-
 /// Create a [PackageConfigEntry] which assumes package with [name] is either
 /// a cached package with given [version] or a path dependency at given [path].
 PackageConfigEntry packageConfigEntry({
@@ -301,7 +284,6 @@
   String? version,
   String? path,
   String? languageVersion,
-  PackageServer? server,
 }) {
   if (version != null && path != null) {
     throw ArgumentError.value(
@@ -313,7 +295,7 @@
   }
   Uri rootUri;
   if (version != null) {
-    rootUri = p.toUri((server ?? globalServer).pathInCache(name, version));
+    rootUri = p.toUri(globalServer.pathInCache(name, version));
   } else {
     rootUri = p.toUri(p.join('..', path));
   }
diff --git a/test/descriptor/packages.dart b/test/descriptor/packages.dart
index b670322..de52a80 100644
--- a/test/descriptor/packages.dart
+++ b/test/descriptor/packages.dart
@@ -156,20 +156,10 @@
 
     // Compare packages as sets to ignore ordering.
     expect(
-      config.packages,
-      _packages
-          .map(
-            (p) => isA<PackageConfigEntry>()
-                .having((p0) => p0.name, 'name', p.name)
-                .having(
-                    (p0) => p0.languageVersion,
-                    'languageVersion',
-                    // If the expected entry has no language-version we don't check it.
-                    p.languageVersion ?? anything)
-                .having((p0) => p0.rootUri, 'rootUri', p.rootUri)
-                .having((p0) => p0.packageUri, 'packageUri', p.packageUri),
-          )
-          .toSet(),
+      config.packages.map((e) => e.toJson()).toSet(),
+      equals(_packages.map((e) => e.toJson()).toSet()),
+      reason:
+          '"packages" property in "$packageConfigFile" does not expected values',
     );
 
     final expected = PackageConfig.fromJson(_config.toJson());
diff --git a/test/dev_dependency_test.dart b/test/dev_dependency_test.dart
index b192444..88f321b 100644
--- a/test/dev_dependency_test.dart
+++ b/test/dev_dependency_test.dart
@@ -27,10 +27,7 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-      d.packageConfigEntry(name: 'bar', path: '../bar'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '../foo', 'bar': '../bar'}).validate();
   });
 
   test("includes dev dependency's transitive dependencies", () async {
@@ -55,10 +52,7 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-      d.packageConfigEntry(name: 'bar', path: '../bar'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '../foo', 'bar': '../bar'}).validate();
   });
 
   test("ignores transitive dependency's dev dependencies", () async {
@@ -84,8 +78,6 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '../foo'}).validate();
   });
 }
diff --git a/test/downgrade/unlock_if_necessary_test.dart b/test/downgrade/unlock_if_necessary_test.dart
index c8b55af..0299e27 100644
--- a/test/downgrade/unlock_if_necessary_test.dart
+++ b/test/downgrade/unlock_if_necessary_test.dart
@@ -19,19 +19,13 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-      d.packageConfigEntry(name: 'foo_dep', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '2.0.0', 'foo_dep': '2.0.0'}).validate();
 
     server.serve('foo', '1.0.0', deps: {'foo_dep': '<2.0.0'});
     server.serve('foo_dep', '1.0.0');
 
     await pubDowngrade(args: ['foo']);
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'foo_dep', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'foo_dep': '1.0.0'}).validate();
   });
 }
diff --git a/test/downgrade/unlock_single_package_test.dart b/test/downgrade/unlock_single_package_test.dart
index 1188e41..cfd315d 100644
--- a/test/downgrade/unlock_single_package_test.dart
+++ b/test/downgrade/unlock_single_package_test.dart
@@ -16,34 +16,22 @@
     await d.appDir({'foo': 'any', 'bar': 'any'}).create();
 
     await pubGet();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.1.0'),
-      d.packageConfigEntry(name: 'bar', version: '2.1.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '2.1.0', 'bar': '2.1.0'}).validate();
 
     server.serve('foo', '1.0.0', deps: {'bar': 'any'});
     server.serve('bar', '1.0.0');
 
     await pubDowngrade(args: ['bar']);
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.1.0'),
-      d.packageConfigEntry(name: 'bar', version: '2.1.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '2.1.0', 'bar': '2.1.0'}).validate();
 
     server.serve('foo', '2.0.0', deps: {'bar': 'any'});
     server.serve('bar', '2.0.0');
 
     await pubDowngrade(args: ['bar']);
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.1.0'),
-      d.packageConfigEntry(name: 'bar', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '2.1.0', 'bar': '2.0.0'}).validate();
 
     await pubDowngrade();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.0.0'}).validate();
   });
 
   test('will not downgrade below constraint #2629', () async {
@@ -55,14 +43,11 @@
     await d.appDir({'foo': '^2.0.0'}).create();
 
     await pubGet();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.1.0'),
-    ]).validate();
+
+    await d.appPackagesFile({'foo': '2.1.0'}).validate();
 
     await pubDowngrade(args: ['foo']);
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '2.0.0'}).validate();
   });
 }
diff --git a/test/get/git/path_test.dart b/test/get/git/path_test.dart
index a323be7..49607a1 100644
--- a/test/get/git/path_test.dart
+++ b/test/get/git/path_test.dart
@@ -37,11 +37,9 @@
       ])
     ]).validate();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'sub',
-          path: pathInCache('git/foo-${await repo.revParse('HEAD')}/subdir')),
-    ]).validate();
+    await d.appPackagesFile({
+      'sub': pathInCache('git/foo-${await repo.revParse('HEAD')}/subdir')
+    }).validate();
   });
 
   test('depends on a package in a deep subdirectory', () async {
@@ -73,12 +71,9 @@
       ])
     ]).validate();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'sub',
-          path:
-              pathInCache('git/foo-${await repo.revParse('HEAD')}/sub/dir%25')),
-    ]).validate();
+    await d.appPackagesFile({
+      'sub': pathInCache('git/foo-${await repo.revParse('HEAD')}/sub/dir%25')
+    }).validate();
 
     final lockFile = LockFile.load(
         p.join(d.sandbox, appPath, 'pubspec.lock'), SourceRegistry());
@@ -120,12 +115,9 @@
       ])
     ]).validate();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'sub',
-          path:
-              pathInCache('git/foo-${await repo.revParse('HEAD')}/sub/dir%25')),
-    ]).validate();
+    await d.appPackagesFile({
+      'sub': pathInCache('git/foo-${await repo.revParse('HEAD')}/sub/dir%25')
+    }).validate();
 
     final lockFile = LockFile.load(
         p.join(d.sandbox, appPath, 'pubspec.lock'), SourceRegistry());
@@ -166,14 +158,10 @@
       ])
     ]).validate();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'sub1',
-          path: pathInCache('git/foo-${await repo.revParse('HEAD')}/subdir1')),
-      d.packageConfigEntry(
-          name: 'sub2',
-          path: pathInCache('git/foo-${await repo.revParse('HEAD')}/subdir2')),
-    ]).validate();
+    await d.appPackagesFile({
+      'sub1': pathInCache('git/foo-${await repo.revParse('HEAD')}/subdir1'),
+      'sub2': pathInCache('git/foo-${await repo.revParse('HEAD')}/subdir2')
+    }).validate();
   });
 
   test('depends on packages in the same subdirectory at different revisions',
@@ -218,11 +206,9 @@
       ])
     ]).validate();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(
-          name: 'sub1', path: pathInCache('git/foo-$oldRevision/subdir')),
-      d.packageConfigEntry(
-          name: 'sub2', path: pathInCache('git/foo-$newRevision/subdir')),
-    ]).validate();
+    await d.appPackagesFile({
+      'sub1': pathInCache('git/foo-$oldRevision/subdir'),
+      'sub2': pathInCache('git/foo-$newRevision/subdir')
+    }).validate();
   });
 }
diff --git a/test/get/hosted/avoid_network_requests_test.dart b/test/get/hosted/avoid_network_requests_test.dart
index c62fa7c..8778ae6 100644
--- a/test/get/hosted/avoid_network_requests_test.dart
+++ b/test/get/hosted/avoid_network_requests_test.dart
@@ -31,10 +31,8 @@
 
     // Run the solver again.
     await pubGet();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.2.0'),
-    ]).validate();
+
+    await d.appPackagesFile({'foo': '1.2.0', 'bar': '1.2.0'}).validate();
 
     // The get should not have done any network requests since the lock file is
     // up to date.
diff --git a/test/get/hosted/cached_pubspec_test.dart b/test/get/hosted/cached_pubspec_test.dart
index fa9decc..beb4e16 100644
--- a/test/get/hosted/cached_pubspec_test.dart
+++ b/test/get/hosted/cached_pubspec_test.dart
@@ -22,9 +22,7 @@
     server.requestedPaths.clear();
 
     await d.cacheDir({'foo': '1.2.3'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
 
     // Run the solver again now that it's cached.
     await pubGet();
diff --git a/test/get/hosted/do_not_upgrade_on_removed_constraints_test.dart b/test/get/hosted/do_not_upgrade_on_removed_constraints_test.dart
index 44fe075..00b2444 100644
--- a/test/get/hosted/do_not_upgrade_on_removed_constraints_test.dart
+++ b/test/get/hosted/do_not_upgrade_on_removed_constraints_test.dart
@@ -21,19 +21,13 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-      d.packageConfigEntry(name: 'shared_dep', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile(
+        {'foo': '1.0.0', 'bar': '1.0.0', 'shared_dep': '1.0.0'}).validate();
 
     await d.appDir({'foo': 'any'}).create();
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'shared_dep', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'shared_dep': '1.0.0'}).validate();
   });
 }
diff --git a/test/get/hosted/does_no_network_requests_when_possible_test.dart b/test/get/hosted/does_no_network_requests_when_possible_test.dart
index 4324776..ea1f4a7 100644
--- a/test/get/hosted/does_no_network_requests_when_possible_test.dart
+++ b/test/get/hosted/does_no_network_requests_when_possible_test.dart
@@ -27,9 +27,7 @@
     await pubGet();
 
     await d.cacheDir({'foo': '1.2.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.0'}).validate();
 
     // The get should not have done any network requests since the lock file is
     // up to date.
diff --git a/test/get/hosted/get_stress_test.dart b/test/get/hosted/get_stress_test.dart
index 026c0c1..86a8da9 100644
--- a/test/get/hosted/get_stress_test.dart
+++ b/test/get/hosted/get_stress_test.dart
@@ -26,10 +26,10 @@
       'foo': '1.2.3',
       for (var i = 0; i < 20; i++) 'pkg$i': '1.$i.0',
     }).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      for (var i = 0; i < 20; i++)
-        d.packageConfigEntry(name: 'pkg$i', version: '1.$i.0')
-    ]).validate();
+
+    await d.appPackagesFile({
+      'foo': '1.2.3',
+      for (var i = 0; i < 20; i++) 'pkg$i': '1.$i.0',
+    }).validate();
   });
 }
diff --git a/test/get/hosted/get_test.dart b/test/get/hosted/get_test.dart
index f0270a3..30dd4b8 100644
--- a/test/get/hosted/get_test.dart
+++ b/test/get/hosted/get_test.dart
@@ -21,9 +21,7 @@
     await pubGet();
 
     await d.cacheDir({'foo': '1.2.3'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
   });
 
   test('URL encodes the package name', () async {
@@ -59,9 +57,7 @@
     await pubGet();
 
     await d.cacheDir({'foo': '1.2.3'}, port: server.port).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3', server: server),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
   });
 
   group('categorizes dependency types in the lockfile', () {
diff --git a/test/get/hosted/get_transitive_test.dart b/test/get/hosted/get_transitive_test.dart
index 0ae18ac..74635bc 100644
--- a/test/get/hosted/get_transitive_test.dart
+++ b/test/get/hosted/get_transitive_test.dart
@@ -20,9 +20,6 @@
     await pubGet();
 
     await d.cacheDir({'foo': '1.2.3', 'bar': '2.0.4'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      d.packageConfigEntry(name: 'bar', version: '2.0.4'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3', 'bar': '2.0.4'}).validate();
   });
 }
diff --git a/test/get/hosted/gets_a_package_with_busted_dev_dependencies_test.dart b/test/get/hosted/gets_a_package_with_busted_dev_dependencies_test.dart
index 585cfba..0d75f95 100644
--- a/test/get/hosted/gets_a_package_with_busted_dev_dependencies_test.dart
+++ b/test/get/hosted/gets_a_package_with_busted_dev_dependencies_test.dart
@@ -24,8 +24,6 @@
     await pubGet();
 
     await d.cacheDir({'foo': '1.2.3'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
   });
 }
diff --git a/test/get/hosted/resolve_constraints_test.dart b/test/get/hosted/resolve_constraints_test.dart
index 466902e..c9c73d2 100644
--- a/test/get/hosted/resolve_constraints_test.dart
+++ b/test/get/hosted/resolve_constraints_test.dart
@@ -22,10 +22,8 @@
 
     await d
         .cacheDir({'foo': '1.2.3', 'bar': '2.3.4', 'baz': '2.0.4'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      d.packageConfigEntry(name: 'bar', version: '2.3.4'),
-      d.packageConfigEntry(name: 'baz', version: '2.0.4'),
-    ]).validate();
+
+    await d.appPackagesFile(
+        {'foo': '1.2.3', 'bar': '2.3.4', 'baz': '2.0.4'}).validate();
   });
 }
diff --git a/test/get/hosted/resolve_with_retracted_package_versions_test.dart b/test/get/hosted/resolve_with_retracted_package_versions_test.dart
index d9b33a4..efd3a0a 100644
--- a/test/get/hosted/resolve_with_retracted_package_versions_test.dart
+++ b/test/get/hosted/resolve_with_retracted_package_versions_test.dart
@@ -23,10 +23,7 @@
     await pubGet();
 
     await d.cacheDir({'foo': '1.0.0', 'bar': '1.0.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.0.0'}).validate();
   });
 
   test('Error when the only available package version is retracted', () async {
@@ -56,34 +53,22 @@
 
     await pubGet();
     await d.cacheDir({'foo': '1.0.0', 'bar': '1.1.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.1.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.1.0'}).validate();
 
     server.retractPackageVersion('bar', '1.1.0');
     await pubUpgrade();
     await d.cacheDir({'foo': '1.0.0', 'bar': '1.1.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.1.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.1.0'}).validate();
 
     server.serve('bar', '2.0.0');
     await pubUpgrade();
     await d.cacheDir({'foo': '1.0.0', 'bar': '1.1.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.1.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.1.0'}).validate();
 
     server.serve('bar', '1.2.0');
     await pubUpgrade();
     await d.cacheDir({'foo': '1.0.0', 'bar': '1.2.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.2.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.2.0'}).validate();
   });
 
   test('Offline versions of pub commands also handle retracted packages',
@@ -117,10 +102,7 @@
     await pubUpgrade(args: ['--offline']);
 
     // We choose bar 1.1.0 since we already have it in pubspec.lock
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.1.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.1.0'}).validate();
 
     // Delete lockfile so that retracted versions are not considered.
     final lockFile = p.join(d.sandbox, appPath, 'pubspec.lock');
@@ -128,10 +110,7 @@
     deleteEntry(lockFile);
 
     await pubGet(args: ['--offline']);
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.0.0'}).validate();
   });
 
   test('Allow retracted version when pinned in dependency_overrides', () async {
@@ -151,9 +130,7 @@
     server.retractPackageVersion('foo', '2.0.0');
 
     await pubGet();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '2.0.0'}).validate();
   });
 
   test('Prefer retracted version in dependency_overrides over pubspec.lock',
@@ -170,9 +147,7 @@
     server.retractPackageVersion('foo', '3.0.0');
 
     await pubUpgrade();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '3.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '3.0.0'}).validate();
 
     await d.dir(appPath, [
       d.pubspec({
@@ -183,8 +158,6 @@
     ]).create();
 
     await pubUpgrade();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '2.0.0'}).validate();
   });
 }
diff --git a/test/get/hosted/stay_locked_if_compatible_test.dart b/test/get/hosted/stay_locked_if_compatible_test.dart
index df04579..bb5e63a 100644
--- a/test/get/hosted/stay_locked_if_compatible_test.dart
+++ b/test/get/hosted/stay_locked_if_compatible_test.dart
@@ -17,9 +17,8 @@
     await d.appDir({'foo': 'any'}).create();
 
     await pubGet();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-    ]).validate();
+
+    await d.appPackagesFile({'foo': '1.0.0'}).validate();
 
     server.serve('foo', '1.0.1');
 
@@ -27,8 +26,6 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0'}).validate();
   });
 }
diff --git a/test/get/hosted/stay_locked_if_new_is_satisfied_test.dart b/test/get/hosted/stay_locked_if_new_is_satisfied_test.dart
index c75c435..dbe6039 100644
--- a/test/get/hosted/stay_locked_if_new_is_satisfied_test.dart
+++ b/test/get/hosted/stay_locked_if_new_is_satisfied_test.dart
@@ -19,11 +19,9 @@
     await d.appDir({'foo': 'any'}).create();
 
     await pubGet();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-      d.packageConfigEntry(name: 'baz', version: '1.0.0'),
-    ]).validate();
+
+    await d.appPackagesFile(
+        {'foo': '1.0.0', 'bar': '1.0.0', 'baz': '1.0.0'}).validate();
 
     server.serve('foo', '2.0.0', deps: {'bar': '<3.0.0'});
     server.serve('bar', '2.0.0', deps: {'baz': '<3.0.0'});
@@ -34,11 +32,11 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-      d.packageConfigEntry(name: 'baz', version: '1.0.0'),
-      d.packageConfigEntry(name: 'newdep', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({
+      'foo': '1.0.0',
+      'bar': '1.0.0',
+      'baz': '1.0.0',
+      'newdep': '2.0.0'
+    }).validate();
   });
 }
diff --git a/test/get/hosted/stay_locked_test.dart b/test/get/hosted/stay_locked_test.dart
index 8b819ea..134e8b5 100644
--- a/test/get/hosted/stay_locked_test.dart
+++ b/test/get/hosted/stay_locked_test.dart
@@ -20,9 +20,8 @@
 
     // This should lock the foo dependency to version 1.0.0.
     await pubGet();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-    ]).validate();
+
+    await d.appPackagesFile({'foo': '1.0.0'}).validate();
 
     // Delete the .dart_tool/package_config.json file to simulate a new checkout of the application.
     deleteEntry(path.join(d.sandbox, packageConfigFilePath));
@@ -33,8 +32,6 @@
     // This shouldn't upgrade the foo dependency due to the lockfile.
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0'}).validate();
   });
 }
diff --git a/test/get/hosted/unlock_if_incompatible_test.dart b/test/get/hosted/unlock_if_incompatible_test.dart
index 007231e..11bf909 100644
--- a/test/get/hosted/unlock_if_incompatible_test.dart
+++ b/test/get/hosted/unlock_if_incompatible_test.dart
@@ -18,16 +18,12 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0'}).validate();
     server.serve('foo', '1.0.1');
     await d.appDir({'foo': '>1.0.0'}).create();
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.1'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.1'}).validate();
   });
 }
diff --git a/test/get/hosted/unlock_if_new_is_unsatisfied_test.dart b/test/get/hosted/unlock_if_new_is_unsatisfied_test.dart
index ae6a4e6..1cedc5a 100644
--- a/test/get/hosted/unlock_if_new_is_unsatisfied_test.dart
+++ b/test/get/hosted/unlock_if_new_is_unsatisfied_test.dart
@@ -22,12 +22,12 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-      d.packageConfigEntry(name: 'baz', version: '1.0.0'),
-      d.packageConfigEntry(name: 'qux', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({
+      'foo': '1.0.0',
+      'bar': '1.0.0',
+      'baz': '1.0.0',
+      'qux': '1.0.0'
+    }).validate();
 
     server.serve('foo', '2.0.0', deps: {'bar': '<3.0.0'});
     server.serve('bar', '2.0.0', deps: {'baz': '<3.0.0'});
@@ -39,12 +39,12 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '2.0.0'),
-      d.packageConfigEntry(name: 'baz', version: '2.0.0'),
-      d.packageConfigEntry(name: 'qux', version: '1.0.0'),
-      d.packageConfigEntry(name: 'newdep', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({
+      'foo': '2.0.0',
+      'bar': '2.0.0',
+      'baz': '2.0.0',
+      'qux': '1.0.0',
+      'newdep': '2.0.0'
+    }).validate();
   });
 }
diff --git a/test/get/hosted/unlock_if_version_doesnt_exist_test.dart b/test/get/hosted/unlock_if_version_doesnt_exist_test.dart
index e4cc01b..7eb4246 100644
--- a/test/get/hosted/unlock_if_version_doesnt_exist_test.dart
+++ b/test/get/hosted/unlock_if_version_doesnt_exist_test.dart
@@ -17,9 +17,7 @@
 
     await d.appDir({'foo': 'any'}).create();
     await pubGet();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0'}).validate();
 
     deleteEntry(p.join(d.sandbox, cachePath));
 
@@ -27,8 +25,6 @@
     server.serve('foo', '1.0.1');
 
     await pubGet();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.1'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.1'}).validate();
   });
 }
diff --git a/test/get/package_name_test.dart b/test/get/package_name_test.dart
index b1328cc..46ca386 100644
--- a/test/get/package_name_test.dart
+++ b/test/get/package_name_test.dart
@@ -56,8 +56,7 @@
     await pubGet();
 
     await d.dir(appPath, [
-      d.packageConfigFile(
-          [d.packageConfigEntry(name: 'foo.bar.baz', path: '.')])
+      d.packagesFile({'foo.bar.baz': '.'}),
     ]).validate();
   });
 }
diff --git a/test/get/path/absolute_path_test.dart b/test/get/path/absolute_path_test.dart
index e1897e9..0fc987a 100644
--- a/test/get/path/absolute_path_test.dart
+++ b/test/get/path/absolute_path_test.dart
@@ -21,8 +21,6 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: path.join(d.sandbox, 'foo')),
-    ]).validate();
+    await d.appPackagesFile({'foo': path.join(d.sandbox, 'foo')}).validate();
   });
 }
diff --git a/test/get/path/absolute_symlink_test.dart b/test/get/path/absolute_symlink_test.dart
index 83d3433..1a2d912 100644
--- a/test/get/path/absolute_symlink_test.dart
+++ b/test/get/path/absolute_symlink_test.dart
@@ -24,8 +24,8 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: fooPath),
+    await d.dir(appPath, [
+      d.packagesFile({'myapp': '.', 'foo': fooPath})
     ]).validate();
 
     await d.dir('moved').create();
@@ -35,9 +35,9 @@
     renameInSandbox(appPath, path.join('moved', appPath));
 
     await d.dir('moved', [
-      d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', path: fooPath),
-      ]),
+      d.dir(appPath, [
+        d.packagesFile({'myapp': '.', 'foo': fooPath})
+      ])
     ]).validate();
   });
 }
diff --git a/test/get/path/relative_path_test.dart b/test/get/path/relative_path_test.dart
index e56a453..4255d49 100644
--- a/test/get/path/relative_path_test.dart
+++ b/test/get/path/relative_path_test.dart
@@ -23,9 +23,7 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '../foo'}).validate();
   });
 
   test('path is relative to containing pubspec', () async {
@@ -47,10 +45,8 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../relative/foo'),
-      d.packageConfigEntry(name: 'bar', path: '../relative/bar'),
-    ]).validate();
+    await d.appPackagesFile(
+        {'foo': '../relative/foo', 'bar': '../relative/bar'}).validate();
   });
 
   test('path is relative to containing pubspec when using --directory',
@@ -76,10 +72,9 @@
         workingDirectory: d.sandbox,
         output: contains('Changed 2 dependencies in myapp!'));
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../relative/foo'),
-      d.packageConfigEntry(name: 'bar', path: '../relative/bar'),
-    ]).validate();
+    await d.appPackagesFile(
+      {'foo': '../relative/foo', 'bar': '../relative/bar'},
+    ).validate();
   });
 
   test('relative path preserved in the lockfile', () async {
diff --git a/test/get/path/relative_symlink_test.dart b/test/get/path/relative_symlink_test.dart
index 9136a34..af7185b 100644
--- a/test/get/path/relative_symlink_test.dart
+++ b/test/get/path/relative_symlink_test.dart
@@ -28,8 +28,8 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
+    await d.dir(appPath, [
+      d.packagesFile({'myapp': '.', 'foo': '../foo'})
     ]).validate();
 
     await d.dir('moved').create();
@@ -41,8 +41,8 @@
     renameInSandbox(appPath, path.join('moved', appPath));
 
     await d.dir('moved', [
-      d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', path: '../foo'),
+      d.dir(appPath, [
+        d.packagesFile({'myapp': '.', 'foo': '../foo'})
       ])
     ]).validate();
   });
diff --git a/test/get/path/shared_dependency_symlink_test.dart b/test/get/path/shared_dependency_symlink_test.dart
index d450838..46a78c6 100644
--- a/test/get/path/shared_dependency_symlink_test.dart
+++ b/test/get/path/shared_dependency_symlink_test.dart
@@ -40,10 +40,13 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-      d.packageConfigEntry(name: 'bar', path: '../bar'),
-      d.packageConfigEntry(name: 'shared', path: '../shared'),
+    await d.dir(appPath, [
+      d.packagesFile({
+        'myapp': '.',
+        'foo': '../foo',
+        'bar': '../bar',
+        'shared': '../shared'
+      })
     ]).validate();
   });
 }
diff --git a/test/get/path/shared_dependency_test.dart b/test/get/path/shared_dependency_test.dart
index 3ef91ae..7072221 100644
--- a/test/get/path/shared_dependency_test.dart
+++ b/test/get/path/shared_dependency_test.dart
@@ -35,11 +35,8 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-      d.packageConfigEntry(name: 'bar', path: '../bar'),
-      d.packageConfigEntry(name: 'shared', path: '../shared'),
-    ]).validate();
+    await d.appPackagesFile(
+        {'foo': '../foo', 'bar': '../bar', 'shared': '../shared'}).validate();
   });
 
   test('shared dependency with paths that normalize the same', () async {
@@ -69,10 +66,7 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-      d.packageConfigEntry(name: 'bar', path: '../bar'),
-      d.packageConfigEntry(name: 'shared', path: '../shared'),
-    ]).validate();
+    await d.appPackagesFile(
+        {'foo': '../foo', 'bar': '../bar', 'shared': '../shared'}).validate();
   });
 }
diff --git a/test/get/sdk_constraint_required_test.dart b/test/get/sdk_constraint_required_test.dart
index 3f1e5c0..1b6fbc5 100644
--- a/test/get/sdk_constraint_required_test.dart
+++ b/test/get/sdk_constraint_required_test.dart
@@ -25,8 +25,8 @@
       d.nothing('pubspec.lock'),
       // The "packages" directory should not have been generated.
       d.nothing('packages'),
-      // The package config file should not have been created.
-      d.nothing('.dart_tool/package_config.json'),
+      // The ".packages" file should not have been created.
+      d.nothing('.packages'),
     ]).validate();
   });
 }
diff --git a/test/get/switch_source_test.dart b/test/get/switch_source_test.dart
index 7e56652..ffbf8b4 100644
--- a/test/get/switch_source_test.dart
+++ b/test/get/switch_source_test.dart
@@ -21,15 +21,11 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', path: '../foo'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '../foo'}).validate();
     await d.appDir({'foo': 'any'}).create();
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.2.3'}).validate();
   });
 }
diff --git a/test/hosted/offline_test.dart b/test/hosted/offline_test.dart
index ca3dc80..6482656 100644
--- a/test/hosted/offline_test.dart
+++ b/test/hosted/offline_test.dart
@@ -44,10 +44,8 @@
       }
 
       await pubCommand(command, args: ['--offline'], warning: warning);
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-        d.packageConfigEntry(name: 'bar', version: '1.2.3'),
-      ]).validate();
+
+      await d.appPackagesFile({'foo': '1.2.3', 'bar': '1.2.3'}).validate();
     });
 
     test('supports prerelease versions', () async {
@@ -68,9 +66,7 @@
 
       await pubCommand(command, args: ['--offline'], warning: warning);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.3-alpha.1'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.2.3-alpha.1'}).validate();
     });
 
     test('fails gracefully if a dependency is not cached', () async {
@@ -147,9 +143,7 @@
 
       await pubCommand(command, args: ['--offline']);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.3'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.2.3'}).validate();
     });
 
     test('skips invalid cached versions', () async {
@@ -170,9 +164,7 @@
 
       await pubCommand(command, args: ['--offline']);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.2'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.2.2'}).validate();
     });
 
     test('skips invalid locked versions', () async {
@@ -194,9 +186,7 @@
 
       await pubCommand(command, args: ['--offline']);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.2.2'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.2.2'}).validate();
     });
   });
 }
diff --git a/test/hosted/remove_removed_dependency_test.dart b/test/hosted/remove_removed_dependency_test.dart
index a0446c0..bb2e091 100644
--- a/test/hosted/remove_removed_dependency_test.dart
+++ b/test/hosted/remove_removed_dependency_test.dart
@@ -17,18 +17,14 @@
       await d.appDir({'foo': 'any', 'bar': 'any'}).create();
 
       await pubCommand(command);
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-        d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-      ]).validate();
+
+      await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.0.0'}).validate();
 
       await d.appDir({'foo': 'any'}).create();
 
       await pubCommand(command);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.0.0'}).validate();
     });
   });
 }
diff --git a/test/hosted/remove_removed_transitive_dependency_test.dart b/test/hosted/remove_removed_transitive_dependency_test.dart
index 182ec3f..ac3a452 100644
--- a/test/hosted/remove_removed_transitive_dependency_test.dart
+++ b/test/hosted/remove_removed_transitive_dependency_test.dart
@@ -21,21 +21,20 @@
       await d.appDir({'foo': 'any', 'bar': 'any'}).create();
 
       await pubCommand(command);
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-        d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-        d.packageConfigEntry(name: 'shared_dep', version: '1.0.0'),
-        d.packageConfigEntry(name: 'bar_dep', version: '1.0.0'),
-      ]).validate();
+
+      await d.appPackagesFile({
+        'foo': '1.0.0',
+        'bar': '1.0.0',
+        'shared_dep': '1.0.0',
+        'bar_dep': '1.0.0',
+      }).validate();
 
       await d.appDir({'foo': 'any'}).create();
 
       await pubCommand(command);
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-        d.packageConfigEntry(name: 'shared_dep', version: '1.0.0'),
-      ]).validate();
+      await d
+          .appPackagesFile({'foo': '1.0.0', 'shared_dep': '1.0.0'}).validate();
     });
   });
 }
diff --git a/test/must_pub_get_test.dart b/test/must_pub_get_test.dart
index 71d9c16..dfc09d7 100644
--- a/test/must_pub_get_test.dart
+++ b/test/must_pub_get_test.dart
@@ -213,7 +213,7 @@
           d.appPubspec({'foo': '1.0.0'})
         ]).create();
 
-        await pubGet(args: ['--legacy-packages-file']);
+        await pubGet();
 
         deleteEntry(p.join(d.sandbox, cachePath));
 
@@ -235,7 +235,7 @@
           })
         ]).create();
 
-        await pubGet(args: ['--legacy-packages-file']);
+        await pubGet();
 
         await createPackagesFile(appPath);
 
@@ -257,7 +257,7 @@
           })
         ]).create();
 
-        await pubGet(args: ['--legacy-packages-file']);
+        await pubGet();
 
         await d.dir(appPath, [
           d.file('.packages', '''
@@ -284,7 +284,7 @@
           })
         ]).create();
 
-        await pubGet(args: ['--legacy-packages-file']);
+        await pubGet();
 
         await createPackagesFile(appPath, dependenciesInSandBox: ['foo']);
 
@@ -452,7 +452,7 @@
   group("doesn't require the user to run pub get first if", () {
     group(
         'the pubspec is older than the lockfile which is older than the '
-        'package-config, even if the contents are wrong', () {
+        'packages file, even if the contents are wrong', () {
       setUp(() async {
         await d.dir(appPath, [
           d.appPubspec({'foo': '1.0.0'})
@@ -461,6 +461,7 @@
         await _touch('pubspec.yaml');
 
         await _touch('pubspec.lock');
+        await _touch('.packages');
         await _touch('.dart_tool/package_config.json');
       });
 
@@ -599,11 +600,14 @@
           File(p.join(d.sandbox, 'myapp/pubspec.yaml')).lastModifiedSync();
       var lockFileModified =
           File(p.join(d.sandbox, 'myapp/pubspec.lock')).lastModifiedSync();
+      var packagesModified =
+          File(p.join(d.sandbox, 'myapp/.packages')).lastModifiedSync();
       var packageConfigModified =
           File(p.join(d.sandbox, 'myapp/.dart_tool/package_config.json'))
               .lastModifiedSync();
 
       expect(!pubspecModified.isAfter(lockFileModified), isTrue);
+      expect(!lockFileModified.isAfter(packagesModified), isTrue);
       expect(!lockFileModified.isAfter(packageConfigModified), isTrue);
     });
   }
diff --git a/test/packages_file_test.dart b/test/packages_file_test.dart
index c245a9a..e7736be 100644
--- a/test/packages_file_test.dart
+++ b/test/packages_file_test.dart
@@ -11,7 +11,7 @@
 
 void main() {
   forBothPubGetAndUpgrade((command) {
-    test('.packages file is created with flag', () async {
+    test('.packages file is created', () async {
       await servePackages()
         ..serve('foo', '1.2.3',
             deps: {'baz': '2.2.2'}, contents: [d.dir('lib', [])])
@@ -24,7 +24,7 @@
         d.dir('lib')
       ]).create();
 
-      await pubCommand(command, args: ['--legacy-packages-file']);
+      await pubCommand(command);
 
       await d.dir(appPath, [
         d.packagesFile(
@@ -32,7 +32,7 @@
       ]).validate();
     });
 
-    test('.packages file is overwritten with flag', () async {
+    test('.packages file is overwritten', () async {
       await servePackages()
         ..serve('foo', '1.2.3',
             deps: {'baz': '2.2.2'}, contents: [d.dir('lib', [])])
@@ -51,7 +51,7 @@
       await oldFile.create();
       await oldFile.validate(); // Sanity-check that file was created correctly.
 
-      await pubCommand(command, args: ['--legacy-packages-file']);
+      await pubCommand(command);
 
       await d.dir(appPath, [
         d.packagesFile(
@@ -59,28 +59,24 @@
       ]).validate();
     });
 
-    test('.packages file is not created if pub command fails with flag',
-        () async {
+    test('.packages file is not created if pub command fails', () async {
       await d.dir(appPath, [
         d.appPubspec({'foo': '1.2.3'}),
         d.dir('lib')
       ]).create();
 
       await pubCommand(command,
-          args: ['--offline', '--legacy-packages-file'],
-          error: equalsIgnoringWhitespace("""
+          args: ['--offline'], error: equalsIgnoringWhitespace("""
             Because myapp depends on foo any which doesn't exist (could not find
               package foo in cache), version solving failed.
 
             Try again without --offline!
-          """),
-          exitCode: exit_codes.UNAVAILABLE);
+          """), exitCode: exit_codes.UNAVAILABLE);
 
       await d.dir(appPath, [d.nothing('.packages')]).validate();
     });
 
-    test('.packages file has relative path to path dependency with flag',
-        () async {
+    test('.packages file has relative path to path dependency', () async {
       await servePackages()
         ..serve('foo', '1.2.3',
             deps: {'baz': 'any'}, contents: [d.dir('lib', [])])
@@ -104,7 +100,7 @@
         d.dir('lib')
       ]).create();
 
-      await pubCommand(command, args: ['--legacy-packages-file']);
+      await pubCommand(command);
 
       await d.dir(appPath, [
         d.packagesFile({'myapp': '.', 'baz': '../local_baz', 'foo': '1.2.3'}),
diff --git a/test/pub_get_and_upgrade_test.dart b/test/pub_get_and_upgrade_test.dart
index f64f93b..62004a4 100644
--- a/test/pub_get_and_upgrade_test.dart
+++ b/test/pub_get_and_upgrade_test.dart
@@ -45,8 +45,7 @@
       await pubCommand(command);
 
       await d.dir('myapp', [
-        d.packageConfigFile(
-            [d.packageConfigEntry(name: 'myapp_name', path: '.')]),
+        d.packagesFile({'myapp_name': '.'})
       ]).validate();
     });
 
diff --git a/test/remove/remove_test.dart b/test/remove/remove_test.dart
index 8c82527..e369c85 100644
--- a/test/remove/remove_test.dart
+++ b/test/remove/remove_test.dart
@@ -21,7 +21,7 @@
     await pubRemove(args: ['foo']);
 
     await d.cacheDir({}).validate();
-    await d.appPackageConfigFile([]).validate();
+    await d.appPackagesFile({}).validate();
     await d.appDir().validate();
   });
 
@@ -49,9 +49,7 @@
     await pubRemove(args: ['foo']);
 
     await d.cacheDir({'bar': '2.0.0'}).validate();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'bar', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'bar': '2.0.0'}).validate();
 
     await d.dir(appPath, [
       d.pubspec({
@@ -115,7 +113,7 @@
     await pubRemove(args: ['foo']);
 
     await d.cacheDir({}).validate();
-    await d.appPackageConfigFile([]).validate();
+    await d.appPackagesFile({}).validate();
 
     await d.dir(appPath, [
       d.pubspec({'name': 'myapp'})
@@ -142,10 +140,7 @@
     await pubRemove(args: ['foo', 'bar', 'baz']);
 
     await d.cacheDir({'jfj': '0.2.1'}).validate();
-
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'jfj', version: '0.2.1'),
-    ]).validate();
+    await d.appPackagesFile({'jfj': '0.2.1'}).validate();
 
     await d.dir(appPath, [
       d.pubspec({
@@ -175,10 +170,7 @@
     await pubGet();
 
     await pubRemove(args: ['foo']);
-
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'bar', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'bar': '1.2.3'}).validate();
     await d.appDir({'bar': '1.2.3'}).validate();
   });
 
@@ -196,9 +188,7 @@
     await pubGet();
 
     await pubRemove(args: ['foo']);
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'bar', version: '1.2.3'),
-    ]).validate();
+    await d.appPackagesFile({'bar': '1.2.3'}).validate();
     await d.appDir({'bar': '1.2.3'}).validate();
   });
 
@@ -220,9 +210,7 @@
     await pubGet();
 
     await pubRemove(args: ['foo']);
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'bar', version: '2.0.1'),
-    ]).validate();
+    await d.appPackagesFile({'bar': '2.0.1'}).validate();
     await d.appDir({'bar': '2.0.1'}).validate();
   });
 
diff --git a/test/sdk_test.dart b/test/sdk_test.dart
index 6165cd5..6e50ff0 100644
--- a/test/sdk_test.dart
+++ b/test/sdk_test.dart
@@ -37,10 +37,13 @@
       }).create();
       await pubCommand(command,
           environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')});
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(
-            name: 'foo', path: p.join(d.sandbox, 'flutter', 'packages', 'foo')),
-        d.packageConfigEntry(name: 'bar', version: '1.0.0'),
+
+      await d.dir(appPath, [
+        d.packagesFile({
+          'myapp': '.',
+          'foo': p.join(d.sandbox, 'flutter', 'packages', 'foo'),
+          'bar': '1.0.0'
+        })
       ]).validate();
     });
 
@@ -51,10 +54,11 @@
       await pubCommand(command,
           environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')});
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(
-            name: 'baz',
-            path: p.join(d.sandbox, 'flutter', 'bin', 'cache', 'pkg', 'baz')),
+      await d.dir(appPath, [
+        d.packagesFile({
+          'myapp': '.',
+          'baz': p.join(d.sandbox, 'flutter', 'bin', 'cache', 'pkg', 'baz')
+        })
       ]).validate();
     });
 
@@ -89,7 +93,10 @@
       deleteEntry(p.join(d.sandbox, 'flutter', 'version'));
       await pubCommand(command,
           environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')});
-      await d.appPackageConfigFile([]).validate();
+
+      await d.dir(appPath, [
+        d.packagesFile({'myapp': '.'})
+      ]).validate();
     });
 
     group('fails if', () {
@@ -162,10 +169,13 @@
       }).create();
       await pubCommand(command,
           environment: {'FUCHSIA_DART_SDK_ROOT': p.join(d.sandbox, 'fuchsia')});
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(
-            name: 'foo', path: p.join(d.sandbox, 'fuchsia', 'packages', 'foo')),
-        d.packageConfigEntry(name: 'bar', version: '1.0.0'),
+
+      await d.dir(appPath, [
+        d.packagesFile({
+          'myapp': '.',
+          'foo': p.join(d.sandbox, 'fuchsia', 'packages', 'foo'),
+          'bar': '1.0.0'
+        })
       ]).validate();
     });
   });
diff --git a/test/testdata/goldens/embedding/embedding_test/logfile is written with --verbose and on unexpected exceptions.txt b/test/testdata/goldens/embedding/embedding_test/logfile is written with --verbose and on unexpected exceptions.txt
index fc69b03..1d3a5f5 100644
--- a/test/testdata/goldens/embedding/embedding_test/logfile is written with --verbose and on unexpected exceptions.txt
+++ b/test/testdata/goldens/embedding/embedding_test/logfile is written with --verbose and on unexpected exceptions.txt
@@ -81,6 +81,16 @@
 [E]    |   version: "1.0.0"
 [E]    | sdks:
 [E]    |   dart: ">=0.1.2 <1.0.0"
+[E] IO  : Writing $N characters to text file .packages.
+[E] FINE: Contents:
+[E]    | # This file is deprecated. Tools should instead consume 
+[E]    | # `.dart_tool/package_config.json`.
+[E]    | # 
+[E]    | # For more info see: https://dart.dev/go/dot-packages-deprecation
+[E]    | # 
+[E]    | # Generated by pub on $TIME
+[E]    | foo:file://$SANDBOX/cache/hosted/localhost%2558$PORT/foo-1.0.0/lib/
+[E]    | myapp:lib/
 [E] IO  : Writing $N characters to text file .dart_tool/package_config.json.
 [E] FINE: Contents:
 [E]    | {
@@ -220,6 +230,16 @@
    | sdks:
    |   dart: ">=0.1.2 <1.0.0"
 MSG : Changed 1 dependency!
+IO  : Writing $N characters to text file .packages.
+FINE: Contents:
+   | # This file is deprecated. Tools should instead consume 
+   | # `.dart_tool/package_config.json`.
+   | # 
+   | # For more info see: https://dart.dev/go/dot-packages-deprecation
+   | # 
+   | # Generated by pub on $TIME
+   | foo:file://$SANDBOX/cache/hosted/localhost%2558$PORT/foo-1.0.0/lib/
+   | myapp:lib/
 IO  : Writing $N characters to text file .dart_tool/package_config.json.
 FINE: Contents:
    | {
diff --git a/test/testdata/goldens/help_test/pub add --help.txt b/test/testdata/goldens/help_test/pub add --help.txt
index 3d1f429..2a37c21 100644
--- a/test/testdata/goldens/help_test/pub add --help.txt
+++ b/test/testdata/goldens/help_test/pub add --help.txt
@@ -5,22 +5,20 @@
 Add dependencies to pubspec.yaml.
 
 Usage: pub add <package>[:<constraint>] [<package2>[:<constraint2>]...] [options]
--h, --help                    Print this usage information.
--d, --dev                     Adds to the development dependencies instead.
-    --git-url                 Git URL of the package
-    --git-ref                 Git branch or commit to be retrieved
-    --git-path                Path of git package in repository
-    --hosted-url              URL of package host server
-    --path                    Add package from local path
-    --sdk=<[flutter]>         add package from SDK source
-                              [flutter]
-    --[no-]offline            Use cached packages instead of accessing the
-                              network.
--n, --dry-run                 Report what dependencies would change but don't
-                              change any.
-    --[no-]precompile         Build executables in immediate dependencies.
--C, --directory=<dir>         Run this in the directory <dir>.
-    --legacy-packages-file    Generate the legacy ".packages" file
+-h, --help               Print this usage information.
+-d, --dev                Adds to the development dependencies instead.
+    --git-url            Git URL of the package
+    --git-ref            Git branch or commit to be retrieved
+    --git-path           Path of git package in repository
+    --hosted-url         URL of package host server
+    --path               Add package from local path
+    --sdk=<[flutter]>    add package from SDK source
+                         [flutter]
+    --[no-]offline       Use cached packages instead of accessing the network.
+-n, --dry-run            Report what dependencies would change but don't change
+                         any.
+    --[no-]precompile    Build executables in immediate dependencies.
+-C, --directory=<dir>    Run this in the directory <dir>.
 
 Run "pub help" to see global options.
 See https://dart.dev/tools/pub/cmd/pub-add for detailed documentation.
diff --git a/test/testdata/goldens/help_test/pub downgrade --help.txt b/test/testdata/goldens/help_test/pub downgrade --help.txt
index ddf71e7..4497da2 100644
--- a/test/testdata/goldens/help_test/pub downgrade --help.txt
+++ b/test/testdata/goldens/help_test/pub downgrade --help.txt
@@ -7,13 +7,11 @@
 
 
 Usage: pub downgrade [dependencies...]
--h, --help                    Print this usage information.
-    --[no-]offline            Use cached packages instead of accessing the
-                              network.
--n, --dry-run                 Report what dependencies would change but don't
-                              change any.
--C, --directory=<dir>         Run this in the directory<dir>.
-    --legacy-packages-file    Generate the legacy ".packages" file
+-h, --help               Print this usage information.
+    --[no-]offline       Use cached packages instead of accessing the network.
+-n, --dry-run            Report what dependencies would change but don't change
+                         any.
+-C, --directory=<dir>    Run this in the directory<dir>.
 
 Run "pub help" to see global options.
 See https://dart.dev/tools/pub/cmd/pub-downgrade for detailed documentation.
diff --git a/test/testdata/goldens/help_test/pub get --help.txt b/test/testdata/goldens/help_test/pub get --help.txt
index 104f69c..74648a2 100644
--- a/test/testdata/goldens/help_test/pub get --help.txt
+++ b/test/testdata/goldens/help_test/pub get --help.txt
@@ -5,14 +5,12 @@
 Get the current package's dependencies.
 
 Usage: pub get <subcommand> [arguments...]
--h, --help                    Print this usage information.
-    --[no-]offline            Use cached packages instead of accessing the
-                              network.
--n, --dry-run                 Report what dependencies would change but don't
-                              change any.
-    --[no-]precompile         Build executables in immediate dependencies.
-    --legacy-packages-file    Generate the legacy ".packages" file
--C, --directory=<dir>         Run this in the directory<dir>.
+-h, --help               Print this usage information.
+    --[no-]offline       Use cached packages instead of accessing the network.
+-n, --dry-run            Report what dependencies would change but don't change
+                         any.
+    --[no-]precompile    Build executables in immediate dependencies.
+-C, --directory=<dir>    Run this in the directory<dir>.
 
 Run "pub help" to see global options.
 See https://dart.dev/tools/pub/cmd/pub-get for detailed documentation.
diff --git a/test/testdata/goldens/help_test/pub remove --help.txt b/test/testdata/goldens/help_test/pub remove --help.txt
index b82f9b6..7d14ed0 100644
--- a/test/testdata/goldens/help_test/pub remove --help.txt
+++ b/test/testdata/goldens/help_test/pub remove --help.txt
@@ -5,14 +5,12 @@
 Removes a dependency from the current package.
 
 Usage: pub remove <package>
--h, --help                    Print this usage information.
-    --[no-]offline            Use cached packages instead of accessing the
-                              network.
--n, --dry-run                 Report what dependencies would change but don't
-                              change any.
-    --[no-]precompile         Precompile executables in immediate dependencies.
--C, --directory=<dir>         Run this in the directory<dir>.
-    --legacy-packages-file    Generate the legacy ".packages" file
+-h, --help               Print this usage information.
+    --[no-]offline       Use cached packages instead of accessing the network.
+-n, --dry-run            Report what dependencies would change but don't change
+                         any.
+    --[no-]precompile    Precompile executables in immediate dependencies.
+-C, --directory=<dir>    Run this in the directory<dir>.
 
 Run "pub help" to see global options.
 See https://dart.dev/tools/pub/cmd/pub-remove for detailed documentation.
diff --git a/test/testdata/goldens/help_test/pub upgrade --help.txt b/test/testdata/goldens/help_test/pub upgrade --help.txt
index c787951..d1a29b9 100644
--- a/test/testdata/goldens/help_test/pub upgrade --help.txt
+++ b/test/testdata/goldens/help_test/pub upgrade --help.txt
@@ -5,18 +5,16 @@
 Upgrade the current package's dependencies to latest versions.
 
 Usage: pub upgrade [dependencies...]
--h, --help                    Print this usage information.
-    --[no-]offline            Use cached packages instead of accessing the
-                              network.
--n, --dry-run                 Report what dependencies would change but don't
-                              change any.
-    --[no-]precompile         Precompile executables in immediate dependencies.
-    --null-safety             Upgrade constraints in pubspec.yaml to null-safety
-                              versions
-    --legacy-packages-file    Generate the legacy ".packages" file
-    --major-versions          Upgrades packages to their latest resolvable
-                              versions, and updates pubspec.yaml.
--C, --directory=<dir>         Run this in the directory<dir>.
+-h, --help               Print this usage information.
+    --[no-]offline       Use cached packages instead of accessing the network.
+-n, --dry-run            Report what dependencies would change but don't change
+                         any.
+    --[no-]precompile    Precompile executables in immediate dependencies.
+    --null-safety        Upgrade constraints in pubspec.yaml to null-safety
+                         versions
+    --major-versions     Upgrades packages to their latest resolvable versions,
+                         and updates pubspec.yaml.
+-C, --directory=<dir>    Run this in the directory<dir>.
 
 Run "pub help" to see global options.
 See https://dart.dev/tools/pub/cmd/pub-upgrade for detailed documentation.
diff --git a/test/unknown_source_test.dart b/test/unknown_source_test.dart
index 37591d0..fc53621 100644
--- a/test/unknown_source_test.dart
+++ b/test/unknown_source_test.dart
@@ -72,9 +72,7 @@
       await pubCommand(command);
 
       // Should upgrade to the new one.
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', path: '../foo'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '../foo'}).validate();
     });
   });
 }
diff --git a/test/upgrade/hosted/unlock_if_necessary_test.dart b/test/upgrade/hosted/unlock_if_necessary_test.dart
index 2707100..c285e66 100644
--- a/test/upgrade/hosted/unlock_if_necessary_test.dart
+++ b/test/upgrade/hosted/unlock_if_necessary_test.dart
@@ -20,19 +20,13 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'foo_dep', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'foo_dep': '1.0.0'}).validate();
 
     server.serve('foo', '2.0.0', deps: {'foo_dep': '>1.0.0'});
     server.serve('foo_dep', '2.0.0');
 
     await pubUpgrade(args: ['foo']);
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-      d.packageConfigEntry(name: 'foo_dep', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '2.0.0', 'foo_dep': '2.0.0'}).validate();
   });
 }
diff --git a/test/upgrade/hosted/unlock_single_package_test.dart b/test/upgrade/hosted/unlock_single_package_test.dart
index e443a6a..bc78a3d 100644
--- a/test/upgrade/hosted/unlock_single_package_test.dart
+++ b/test/upgrade/hosted/unlock_single_package_test.dart
@@ -18,10 +18,7 @@
 
     await pubGet();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.0.0'}).validate();
 
     server.serve('foo', '2.0.0', deps: {'bar': '<3.0.0'});
     server.serve('bar', '2.0.0');
@@ -29,23 +26,16 @@
     // This can't upgrade 'bar'
     await pubUpgrade(args: ['bar']);
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.0.0'}).validate();
+
     // Introducing foo and bar 1.1.0, to show that only 'bar' will be upgraded
     server.serve('foo', '1.1.0', deps: {'bar': '<2.0.0'});
     server.serve('bar', '1.1.0');
 
     await pubUpgrade(args: ['bar']);
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.1.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.1.0'}).validate();
+
     await pubUpgrade();
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '2.0.0', 'bar': '2.0.0'}).validate();
   });
 }
diff --git a/test/upgrade/hosted/upgrade_removed_constraints_test.dart b/test/upgrade/hosted/upgrade_removed_constraints_test.dart
index cf72c07..248ac90 100644
--- a/test/upgrade/hosted/upgrade_removed_constraints_test.dart
+++ b/test/upgrade/hosted/upgrade_removed_constraints_test.dart
@@ -19,19 +19,13 @@
 
     await pubUpgrade();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-      d.packageConfigEntry(name: 'shared_dep', version: '1.0.0'),
-    ]).validate();
+    await d.appPackagesFile(
+        {'foo': '1.0.0', 'bar': '1.0.0', 'shared_dep': '1.0.0'}).validate();
 
     await d.appDir({'foo': 'any'}).create();
 
     await pubUpgrade();
 
-    await d.appPackageConfigFile([
-      d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-      d.packageConfigEntry(name: 'shared_dep', version: '2.0.0'),
-    ]).validate();
+    await d.appPackagesFile({'foo': '1.0.0', 'shared_dep': '2.0.0'}).validate();
   });
 }
diff --git a/test/upgrade/upgrade_major_versions_test.dart b/test/upgrade/upgrade_major_versions_test.dart
index c5f0994..932ca17 100644
--- a/test/upgrade/upgrade_major_versions_test.dart
+++ b/test/upgrade/upgrade_major_versions_test.dart
@@ -41,11 +41,12 @@
         'bar': '^0.2.0',
         'baz': '^1.0.0',
       }).validate();
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-        d.packageConfigEntry(name: 'bar', version: '0.2.0'),
-        d.packageConfigEntry(name: 'baz', version: '1.0.1'),
-      ]).validate();
+
+      await d.appPackagesFile({
+        'foo': '2.0.0',
+        'bar': '0.2.0',
+        'baz': '1.0.1',
+      }).validate();
     });
 
     test('bumps dev_dependency constraints and shows summary report', () async {
@@ -91,11 +92,11 @@
         }),
       ]).validate();
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-        d.packageConfigEntry(name: 'bar', version: '0.2.0'),
-        d.packageConfigEntry(name: 'baz', version: '1.0.1'),
-      ]).validate();
+      await d.appPackagesFile({
+        'foo': '2.0.0',
+        'bar': '0.2.0',
+        'baz': '1.0.1',
+      }).validate();
     });
 
     test('upgrades only the selected package', () async {
@@ -127,10 +128,7 @@
         'bar': '^0.1.0',
       }).validate();
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '2.0.0'),
-        d.packageConfigEntry(name: 'bar', version: '0.1.0'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '2.0.0', 'bar': '0.1.0'}).validate();
     });
 
     test('chooses the latest version where possible', () async {
@@ -161,9 +159,7 @@
         d.file('pubspec.lock', contains('3.0.0'))
       ]).validate();
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '3.0.0'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '3.0.0'}).validate();
     });
 
     test('overridden dependencies - no resolution', () async {
@@ -215,10 +211,7 @@
         })
       ]).validate();
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-        d.packageConfigEntry(name: 'bar', version: '1.0.0'),
-      ]).validate();
+      await d.appPackagesFile({'foo': '1.0.0', 'bar': '1.0.0'}).validate();
     });
 
     test('upgrade should not downgrade any versions', () async {
@@ -256,10 +249,10 @@
         'bar': '^4.0.0',
       }).validate();
 
-      await d.appPackageConfigFile([
-        d.packageConfigEntry(name: 'foo', version: '1.0.0'),
-        d.packageConfigEntry(name: 'bar', version: '4.0.0'),
-      ]).validate();
+      await d.appPackagesFile({
+        'foo': '1.0.0',
+        'bar': '4.0.0',
+      }).validate();
     });
   });
 }