@@ -7,62 +7,77 @@ library dartdoc.experiment_options_test;
7
7
8
8
import 'dart:io' ;
9
9
10
+ import 'package:analyzer/src/dart/analysis/experiments.dart' ;
10
11
import 'package:dartdoc/src/dartdoc_options.dart' ;
11
12
import 'package:dartdoc/src/experiment_options.dart' ;
12
- import 'package:path/path.dart' as pathLib;
13
13
import 'package:test/test.dart' ;
14
14
15
- class DartdocExperimentOptionContextTester extends DartdocOptionContext {
16
- DartdocExperimentOptionContextTester (
17
- DartdocOptionSet optionSet, FileSystemEntity entity)
18
- : super (optionSet, entity);
19
- }
20
-
21
15
void main () {
22
16
DartdocOptionSet experimentOptions;
23
- Directory tempDir;
24
- File optionsFile;
17
+ Directory emptyTempDir;
18
+ ExperimentalFeature defaultOnNotExpired, defaultOffNotExpired;
19
+ ExperimentalFeature defaultOnExpired, defaultOffExpired;
25
20
26
21
setUp (() async {
27
22
experimentOptions = await DartdocOptionSet .fromOptionGenerators (
28
23
'dartdoc' , [createExperimentOptions]);
29
24
});
30
25
31
26
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);
42
46
});
43
47
44
48
tearDownAll (() {
45
- tempDir .deleteSync (recursive: true );
49
+ emptyTempDir .deleteSync (recursive: true );
46
50
});
47
51
48
52
group ('Experimental options test' , () {
49
53
test ('Defaults work for all options' , () {
50
54
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);
56
64
});
57
65
58
66
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);
66
81
});
67
82
});
68
83
}
0 commit comments