diff --git a/test/version_solver_test.dart b/test/version_solver_test.dart
index 394859e..17c5be2 100644
--- a/test/version_solver_test.dart
+++ b/test/version_solver_test.dart
@@ -28,8 +28,6 @@
   group('pre-release', prerelease);
   group('override', override);
   group('downgrade', downgrade);
-  group('features', features, skip: true);
-
   group('regressions', regressions);
 }
 
@@ -1948,1069 +1946,6 @@
   });
 }
 
-void features() {
-  test("doesn't enable an opt-in feature by default", () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': false,
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('bar', '1.0.0');
-
-    await d.appDir(dependencies: {'foo': '1.0.0'}).create();
-    await expectResolves(result: {'foo': '1.0.0'});
-  });
-
-  test('enables an opt-out feature by default', () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': true,
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('bar', '1.0.0');
-
-    await d.appDir(dependencies: {'foo': '1.0.0'}).create();
-    await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-  });
-
-  test('features are opt-out by default', () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('bar', '1.0.0');
-
-    await d.appDir(dependencies: {'foo': '1.0.0'}).create();
-    await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-  });
-
-  test("enables an opt-in feature if it's required", () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': false,
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('bar', '1.0.0');
-
-    await d.appDir(
-      dependencies: {
-        'foo': {
-          'version': '1.0.0',
-          'features': {'stuff': true}
-        }
-      },
-    ).create();
-    await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-  });
-
-  test("doesn't enable an opt-out feature if it's disabled", () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('bar', '1.0.0');
-
-    await d.appDir(
-      dependencies: {
-        'foo': {
-          'version': '1.0.0',
-          'features': {'stuff': false}
-        }
-      },
-    ).create();
-    await expectResolves(result: {'foo': '1.0.0'});
-  });
-
-  test('opting in takes precedence over opting out', () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('bar', '1.0.0')
-      ..serve(
-        'baz',
-        '1.0.0',
-        deps: {
-          'foo': {
-            'version': '1.0.0',
-            'features': {'stuff': true}
-          }
-        },
-      );
-
-    await d.appDir(
-      dependencies: {
-        'foo': {
-          'version': '1.0.0',
-          'features': {'stuff': false}
-        },
-        'baz': '1.0.0'
-      },
-    ).create();
-    await expectResolves(
-      result: {'foo': '1.0.0', 'bar': '1.0.0', 'baz': '1.0.0'},
-    );
-  });
-
-  test('implicitly opting in takes precedence over opting out', () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('bar', '1.0.0')
-      ..serve(
-        'baz',
-        '1.0.0',
-        deps: {
-          'foo': {
-            'version': '1.0.0',
-          }
-        },
-      );
-
-    await d.appDir(
-      dependencies: {
-        'foo': {
-          'version': '1.0.0',
-          'features': {'stuff': false}
-        },
-        'baz': '1.0.0'
-      },
-    ).create();
-    await expectResolves(
-      result: {'foo': '1.0.0', 'bar': '1.0.0', 'baz': '1.0.0'},
-    );
-  });
-
-  test("doesn't select a version with an unavailable feature", () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': false,
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('foo', '1.1.0')
-      ..serve('bar', '1.0.0');
-
-    await d.appDir(
-      dependencies: {
-        'foo': {
-          'version': '1.0.0',
-          'features': {'stuff': true}
-        }
-      },
-    ).create();
-    await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-  });
-
-  test("doesn't select a version with an incompatible feature", () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': false,
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve(
-        'foo',
-        '1.1.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': false,
-              'dependencies': {'bar': '2.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('bar', '1.0.0')
-      ..serve('bar', '2.0.0');
-
-    await d.appDir(
-      dependencies: {
-        'foo': {
-          'version': '^1.0.0',
-          'features': {'stuff': true}
-        },
-        'bar': '1.0.0'
-      },
-    ).create();
-    await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-  });
-
-  test(
-      'backtracks if a feature is transitively incompatible with another '
-      'feature', () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': false,
-              'dependencies': {
-                'bar': {
-                  'version': '1.0.0',
-                  'features': {'stuff': false}
-                }
-              }
-            }
-          }
-        },
-      )
-      ..serve(
-        'foo',
-        '1.1.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': false,
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve(
-        'bar',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'dependencies': {'baz': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('baz', '1.0.0')
-      ..serve('baz', '2.0.0');
-
-    await d.appDir(
-      dependencies: {
-        'foo': {
-          'version': '^1.0.0',
-          'features': {'stuff': true}
-        },
-        'baz': '2.0.0'
-      },
-    ).create();
-    await expectResolves(
-      result: {'foo': '1.0.0', 'bar': '1.0.0', 'baz': '2.0.0'},
-      tries: 2,
-    );
-  });
-
-  test("backtracks if a feature's dependencies are transitively incompatible",
-      () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': false,
-              'dependencies': {'bar': '1.0.0'}
-            }
-          }
-        },
-      )
-      ..serve(
-        'foo',
-        '1.1.0',
-        pubspec: {
-          'features': {
-            'stuff': {
-              'default': false,
-              'dependencies': {'bar': '2.0.0'}
-            }
-          }
-        },
-      )
-      ..serve('bar', '1.0.0', deps: {'baz': '1.0.0'})
-      ..serve('bar', '2.0.0', deps: {'baz': '2.0.0'})
-      ..serve('baz', '1.0.0')
-      ..serve('baz', '2.0.0');
-
-    await d.appDir(
-      dependencies: {
-        'foo': {
-          'version': '^1.0.0',
-          'features': {'stuff': true}
-        },
-        'baz': '1.0.0'
-      },
-    ).create();
-    await expectResolves(
-      result: {'foo': '1.0.0', 'bar': '1.0.0', 'baz': '1.0.0'},
-      tries: 2,
-    );
-  });
-
-  test('disables a feature when it backtracks', () async {
-    await servePackages()
-      ..serve('foo', '1.0.0', deps: {'myapp': '0.0.0'})
-      ..serve(
-        'foo',
-        '1.1.0',
-        deps: {
-          // This is a transitively incompatible dependency with myapp, which will
-          // force the solver to backtrack and unselect foo 1.1.0.
-          'bar': '1.0.0',
-          'myapp': {
-            'version': '0.0.0',
-            'features': {'stuff': true}
-          }
-        },
-      )
-      ..serve('bar', '1.0.0', deps: {'baz': '2.0.0'})
-      ..serve('baz', '1.0.0')
-      ..serve('baz', '2.0.0')
-      ..serve('qux', '1.0.0');
-
-    await d.dir(appPath, [
-      d.pubspec({
-        'name': 'myapp',
-        'dependencies': {'foo': '^1.0.0', 'baz': '^1.0.0'},
-        'features': {
-          'stuff': {
-            'default': false,
-            'dependencies': {'qux': '1.0.0'}
-          }
-        }
-      })
-    ]).create();
-    await expectResolves(result: {'foo': '1.0.0', 'baz': '1.0.0'}, tries: 2);
-  });
-
-  test("the root package's features are opt-out by default", () async {
-    await servePackages()
-      ..serve('foo', '1.0.0')
-      ..serve('bar', '1.0.0');
-
-    await d.dir(appPath, [
-      d.pubspec({
-        'name': 'myapp',
-        'dependencies': {'foo': '^1.0.0'},
-        'features': {
-          'stuff': {
-            'dependencies': {'bar': '1.0.0'}
-          }
-        }
-      })
-    ]).create();
-    await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-  });
-
-  test("the root package's features can be made opt-in", () async {
-    await servePackages()
-      ..serve('foo', '1.0.0')
-      ..serve('bar', '1.0.0');
-
-    await d.dir(appPath, [
-      d.pubspec({
-        'name': 'myapp',
-        'dependencies': {'foo': '^1.0.0'},
-        'features': {
-          'stuff': {
-            'default': false,
-            'dependencies': {'bar': '1.0.0'}
-          }
-        }
-      })
-    ]).create();
-    await expectResolves(result: {'foo': '1.0.0'});
-  });
-
-  // We have to enable the root dependency's default-on features during the
-  // initial solve. If a dependency could later disable that feature, that would
-  // break the solver's guarantee that each new selected package monotonically
-  // increases the total number of dependencies.
-  test("the root package's features can't be disabled by dependencies",
-      () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        deps: {
-          'myapp': {
-            'features': {'stuff': false}
-          }
-        },
-      )
-      ..serve('bar', '1.0.0');
-
-    await d.dir(appPath, [
-      d.pubspec({
-        'name': 'myapp',
-        'dependencies': {'foo': '^1.0.0'},
-        'features': {
-          'stuff': {
-            'dependencies': {'bar': '1.0.0'}
-          }
-        }
-      })
-    ]).create();
-    await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-  });
-
-  test("the root package's features can be enabled by dependencies", () async {
-    await servePackages()
-      ..serve(
-        'foo',
-        '1.0.0',
-        deps: {
-          'myapp': {
-            'features': {'stuff': true}
-          }
-        },
-      )
-      ..serve('bar', '1.0.0');
-
-    await d.dir(appPath, [
-      d.pubspec({
-        'name': 'myapp',
-        'dependencies': {'foo': '^1.0.0'},
-        'features': {
-          'stuff': {
-            'default': false,
-            'dependencies': {'bar': '1.0.0'}
-          }
-        }
-      })
-    ]).create();
-    await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-  });
-
-  test("resolution fails because a feature doesn't exist", () async {
-    final server = await servePackages();
-    server.serve('foo', '1.0.0');
-
-    await d.dir(appPath, [
-      d.pubspec({
-        'name': 'myapp',
-        'dependencies': {
-          'foo': {
-            'version': '^1.0.0',
-            'features': {'stuff': true}
-          }
-        }
-      })
-    ]).create();
-    await expectResolves(
-      error: "foo 1.0.0 doesn't have a feature named stuff:\n"
-          '- myapp depends on version ^1.0.0 with stuff',
-    );
-  });
-
-  group('an "if available" dependency', () {
-    test('enables an opt-in feature', () async {
-      await servePackages()
-        ..serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'stuff': {
-                'default': false,
-                'dependencies': {'bar': '1.0.0'}
-              }
-            }
-          },
-        )
-        ..serve('bar', '1.0.0');
-
-      await d.appDir(
-        dependencies: {
-          'foo': {
-            'version': '1.0.0',
-            'features': {'stuff': 'if available'}
-          }
-        },
-      ).create();
-      await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-    });
-
-    test("is compatible with a feature that doesn't exist", () async {
-      final server = await servePackages();
-      server.serve('foo', '1.0.0');
-
-      await d.appDir(
-        dependencies: {
-          'foo': {
-            'version': '1.0.0',
-            'features': {'stuff': 'if available'}
-          }
-        },
-      ).create();
-      await expectResolves(result: {'foo': '1.0.0'});
-    });
-  });
-
-  group('with SDK constraints:', () {
-    setUp(() {
-      return d.dir('flutter', [d.file('version', '1.2.3')]).create();
-    });
-
-    group('succeeds when', () {
-      test('a Dart SDK constraint is matched', () async {
-        final server = await servePackages();
-        server.serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'stuff': {
-                'environment': {'sdk': '^0.1.0'}
-              }
-            }
-          },
-        );
-
-        await d.dir(appPath, [
-          d.pubspec({
-            'name': 'myapp',
-            'dependencies': {'foo': '^1.0.0'}
-          })
-        ]).create();
-
-        await expectResolves(result: {'foo': '1.0.0'});
-      });
-
-      test('a Flutter SDK constraint is matched', () async {
-        final server = await servePackages();
-        server.serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'stuff': {
-                'environment': {'flutter': '^1.0.0'}
-              }
-            }
-          },
-        );
-
-        await d.dir(appPath, [
-          d.pubspec({
-            'name': 'myapp',
-            'dependencies': {'foo': '^1.0.0'}
-          })
-        ]).create();
-
-        await expectResolves(
-          environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},
-          result: {'foo': '1.0.0'},
-        );
-      });
-    });
-
-    group("doesn't choose a version because", () {
-      test("a Dart SDK constraint isn't matched", () async {
-        await servePackages()
-          ..serve('foo', '1.0.0')
-          ..serve(
-            'foo',
-            '1.1.0',
-            pubspec: {
-              'features': {
-                'stuff': {
-                  'environment': {'sdk': '0.0.1'}
-                }
-              }
-            },
-          );
-
-        await d.dir(appPath, [
-          d.pubspec({
-            'name': 'myapp',
-            'dependencies': {'foo': '^1.0.0'}
-          })
-        ]).create();
-
-        await expectResolves(result: {'foo': '1.0.0'});
-      });
-
-      test("Flutter isn't available", () async {
-        await servePackages()
-          ..serve('foo', '1.0.0')
-          ..serve(
-            'foo',
-            '1.1.0',
-            pubspec: {
-              'features': {
-                'stuff': {
-                  'environment': {'flutter': '1.0.0'}
-                }
-              }
-            },
-          );
-
-        await d.dir(appPath, [
-          d.pubspec({
-            'name': 'myapp',
-            'dependencies': {'foo': '^1.0.0'}
-          })
-        ]).create();
-
-        await expectResolves(result: {'foo': '1.0.0'});
-      });
-
-      test("a Flutter SDK constraint isn't matched", () async {
-        await servePackages()
-          ..serve('foo', '1.0.0')
-          ..serve(
-            'foo',
-            '1.1.0',
-            pubspec: {
-              'features': {
-                'stuff': {
-                  'environment': {'flutter': '^2.0.0'}
-                }
-              }
-            },
-          );
-
-        await d.dir(appPath, [
-          d.pubspec({
-            'name': 'myapp',
-            'dependencies': {'foo': '^1.0.0'}
-          })
-        ]).create();
-
-        await expectResolves(
-          environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},
-          result: {'foo': '1.0.0'},
-        );
-      });
-    });
-
-    group('resolution fails because', () {
-      test("a Dart SDK constraint isn't matched", () async {
-        final server = await servePackages();
-        server.serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'stuff': {
-                'environment': {'sdk': '0.0.1'}
-              }
-            }
-          },
-        );
-
-        await d.dir(appPath, [
-          d.pubspec({
-            'name': 'myapp',
-            'dependencies': {'foo': '^1.0.0'}
-          })
-        ]).create();
-
-        await expectResolves(
-          error: 'Package foo feature stuff requires SDK version 0.0.1 but the '
-              'current SDK is 3.1.2+3.',
-        );
-      });
-
-      test("Flutter isn't available", () async {
-        final server = await servePackages();
-        server.serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'stuff': {
-                'environment': {'flutter': '1.0.0'}
-              }
-            }
-          },
-        );
-
-        await d.dir(appPath, [
-          d.pubspec({
-            'name': 'myapp',
-            'dependencies': {'foo': '^1.0.0'}
-          })
-        ]).create();
-
-        await expectResolves(
-          error: 'Package foo feature stuff requires the Flutter SDK, which '
-              'is not available.',
-        );
-      });
-
-      test("a Flutter SDK constraint isn't matched", () async {
-        final server = await servePackages();
-        server.serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'stuff': {
-                'environment': {'flutter': '^2.0.0'}
-              }
-            }
-          },
-        );
-
-        await d.dir(appPath, [
-          d.pubspec({
-            'name': 'myapp',
-            'dependencies': {'foo': '^1.0.0'}
-          })
-        ]).create();
-
-        await expectResolves(
-          environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},
-          error: 'Package foo feature stuff requires Flutter SDK version '
-              '^2.0.0 but the current SDK is 1.2.3.',
-        );
-      });
-    });
-  });
-
-  group('with overlapping dependencies', () {
-    test('can enable extra features', () async {
-      await servePackages()
-        ..serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'dependencies': {'bar': '1.0.0'},
-            'features': {
-              'stuff': {
-                'default': false,
-                'dependencies': {
-                  'bar': {
-                    'features': {'stuff': true}
-                  }
-                }
-              }
-            }
-          },
-        )
-        ..serve(
-          'bar',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'stuff': {
-                'default': false,
-                'dependencies': {'baz': '1.0.0'}
-              }
-            }
-          },
-        )
-        ..serve('baz', '1.0.0');
-
-      await d.appDir(
-        dependencies: {
-          'foo': {'version': '1.0.0'}
-        },
-      ).create();
-      await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-
-      await d.appDir(
-        dependencies: {
-          'foo': {
-            'version': '1.0.0',
-            'features': {'stuff': true}
-          }
-        },
-      ).create();
-      await expectResolves(
-        result: {'foo': '1.0.0', 'bar': '1.0.0', 'baz': '1.0.0'},
-      );
-    });
-
-    test("can't disable features", () async {
-      await servePackages()
-        ..serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'dependencies': {
-              'bar': {
-                'version': '1.0.0',
-                'features': {'stuff': false}
-              },
-            },
-            'features': {
-              'stuff': {
-                'default': false,
-                'dependencies': {
-                  'bar': {
-                    'features': {'stuff': true}
-                  }
-                }
-              }
-            }
-          },
-        )
-        ..serve(
-          'bar',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'stuff': {
-                'default': true,
-                'dependencies': {'baz': '1.0.0'}
-              }
-            }
-          },
-        )
-        ..serve('baz', '1.0.0');
-
-      await d.appDir(
-        dependencies: {
-          'foo': {
-            'version': '1.0.0',
-            'features': {'stuff': true}
-          }
-        },
-      ).create();
-      await expectResolves(
-        result: {'foo': '1.0.0', 'bar': '1.0.0', 'baz': '1.0.0'},
-      );
-    });
-  });
-
-  group('with required features', () {
-    test('enables those features', () async {
-      await servePackages()
-        ..serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'main': {
-                'default': false,
-                'requires': ['required1', 'required2']
-              },
-              'required1': {
-                'default': false,
-                'dependencies': {'bar': '1.0.0'}
-              },
-              'required2': {
-                'default': true,
-                'dependencies': {'baz': '1.0.0'}
-              }
-            }
-          },
-        )
-        ..serve('bar', '1.0.0')
-        ..serve('baz', '1.0.0');
-
-      await d.appDir(
-        dependencies: {
-          'foo': {
-            'version': '1.0.0',
-            'features': {'main': true}
-          }
-        },
-      ).create();
-      await expectResolves(
-        result: {'foo': '1.0.0', 'bar': '1.0.0', 'baz': '1.0.0'},
-      );
-    });
-
-    test('enables those features by default', () async {
-      await servePackages()
-        ..serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'main': {
-                'requires': ['required1', 'required2']
-              },
-              'required1': {
-                'default': false,
-                'dependencies': {'bar': '1.0.0'}
-              },
-              'required2': {
-                'default': true,
-                'dependencies': {'baz': '1.0.0'}
-              }
-            }
-          },
-        )
-        ..serve('bar', '1.0.0')
-        ..serve('baz', '1.0.0');
-
-      await d.appDir(dependencies: {'foo': '1.0.0'}).create();
-      await expectResolves(
-        result: {'foo': '1.0.0', 'bar': '1.0.0', 'baz': '1.0.0'},
-      );
-    });
-
-    test("doesn't enable those features if it's disabled", () async {
-      await servePackages()
-        ..serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'main': {
-                'requires': ['required']
-              },
-              'required': {
-                'default': false,
-                'dependencies': {'bar': '1.0.0'}
-              }
-            }
-          },
-        )
-        ..serve('bar', '1.0.0');
-
-      await d.appDir(
-        dependencies: {
-          'foo': {
-            'version': '1.0.0',
-            'features': {'main': false}
-          }
-        },
-      ).create();
-      await expectResolves(result: {'foo': '1.0.0'});
-    });
-
-    test("enables those features even if they'd otherwise be disabled",
-        () async {
-      await servePackages()
-        ..serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'main': {
-                'requires': ['required']
-              },
-              'required': {
-                'default': false,
-                'dependencies': {'bar': '1.0.0'}
-              }
-            }
-          },
-        )
-        ..serve('bar', '1.0.0');
-
-      await d.appDir(
-        dependencies: {
-          'foo': {
-            'version': '1.0.0',
-            'features': {'main': true, 'required': false}
-          }
-        },
-      ).create();
-      await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-    });
-
-    test('enables features transitively', () async {
-      await servePackages()
-        ..serve(
-          'foo',
-          '1.0.0',
-          pubspec: {
-            'features': {
-              'main': {
-                'requires': ['required1']
-              },
-              'required1': {
-                'default': false,
-                'requires': ['required2']
-              },
-              'required2': {
-                'default': false,
-                'dependencies': {'bar': '1.0.0'}
-              }
-            }
-          },
-        )
-        ..serve('bar', '1.0.0');
-
-      await d.appDir(
-        dependencies: {
-          'foo': {
-            'version': '1.0.0',
-            'features': {'main': true}
-          }
-        },
-      ).create();
-      await expectResolves(result: {'foo': '1.0.0', 'bar': '1.0.0'});
-    });
-  });
-}
-
 /// Runs "pub get" and makes assertions about its results.
 ///
 /// If [result] is passed, it's parsed as a pubspec-style dependency map, and
