[tools] Check integration tests for test (#5936)

This commit is contained in:
stuartmorgan
2022-06-08 17:53:09 -04:00
committed by GitHub
parent 66824fd7e6
commit 79eb10169a
3 changed files with 72 additions and 1 deletions

View File

@ -182,7 +182,16 @@ class DriveExamplesCommand extends PackageLoopingCommand {
if (legacyTestFile != null) {
testTargets.add(legacyTestFile);
} else {
(await _getIntegrationTests(example)).forEach(testTargets.add);
for (final File testFile in await _getIntegrationTests(example)) {
// Check files for known problematic patterns.
final bool passesValidation = _validateIntegrationTest(testFile);
if (!passesValidation) {
// Report the issue, but continue with the test as the validation
// errors don't prevent running.
errors.add('${testFile.basename} failed validation');
}
testTargets.add(testFile);
}
}
if (testTargets.isEmpty) {
@ -310,6 +319,25 @@ class DriveExamplesCommand extends PackageLoopingCommand {
return tests;
}
/// Checks [testFile] for known bad patterns in integration tests, logging
/// any issues.
///
/// Returns true if the file passes validation without issues.
bool _validateIntegrationTest(File testFile) {
final List<String> lines = testFile.readAsLinesSync();
final RegExp badTestPattern = RegExp(r'\s*test\(');
if (lines.any((String line) => line.startsWith(badTestPattern))) {
final String filename = testFile.basename;
printError(
'$filename uses "test", which will not report failures correctly. '
'Use testWidgets instead.');
return false;
}
return true;
}
/// For each file in [targets], uses
/// `flutter drive --driver [driver] --target <target>`
/// to drive [example], returning a list of any failing test targets.