// Copyright (c) 2013, 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 'dart:async';
import "package:async_helper/async_helper.dart";
import 'package:compiler/src/diagnostics/messages.dart'
    show MessageKind, MessageTemplate;

import 'message_kind_helper.dart';

main(List<String> arguments) {
  List<MessageTemplate> examples = <MessageTemplate>[];
  for (var kind in MessageKind.values) {
    MessageTemplate template = MessageTemplate.TEMPLATES[kind];
    Expect.isNotNull(template, "No template for $kind.");
    Expect.equals(kind, template.kind,
        "Invalid MessageTemplate.kind for $kind, found ${template.kind}.");

    String name = '${kind.toString()}'.substring('MessageKind.'.length);
    if (!arguments.isEmpty && !arguments.contains(name)) continue;
    if (name == 'GENERIC' // Shouldn't be used.
        // We can't provoke a crash.
        ||
        name == 'COMPILER_CRASHED' ||
        name == 'PLEASE_REPORT_THE_CRASH'
        // We cannot provide examples for patch errors.
        ||
        name.startsWith('PATCH_') ||
        name == 'LIBRARY_NOT_SUPPORTED'
        // TODO(johnniwinther): Remove these when [Compiler.reportUnusedCode] is
        // reenabled.
        ||
        name == 'UNUSED_METHOD' ||
        name == 'UNUSED_CLASS' ||
        name == 'UNUSED_TYPEDEF') continue;
    if (template.examples != null) {
      examples.add(template);
    } else {
      print("No example in '$name'");
    }
  }
  ;
  var cachedCompiler;
  asyncTest(() => Future.forEach(examples, (MessageTemplate template) {
        print("Checking '${template.kind}'.");
        Stopwatch sw = new Stopwatch()..start();
        return check(template, cachedCompiler).then((var compiler) {
          cachedCompiler = compiler;
          sw.stop();
          print("Checked '${template.kind}' in ${sw.elapsedMilliseconds}ms.");
        });
      }));
}
