Skip to content

Commit fbd999e

Browse files
authored
Add grinder to test the language directories (#2562)
* Add option to test the language directories * not flutter * fix dartfmt caused lint * add error_lib to excluded suffixes and update fail entry
1 parent 5eb8c9a commit fbd999e

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

tool/grind.dart

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ void expectFileContains(String path, List<Pattern> items) {
3636
}
3737
}
3838

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+
3946
/// The pub cache inherited by grinder.
4047
final String defaultPubCache = Platform.environment['PUB_CACHE'] ??
4148
path.context.resolveTildePath('~/.pub-cache');
@@ -114,6 +121,10 @@ Directory _flutterDir;
114121

115122
Directory get flutterDir => _flutterDir ??= createTempSync('flutter');
116123

124+
Directory _languageTestPackageDir;
125+
Directory get languageTestPackageDir =>
126+
_languageTestPackageDir ??= createTempSync('languageTestPackageDir');
127+
117128
Directory get testPackage =>
118129
Directory(path.joinAll(['testing', 'test_package']));
119130

@@ -705,6 +716,85 @@ Future<void> serveFlutterDocs() async {
705716
]);
706717
}
707718

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+
708798
@Task('Validate flutter docs')
709799
@Depends(buildFlutterDocs, testDartdocFlutterPlugin)
710800
void validateFlutterDocs() {}

0 commit comments

Comments
 (0)