@@ -7,62 +7,77 @@ library dartdoc.experiment_options_test;
77
88import 'dart:io' ;
99
10+ import 'package:analyzer/src/dart/analysis/experiments.dart' ;
1011import 'package:dartdoc/src/dartdoc_options.dart' ;
1112import 'package:dartdoc/src/experiment_options.dart' ;
12- import 'package:path/path.dart' as pathLib;
1313import 'package:test/test.dart' ;
1414
15- class DartdocExperimentOptionContextTester extends DartdocOptionContext {
16- DartdocExperimentOptionContextTester (
17- DartdocOptionSet optionSet, FileSystemEntity entity)
18- : super (optionSet, entity);
19- }
20-
2115void 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