// 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(utf8.decoder).transform(const LineSplitter()).toList();
    final List<String> stderr = await process.stderr.transform(utf8.decoder).transform(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);
}
