// 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 "package:expect/expect.dart";
import 'compiler_helper.dart';

const String SOURCE = """
class Foo {
  // Deliberately not const to ensure compile error.
  Foo(_);
}

@Bar()
class Bar {
  const Bar();
}

@Foo('x')
typedef void VoidFunction();

@Foo('y')
class MyClass {}

main() {
}
""";

main() {
  Uri uri = Uri.parse('test:code');
  var compiler = compilerFor(SOURCE, uri, analyzeAll: false);
  compiler.runCompiler(uri);
  Expect.isFalse(compiler.compilationFailed);
  print(compiler.warnings);
  Expect.isTrue(compiler.warnings.isEmpty, 'unexpected warnings');
  Expect.isTrue(compiler.errors.isEmpty, 'unexpected errors');
  compiler = compilerFor(SOURCE, uri, analyzeAll: true);
  compiler.runCompiler(uri);
  Expect.isTrue(compiler.compilationFailed);
  Expect.isTrue(compiler.warnings.isEmpty, 'unexpected warnings');
  Expect.equals(2, compiler.errors.length,
                'expected exactly two errors, but got ${compiler.errors}');

  Expect.equals(MessageKind.CONSTRUCTOR_IS_NOT_CONST,
                compiler.errors[0].message.kind);
  Expect.equals("Foo", compiler.errors[0].node.toString());

  Expect.equals(MessageKind.CONSTRUCTOR_IS_NOT_CONST,
                compiler.errors[1].message.kind);
  Expect.equals("Foo", compiler.errors[1].node.toString());
}
