Skip to content

Commit 93e5da1

Browse files
authored
Make experiment_options_test less fragile with respect to defaults (#1932)
* Make experiment_options_test resilient against upstream parameter changes * dartfmt
1 parent 9eadb60 commit 93e5da1

File tree

1 file changed

+47
-32
lines changed

1 file changed

+47
-32
lines changed

test/experiment_options_test.dart

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,62 +7,77 @@ library dartdoc.experiment_options_test;
77

88
import 'dart:io';
99

10+
import 'package:analyzer/src/dart/analysis/experiments.dart';
1011
import 'package:dartdoc/src/dartdoc_options.dart';
1112
import 'package:dartdoc/src/experiment_options.dart';
12-
import 'package:path/path.dart' as pathLib;
1313
import 'package:test/test.dart';
1414

15-
class DartdocExperimentOptionContextTester extends DartdocOptionContext {
16-
DartdocExperimentOptionContextTester(
17-
DartdocOptionSet optionSet, FileSystemEntity entity)
18-
: super(optionSet, entity);
19-
}
20-
2115
void main() {
2216
DartdocOptionSet experimentOptions;
23-
Directory tempDir;
24-
File optionsFile;
17+
Directory emptyTempDir;
18+
ExperimentalFeature defaultOnNotExpired, defaultOffNotExpired;
19+
ExperimentalFeature defaultOnExpired, defaultOffExpired;
2520

2621
setUp(() async {
2722
experimentOptions = await DartdocOptionSet.fromOptionGenerators(
2823
'dartdoc', [createExperimentOptions]);
2924
});
3025

3126
setUpAll(() {
32-
tempDir = Directory.systemTemp.createTempSync('experiment_options_test');
33-
optionsFile = new File(pathLib.join(tempDir.path, 'dartdoc_options.yaml'))
34-
..createSync();
35-
optionsFile.writeAsStringSync('''
36-
dartdoc:
37-
enable-experiment:
38-
- constant-update-2018
39-
- fake-experiment
40-
- no-fake-experiment-on
41-
''');
27+
emptyTempDir =
28+
Directory.systemTemp.createTempSync('experiment_options_test_empty');
29+
// We don't test our functionality at all unless ExperimentStatus has at least
30+
// one of these. TODO(jcollins-g): make analyzer+dartdoc connection
31+
// more amenable to testing.
32+
defaultOnNotExpired = ExperimentStatus.knownFeatures.values.firstWhere(
33+
(f) => f.isEnabledByDefault && !f.isExpired,
34+
orElse: () => null);
35+
defaultOffNotExpired = ExperimentStatus.knownFeatures.values.firstWhere(
36+
(f) => !f.isEnabledByDefault && !f.isExpired,
37+
orElse: () => null);
38+
assert(defaultOnNotExpired != null || defaultOffNotExpired != null,
39+
'No experimental options that are not expired found');
40+
41+
// The "bogus" entries should always exist.
42+
defaultOnExpired = ExperimentStatus.knownFeatures.values
43+
.firstWhere((f) => f.isEnabledByDefault && f.isExpired);
44+
defaultOffExpired = ExperimentStatus.knownFeatures.values
45+
.firstWhere((f) => !f.isEnabledByDefault && f.isExpired);
4246
});
4347

4448
tearDownAll(() {
45-
tempDir.deleteSync(recursive: true);
49+
emptyTempDir.deleteSync(recursive: true);
4650
});
4751

4852
group('Experimental options test', () {
4953
test('Defaults work for all options', () {
5054
experimentOptions.parseArguments([]);
51-
DartdocExperimentOptionContextTester tester =
52-
new DartdocExperimentOptionContextTester(
53-
experimentOptions, Directory.current);
54-
expect(tester.experimentStatus.constant_update_2018, isFalse);
55-
expect(tester.experimentStatus.set_literals, isFalse);
55+
DartdocOptionContext tester =
56+
new DartdocOptionContext(experimentOptions, emptyTempDir);
57+
if (defaultOnNotExpired != null)
58+
expect(tester.experimentStatus.isEnabled(defaultOnNotExpired), isTrue);
59+
if (defaultOffNotExpired != null)
60+
expect(
61+
tester.experimentStatus.isEnabled(defaultOffNotExpired), isFalse);
62+
expect(tester.experimentStatus.isEnabled(defaultOnExpired), isTrue);
63+
expect(tester.experimentStatus.isEnabled(defaultOffExpired), isFalse);
5664
});
5765

5866
test('Overriding defaults works via args', () {
59-
experimentOptions.parseArguments(
60-
['--enable-experiment', 'constant-update-2018,set-literals']);
61-
DartdocExperimentOptionContextTester tester =
62-
new DartdocExperimentOptionContextTester(
63-
experimentOptions, Directory.current);
64-
expect(tester.experimentStatus.constant_update_2018, isTrue);
65-
expect(tester.experimentStatus.set_literals, isTrue);
67+
// Set all arguments to non-default values.
68+
experimentOptions.parseArguments([
69+
'--enable-experiment',
70+
'${defaultOffNotExpired?.disableString},${defaultOnNotExpired?.disableString},${defaultOnExpired.disableString},${defaultOffExpired.enableString}'
71+
]);
72+
DartdocOptionContext tester =
73+
new DartdocOptionContext(experimentOptions, emptyTempDir);
74+
if (defaultOnNotExpired != null)
75+
expect(tester.experimentStatus.isEnabled(defaultOnNotExpired), isFalse);
76+
if (defaultOffNotExpired != null)
77+
expect(
78+
tester.experimentStatus.isEnabled(defaultOffNotExpired), isFalse);
79+
expect(tester.experimentStatus.isEnabled(defaultOnExpired), isTrue);
80+
expect(tester.experimentStatus.isEnabled(defaultOffExpired), isFalse);
6681
});
6782
});
6883
}

0 commit comments

Comments
 (0)