// Copyright (c) 2012, 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 "dart:async";

import "package:async_helper/async_helper.dart";
import 'package:compiler/compiler.dart';
import "package:compiler/src/elements/elements.dart";
import "package:expect/expect.dart";

import "mock_compiler.dart";

Future testErrorHandling() {
  // Test that compiler.currentElement is set correctly when
  // reporting errors/warnings.
  MockCompiler compiler = new MockCompiler.internal();
  return compiler.init().then((_) {
    compiler.parseScript('NoSuchPrefix.NoSuchType foo() {}');
    FunctionElement foo = compiler.mainApp.find('foo');
    compiler.diagnosticHandler =
        (Uri uri, int begin, int end, String message, Diagnostic kind) {
      if (kind == Diagnostic.WARNING) {
        Expect.equals(foo, compiler.currentElement);
      }
    };
    foo.computeType(compiler.resolution);
    Expect.equals(1, compiler.diagnosticCollector.warnings.length);
  });
}

main() {
  asyncTest(() => testErrorHandling());
}
