scripts/ had ~80 flat files. Entry points (ci_*.sh, codegen.sh, run_tests.sh, format_native.sh, setup_hooks.sh, upload-symbols.*) and the shared pubspec_version.py stay at the root; checkers, generators, maestro tooling and release tooling move into subdirectories with their tests. Updated every reference: workflow steps, guard-test glob, Docker COPY paths and .dockerignore whitelist, website audit path, dart test imports, and regenerated the five outputs whose headers embed generator paths.
86 lines
2.5 KiB
Dart
86 lines
2.5 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
import '../../scripts/checks/check_analyzer.dart';
|
|
|
|
const _root = r'C:\repo';
|
|
const _allowedInfo =
|
|
r"INFO|LINT|UNAWAITED_FUTURES|C:\\repo\\test\\navigation\\profile_navigation_scope_test.dart|21|28|4|Missing an 'await' for the 'Future' computed by this expression.";
|
|
|
|
void main() {
|
|
test('accepts a clean analyzer success', () {
|
|
expect(
|
|
validateAnalyzerResult(analyzerExitCode: 0, analyzerStdout: '', analyzerStderr: '', rootPath: _root),
|
|
isNull,
|
|
);
|
|
});
|
|
|
|
test('accepts a nonzero exit caused only by an allowed info', () {
|
|
expect(
|
|
validateAnalyzerResult(
|
|
analyzerExitCode: 1,
|
|
analyzerStdout: '$_allowedInfo\n',
|
|
analyzerStderr: '',
|
|
rootPath: _root,
|
|
),
|
|
isNull,
|
|
);
|
|
});
|
|
|
|
test('rejects a crash after an allowed info', () {
|
|
expect(
|
|
validateAnalyzerResult(
|
|
analyzerExitCode: 1,
|
|
analyzerStdout: '$_allowedInfo\n',
|
|
analyzerStderr: 'Analyzer crash\nstack trace\n',
|
|
rootPath: _root,
|
|
),
|
|
contains('unexpected stderr'),
|
|
);
|
|
});
|
|
|
|
test('rejects a crash exit code even after an allowed info', () {
|
|
expect(
|
|
validateAnalyzerResult(
|
|
analyzerExitCode: 255,
|
|
analyzerStdout: '$_allowedInfo\n',
|
|
analyzerStderr: '',
|
|
rootPath: _root,
|
|
),
|
|
contains('exited 255'),
|
|
);
|
|
});
|
|
|
|
test('rejects unexpected output after an allowed info', () {
|
|
expect(
|
|
validateAnalyzerResult(
|
|
analyzerExitCode: 1,
|
|
analyzerStdout: '$_allowedInfo\nAnalyzer crash\n',
|
|
analyzerStderr: '',
|
|
rootPath: _root,
|
|
),
|
|
contains('malformed machine output'),
|
|
);
|
|
});
|
|
|
|
test('rejects warnings and unapproved infos', () {
|
|
const warning = 'WARNING|STATIC_WARNING|UNUSED_LOCAL_VARIABLE|/repo/lib/a.dart|1|1|1|Unused.';
|
|
const newInfo = 'INFO|LINT|AVOID_PRINT|/repo/lib/a.dart|1|1|5|Avoid print calls.';
|
|
|
|
expect(
|
|
validateAnalyzerResult(analyzerExitCode: 1, analyzerStdout: '$warning\n', analyzerStderr: '', rootPath: '/repo'),
|
|
contains('unexpected WARNING'),
|
|
);
|
|
expect(
|
|
validateAnalyzerResult(analyzerExitCode: 1, analyzerStdout: '$newInfo\n', analyzerStderr: '', rootPath: '/repo'),
|
|
contains('not explicitly allowed'),
|
|
);
|
|
});
|
|
|
|
test('rejects a nonzero exit without diagnostics', () {
|
|
expect(
|
|
validateAnalyzerResult(analyzerExitCode: 1, analyzerStdout: '', analyzerStderr: '', rootPath: '/repo'),
|
|
contains('exited 1'),
|
|
);
|
|
});
|
|
}
|