// 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(() => p?.dispose());

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

    final argsResult = p.runSync('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',
      () {
    // Regression test for https://github.com/dart-lang/sdk/issues/43785
    p = project();
    final result = p.runSync('--snapshot=abc', ['foo.dart']);
    expect(result.stderr, isNotEmpty);
    expect(result.stderr, contains("Error when reading 'foo.dart':"));
    expect(result.stdout, isEmpty);
    expect(result.exitCode, 254);
  });
}
