// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:test/test.dart';

import 'utils.dart';

void main() {
  TestProject p;

  tearDown(() async => await p?.dispose());

  test('Ensure parsing fails after encountering invalid file', () async {
    // Regression test for https://github.com/dart-lang/sdk/issues/43991
    p = project();
    final noArgsResult = await p.run(['foo.dart']);
    expect(noArgsResult.stderr, isNotEmpty);
    expect(noArgsResult.stdout, isEmpty);
    expect(noArgsResult.exitCode, 64);

    final argsResult = await p.run(['foo.dart', '--bar']);
    expect(argsResult.stderr, noArgsResult.stderr);
    expect(argsResult.stdout, isEmpty);
    expect(argsResult.exitCode, 64);
  });

  test('Providing --snapshot VM option with invalid script fails gracefully',
      () async {
    // Regression test for https://github.com/dart-lang/sdk/issues/43785
    p = project();
    final result = await p.run(['--snapshot=abc', 'foo.dart']);
    expect(result.stderr, isNotEmpty);
    expect(result.stderr, contains("Error when reading 'foo.dart':"));
    expect(result.stdout, isNotEmpty);
    expect(result.stdout, contains("Info: Compiling with sound null safety\n"));
    expect(result.exitCode, 254);
  });
}
