@@ -36,6 +36,13 @@ void expectFileContains(String path, List<Pattern> items) {
36
36
}
37
37
}
38
38
39
+ /// Path to the base directory for language tests.
40
+ final String languageTestPath = Platform .environment['LANGUAGE_TESTS' ];
41
+
42
+ /// Enable the following experiments for language tests.
43
+ final List <String > languageExperiments =
44
+ (Platform .environment['LANGUAGE_EXPERIMENTS' ] ?? '' ).split (RegExp (r'\s+' ));
45
+
39
46
/// The pub cache inherited by grinder.
40
47
final String defaultPubCache = Platform .environment['PUB_CACHE' ] ??
41
48
path.context.resolveTildePath ('~/.pub-cache' );
@@ -114,6 +121,10 @@ Directory _flutterDir;
114
121
115
122
Directory get flutterDir => _flutterDir ?? = createTempSync ('flutter' );
116
123
124
+ Directory _languageTestPackageDir;
125
+ Directory get languageTestPackageDir =>
126
+ _languageTestPackageDir ?? = createTempSync ('languageTestPackageDir' );
127
+
117
128
Directory get testPackage =>
118
129
Directory (path.joinAll (['testing' , 'test_package' ]));
119
130
@@ -705,6 +716,85 @@ Future<void> serveFlutterDocs() async {
705
716
]);
706
717
}
707
718
719
+ @Task ('Serve language test directory docs on port 8004' )
720
+ @Depends (buildLanguageTestDocs)
721
+ Future <void > serveLanguageTestDocs () async {
722
+ log ('launching dhttpd on port 8004 for language tests' );
723
+ var launcher = SubprocessLauncher ('serve-language-test-docs' );
724
+ await launcher.runStreamed (sdkBin ('pub' ), ['get' ]);
725
+ await launcher.runStreamed (sdkBin ('pub' ), [
726
+ 'global' ,
727
+ 'run' ,
728
+ 'dhttpd' ,
729
+ '--port' ,
730
+ '8004' ,
731
+ '--path' ,
732
+ path.join (languageTestPackageDir.path, 'doc' , 'api' ),
733
+ ]);
734
+ }
735
+
736
+ @Task ('Build docs for a language test directory in the SDK' )
737
+ Future <void > buildLanguageTestDocs () async {
738
+ var launcher = SubprocessLauncher ('build-language-test-docs' );
739
+ if (languageTestPath == null ) {
740
+ fail (
741
+ 'LANGUAGE_TESTS must be set to the SDK language test directory from which to copy tests' );
742
+ }
743
+ var pubspecFile =
744
+ File (path.join (languageTestPackageDir.path, 'pubspec.yaml' ));
745
+ pubspecFile.writeAsStringSync ('''name: _language_test_package
746
+ version: 0.0.1
747
+ environment:
748
+ sdk: '>=${Platform .version .split (' ' ).first }'
749
+ ''' );
750
+
751
+ var analyzerOptionsFile =
752
+ File (path.join (languageTestPackageDir.path, 'analysis_options.yaml' ));
753
+ var analyzerOptions = languageExperiments.map ((e) => ' - $e ' ).join ('\n ' );
754
+ analyzerOptionsFile.writeAsStringSync ('''analyzer:
755
+ enable-experiment:
756
+ $analyzerOptions
757
+ ''' );
758
+
759
+ var libDir = Directory (path.join (languageTestPackageDir.path, 'lib' ))
760
+ ..createSync ();
761
+ var languageTestDir =
762
+ Directory (path.context.resolveTildePath (languageTestPath));
763
+ if (! languageTestDir.existsSync ()) {
764
+ fail ('language test dir does not exist: $languageTestDir ' );
765
+ }
766
+
767
+ for (var entry in languageTestDir.listSync (recursive: true )) {
768
+ if (entry is File &&
769
+ entry.existsSync () &&
770
+ ! entry.path.endsWith ('_error_test.dart' ) &&
771
+ ! entry.path.endsWith ('_error_lib.dart' )) {
772
+ var destDir = Directory (path.join (
773
+ libDir.path,
774
+ path.dirname (entry.absolute.path.replaceFirst (
775
+ languageTestDir.absolute.path + path.separator, '' ))));
776
+ if (! destDir.existsSync ()) destDir.createSync (recursive: true );
777
+ copy (entry, destDir);
778
+ }
779
+ }
780
+
781
+ await launcher.runStreamed ('pub' , ['get' ],
782
+ workingDirectory: languageTestPackageDir.absolute.path);
783
+ await launcher.runStreamed (
784
+ Platform .resolvedExecutable,
785
+ [
786
+ '--enable-asserts' ,
787
+ path.join (Directory .current.absolute.path, 'bin' , 'dartdoc.dart' ),
788
+ '--json' ,
789
+ '--link-to-remote' ,
790
+ '--show-progress' ,
791
+ '--enable-experiment' ,
792
+ '${languageExperiments .join ("," )}' ,
793
+ ...extraDartdocParameters,
794
+ ],
795
+ workingDirectory: languageTestPackageDir.absolute.path);
796
+ }
797
+
708
798
@Task ('Validate flutter docs' )
709
799
@Depends (buildFlutterDocs, testDartdocFlutterPlugin)
710
800
void validateFlutterDocs () {}
0 commit comments