| // Copyright 2018 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:convert'; | |
| import 'dart:io'; | |
| import 'common.dart'; | |
| void main() { | |
| test('analyze-sample-code', () async { | |
| final Process process = await Process.start( | |
| '../../bin/cache/dart-sdk/bin/dart', | |
| <String>['analyze-sample-code.dart', 'test/analyze-sample-code-test-input'], | |
| ); | |
| final List<String> stdout = await process.stdout.transform<String>(utf8.decoder).transform<String>(const LineSplitter()).toList(); | |
| final List<String> stderr = await process.stderr.transform<String>(utf8.decoder).transform<String>(const LineSplitter()).toList(); | |
| final Match line = RegExp(r'^(.+)/main\.dart:[0-9]+:[0-9]+: .+$').matchAsPrefix(stdout[1]); | |
| expect(line, isNot(isNull)); | |
| final String directory = line.group(1); | |
| Directory(directory).deleteSync(recursive: true); | |
| expect(await process.exitCode, 1); | |
| expect(stderr, isEmpty); | |
| expect(stdout, <String>[ | |
| 'Found 2 sample code sections.', | |
| "$directory/main.dart:1:8: Unused import: 'dart:async'", | |
| "$directory/main.dart:2:8: Unused import: 'dart:convert'", | |
| "$directory/main.dart:3:8: Unused import: 'dart:math'", | |
| "$directory/main.dart:4:8: Unused import: 'dart:typed_data'", | |
| "$directory/main.dart:5:8: Unused import: 'dart:ui'", | |
| "$directory/main.dart:6:8: Unused import: 'package:flutter_test/flutter_test.dart'", | |
| "$directory/main.dart:9:8: Target of URI doesn't exist: 'package:flutter/known_broken_documentation.dart'", | |
| 'test/analyze-sample-code-test-input/known_broken_documentation.dart:27:5: Unnecessary new keyword (unnecessary_new)', | |
| "test/analyze-sample-code-test-input/known_broken_documentation.dart:27:9: Undefined class 'Opacity' (undefined_class)", | |
| "test/analyze-sample-code-test-input/known_broken_documentation.dart:29:20: Undefined class 'Text' (undefined_class)", | |
| 'test/analyze-sample-code-test-input/known_broken_documentation.dart:39:5: Unnecessary new keyword (unnecessary_new)', | |
| "test/analyze-sample-code-test-input/known_broken_documentation.dart:39:9: Undefined class 'Opacity' (undefined_class)", | |
| "test/analyze-sample-code-test-input/known_broken_documentation.dart:41:20: Undefined class 'Text' (undefined_class)", | |
| 'test/analyze-sample-code-test-input/known_broken_documentation.dart:42:5: unexpected comma at end of sample code', | |
| 'Kept $directory because it had errors (see above).', | |
| '-------8<-------', | |
| ' 1: // generated code', | |
| " 2: import 'dart:async';", | |
| " 3: import 'dart:convert';", | |
| " 4: import 'dart:math' as math;", | |
| " 5: import 'dart:typed_data';", | |
| " 6: import 'dart:ui' as ui;", | |
| " 7: import 'package:flutter_test/flutter_test.dart';", | |
| ' 8: ', | |
| ' 9: // test/analyze-sample-code-test-input/known_broken_documentation.dart', | |
| " 10: import 'package:flutter/known_broken_documentation.dart';", | |
| ' 11: ', | |
| ' 12: bool _visible = true;', | |
| ' 13: dynamic expression1 = ', | |
| ' 14: new Opacity(', | |
| ' 15: opacity: _visible ? 1.0 : 0.0,', | |
| " 16: child: const Text('Poor wandering ones!'),", | |
| ' 17: )', | |
| ' 18: ;', | |
| ' 19: dynamic expression2 = ', | |
| ' 20: new Opacity(', | |
| ' 21: opacity: _visible ? 1.0 : 0.0,', | |
| " 22: child: const Text('Poor wandering ones!'),", | |
| ' 23: ),', | |
| ' 24: ;', | |
| '-------8<-------', | |
| ]); | |
| }, skip: !Platform.isLinux); | |
| } |