mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
add tests to ensure the sdk is well-formed (#41408)
add tests to ensure the sdk is well-formed
This commit is contained in:
parent
ecc4764fe2
commit
1044457225
@ -0,0 +1,137 @@
|
||||
// Copyright 2019 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter_tools/src/base/file_system.dart';
|
||||
import 'package:flutter_tools/src/cache.dart';
|
||||
import 'package:flutter_tools/src/dart/analysis.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/dart/sdk.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
import '../../src/common.dart';
|
||||
import '../../src/context.dart';
|
||||
|
||||
void main() {
|
||||
group('sdk validation', () {
|
||||
AnalysisServer server;
|
||||
Directory tempDir;
|
||||
|
||||
setUpAll(() {
|
||||
Cache.disableLocking();
|
||||
tempDir =
|
||||
fs.systemTempDirectory.createTempSync('sdk_validation_test').absolute;
|
||||
});
|
||||
|
||||
tearDownAll(() {
|
||||
Cache.enableLocking();
|
||||
tryToDelete(tempDir);
|
||||
return server?.dispose();
|
||||
});
|
||||
|
||||
testUsingContext('contains dart:ui', () async {
|
||||
createSampleProject(tempDir, dartSource: '''
|
||||
import 'dart:ui' as ui;
|
||||
void main() {
|
||||
// ignore: unnecessary_statements
|
||||
ui.Window;
|
||||
}
|
||||
''');
|
||||
|
||||
await pubGet(context: PubContext.flutterTests, directory: tempDir.path);
|
||||
|
||||
server = AnalysisServer(dartSdkPath, <String>[tempDir.path]);
|
||||
|
||||
final int errorCount = await analyze(server);
|
||||
expect(errorCount, 0);
|
||||
});
|
||||
|
||||
testUsingContext('contains dart:html', () async {
|
||||
createSampleProject(tempDir, dartSource: '''
|
||||
import 'dart:html' as html;
|
||||
void main() {
|
||||
// ignore: unnecessary_statements
|
||||
html.HttpStatus;
|
||||
}
|
||||
''');
|
||||
|
||||
await pubGet(context: PubContext.flutterTests, directory: tempDir.path);
|
||||
|
||||
server = AnalysisServer(dartSdkPath, <String>[tempDir.path]);
|
||||
|
||||
final int errorCount = await analyze(server);
|
||||
expect(errorCount, 0);
|
||||
});
|
||||
|
||||
testUsingContext('contains dart:js', () async {
|
||||
createSampleProject(tempDir, dartSource: '''
|
||||
import 'dart:js' as js;
|
||||
void main() {
|
||||
// ignore: unused_local_variable
|
||||
var foo = js.allowInterop(null);
|
||||
}
|
||||
''');
|
||||
|
||||
await pubGet(context: PubContext.flutterTests, directory: tempDir.path);
|
||||
|
||||
server = AnalysisServer(dartSdkPath, <String>[tempDir.path]);
|
||||
|
||||
final int errorCount = await analyze(server);
|
||||
expect(errorCount, 0);
|
||||
});
|
||||
|
||||
testUsingContext('contains dart:js_util', () async {
|
||||
createSampleProject(tempDir, dartSource: '''
|
||||
import 'dart:js_util' as js_util;
|
||||
void main() {
|
||||
// ignore: unused_local_variable
|
||||
var bar = js_util.jsify(null);
|
||||
}
|
||||
''');
|
||||
|
||||
await pubGet(context: PubContext.flutterTests, directory: tempDir.path);
|
||||
|
||||
server = AnalysisServer(dartSdkPath, <String>[tempDir.path]);
|
||||
|
||||
final int errorCount = await analyze(server);
|
||||
expect(errorCount, 0);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
void createSampleProject(Directory directory, {@required String dartSource}) {
|
||||
final File pubspecFile =
|
||||
fs.file(fs.path.join(directory.path, 'pubspec.yaml'));
|
||||
pubspecFile.writeAsStringSync('''
|
||||
name: foo_project
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
''');
|
||||
|
||||
final File dartFile =
|
||||
fs.file(fs.path.join(directory.path, 'lib', 'main.dart'));
|
||||
dartFile.parent.createSync();
|
||||
dartFile.writeAsStringSync(dartSource);
|
||||
}
|
||||
|
||||
Future<int> analyze(AnalysisServer server, {bool printErrors = true}) async {
|
||||
int errorCount = 0;
|
||||
final Future<bool> onDone =
|
||||
server.onAnalyzing.where((bool analyzing) => analyzing == false).first;
|
||||
server.onErrors.listen((FileAnalysisErrors errors) {
|
||||
if (printErrors) {
|
||||
for (AnalysisError error in errors.errors) {
|
||||
print(error.toString().trim());
|
||||
}
|
||||
}
|
||||
errorCount += errors.errors.length;
|
||||
});
|
||||
|
||||
await server.start();
|
||||
await onDone;
|
||||
|
||||
return errorCount;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user