// Copyright (c) 2018, 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:_fe_analyzer_shared/src/messages/diagnostic_message.dart'
    show DiagnosticMessage, getMessageCodeObject;

import 'package:async_helper/async_helper.dart' show asyncTest;

import 'package:expect/expect.dart' show Expect;

import 'package:front_end/src/api_prototype/compiler_options.dart'
    show CompilerOptions;

import 'package:front_end/src/api_prototype/memory_file_system.dart'
    show MemoryFileSystem;

import 'package:front_end/src/base/processed_options.dart'
    show ProcessedOptions;

import 'package:front_end/src/fasta/compiler_context.dart' show CompilerContext;

import 'package:front_end/src/fasta/messages.dart'
    show codeCantReadFile, codePackagesFileFormat;

void main() {
  Uri root = Uri.parse("org-dartlang-test:///");
  MemoryFileSystem fs = new MemoryFileSystem(root);
  Uri packages = root.resolve(".packages");
  fs.entityForUri(packages).writeAsStringSync("bad\n");
  List<DiagnosticMessage> messages = <DiagnosticMessage>[];
  CompilerContext c = new CompilerContext(new ProcessedOptions(
      options: new CompilerOptions()
        ..fileSystem = fs
        ..onDiagnostic = (message) {
          messages.add(message);
        }));
  asyncTest(() async {
    await c
        .runInContext<void>((_) => c.options.createPackagesFromFile(packages));
    Expect.identical(
        codePackagesFileFormat, getMessageCodeObject(messages.single));
    messages.clear();

    await c.runInContext<void>(
        (_) => c.options.createPackagesFromFile(root.resolve("missing-file")));
    Expect.identical(codeCantReadFile, getMessageCodeObject(messages.single));
    messages.clear();
  });
}
