Make experiment_options_test less fragile with respect to defaults (#1932)

* Make experiment_options_test resilient against upstream parameter changes

* dartfmt
diff --git a/test/experiment_options_test.dart b/test/experiment_options_test.dart
index 6772bfd..d091f04 100644
--- a/test/experiment_options_test.dart
+++ b/test/experiment_options_test.dart
@@ -7,21 +7,16 @@
 
 import 'dart:io';
 
+import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:dartdoc/src/dartdoc_options.dart';
 import 'package:dartdoc/src/experiment_options.dart';
-import 'package:path/path.dart' as pathLib;
 import 'package:test/test.dart';
 
-class DartdocExperimentOptionContextTester extends DartdocOptionContext {
-  DartdocExperimentOptionContextTester(
-      DartdocOptionSet optionSet, FileSystemEntity entity)
-      : super(optionSet, entity);
-}
-
 void main() {
   DartdocOptionSet experimentOptions;
-  Directory tempDir;
-  File optionsFile;
+  Directory emptyTempDir;
+  ExperimentalFeature defaultOnNotExpired, defaultOffNotExpired;
+  ExperimentalFeature defaultOnExpired, defaultOffExpired;
 
   setUp(() async {
     experimentOptions = await DartdocOptionSet.fromOptionGenerators(
@@ -29,40 +24,60 @@
   });
 
   setUpAll(() {
-    tempDir = Directory.systemTemp.createTempSync('experiment_options_test');
-    optionsFile = new File(pathLib.join(tempDir.path, 'dartdoc_options.yaml'))
-      ..createSync();
-    optionsFile.writeAsStringSync('''
-dartdoc:
-  enable-experiment:
-    - constant-update-2018
-    - fake-experiment
-    - no-fake-experiment-on
-''');
+    emptyTempDir =
+        Directory.systemTemp.createTempSync('experiment_options_test_empty');
+    // We don't test our functionality at all unless ExperimentStatus has at least
+    // one of these.  TODO(jcollins-g): make analyzer+dartdoc connection
+    // more amenable to testing.
+    defaultOnNotExpired = ExperimentStatus.knownFeatures.values.firstWhere(
+        (f) => f.isEnabledByDefault && !f.isExpired,
+        orElse: () => null);
+    defaultOffNotExpired = ExperimentStatus.knownFeatures.values.firstWhere(
+        (f) => !f.isEnabledByDefault && !f.isExpired,
+        orElse: () => null);
+    assert(defaultOnNotExpired != null || defaultOffNotExpired != null,
+        'No experimental options that are not expired found');
+
+    // The "bogus" entries should always exist.
+    defaultOnExpired = ExperimentStatus.knownFeatures.values
+        .firstWhere((f) => f.isEnabledByDefault && f.isExpired);
+    defaultOffExpired = ExperimentStatus.knownFeatures.values
+        .firstWhere((f) => !f.isEnabledByDefault && f.isExpired);
   });
 
   tearDownAll(() {
-    tempDir.deleteSync(recursive: true);
+    emptyTempDir.deleteSync(recursive: true);
   });
 
   group('Experimental options test', () {
     test('Defaults work for all options', () {
       experimentOptions.parseArguments([]);
-      DartdocExperimentOptionContextTester tester =
-          new DartdocExperimentOptionContextTester(
-              experimentOptions, Directory.current);
-      expect(tester.experimentStatus.constant_update_2018, isFalse);
-      expect(tester.experimentStatus.set_literals, isFalse);
+      DartdocOptionContext tester =
+          new DartdocOptionContext(experimentOptions, emptyTempDir);
+      if (defaultOnNotExpired != null)
+        expect(tester.experimentStatus.isEnabled(defaultOnNotExpired), isTrue);
+      if (defaultOffNotExpired != null)
+        expect(
+            tester.experimentStatus.isEnabled(defaultOffNotExpired), isFalse);
+      expect(tester.experimentStatus.isEnabled(defaultOnExpired), isTrue);
+      expect(tester.experimentStatus.isEnabled(defaultOffExpired), isFalse);
     });
 
     test('Overriding defaults works via args', () {
-      experimentOptions.parseArguments(
-          ['--enable-experiment', 'constant-update-2018,set-literals']);
-      DartdocExperimentOptionContextTester tester =
-          new DartdocExperimentOptionContextTester(
-              experimentOptions, Directory.current);
-      expect(tester.experimentStatus.constant_update_2018, isTrue);
-      expect(tester.experimentStatus.set_literals, isTrue);
+      // Set all arguments to non-default values.
+      experimentOptions.parseArguments([
+        '--enable-experiment',
+        '${defaultOffNotExpired?.disableString},${defaultOnNotExpired?.disableString},${defaultOnExpired.disableString},${defaultOffExpired.enableString}'
+      ]);
+      DartdocOptionContext tester =
+          new DartdocOptionContext(experimentOptions, emptyTempDir);
+      if (defaultOnNotExpired != null)
+        expect(tester.experimentStatus.isEnabled(defaultOnNotExpired), isFalse);
+      if (defaultOffNotExpired != null)
+        expect(
+            tester.experimentStatus.isEnabled(defaultOffNotExpired), isFalse);
+      expect(tester.experimentStatus.isEnabled(defaultOnExpired), isTrue);
+      expect(tester.experimentStatus.isEnabled(defaultOffExpired), isFalse);
     });
   });
 }